Patch for systems with no setreuid()

Jon Peatfield
2001-06-07T15:58:26Z

Sorry if I'm duplicating an existing patch, but...

On systems with no seteuid() that have setreuid() there is an
emulation, but if both are lacking (but we do have setresuid()),
nothing is done.  The following seems to be right, but I've only got
one machine (running an ancient version of HP-UX) which needs this so
it may not be general:

--cut-here--
--- config.h.in.orig	Thu Jun  7 14:18:57 2001
+++ config.h.in	Thu Jun  7 14:19:33 2001
@@ -503,6 +503,9 @@
 /* Define if you have the setreuid function.  */
 #undef HAVE_SETREUID

+/* Define if you have the setresuid function.  */
+#undef HAVE_SETRESUID
+
 /* Define if you have the setrlimit function.  */
 #undef HAVE_SETRLIMIT

--- configure.orig	Thu Jun  7 14:12:53 2001
+++ configure	Thu Jun  7 14:13:40 2001
@@ -3184,7 +3184,7 @@
 fi


-for ac_func in arc4random atexit b64_ntop bcopy bindresvport_sa clock fchown
fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist
getnameinfo getrlimit getrusage getttyent getusershell glob inet_aton inet_ntoa
inet_ntop innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty
realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle
setresgid setreuid setrlimit setsid sigaction sigvec snprintf strerror strlcat
strlcpy strmode strsep strtok_r sysconf tcgetpgrp utimes vsnprintf vhangup vis
waitpid _getpty __b64_ntop
+for ac_func in arc4random atexit b64_ntop bcopy bindresvport_sa clock fchown
fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist
getnameinfo getrlimit getrusage getttyent getusershell glob inet_aton inet_ntoa
inet_ntop innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty
realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle
setresgid setreuid setresuid setrlimit setsid sigaction sigvec snprintf strerror
strlcat strlcpy strmode strsep strtok_r sysconf tcgetpgrp utimes vsnprintf
vhangup vis waitpid _getpty __b64_ntop
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 echo "configure:3191: checking for $ac_func" >&5
--- configure.in.orig	Thu Jun  7 14:12:44 2001
+++ configure.in	Thu Jun  7 14:13:10 2001
@@ -447,7 +447,7 @@
 )

 dnl    Checks for library functions.
-AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock fchown
fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist
getnameinfo getrlimit getrusage getttyent getusershell glob inet_aton inet_ntoa
inet_ntop innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty
realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle
setresgid setreuid setrlimit setsid sigaction sigvec snprintf strerror strlcat
strlcpy strmode strsep strtok_r sysconf tcgetpgrp utimes vsnprintf vhangup vis
waitpid _getpty __b64_ntop)
+AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock fchown
fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist
getnameinfo getrlimit getrusage getttyent getusershell glob inet_aton inet_ntoa
inet_ntop innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty
realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle
setresgid setreuid setresuid setrlimit setsid sigaction sigvec snprintf strerror
strlcat strlcpy strmode strsep strtok_r sysconf tcgetpgrp utimes vsnprintf
vhangup vis waitpid _getpty __b64_ntop)
 dnl    Checks for time functions
 AC_CHECK_FUNCS(gettimeofday time)
 dnl    Checks for libutil functions
--- openbsd-compat/bsd-misc.c.orig	Thu Jun  7 14:07:58 2001
+++ openbsd-compat/bsd-misc.c	Thu Jun  7 14:26:12 2001
@@ -70,6 +70,20 @@
 }
 #endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */

+#if !defined(HAVE_SETEUID) && defined(HAVE_SETRESUID)
+int seteuid(uid_t euid)
+{
+	return(setresuid(-1,euid,-1));
+}
+#endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETRESUID) */
+
+#if !defined(HAVE_SETREUID) && defined(HAVE_SETRESUID)
+int setreuid(uid_t ruid, uid_t euid)
+{
+	return(setresuid(ruid,euid,-1));
+}
+#endif /* !defined(HAVE_SETREUID) && defined(HAVE_SETRESUID) */
+
 #if !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID)
 int setegid(uid_t egid)
 {
--cut-here--

Of course on this particular platform I need other patches (to turn
off HP-UX specific stuff which are missing (hpsecurity etc)), but the
above might be useful elsewhere...

--
Jon Peatfield,  DAMTP,  Computer Officer,   University of Cambridge
Telephone: +44 1223  3 37852    Mail: J.S.Peatfield at damtp.cam.ac.uk