Re: cvs: php4 /ext/session mod_files.c
| From: | Jani Taskinen | Date: | Tue, 23 Apr 2002 03:16:47 +0000 |
| Subject: | Re: cvs: php4 /ext/session mod_files.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-11327@lists.php.net to get a copy of this message | ||
Should this fix be MFH to the PHP_4_2_0 branch?
And are there any bug reports which might have been
caused by this?
--Jani
On Mon, 22 Apr 2002, Sascha Schumann wrote:
>sas Mon Apr 22 16:39:25 2002 EDT
>
> Modified files:
> /php4/ext/session mod_files.c
> Log:
> Set the close-on-exec flag for fds. Child processes should not inherit
> the fd.
>
> Also rip out the broken O_EXCL use. Our file names are not unique and
> this left a small window open where creating a session file would fail
> (a, b notice that the file does not exist; a creates the file successfully;
> b tries to create, but fails due to O_EXCL).
>
>
>Index: php4/ext/session/mod_files.c
>diff -u php4/ext/session/mod_files.c:1.72 php4/ext/session/mod_files.c:1.73
>--- php4/ext/session/mod_files.c:1.72 Wed Mar 6 06:49:51 2002
>+++ php4/ext/session/mod_files.c Mon Apr 22 16:39:24 2002
>@@ -16,7 +16,7 @@
> +----------------------------------------------------------------------+
> */
>
>-/* $Id: mod_files.c,v 1.72 2002/03/06 11:49:51 sas Exp $ */
>+/* $Id: mod_files.c,v 1.73 2002/04/22 20:39:24 sas Exp $ */
>
> #include "php.h"
>
>@@ -141,20 +141,17 @@
>
> data->lastkey = estrdup(key);
>
>-#ifdef O_EXCL
>- data->fd = VCWD_OPEN(buf, O_RDWR | O_BINARY);
>-
>- if (data->fd == -1 && errno == ENOENT)
>- data->fd = VCWD_OPEN_MODE(buf, O_EXCL | O_RDWR | O_CREAT | O_BINARY, 0600);
>-#else
> data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 0600);
>-#endif
>- if (data->fd != -1)
>+
>+ if (data->fd != -1) {
> flock(data->fd, LOCK_EX);
>-
>- if (data->fd == -1)
>+ if (fcntl(data->fd, F_SETFD, 1)) {
>+ php_error(E_WARNING, "fcntl(%d, F_SETFD, 1) failed: %s (%d)", data->fd,
>strerror(errno), errno);
>+ }
>+ } else {
> php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf,
> strerror(errno), errno);
>+ }
> }
> }
>
>
>
>
>
--