diff options
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 38 |
1 files changed, 19 insertions, 19 deletions
@@ -952,10 +952,11 @@ proc_setuid(obj, id) int uid; uid = NUM2INT(id); -#ifdef HAVE_SETREUID +#if defined HAVE_SETRESUID + setresuid(uid, -1, -1); +#elif defined HAVE_SETREUID setreuid(uid, -1); -#else -#ifdef HAVE_SETRUID +#elif defined HAVE_SETRUID setruid(uid); #else { @@ -965,7 +966,6 @@ proc_setuid(obj, id) rb_notimplement(); } #endif -#endif return INT2FIX(uid); } @@ -984,11 +984,12 @@ proc_setgid(obj, id) int gid; gid = NUM2INT(id); -#ifdef HAS_SETRGID - setrgid((GIDTYPE)gid); -#else -#ifdef HAVE_SETREGID +#if defined HAVE_SETRESGID + setresgid(gid, -1, -1); +#elif defined HAVE_SETREGID setregid(gid, -1); +#elif defined HAS_SETRGID + setrgid((GIDTYPE)gid); #else { if (getegid() == gid) @@ -997,7 +998,6 @@ proc_setgid(obj, id) rb_notimplement(); } #endif -#endif return INT2FIX(gid); } @@ -1013,11 +1013,12 @@ static VALUE proc_seteuid(obj, euid) VALUE obj, euid; { -#ifdef HAVE_SETEUID - if (seteuid(NUM2INT(euid)) < 0) rb_sys_fail(0); -#else -#ifdef HAVE_SETREUID +#if defined HAVE_SETRESUID + if (setresuid(-1, NUM2INT(euid), -1) < 0) rb_sys_fail(0); +#elif defined HAVE_SETREUID if (setreuid(-1, NUM2INT(euid)) < 0) rb_sys_fail(0); +#elif defined HAVE_SETEUID + if (seteuid(NUM2INT(euid)) < 0) rb_sys_fail(0); #else euid = NUM2INT(euid); if (euid == getuid()) @@ -1025,7 +1026,6 @@ proc_seteuid(obj, euid) else rb_notimplement(); #endif -#endif return euid; } @@ -1042,11 +1042,12 @@ proc_setegid(obj, egid) VALUE obj, egid; { rb_secure(2); -#ifdef HAVE_SETEGID - if (setegid(NUM2INT(egid)) < 0) rb_sys_fail(0); -#else -#ifdef HAVE_SETREGID +#if defined HAVE_SETRESGID + if (setresgid(-1, NUM2INT(egid), -1) < 0) rb_sys_fail(0); +#elif defined HAVE_SETREGID if (setregid(-1, NUM2INT(egid)) < 0) rb_sys_fail(0); +#elif defined HAVE_SETEGID + if (setegid(NUM2INT(egid)) < 0) rb_sys_fail(0); #else egid = NUM2INT(egid); if (egid == getgid()) @@ -1054,7 +1055,6 @@ proc_setegid(obj, egid) else rb_notimplement(); #endif -#endif return egid; } |