summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-06-19 02:19:13 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-06-19 02:19:13 +0000
commit3b7be889d89076b1bdddee1ff46d980112ff1902 (patch)
tree93a2b84495de3651bb553b602a6b9e92b9364070 /ext
parentaae5df3ffdf31e0ddb294cf588b15cd18514f99d (diff)
downloadphp-git-3b7be889d89076b1bdddee1ff46d980112ff1902.tar.gz
Added posix_initgroups() function.
Diffstat (limited to 'ext')
-rw-r--r--ext/posix/config.m42
-rw-r--r--ext/posix/php_posix.h4
-rw-r--r--ext/posix/posix.c19
3 files changed, 24 insertions, 1 deletions
diff --git a/ext/posix/config.m4 b/ext/posix/config.m4
index 6b95375d88..b6b1cf7c1a 100644
--- a/ext/posix/config.m4
+++ b/ext/posix/config.m4
@@ -11,5 +11,5 @@ if test "$PHP_POSIX" = "yes"; then
AC_CHECK_HEADERS(sys/mkdev.h)
- AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev)
+ AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups)
fi
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
index 70982918a8..ddaa401a47 100644
--- a/ext/posix/php_posix.h
+++ b/ext/posix/php_posix.h
@@ -110,6 +110,10 @@ PHP_FUNCTION(posix_getpwuid);
PHP_FUNCTION(posix_getrlimit);
#endif
+#ifdef HAVE_INITGROUPS
+PHP_FUNCTION(posix_initgroups);
+#endif
+
PHP_FUNCTION(posix_get_last_error);
PHP_FUNCTION(posix_strerror);
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
index bb1935c435..715f482e8d 100644
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@ -134,6 +134,9 @@ zend_function_entry posix_functions[] = {
PHP_FE(posix_get_last_error, NULL)
PHP_FALIAS(posix_errno, posix_get_last_error, NULL)
PHP_FE(posix_strerror, NULL)
+#ifdef HAVE_INITGROUPS
+ PHP_FE(posix_initgroups, NULL)
+#endif
{NULL, NULL, NULL}
};
@@ -1056,6 +1059,22 @@ PHP_FUNCTION(posix_strerror)
#endif
+/* {{{ proto bool initgroups(string name, int base_group_id)
+ Calculate the group access list for the user specified in name. */
+PHP_FUNCTION(posix_initgroups)
+{
+ long basegid;
+ char *name;
+ int name_len;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &name, &name_len, &basegid) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ RETURN_BOOL(!initgroups((const char *)name, basegid));
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4