r1839: pulling a few more changes from 3.0
authorGerald Carter <jerry@samba.org>
Mon, 16 Aug 2004 21:07:01 +0000 (21:07 +0000)
committerGerald Carter <jerry@samba.org>
Mon, 16 Aug 2004 21:07:01 +0000 (21:07 +0000)
source/lib/debug.c
source/web/cgi.c

index e5e203e076a6bb367686e43b3ea4cab9cfd9ae76..01aedb47740ec5fa1987ecb6a31a7fbe6aff5d02 100644 (file)
@@ -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
index 07b9f52ff77a763a291499e3dadf5ed8f33c28f1..b1aa8ae754c01218f8699e2b86134fa07761c890 100644 (file)
@@ -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);
        }