Browse code

make the secure attribute in the cookie optional (only works if using a ssl proxy, as in stunnel)

Dario Rodriguez authored on 14/07/2014 12:10:33
Showing 3 changed files
... ...
@@ -29,6 +29,7 @@
29 29
 #define CFCOOKIENAME "kakumeiauthid"
30 30
 #define CFCOOKIEDOMAIN "localhost"
31 31
 #define CFBANNERPATH "default.png"
32
+#define CFSSLPROXY 0
32 33
 
33 34
 static int signal_init(int signum, void (*fn)(int));
34 35
 static void sigint(int signum);
... ...
@@ -60,7 +61,7 @@ main(int argc, char *argv[])
60 61
         port=atoi(argv[1]);
61 62
         if(kaconfig_exists(CONFIGFILE)!=0) {
62 63
                 log_write("INIT","Config file not found, writing default file %s",CONFIGFILE);
63
-                kaconfig_write(CONFIGFILE,CFCOOKIENAME,CFCOOKIEDOMAIN,CFBANNERPATH);
64
+                kaconfig_write(CONFIGFILE,CFCOOKIENAME,CFCOOKIEDOMAIN,CFBANNERPATH,CFSSLPROXY);
64 65
         }
65 66
         if((ka->config=kaconfig_init(CONFIGFILE))==NULL) {
66 67
                 log_write("INIT","ERROR: insufficient memory or config file error");
... ...
@@ -298,7 +299,7 @@ http_login(wk *web, int connid, wk_uri *uri, void *userptr)
298 299
                 /* valid login */
299 300
                 snprintf(reply,sizeof(reply),"/posts.html?s=%s",session);
300 301
                 reply[sizeof(reply)-1]='\0';
301
-                wk_serve_cookieadd(web,connid,ka->config->cookiename,authid,ka->config->cookiedomain,21600 /* 6h */,"secure");
302
+                wk_serve_cookieadd(web,connid,ka->config->cookiename,authid,ka->config->cookiedomain,21600 /* 6h */,(ka->config->sslproxy)?"secure":NULL);
302 303
                 wk_serve_buffer_as_file(web,connid,reply,strlen(reply),"text/plain");
303 304
                 log_write("LGIN","Reply: %s",reply);
304 305
                 return(wkact_finished);
... ...
@@ -354,7 +355,7 @@ http_newuser(wk *web, int connid, wk_uri *uri, void *userptr)
354 355
         /* valid login */
355 356
         snprintf(reply,sizeof(reply),"/posts.html?s=%s",session);
356 357
         reply[sizeof(reply)-1]='\0';
357
-        wk_serve_cookieadd(web,connid,ka->config->cookiename,authid,ka->config->cookiedomain,21600 /* 6h */,"secure");
358
+        wk_serve_cookieadd(web,connid,ka->config->cookiename,authid,ka->config->cookiedomain,21600 /* 6h */,(ka->config->sslproxy)?"secure":NULL);
358 359
         wk_serve_buffer_as_file(web,connid,reply,strlen(reply),"text/plain");
359 360
         log_write("NEWU","Reply: %s",reply);
360 361
         return(wkact_finished);
... ...
@@ -31,6 +31,7 @@ kaconfig_init(char *configfile)
31 31
         int generalsection;
32 32
         int lineno;
33 33
         char **configvalue;
34
+	char *sslproxydummy;
34 35
         if((f=fopen(configfile,"r"))==NULL)
35 36
                 return(NULL);
36 37
         if((config=malloc(sizeof(kaconfig)))==NULL) {
... ...
@@ -91,6 +92,12 @@ kaconfig_init(char *configfile)
91 92
                                 configvalue=&(config->cookiedomain);
92 93
                         } else if(strcmp(ptr,"bannerpath")==0) {
93 94
                                 configvalue=&(config->bannerpath);
95
+                        } else if(strcmp(ptr,"sslproxy")==0) {
96
+				if(strcmp(value,"true")==0 || strcmp(value,"1")==0 || strcmp(value,"yes")==0)
97
+					config->sslproxy=1;
98
+				else
99
+					config->sslproxy=0;
100
+				continue;
94 101
                         } else {
95 102
                                 log_write("CONF","%s:%i: unknown key, ignoring key-value pair; key:\"%s\"\n",configfile,lineno,ptr);
96 103
                                 continue;
... ...
@@ -141,7 +148,7 @@ kaconfig_exists(char *configfile)
141 148
 }
142 149
 
143 150
 int
144
-kaconfig_write(char *configfile,char *cookiename,char *cookiedomain, char *bannerpath)
151
+kaconfig_write(char *configfile,char *cookiename,char *cookiedomain, char *bannerpath, int sslproxy)
145 152
 {
146 153
         FILE *f;
147 154
         if((f=fopen(configfile,"w"))==NULL)
... ...
@@ -151,6 +158,7 @@ kaconfig_write(char *configfile,char *cookiename,char *cookiedomain, char *banne
151 158
         fprintf(f,"cookiename=%s\n",(cookiename!=NULL)?cookiename:"kakumeiauthid");
152 159
         fprintf(f,"cookiedomain=%s\n",(cookiedomain!=NULL)?cookiedomain:"localhost");
153 160
         fprintf(f,"bannerpath=%s\n",(bannerpath!=NULL)?bannerpath:"default.png");
161
+        fprintf(f,"sslproxy=%s\n",(sslproxy==0)?"no":"yes");
154 162
         return(0);
155 163
 }
156 164
 
... ...
@@ -15,11 +15,12 @@ typedef struct kaconfig {
15 15
         char *cookiename;
16 16
         char *cookiedomain;
17 17
         char *bannerpath;
18
+        int sslproxy;
18 19
 } kaconfig;
19 20
 
20 21
 kaconfig *kaconfig_init(char *configfile);
21 22
 void kaconfig_free(kaconfig *config);
22 23
 
23 24
 int kaconfig_exists(char *configfile);
24
-int kaconfig_write(char *configfile,char *cookiename,char *cookiedomain, char *bannerpath);
25
+int kaconfig_write(char *configfile,char *cookiename,char *cookiedomain, char *bannerpath, int sslproxy);
25 26
 #endif