Use seteuid() (if available) when using setuid().
authorWayne Davison <wayned@samba.org>
Sun, 13 Dec 2009 00:43:13 +0000 (16:43 -0800)
committerWayne Davison <wayned@samba.org>
Sun, 13 Dec 2009 01:26:05 +0000 (17:26 -0800)
clientserver.c
configure.in

index c8d2a0e..ef55967 100644 (file)
@@ -722,7 +722,11 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
                }
 #endif
 
-               if (setuid(uid)) {
+               if (setuid(uid) < 0
+#ifdef HAVE_SETEUID
+                || seteuid(uid) < 0
+#endif
+               ) {
                        rsyserr(FLOG, errno, "setuid %d failed", (int)uid);
                        io_printf(f_out, "@ERROR: setuid failed\n");
                        return -1;
index ee0c0a6..f0f8ab1 100644 (file)
@@ -570,7 +570,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \
     memmove lchown vsnprintf snprintf vasprintf asprintf setsid strpbrk \
     strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \
     setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \
-    strerror putenv iconv_open locale_charset nl_langinfo getxattr \
+    seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \
     extattr_get_link sigaction sigprocmask setattrlist)
 
 dnl cygwin iconv.h defines iconv_open as libiconv_open