void sock4cookie(t_options *opt) { char* url=NULL; char *receive=NULL; unsigned int contentsize; int size; t_datathread *data=NULL; int sock; SSL *ssl= NULL; data=malloc(sizeof(t_datathread)); EXIT_IFNULL(data, "Memory Error"); data->opt=*opt; sock=opensock(data); EXIT_IFNEG(sock, "Socket error"); if(data->opt.url.ssl && data->opt.proxy.ip != NULL) { prepare_connect(data, sock); ssl=opensocks(sock, &data->opt); } else { if(data->opt.url.ssl) ssl=opensocks(sock, &data->opt); } EXIT_IFNEG(catch_cookie(&url, data), "Too long url"); size = iosocket(sock, url, &receive, data->opt, ssl, &contentsize); if(size == -1) if(data->opt.debug) fprintf(stderr, "\n"); EXIT_IFNEG(size, "can't read on socket"); get_cookie(receive, size, &data->opt); *opt=data->opt; if(data->opt.url.ssl) closesocks(&ssl, sock); else close(sock); FREE_BUF(data); FREE_BUF(url); FREE_BUF(receive); }
int catch_cookie(char **ressource , t_datathread *data) { char url[MAX_SIZE_URL]; memset(url, 0, MAX_SIZE_URL); char *auth=NULL; strncpy(url, "GET ", 4); url[4]='\0'; add_proxy_header(data, url); if( (strlen(url)+strlen(data->opt.url.url_pre))>MAX_SIZE_URL) return(-2); strncat(url,data->opt.url.url_pre, strlen(data->opt.url.url_pre)); if(!checkhost(data->opt.head, data->opt.headers)) { if( (strlen(url) + 17 + strlen(data->opt.url.host) + 2 + 1)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\nHost: ", 17); strncat(url,data->opt.url.host, strlen(data->opt.url.host)); strncat(url,"\r\n", 2); } else { if((strlen(url) + 12)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\n", 11); } if(data->opt.headers != NULL) { if( (strlen(url) + strlen(data->opt.headers) + 3 ) > MAX_SIZE_URL) return(-2); strncat(url, data->opt.headers, strlen(data->opt.headers)); strncat(url, "\r\n", 2); } if(data->opt.auth.user!=NULL && data->opt.auth.pass!=NULL) { auth=basic_authent(data->opt.auth.user, data->opt.auth.pass); if( (strlen(url) +21+ strlen(auth) +2+1 ) > MAX_SIZE_URL) return(-2); strcat(url, "Authorization: Basic "); strcat(url, auth); strcat(url, "\r\n"); FREE_BUF(auth); } if ( (strlen(url) +3) > MAX_SIZE_URL) return(-2); strncat(url,"\r\n", 2); *ressource = calloc(strlen(url)+1,1); memset(*ressource, 0, sizeof(*ressource)); EXIT_IFNULL(*ressource, "Memory Error"); strncpy(*ressource, url, strlen(url)); return(1); }
streambuf::~streambuf() { if (_base && !(_flags & _S_USER_BUF)) FREE_BUF(_base); for (register streammarker *mark = _markers; mark != NULL; mark = mark->_next) mark->_sbuf = NULL; }
void streambuf::setb(char* b, char* eb, int a) { if (_base && !(_flags & _S_USER_BUF)) FREE_BUF(_base); _base = b; _ebuf = eb; if (a) _flags &= ~_S_USER_BUF; else _flags |= _S_USER_BUF; }
int inject_header( char **ressource, t_datathread *data, char *word1, int sock, SSL *ssl) { char url[MAX_SIZE_URL]; memset(url, 0, MAX_SIZE_URL); char *auth=NULL; char *receive=NULL; unsigned int cl; int i=0, size; time_t start_time, stop_time; int delay; t_response response; t_cookies local_cook=data->opt.cookies; bool dontup=false; const char *Header[]= { "Cookie", "Host", "User-Agent", "Accept", "Accept-Language", "Accept-Encoding", "Accept-Charset", "Keep-Alive", "Connection", "Referer", NULL }; while(Header[i] != NULL || local_cook!=NULL) { if(data->opt.method != NULL && strlen(data->opt.method)< (MAX_SIZE_URL-2)) { strncpy(url, data->opt.method, strlen(data->opt.method)); url[strlen(data->opt.method)]=' '; url[strlen(data->opt.method)+1]='\0'; } else { strncpy(url, "GET ", 4); url[4]='\0'; } add_proxy_header(data, url); if( (strlen(url)+strlen(data->opt.url.url_pre))>MAX_SIZE_URL) return(-2); strncat(url,data->opt.url.url_pre, strlen(data->opt.url.url_pre)); if(!checkhost(data->opt.head, data->opt.headers) && strcasecmp(Header[i],"Host")!=0) { if( (strlen(url) + 17 + strlen(data->opt.url.host) + 2 + 1)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\nHost: ", 17); strncat(url,data->opt.url.host, strlen(data->opt.url.host)); strncat(url,"\r\n", 2); } else { if((strlen(url) + 12)> MAX_SIZE_URL) return(-2); strncat(url," HTTP/1.1\r\n", 11); } if(data->opt.headers != NULL) { if( (strlen(url) + strlen(data->opt.headers) + 1 ) > MAX_SIZE_URL) return(-2); strncat(url, data->opt.headers, strlen(data->opt.headers)); } if( (strlen(url) + strlen(Header[i]) + 5 +strlen(word1)) > MAX_SIZE_URL) return(-2); strcat(url, Header[i]); strcat(url, ": "); if(local_cook!=NULL) { if( (strlen(url) + strlen(local_cook->cookie) +3+strlen(word1)) > MAX_SIZE_URL) return(-2); strcat(url, local_cook->cookie); local_cook=local_cook->next_cook; dontup=true; } else dontup=false; if(strcasecmp(Header[i], "Host") ==0 && (strlen(url) + strlen(data->opt.url.host) )<MAX_SIZE_URL) strcat(url, data->opt.url.host); strncat(url, word1, strlen(word1)); strcat(url, "\r\n"); if(data->opt.auth.user!=NULL && data->opt.auth.pass!=NULL) { auth=basic_authent(data->opt.auth.user, data->opt.auth.pass); if( (strlen(url) +21+ strlen(auth) +2+1 ) > MAX_SIZE_URL) return(-2); strcat(url, "Authorization: Basic "); strcat(url, auth); strcat(url, "\r\n"); FREE_BUF(auth); } if ( (strlen(url) +3) > MAX_SIZE_URL) return(-2); strncat(url,"\r\n", 2); start_time=time(NULL); size = iosocket(sock, url, &receive, data->opt, ssl, &cl); stop_time=time(NULL); delay= stop_time-start_time; if(size == -1) { if(data->opt.debug) fprintf(stderr, "\n Read on socket "); continue; } response_inject(receive, size, cl, &response, &(data->opt), Header[i], word1, delay); memset(url, 0, MAX_SIZE_URL); sleep(data->opt.wait); if(data->opt.url.ssl) { closesocks(&ssl, sock); sock=opensock(data); if(data->opt.proxy.ip != NULL) prepare_connect(data, sock); ssl=opensocks(sock, &data->opt); } else { close(sock); sock=opensock(data); } if(!dontup) i++; } FREE_BUF(receive); return(1); }