From 49a5dd09b9aaba81fa217c9d41fce5e1f90c054b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Mar 1998 04:56:58 +0000 Subject: added Date and Expires headers in the mini web server so clients know what they can cache. (This used to be commit b6055e40bb91775a29b756640d95910a6f19814f) --- source3/cgi.c | 35 +++++++++++++++++++++++++---------- source3/lib/time.c | 15 +++++++++++++++ source3/swat.c | 1 + source3/web/cgi.c | 35 +++++++++++++++++++++++++---------- source3/web/swat.c | 1 + 5 files changed, 67 insertions(+), 20 deletions(-) diff --git a/source3/cgi.c b/source3/cgi.c index 9ce8c4d91e..2008f9a8d3 100644 --- a/source3/cgi.c +++ b/source3/cgi.c @@ -18,16 +18,16 @@ */ -#include -#include -#include -#include -#include -#include -#include +#include "includes.h" +#include "smb.h" #define MAX_VARIABLES 10000 +/* set the expiry on fixed pages */ +#define EXPIRY_TIME (60*60*24*7) + +#define CGI_LOGGING 0 + #ifdef DEBUG_COMMENTS extern void print_title(char *fmt, ...); #endif @@ -524,12 +524,16 @@ static void cgi_download(char *file) } printf("HTTP/1.1 200 OK\r\n"); if ((p=strrchr(file,'.'))) { - if (strcmp(p,".gif")==0 || strcmp(p,".jpg")==0) { + if (strcmp(p,".gif")==0) { printf("Content-Type: image/gif\r\n"); + } else if (strcmp(p,".jpg")==0) { + printf("Content-Type: image/jpeg\r\n"); } else { printf("Content-Type: text/html\r\n"); } } + printf("Expires: %s\r\n", http_timestring(time(NULL)+EXPIRY_TIME)); + printf("Content-Length: %d\r\n\r\n", (int)st.st_size); while ((l=read(fd,buf,sizeof(buf)))>0) { fwrite(buf, 1, l, stdout); @@ -549,6 +553,11 @@ void cgi_setup(char *rootdir, int auth_required) char line[1024]; char *url=NULL; char *p; +#if CGI_LOGGING + FILE *f = fopen("/tmp/cgi.log", "a"); + + fprintf(f,"\n[Date: %s]\n", http_timestring(time(NULL))); +#endif if (chdir(rootdir)) { cgi_setup_error("400 Server Error", "", @@ -563,6 +572,9 @@ void cgi_setup(char *rootdir, int auth_required) /* we are a mini-web server. We need to read the request from stdin and handle authentication etc */ while (fgets(line, sizeof(line)-1, stdin)) { +#if CGI_LOGGING + fputs(line, f); +#endif if (line[0] == '\r' || line[0] == '\n') break; if (strncasecmp(line,"GET ", 4)==0) { request_get = 1; @@ -580,6 +592,9 @@ void cgi_setup(char *rootdir, int auth_required) } /* ignore all other requests! */ } +#if CGI_LOGGING + fclose(f); +#endif if (auth_required && !authenticated) { cgi_setup_error("401 Authorization Required", @@ -606,12 +621,12 @@ void cgi_setup(char *rootdir, int auth_required) *p = 0; } - if (strstr(url+1,"..")==0 && file_exist(url+1)) { + if (strstr(url+1,"..")==0 && file_exist(url+1, NULL)) { cgi_download(url+1); } printf("HTTP/1.1 200 OK\r\nConnection: close\r\n"); - + printf("Date: %s\r\n", http_timestring(time(NULL))); baseurl = url+1; } diff --git a/source3/lib/time.c b/source3/lib/time.c index f60af60c7a..c5584fd143 100644 --- a/source3/lib/time.c +++ b/source3/lib/time.c @@ -451,6 +451,21 @@ time_t make_unix_date3(void *date_ptr) return(t); } + +/*************************************************************************** +return a HTTP/1.0 time string + ***************************************************************************/ +char *http_timestring(time_t t) +{ + static char buf[40]; + struct tm *tm = LocalTime(&t); + + strftime(buf, sizeof(buf)-1, "%a, %d %b %Y %H:%M:%S %Z", tm); + return buf; +} + + + /**************************************************************************** return the date and time as a string ****************************************************************************/ diff --git a/source3/swat.c b/source3/swat.c index 508c8944b4..ea93d3ccd1 100644 --- a/source3/swat.c +++ b/source3/swat.c @@ -35,6 +35,7 @@ static pstring servicesf = CONFIGFILE; /* start the page with standard stuff */ static void print_header(void) { + printf("Expires: %s\r\n", http_timestring(time(NULL))); printf("Content-type: text/html\r\n\r\n"); printf("\n"); printf("\n\nSamba Web Administration Tool\n\n\n\n"); diff --git a/source3/web/cgi.c b/source3/web/cgi.c index 9ce8c4d91e..2008f9a8d3 100644 --- a/source3/web/cgi.c +++ b/source3/web/cgi.c @@ -18,16 +18,16 @@ */ -#include -#include -#include -#include -#include -#include -#include +#include "includes.h" +#include "smb.h" #define MAX_VARIABLES 10000 +/* set the expiry on fixed pages */ +#define EXPIRY_TIME (60*60*24*7) + +#define CGI_LOGGING 0 + #ifdef DEBUG_COMMENTS extern void print_title(char *fmt, ...); #endif @@ -524,12 +524,16 @@ static void cgi_download(char *file) } printf("HTTP/1.1 200 OK\r\n"); if ((p=strrchr(file,'.'))) { - if (strcmp(p,".gif")==0 || strcmp(p,".jpg")==0) { + if (strcmp(p,".gif")==0) { printf("Content-Type: image/gif\r\n"); + } else if (strcmp(p,".jpg")==0) { + printf("Content-Type: image/jpeg\r\n"); } else { printf("Content-Type: text/html\r\n"); } } + printf("Expires: %s\r\n", http_timestring(time(NULL)+EXPIRY_TIME)); + printf("Content-Length: %d\r\n\r\n", (int)st.st_size); while ((l=read(fd,buf,sizeof(buf)))>0) { fwrite(buf, 1, l, stdout); @@ -549,6 +553,11 @@ void cgi_setup(char *rootdir, int auth_required) char line[1024]; char *url=NULL; char *p; +#if CGI_LOGGING + FILE *f = fopen("/tmp/cgi.log", "a"); + + fprintf(f,"\n[Date: %s]\n", http_timestring(time(NULL))); +#endif if (chdir(rootdir)) { cgi_setup_error("400 Server Error", "", @@ -563,6 +572,9 @@ void cgi_setup(char *rootdir, int auth_required) /* we are a mini-web server. We need to read the request from stdin and handle authentication etc */ while (fgets(line, sizeof(line)-1, stdin)) { +#if CGI_LOGGING + fputs(line, f); +#endif if (line[0] == '\r' || line[0] == '\n') break; if (strncasecmp(line,"GET ", 4)==0) { request_get = 1; @@ -580,6 +592,9 @@ void cgi_setup(char *rootdir, int auth_required) } /* ignore all other requests! */ } +#if CGI_LOGGING + fclose(f); +#endif if (auth_required && !authenticated) { cgi_setup_error("401 Authorization Required", @@ -606,12 +621,12 @@ void cgi_setup(char *rootdir, int auth_required) *p = 0; } - if (strstr(url+1,"..")==0 && file_exist(url+1)) { + if (strstr(url+1,"..")==0 && file_exist(url+1, NULL)) { cgi_download(url+1); } printf("HTTP/1.1 200 OK\r\nConnection: close\r\n"); - + printf("Date: %s\r\n", http_timestring(time(NULL))); baseurl = url+1; } diff --git a/source3/web/swat.c b/source3/web/swat.c index 508c8944b4..ea93d3ccd1 100644 --- a/source3/web/swat.c +++ b/source3/web/swat.c @@ -35,6 +35,7 @@ static pstring servicesf = CONFIGFILE; /* start the page with standard stuff */ static void print_header(void) { + printf("Expires: %s\r\n", http_timestring(time(NULL))); printf("Content-type: text/html\r\n\r\n"); printf("\n"); printf("\n\nSamba Web Administration Tool\n\n\n\n"); -- cgit