issue #3 (rejecting http) - fiche - A pastebin adjusted for gopher use
 (HTM) git clone git://vernunftzentrum.de/fiche.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 33f00487d0baba30eac8db396af42919e2715601
 (DIR) parent 0c3e6aacd439f00940f12f4dd83c363eacea93ca
 (HTM) Author: solusipse <solus1ps3@gmail.com>
       Date:   Thu, 26 Sep 2013 12:36:29 +0200
       
       issue #3 (rejecting http)
       
       Diffstat:
         fiche.c                             |      24 ++++++++++++++++++++++--
         fiche.h                             |       2 +-
       
       2 files changed, 23 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/fiche.c b/fiche.c
       @@ -66,12 +66,12 @@ void *thread_connection(void *args)
                    printf("Rejected connection from unknown user.\n");
                    display_line();
                    save_log(NULL, data.ip_address, data.hostname);
       -            write(connection_socket, "You are not whitelisted!\n", 17);
       +            write(connection_socket, "You are not whitelisted!\n", 26);
                    close(connection_socket);
                    pthread_exit(NULL);
                }
        
       -    if ((BANLIST != NULL))
       +    if (BANLIST != NULL)
                if (check_banlist(data.ip_address) != NULL)
                {
                    printf("Rejected connection from banned user.\n");
       @@ -82,6 +82,16 @@ void *thread_connection(void *args)
                    pthread_exit(NULL);
                }
        
       +    if (check_protocol(buffer) == 1)
       +    {
       +        printf("Rejected due to wrong protocol.\n");
       +        display_line();
       +        save_log(NULL, data.ip_address, data.hostname);
       +        write(connection_socket, "Use netcat!", 11);
       +        close(connection_socket);
       +        pthread_exit(NULL);
       +    }
       +
            if (status != -1)
            {
                char slug[SLUG_SIZE+8];
       @@ -327,6 +337,16 @@ void set_uid_gid(char *username)
            GID = userdata->pw_gid;
        }
        
       +int check_protocol(char *buffer)
       +{
       +    if (strlen(buffer) < 1)
       +        return 1;
       +    if ((strncmp(buffer, "GET", 3) == 0)||(strncmp(buffer, "POST", 4) == 0))
       +        if (strstr(buffer, "HTTP/1."))
       +            return 1;
       +    return 0;
       +}
       +
        void set_basedir()
        {
            BASEDIR = getenv("HOME");
 (DIR) diff --git a/fiche.h b/fiche.h
       @@ -60,11 +60,11 @@ const char *symbols = "abcdefghijklmnopqrstuvwxyz0123456789";
        
        int create_socket();
        int create_directory(char *slug);
       +int check_protocol(char *buffer);
        
        void bind_to_port(int listen_socket, struct sockaddr_in serveraddr);
        void display_line(){printf("====================================\n");}
        void error(char *error_code){perror(error_code); exit(1);}
       -void nerror(char *error_code){perror(error_code);}
        void display_date();
        void perform_connection(int listen_socket);
        void generate_url(char *buffer, char *slug, size_t slug_length);