Now that ssh can't be setuid, remove the original_real_uid and
authordtucker <dtucker@openbsd.org>
Fri, 27 Jul 2018 05:34:42 +0000 (05:34 +0000)
committerdtucker <dtucker@openbsd.org>
Fri, 27 Jul 2018 05:34:42 +0000 (05:34 +0000)
original_effective_uid globals and replace with calls to plain getuid().
ok djm@

usr.bin/ssh/readconf.c
usr.bin/ssh/ssh-keysign.c
usr.bin/ssh/ssh.c
usr.bin/ssh/sshconnect.c

index bfe60f2..8115da3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: readconf.c,v 1.295 2018/07/27 05:13:02 dtucker Exp $ */
+/* $OpenBSD: readconf.c,v 1.296 2018/07/27 05:34:42 dtucker Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -305,7 +305,6 @@ void
 add_local_forward(Options *options, const struct Forward *newfwd)
 {
        struct Forward *fwd;
-       extern uid_t original_real_uid;
        int i;
 
        /* Don't add duplicates */
@@ -465,7 +464,6 @@ execute_in_shell(const char *cmd)
        char *shell;
        pid_t pid;
        int devnull, status;
-       extern uid_t original_real_uid;
 
        if ((shell = getenv("SHELL")) == NULL)
                shell = _PATH_BSHELL;
index 38cb080..f332264 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keysign.c,v 1.54 2018/02/23 15:58:38 markus Exp $ */
+/* $OpenBSD: ssh-keysign.c,v 1.55 2018/07/27 05:34:42 dtucker Exp $ */
 /*
  * Copyright (c) 2002 Markus Friedl.  All rights reserved.
  *
@@ -54,9 +54,6 @@
 
 extern char *__progname;
 
-/* XXX readconf.c needs these */
-uid_t original_real_uid;
-
 static int
 valid_request(struct passwd *pw, char *host, struct sshkey **ret,
     u_char *data, size_t datalen)
@@ -188,8 +185,7 @@ main(int argc, char **argv)
        key_fd[i++] = open(_PATH_HOST_XMSS_KEY_FILE, O_RDONLY);
        key_fd[i++] = open(_PATH_HOST_RSA_KEY_FILE, O_RDONLY);
 
-       original_real_uid = getuid();   /* XXX readconf.c needs this */
-       if ((pw = getpwuid(original_real_uid)) == NULL)
+       if ((pw = getpwuid(getuid())) == NULL)
                fatal("getpwuid failed");
        pw = pwcopy(pw);
 
index 96a68b4..2f0bf28 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh.c,v 1.489 2018/07/25 13:10:56 beck Exp $ */
+/* $OpenBSD: ssh.c,v 1.490 2018/07/27 05:34:42 dtucker Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -161,10 +161,6 @@ struct sockaddr_storage hostaddr;
 /* Private host keys. */
 Sensitive sensitive_data;
 
-/* Original real UID. */
-uid_t original_real_uid;
-uid_t original_effective_uid;
-
 /* command to be executed */
 struct sshbuf *command;
 
@@ -207,7 +203,7 @@ tilde_expand_paths(char **paths, u_int num_paths)
        char *cp;
 
        for (i = 0; i < num_paths; i++) {
-               cp = tilde_expand_filename(paths[i], original_real_uid);
+               cp = tilde_expand_filename(paths[i], getuid());
                free(paths[i]);
                paths[i] = cp;
        }
@@ -591,22 +587,15 @@ main(int ac, char **av)
         */
        closefrom(STDERR_FILENO + 1);
 
-       /*
-        * Save the original real uid.  It will be needed later (uid-swapping
-        * may clobber the real uid).
-        */
-       original_real_uid = getuid();
-       original_effective_uid = geteuid();
-
        if (getuid() != geteuid())
                fatal("ssh setuid not supported.");
        if (getgid() != getegid())
                fatal("ssh setgid not supported.");
 
        /* Get user data. */
-       pw = getpwuid(original_real_uid);
+       pw = getpwuid(getuid());
        if (!pw) {
-               logit("No user exists for uid %lu", (u_long)original_real_uid);
+               logit("No user exists for uid %lu", (u_long)getuid());
                exit(255);
        }
        /* Take a copy of the returned structure. */
@@ -749,7 +738,7 @@ main(int ac, char **av)
                        options.gss_deleg_creds = 1;
                        break;
                case 'i':
-                       p = tilde_expand_filename(optarg, original_real_uid);
+                       p = tilde_expand_filename(optarg, getuid());
                        if (stat(p, &st) < 0)
                                fprintf(stderr, "Warning: Identity file %s "
                                    "not accessible: %s.\n", p,
@@ -1295,8 +1284,7 @@ main(int ac, char **av)
        }
 
        if (options.control_path != NULL) {
-               cp = tilde_expand_filename(options.control_path,
-                   original_real_uid);
+               cp = tilde_expand_filename(options.control_path, getuid());
                free(options.control_path);
                options.control_path = percent_expand(cp,
                    "C", conn_hash_hex,
@@ -1418,7 +1406,7 @@ main(int ac, char **av)
                        unsetenv(SSH_AUTHSOCKET_ENV_NAME);
                } else {
                        p = tilde_expand_filename(options.identity_agent,
-                           original_real_uid);
+                           getuid());
                        cp = percent_expand(p,
                            "d", pw->pw_dir,
                            "h", host,
@@ -1986,8 +1974,7 @@ load_public_identity_files(struct passwd *pw)
                        options.identity_files[i] = NULL;
                        continue;
                }
-               cp = tilde_expand_filename(options.identity_files[i],
-                   original_real_uid);
+               cp = tilde_expand_filename(options.identity_files[i], getuid());
                filename = percent_expand(cp, "d", pw->pw_dir,
                    "u", pw->pw_name, "l", thishost, "h", host,
                    "r", options.user, (char *)NULL);
@@ -2038,7 +2025,7 @@ load_public_identity_files(struct passwd *pw)
                fatal("%s: too many certificates", __func__);
        for (i = 0; i < options.num_certificate_files; i++) {
                cp = tilde_expand_filename(options.certificate_files[i],
-                   original_real_uid);
+                   getuid());
                filename = percent_expand(cp,
                    "d", pw->pw_dir,
                    "h", host,
index deac097..359264e 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect.c,v 1.303 2018/07/19 23:03:16 dtucker Exp $ */
+/* $OpenBSD: sshconnect.c,v 1.304 2018/07/27 05:34:42 dtucker Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -67,8 +67,6 @@ static pid_t proxy_command_pid = 0;
 /* import */
 extern Options options;
 extern char *__progname;
-extern uid_t original_real_uid;
-extern uid_t original_effective_uid;
 
 static int show_other_keys(struct hostkeys *, struct sshkey *);
 static void warn_changed_key(struct sshkey *);