aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5util
diff options
context:
space:
mode:
authorSam Hartman <hartmans@mit.edu>1996-05-19 18:56:50 +0000
committerSam Hartman <hartmans@mit.edu>1996-05-19 18:56:50 +0000
commit36dc00f03da4c6be53018ee7702c5752f63fad8a (patch)
treec223d37d3369ccb7493ec05d1979bd2f72c6993f /src/lib/krb5util
parenta4f427a49e7f7db88daff548ecef98825361915c (diff)
downloadkrb5-36dc00f03da4c6be53018ee7702c5752f63fad8a.zip
krb5-36dc00f03da4c6be53018ee7702c5752f63fad8a.tar.gz
krb5-36dc00f03da4c6be53018ee7702c5752f63fad8a.tar.bz2
As per mail describing the ksu problem, invent a krb5util
function to properly set the euid on all systems where it is possible. Ksu cannot be used without this function in a secure manner. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@8052 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5util')
-rw-r--r--src/lib/krb5util/.Sanitize2
-rw-r--r--src/lib/krb5util/ChangeLog7
-rw-r--r--src/lib/krb5util/Makefile.in4
-rw-r--r--src/lib/krb5util/configure.in2
-rw-r--r--src/lib/krb5util/seteuid.c53
5 files changed, 65 insertions, 3 deletions
diff --git a/src/lib/krb5util/.Sanitize b/src/lib/krb5util/.Sanitize
index 576c5e2..03489e4 100644
--- a/src/lib/krb5util/.Sanitize
+++ b/src/lib/krb5util/.Sanitize
@@ -29,7 +29,7 @@ Makefile.in
configure
configure.in
compat_recv.c
-
+seteuid.c
Things-to-lose:
Do-last:
diff --git a/src/lib/krb5util/ChangeLog b/src/lib/krb5util/ChangeLog
new file mode 100644
index 0000000..cf7a469
--- /dev/null
+++ b/src/lib/krb5util/ChangeLog
@@ -0,0 +1,7 @@
+Sat May 18 04:41:55 1996 Sam Hartman <hartmans@tertius.mit.edu>
+
+ * configure.in: Check for functions needed to seteuid.
+
+ * seteuid.c (krb5_seteuid): New function to allow UID to be
+ changed and returned to later.
+
diff --git a/src/lib/krb5util/Makefile.in b/src/lib/krb5util/Makefile.in
index 02039d2..b25298a 100644
--- a/src/lib/krb5util/Makefile.in
+++ b/src/lib/krb5util/Makefile.in
@@ -6,9 +6,9 @@ CFLAGS = $(CCOPTS) $(DEFS)
.c.o:
$(CC) $(CFLAGS) -c $(srcdir)/$*.c
-OBJS= compat_recv.$(OBJEXT)
+OBJS= compat_recv.$(OBJEXT) seteuid.$(OBJEXT)
-SRCS= $(srcdir)/compat_recv
+SRCS= $(srcdir)/compat_recv.c $(srcdir)/seteuid.c
LIB_SUBDIRS= .
LIBDONE= DONE
diff --git a/src/lib/krb5util/configure.in b/src/lib/krb5util/configure.in
index 71d15a2..7bcfa48 100644
--- a/src/lib/krb5util/configure.in
+++ b/src/lib/krb5util/configure.in
@@ -4,6 +4,8 @@ AC_PROG_ARCHIVE
AC_PROG_ARCHIVE_ADD
AC_PROG_RANLIB
AC_PROG_INSTALL
+AC_CHECK_HEADERS(unistd.h stdlib.h)
+AC_CHECK_FUNCS(seteuid setresuid setreuid)
LinkFileDir(../libkrb5util.a, libkrb5util.a, ./krb5util)
AppendRule([all-unix:: ../libkrb5util.a])
dnl AppendRule([all:: all-$(WHAT)])
diff --git a/src/lib/krb5util/seteuid.c b/src/lib/krb5util/seteuid.c
new file mode 100644
index 0000000..11f43f3
--- /dev/null
+++ b/src/lib/krb5util/seteuid.c
@@ -0,0 +1,53 @@
+/*
+ * krb5_seteuid: Attempt to set the effective user ID of the current process
+ * in such a way it can be restored lated.
+ *
+ * Copyright 1996 by the Massachusetts Institute of Technology.
+ *
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby
+ * granted, provided that the above copyright notice appear in all
+ * copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * M.I.T. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. M.I.T. makes no representations about the suitability
+ * of this software for any purpose. It is provided "as is" without
+ * express or implied warranty.
+ *
+ */
+
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <errno.h>
+
+int krb5_seteuid( euid)
+ uid_t euid;
+{
+ #if defined(_POSIX_SAVED_IDS) && defined(HAVE_SETEUID)
+ return (seteuid(euid)) ;
+#else
+# if defined(HAVE_SETRESUID)
+ return (setresuid(getuid(), euid, getuid())) ;
+# else
+# if defined(HAVE_SETREUID)
+ return setreuid(geteuid(), euid);
+#else /*HAVE_SETREUID*/
+ /* You need to add a case to deal with this operating system.*/
+ errno = EPERM;
+ return -1;
+
+# endif /* HAVE_SETREUID */
+# endif /* HAVE_SETRESUID */
+#endif /* _POSIX_SAVED_IDS */
+
+
+}