summaryrefslogtreecommitdiff
path: root/source3/web/cgi.c
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 /source3/web/cgi.c
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)
Diffstat (limited to 'source3/web/cgi.c')
-rw-r--r--source3/web/cgi.c35
1 files changed, 25 insertions, 10 deletions
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;
}