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