summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-08-16 21:07:01 +0000
committerGerald Carter <jerry@samba.org>2004-08-16 21:07:01 +0000
commit06c47874b300f61f721d05769959b3d34ff11d12 (patch)
tree8c9d800e26c730119d004f335451c1c43169ddd9
parent3563bd6e6496dcd10477e44294d8b783988d325b (diff)
downloadsamba-06c47874b300f61f721d05769959b3d34ff11d12.tar.gz
samba-06c47874b300f61f721d05769959b3d34ff11d12.tar.xz
samba-06c47874b300f61f721d05769959b3d34ff11d12.zip
r1839: pulling a few more changes from 3.0
-rw-r--r--source/lib/debug.c8
-rw-r--r--source/web/cgi.c28
2 files changed, 31 insertions, 5 deletions
diff --git a/source/lib/debug.c b/source/lib/debug.c
index e5e203e076a..01aedb47740 100644
--- a/source/lib/debug.c
+++ b/source/lib/debug.c
@@ -572,6 +572,7 @@ BOOL reopen_logs( void )
oldumask = umask( 022 );
pstrcpy(fname, debugf );
+ debugf[0] = '\0';
if (lp_loaded()) {
char *logfname;
@@ -726,7 +727,12 @@ void check_log_size( void )
errno = old_errno;
return( 0 );
}
-
+
+ /* prevent recursion by checking if reopen_logs() has temporaily
+ set the debugf string to "" */
+ if( debugf[0] == '\0')
+ return( 0 );
+
#ifdef WITH_SYSLOG
if( !lp_syslog_only() )
#endif
diff --git a/source/web/cgi.c b/source/web/cgi.c
index 07b9f52ff77..b1aa8ae754c 100644
--- a/source/web/cgi.c
+++ b/source/web/cgi.c
@@ -421,18 +421,38 @@ static void cgi_download(char *file)
}
}
- if (!file_exist(file, &st)) {
+ if (sys_stat(file, &st) != 0)
+ {
cgi_setup_error("404 File Not Found","",
"The requested file was not found");
}
- fd = web_open(file,O_RDONLY,0);
+ if (S_ISDIR(st.st_mode))
+ {
+ snprintf(buf, sizeof(buf), "%s/index.html", file);
+ if (!file_exist(buf, &st) || !S_ISREG(st.st_mode))
+ {
+ cgi_setup_error("404 File Not Found","",
+ "The requested file was not found");
+ }
+ }
+ else if (S_ISREG(st.st_mode))
+ {
+ snprintf(buf, sizeof(buf), "%s", file);
+ }
+ else
+ {
+ cgi_setup_error("404 File Not Found","",
+ "The requested file was not found");
+ }
+
+ fd = web_open(buf,O_RDONLY,0);
if (fd == -1) {
cgi_setup_error("404 File Not Found","",
"The requested file was not found");
}
printf("HTTP/1.0 200 OK\r\n");
- if ((p=strrchr_m(file,'.'))) {
+ if ((p=strrchr_m(buf, '.'))) {
if (strcmp(p,".gif")==0) {
printf("Content-Type: image/gif\r\n");
} else if (strcmp(p,".jpg")==0) {
@@ -554,7 +574,7 @@ void cgi_setup(const char *rootdir, int auth_required)
string_sub(url, "/swat/", "", 0);
- if (url[0] != '/' && strstr(url,"..")==0 && file_exist(url, NULL)) {
+ if (url[0] != '/' && strstr(url,"..")==0) {
cgi_download(url);
}