Example #1
0
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;
}
Example #2
0
http_client::~http_client()
{
    // free the response if we have one
    if (response != NULL)
        free(response);

    // clean up any leftover headers
    free_headers();
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
0
File: request.c Project: jes/serve
/* 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);
}
Example #6
0
void free_http_state(http_state *st) {
  free(st->parser);
  free_headers(st);
  free(st);
}
Example #7
0
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*/
}