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