You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Klaus Mueller <K....@intershop.de> on 1999/03/01 16:54:26 UTC

RE: mod_proxy/3640: Could not GC proxy directory; Permission deni ed

With suggestions and support from Ben Kummer (KUMMER@vdivde-it.de) I made a
small bug fix.

Here is the diff command line I used:

diff proxy_cache.c.org proxy_cache.c >proxy_cache.c.diff

The result of the diff is:

----------------------------------------------------
403,406c403,405
< /* is it a temporary file? */
< 	if (strncmp(ent->d_name, "tmp", 3) == 0) {
< /* then stat it to see how old it is; delete temporary files > 1 day old
*/
< 	    if (stat(filename, &buf) == -1) {
---
> 
> 	/* stat the file to get type and date */
>     if (stat(filename, &buf) == -1) {
410,411c409,412
< 	    }
< 	    else if (garbage_now != -1 && buf.st_atime < garbage_now -
SEC_ONE_DAY &&
---
>     }
> /* is it a temporary file? */
> 	if (strncmp(ent->d_name, "tmp", 3) == 0) {
> 	    if (garbage_now != -1 && buf.st_atime < garbage_now -
SEC_ONE_DAY &&
450,464d450
< /* read the file */
< 	fd = open(filename, O_RDONLY | O_BINARY);
< 	if (fd == -1) {
< 	    if (errno != ENOENT)
< 		ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
< 			     "proxy gc: open(%s)", filename);
< 	    continue;
< 	}
< 	if (fstat(fd, &buf) == -1) {
< 	    ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
< 			 "proxy gc: fstat(%s)", filename);
< 	    close(fd);
< 	    continue;
< 	}
< 
466a453
> /* use stat from above */
469d455
< 	    close(fd);
487a474,484
> 
> 	/* read the file */
> 	fd = open(filename, O_RDONLY | O_BINARY);
> 	if (fd == -1) {
> 	    if (errno != ENOENT)
> 		ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
> 			     "proxy gc: open(%s)", filename);
> 	    continue;
> 	}
> 
> 	/* stat already done */
----------------------------------------------------


Problem description:

A stat was only made if the file is a .tmp file. Otherwise the file is
opened (failed for directory on WinNT) and the file desciptor is used to
call fstat().

I used only one stat() call for all types of files and removed the fstat().
The file is only opened if it's not a directory.


Please review the changes and add it to further Win32 releases
Thanks
Klaus Mueller