diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-03-10 04:56:58 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-03-10 04:56:58 +0000 |
commit | 49a5dd09b9aaba81fa217c9d41fce5e1f90c054b (patch) | |
tree | f29b230c95592a89e7d4735d372c0c3addd5afd3 | |
parent | c03c56b2e29fd773b19b01d22be4ce347be9f05b (diff) | |
download | samba-49a5dd09b9aaba81fa217c9d41fce5e1f90c054b.tar.gz samba-49a5dd09b9aaba81fa217c9d41fce5e1f90c054b.tar.bz2 samba-49a5dd09b9aaba81fa217c9d41fce5e1f90c054b.zip |
added Date and Expires headers in the mini web server so clients know
what they can cache.
(This used to be commit b6055e40bb91775a29b756640d95910a6f19814f)
-rw-r--r-- | source3/cgi.c | 35 | ||||
-rw-r--r-- | source3/lib/time.c | 15 | ||||
-rw-r--r-- | source3/swat.c | 1 | ||||
-rw-r--r-- | source3/web/cgi.c | 35 | ||||
-rw-r--r-- | 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 <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <string.h> -#include <fcntl.h> -#include <unistd.h> -#include <pwd.h> +#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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n"); printf("<HTML>\n<HEAD>\n<TITLE>Samba Web Administration Tool</TITLE>\n</HEAD>\n<BODY>\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 <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <string.h> -#include <fcntl.h> -#include <unistd.h> -#include <pwd.h> +#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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n"); printf("<HTML>\n<HEAD>\n<TITLE>Samba Web Administration Tool</TITLE>\n</HEAD>\n<BODY>\n\n"); |