summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-03-10 04:56:58 +0000
committerAndrew Tridgell <tridge@samba.org>1998-03-10 04:56:58 +0000
commit49a5dd09b9aaba81fa217c9d41fce5e1f90c054b (patch)
treef29b230c95592a89e7d4735d372c0c3addd5afd3
parentc03c56b2e29fd773b19b01d22be4ce347be9f05b (diff)
downloadsamba-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.c35
-rw-r--r--source3/lib/time.c15
-rw-r--r--source3/swat.c1
-rw-r--r--source3/web/cgi.c35
-rw-r--r--source3/web/swat.c1
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");