[perl #24122] setreuid and friends borked on darwin/osx
pxm@nubz.org [Sun, 5 Oct 2003 20:55:56 +0000 (20:55 +0000)]
From: "pxm@nubz.org (via RT)" <perlbug-followup@perl.org>
Message-ID: <rt-24122-65678.14.2411168523081@rt.perl.org>

p4raw-id: //depot/perl@21440

mg.c

diff --git a/mg.c b/mg.c
index df75970..bcb0188 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -2240,9 +2240,14 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
 #ifdef HAS_SETRESUID
       (void)setresuid((Uid_t)PL_uid, (Uid_t)-1, (Uid_t)-1);
 #else
-       if (PL_uid == PL_euid)          /* special case $< = $> */
+       if (PL_uid == PL_euid) {                /* special case $< = $> */
+#ifdef PERL_DARWIN
+           /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
+           if (PL_uid != 0 && PerlProc_getuid() == 0)
+               (void)PerlProc_setuid(0);
+#endif
            (void)PerlProc_setuid(PL_uid);
-       else {
+       } else {
            PL_uid = PerlProc_getuid();
            Perl_croak(aTHX_ "setruid() not implemented");
        }