diff --git a/src/modules/system/system.c b/src/modules/system/system.c index 35fe2aec3fa8d21694b830ed3dc6126c0e34f8ee..b8afeadc477ed535c19d8b2e06e38f464f67c56d 100644 --- a/src/modules/system/system.c +++ b/src/modules/system/system.c @@ -1,5 +1,5 @@ /* - * $Id: system.c,v 1.19 1997/07/10 14:54:43 grubba Exp $ + * $Id: system.c,v 1.20 1997/08/05 17:03:14 grubba Exp $ * * System-call module for Pike * @@ -14,7 +14,7 @@ #include "system.h" #include <global.h> -RCSID("$Id: system.c,v 1.19 1997/07/10 14:54:43 grubba Exp $"); +RCSID("$Id: system.c,v 1.20 1997/08/05 17:03:14 grubba Exp $"); #include <module_support.h> #include <las.h> #include <interpret.h> @@ -228,16 +228,31 @@ void f_readlink(INT32 args) #endif /* HAVE_READLINK */ #ifdef HAVE_INITGROUPS -/* void initgroups(string name, int gid) */ +/* int initgroups(string name, int gid) */ void f_initgroups(INT32 args) { char *user; + int err; INT32 group; get_all_args("initgroups", args, "%s%i", &user, &group); - initgroups(user, group); + err = initgroups(user, group); pop_n_elems(args); + push_int(err); } #endif /* HAVE_INITGROUPS */ + +#ifdef HAVE_SETGROUPS +/* int cleargroups() */ +void f_cleargroups(INT32 args) +{ + static gid_t gids[1] = { 65534 }; /* To safeguard against stupid OS's */ + pop_n_elems(args); + push_int(setgroups(0, gids)); +} + +/* int setgroup(array(int) gids) */ +/* NOT Implemented in Pike 0.5 */ +#endif /* HAVE_SETGROUPS */ void f_setuid(INT32 args) { @@ -717,8 +732,13 @@ void pike_module_init(void) add_efun("readlink", f_readlink, "function(string:string)", OPT_EXTERNAL_DEPEND); #endif /* HAVE_READLINK */ #ifdef HAVE_INITGROUPS - add_efun("initgroups", f_initgroups, "function(string, int:void)", OPT_SIDE_EFFECT); + add_efun("initgroups", f_initgroups, "function(string, int:int)", OPT_SIDE_EFFECT); #endif /* HAVE_INITGROUPS */ +#ifdef HAVE_SETGROUPS + add_efun("cleargroups", f_cleargroups, "function(:int)", OPT_SIDE_EFFECT); + /* NOT Implemented in Pike 0.5 */ + /* add_efun("setgroups", f_setgroups, "function(array(int):int)", OPT_SIDE_EFFECT); */ +#endif /* HAVE_SETGROUPS */ add_efun("setuid", f_setuid, "function(int:void)", OPT_SIDE_EFFECT); add_efun("setgid", f_setgid, "function(int:void)", OPT_SIDE_EFFECT); #if defined(HAVE_SETEUID) || defined(HAVE_SETRESUID)