]> granicus.if.org Git - php/commitdiff
Set the close-on-exec flag for fds. Child processes should not inherit
authorSascha Schumann <sas@php.net>
Mon, 22 Apr 2002 20:39:24 +0000 (20:39 +0000)
committerSascha Schumann <sas@php.net>
Mon, 22 Apr 2002 20:39:24 +0000 (20:39 +0000)
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).

ext/session/mod_files.c

index 9ca57b7eac58c68fb0003934abf65cf8c3d9189c..e3ef303611d4fe417f0125552fc2a933b894088c 100644 (file)
@@ -141,20 +141,17 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
                
                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);
+               }
        }
 }