1
0
mirror of https://github.com/gophernicus/gophernicus.git synced 2024-11-03 04:27:17 -05:00

Added $SESSION_ID environment variable for CGI scripts

This commit is contained in:
Kim Holviala 2014-12-19 14:21:34 +02:00
parent 26614a6efd
commit 74851cf592
6 changed files with 14 additions and 2 deletions

View File

@ -2,6 +2,7 @@
2014-11-10 Kim Holviala <kim@holviala.com> 2014-11-10 Kim Holviala <kim@holviala.com>
* Added MacOSX 10.10 to the list of supported systems in INSTALL
* Released version 1.6 * Released version 1.6
* Fix compiling for MacOS X Yosemite * Fix compiling for MacOS X Yosemite

View File

@ -8,7 +8,7 @@
NAME = gophernicus NAME = gophernicus
PACKAGE = $(NAME) PACKAGE = $(NAME)
BINARY = in.$(NAME) BINARY = in.$(NAME)
VERSION = 1.6 VERSION = 1.7-alpha
SOURCES = $(NAME).c file.c menu.c string.c platform.c session.c options.c SOURCES = $(NAME).c file.c menu.c string.c platform.c session.c options.c
HEADERS = functions.h files.h HEADERS = functions.h files.h

4
file.c
View File

@ -312,6 +312,10 @@ void setenv_cgi(state *st, char *script)
setenv("LOCAL_ADDR", st->req_local_addr, 1); setenv("LOCAL_ADDR", st->req_local_addr, 1);
setenv("REMOTE_ADDR", st->req_remote_addr, 1); setenv("REMOTE_ADDR", st->req_remote_addr, 1);
setenv("HTTP_REFERER", st->req_referrer, 1); setenv("HTTP_REFERER", st->req_referrer, 1);
#ifdef HAVE_SHMEM
snprintf(buf, sizeof(buf), "%x", st->session_id);
setenv("SESSION_ID", buf, 1);
#endif
setenv("HTTP_ACCEPT_CHARSET", strcharset(st->out_charset), 1); setenv("HTTP_ACCEPT_CHARSET", strcharset(st->out_charset), 1);
/* Gophernicus extras */ /* Gophernicus extras */

View File

@ -490,6 +490,7 @@ int main(int argc, char *argv[])
setlocale(LC_TIME, DATE_LOCALE); setlocale(LC_TIME, DATE_LOCALE);
#endif #endif
init_state(&st); init_state(&st);
srand(time(NULL) / (getpid() + getppid()));
/* Handle command line arguments */ /* Handle command line arguments */
parse_args(&st, argc, argv); parse_args(&st, argc, argv);

View File

@ -318,6 +318,7 @@ typedef struct {
int session_timeout; int session_timeout;
int session_max_kbytes; int session_max_kbytes;
int session_max_hits; int session_max_hits;
int session_id;
/* Feature options */ /* Feature options */
char opt_parent; char opt_parent;
@ -338,7 +339,7 @@ typedef struct {
/* Shared memory for session & accounting data */ /* Shared memory for session & accounting data */
#ifdef HAVE_SHMEM #ifdef HAVE_SHMEM
#define SHM_KEY 0xbeeb0006 /* Unique identifier + struct version */ #define SHM_KEY 0xbeeb0007 /* Unique identifier + struct version */
#define SHM_MODE 0600 /* Access mode for the shared memory */ #define SHM_MODE 0600 /* Access mode for the shared memory */
#define SHM_SESSIONS 256 /* Max amount of user sessions to track */ #define SHM_SESSIONS 256 /* Max amount of user sessions to track */
@ -350,6 +351,7 @@ typedef struct {
char req_selector[128]; char req_selector[128];
char req_remote_addr[64]; char req_remote_addr[64];
char req_filetype; char req_filetype;
int session_id;
char server_host[64]; char server_host[64];
int server_port; int server_port;

View File

@ -97,6 +97,7 @@ void update_shm_session(state *st, shm_state *shm)
sstrlcpy(shm->session[i].req_remote_addr, st->req_remote_addr); sstrlcpy(shm->session[i].req_remote_addr, st->req_remote_addr);
shm->session[i].hits = 0; shm->session[i].hits = 0;
shm->session[i].kbytes = 0; shm->session[i].kbytes = 0;
shm->session[i].session_id = rand();
break; break;
} }
} }
@ -115,6 +116,9 @@ void update_shm_session(state *st, shm_state *shm)
sstrlcpy(st->req_referrer, buf); sstrlcpy(st->req_referrer, buf);
} }
/* Get public session id */
st->session_id = shm->session[i].session_id;
/* Update session data */ /* Update session data */
sstrlcpy(shm->session[i].server_host, st->server_host); sstrlcpy(shm->session[i].server_host, st->server_host);
shm->session[i].server_port = st->server_port; shm->session[i].server_port = st->server_port;