sas             Mon Feb 10 19:42:54 2003 EDT

  Modified files:              
    /php4/ext/session   mod_files.c 
  Log:
  support setting the filemode using session.save_path
  
  
Index: php4/ext/session/mod_files.c
diff -u php4/ext/session/mod_files.c:1.89 php4/ext/session/mod_files.c:1.90
--- php4/ext/session/mod_files.c:1.89   Fri Jan 24 18:57:31 2003
+++ php4/ext/session/mod_files.c        Mon Feb 10 19:42:54 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mod_files.c,v 1.89 2003/01/24 23:57:31 sas Exp $ */
+/* $Id: mod_files.c,v 1.90 2003/02/11 00:42:54 sas Exp $ */
 
 #include "php.h"
 
@@ -56,6 +56,7 @@
        size_t basedir_len;
        size_t dirdepth;
        size_t st_size;
+       int filemode;
 } ps_files;
 
 ps_module ps_mod_files = {
@@ -152,7 +153,8 @@
                
                data->lastkey = estrdup(key);
                
-               data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 0600);
+               data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 
+                               data->filemode);
                
                if (data->fd != -1) {
                        flock(data->fd, LOCK_EX);
@@ -226,23 +228,54 @@
 PS_OPEN_FUNC(files)
 {
        ps_files *data;
-       char *p;
-
-       data = ecalloc(sizeof(*data), 1);
-       PS_SET_MOD_DATA(data);
+       const char *p, *last;
+       const char *argv[3];
+       int argc = 0;
+       size_t dirdepth = 0;
+       int filemode = 0600;
+
+       /* split up input parameter */
+       last = save_path;
+       p = strchr(save_path, ';');
+       while (p) {
+               argv[argc++] = last;
+               last = ++p;
+               p = strchr(p, ';');
+               if (argc > 1) break;
+       }
+       argv[argc++] = last;
 
-       data->fd = -1;
-       if ((p = strchr(save_path, ';'))) {
+       if (argc > 1) {
                errno = 0;
-               data->dirdepth = (size_t) strtol(save_path, NULL, 10);
+               dirdepth = (size_t) strtol(argv[0], NULL, 10);
                if (errno == ERANGE) {
-                       efree(data);
+                       php_error(E_WARNING, 
+                                       "The first parameter in session.save_path is 
+invalid");
+                       return FAILURE;
+               }
+       }
+       
+       if (argc > 2) {
+               errno = 0;
+               filemode = strtol(argv[1], NULL, 8);
+               if (errno == ERANGE || filemode < 0 || filemode > 07777) {
+                       php_error(E_WARNING, 
+                                       "The second parameter in session.save_path is 
+invalid");
                        return FAILURE;
                }
-               save_path = p + 1;
        }
+       save_path = argv[argc - 1];
+
+       data = emalloc(sizeof(*data));
+       memset(data, 0, sizeof(*data));
+       
+       data->fd = -1;
+       data->dirdepth = dirdepth;
+       data->filemode = filemode;
        data->basedir_len = strlen(save_path);
        data->basedir = estrndup(save_path, data->basedir_len);
+       
+       PS_SET_MOD_DATA(data);
        
        return SUCCESS;
 }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to