Don't try to play uid swapping games if the effective uid is not zero
authorTheodore Tso <tytso@mit.edu>
Wed, 3 May 1995 02:57:02 +0000 (02:57 +0000)
committerTheodore Tso <tytso@mit.edu>
Wed, 3 May 1995 02:57:02 +0000 (02:57 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5697 dc483132-0cff-0310-8789-dd5450dbe970

src/appl/bsd/ChangeLog
src/appl/bsd/krcp.c

index 476966c1e301f1caed75c255743b24aa8b221e12..255c3af2f8f46258778b3a56705df7ac34bf4fb5 100644 (file)
@@ -1,6 +1,9 @@
 Tue May  2 22:12:39 1995  Theodore Y. Ts'o  (tytso@dcl)
 
-       * kcmd.c (kcmd()): Bug fix to jik's bug fix.  (Caused by our code
+       * krcp.c (main): Don't try to play uid swapping games if the
+               effective uid is not zero.
+
+       * kcmd.c (kcmd): Bug fix to jik's bug fix.  (Caused by our code
                drift since jik's changes went in, and not sufficiently
                careful checking of jik's patches before applying it.)
 
index 7aa446530c6707b425c1a0be174e71b53828a8a0..ef0da90839ef906fb23b2df77e4cdf62471e7904 100644 (file)
@@ -144,6 +144,7 @@ main(argc, argv)
 #ifdef KERBEROS
     krb5_flags authopts;
     krb5_error_code status;    
+    int euid;
     char **orig_argv = save_argv(argc, argv);
     
     sp = getservbyname("kshell", "tcp");
@@ -469,18 +470,25 @@ main(argc, argv)
                    if (encryptflag)
                      send_auth();
                }
+               euid = geteuid();
 #ifdef HAVE_SETREUID
-               (void) setreuid(0, userid);
+               if (euid == 0)
+                   (void) setreuid(0, userid);
                sink(1, argv+argc-1);
-               (void) setreuid(userid, 0);
+               if (euid == 0)
+                   (void) setreuid(userid, 0);
 #else
-               (void) setuid(0);
-               if(seteuid(userid)) {
-                 perror("rcp seteuid user"); errs++; exit(errs);
+               if (euid == 0) {
+                   (void) setuid(0);
+                   if(seteuid(userid)) {
+                       perror("rcp seteuid user"); errs++; exit(errs);
+                   }
                }
                sink(1, argv+argc-1);
-               if(seteuid(0)) {
-                 perror("rcp seteuid 0"); errs++; exit(errs);
+               if (euid == 0) {
+                   if(seteuid(0)) {
+                       perror("rcp seteuid 0"); errs++; exit(errs);
+                   }
                }
 #endif
 #else