static char *unarchive(struct gzip_handle *src_stream, FILE * out_stream, file_header_t * (*get_headers) (struct gzip_handle *), void (*free_headers) (file_header_t *), const int extract_function, const char *prefix, const char **extract_names, int *err) { file_header_t *file_entry; int extract_flag; int i; char *buffer = NULL; *err = 0; archive_offset = 0; while ((file_entry = get_headers(src_stream)) != NULL) { extract_flag = TRUE; if (extract_names != NULL) { int found_flag = FALSE; char *p = file_entry->name; if (p[0] == '.' && p[1] == '/') p += 2; for (i = 0; extract_names[i] != 0; i++) { if (strcmp(extract_names[i], p) == 0) { found_flag = TRUE; break; } } if (extract_function & extract_exclude_list) { if (found_flag == TRUE) { extract_flag = FALSE; } } else { /* If its not found in the include list dont extract it */ if (found_flag == FALSE) { extract_flag = FALSE; } } } if (extract_flag == TRUE) { buffer = extract_archive(src_stream, out_stream, file_entry, extract_function, prefix, err); *err = 0; /* XXX: ignore extraction errors */ if (*err) { free_headers(file_entry); break; } } else { /* seek past the data entry */ seek_forward(src_stream, file_entry->size); } free_headers(file_entry); } return buffer; }
http_client::~http_client() { // free the response if we have one if (response != NULL) free(response); // clean up any leftover headers free_headers(); }
void free_file(struct file *f) { free(f->name); free(f->path); if(f->st != NULL) free(f->st); if(f->dir != NULL) g_list_free(f->dir); free_headers(f->headers); pthread_mutex_destroy(&f->lock); free(f); }
void gregorio_free_score(gregorio_score *score) { if (!score) { gregorio_message(_("function called with NULL argument"), "free_one_syllable", VERBOSITY_WARNING, 0); return; } gregorio_free_syllables(&(score->first_syllable), score->number_of_voices); gregorio_free_score_infos(score); free_headers(score); free(score); }
/* closes the connection and free's all the content */ void free_request(request *r) { free(r->user_agent); free(r->client); free(r->req); free(r->reqfile); free(r->file); free(r->http); free(r->content_type); free(r->last_modified); free(r->date); if(r->post_data) free(r->post_data); free(r->auth_realm); free(r->auth_user); free(r->doc_root); free(r->location); free(r->host); free_headers(r->header_list, r->num_headers); free(r); }
void free_http_state(http_state *st) { free(st->parser); free_headers(st); free(st); }
int main(int argc, char ** argv) { char * sender; char * message; unsigned int time_message; unsigned int timer; unsigned int num; char * message_filename; char * dir; char * ptr; char * my_delivered_to; DIR * dirp; struct dirent * direntp; unsigned int message_time; char * address; unsigned int count; char filename[256]; FILE * f; unsigned int message_handling = DEFAULT_MH; char buffer[256]; char *content_boundary; char *rpath = DEFAULT_FROM; char *TheUser; char *TheDomain; if(argc > 7 || argc < 5) { fprintf(stderr, "\nautorespond: "); fprintf(stderr, "usage: time num message dir [ flag arsender ]\n\n"); fprintf(stderr, "time - amount of time to consider a message (in seconds)\n"); fprintf(stderr, "num - maximum number of messages to allow within time seconds\n"); fprintf(stderr, "message - the filename of the message to send\n"); fprintf(stderr, "dir - the directory to hold the log of messages\n\n"); fprintf(stderr, "optional parameters:\n\n"); fprintf(stderr, "flag - handling of original message:\n\n"); fprintf(stderr, "0 - append nothing\n"); fprintf(stderr, "1 - append quoted original message without attachments <default>\n\n"); fprintf(stderr, "arsender - from address in generated message, or:\n\n"); fprintf(stderr, "+ = blank from envelope !\n"); fprintf(stderr, "$ = To: address will be used\n\n"); _exit(111); } TheUser= getenv("EXT"); TheDomain= getenv("HOST"); setvbuf(stderr, NULL, _IONBF, 0); if(argc > 7 || argc < 5) { fprintf(stderr, "AUTORESPOND: Invalid arguments. (%d)\n",argc); _exit(111); } time_message = strtoul(argv[1],NULL,10); num = strtoul(argv[2],NULL,10); message_filename = argv[3]; dir = argv[4]; if ( argc > 5 ) message_handling = strtoul(argv[5],NULL,10); if ( argc > 6 ) rpath = argv[6]; if ( *rpath == '+' ) rpath = ""; if ( *rpath == '$' ) { rpath = safe_malloc( strlen(TheUser) + strlen(TheDomain) + 2); strncpy( rpath, TheUser, strlen(TheUser) ); strncat( rpath, "@", 1 ); strncat( rpath, TheDomain, strlen(TheDomain) ); } timer = time(NULL); /*prepare the "delivered-to" string*/ my_delivered_to = "Delivered-To: Autoresponder\n"; read_headers( stdin ); message = read_file(message_filename); if(message==NULL) { fprintf(stderr, "AUTORESPOND: Failed to open message file.\n"); _exit(111); } /*don't autorespond in certain situations*/ sender = getenv("SENDER"); if(sender==NULL) sender = ""; /*don't autorespond to a mailer-daemon*/ if( sender[0]==0 || strncasecmp(sender,"mailer-daemon",13)==0 || strchr(sender,'@')==NULL || strcmp(sender,"#@[]")==0 ) { /*exit with success and continue parsing .qmail file*/ fprintf(stderr,"AUTORESPOND: Stopping on mail from [%s].\n",sender); _exit(0); } if ( inspect_headers("mailing-list", (char *)NULL ) != (char *)NULL ) { fprintf(stderr,"AUTORESPOND: This looks like it's from a mailing list, I will ignore it.\n"); _exit(0); /*report success and exit*/ } if ( inspect_headers("Delivered-To", "Autoresponder" ) != (char *)NULL ) { /*got one of my own messages...*/ fprintf(stderr,"AUTORESPOND: This message is looping...it has my Delivered-To header.\n"); _exit(100); /*hard error*/ } if ( inspect_headers("precedence", "junk" ) != (char *)NULL || inspect_headers("precedence", "bulk" ) != (char *)NULL || inspect_headers("precedence", "list" ) != (char *)NULL ) { fprintf(stderr,"AUTORESPOND: Junk mail received.\n"); _exit(0); /* don't reply to bulk, junk, or list mail */ } /*check the logs*/ if(chdir(dir) == -1) { fprintf(stderr,"AUTORESPOND: Failed to change into directory.\n"); _exit(111); } /*add entry*/ sprintf(filename,"A%u.%u",getpid(),timer); f = fopen(filename,"wb"); if(f==NULL) { fprintf(stderr,"AUTORESPOND: Unable to create file for [%s].",sender); _exit(111); } if(fwrite(sender,1,strlen(sender),f)!=strlen(sender)) { fprintf(stderr,"AUTORESPOND: Unable to create file for [%s].",sender); fclose(f); unlink(filename); _exit(111); } fclose(f); /*check if there are too many responses in the logs*/ dirp = opendir("."); count = 0; while((direntp = readdir(dirp)) != NULL) { if(direntp->d_name[0] != 'A') continue; ptr = strchr(direntp->d_name,'.'); if(ptr==NULL) continue; message_time = strtoul(ptr+1,NULL,10); if(message_time < timer-time_message) { /*too old..ignore errors on unlink*/ unlink(direntp->d_name); } else { address = read_file(direntp->d_name); if(address==NULL) { /*ignore this?*/ continue; } if(strcasecmp(address,sender)==0) { count++; } free(address); } } if(count>num) { fprintf(stderr,"AUTORESPOND: too many received from [%s]\n",sender); _exit(0); /* don't reply to this message, but allow it to be delivered */ } sprintf(filename,"tmp%u.%u",getpid(),timer); f = fopen(filename,"wb"); fprintf( f, "%sTo: %s\nFrom: %s\nSubject: Re:%s\n%s\n", my_delivered_to, sender, rpath, inspect_headers( "Subject", (char *) NULL ), message ); if ( message_handling == 1 ) { fprintf( f, "%s\n\n", "-------- Original Message --------" ); if ( (content_boundary = get_content_boundary()) == (char *)NULL ) { while ( fgets( buffer, sizeof(buffer), stdin ) != NULL ) { fputs( "> ", f ); fputs( buffer, f ); } } else { int content_found = 0; while ( fgets( buffer, sizeof(buffer), stdin ) != NULL ) { if ( content_found == 1 ) { if ( strstr( buffer, content_boundary ) != (char *)NULL ) break; fputs( "> ", f ); fputs( buffer, f ); } if ( strstr( buffer, content_boundary ) != (char *)NULL ) { if ( content_found == 1 ) break; else { free_headers(); read_headers( stdin ); if ( inspect_headers("Content-Type", "text/plain" ) != (char *)NULL ) content_found = 1; continue; } } } } } fprintf( f, "\n\n" ); fclose( f ); /*send the autoresponse...ignore errors?*/ send_message(filename,rpath,&sender,1); unlink( filename ); _exit(0); return 0; /*compiler warning squelch*/ }