]> granicus.if.org Git - sudo/commitdiff
now uses user_pw_ent and simple macros to get at the contents
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 24 Nov 1995 02:27:27 +0000 (02:27 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 24 Nov 1995 02:27:27 +0000 (02:27 +0000)
check.c
logging.c
parse.yacc
sudo.c
sudo.h
testsudoers.c
visudo.c

diff --git a/check.c b/check.c
index 1d4f6bc69385450ddf062e5484e4c62d69c397dd..8c4dab51e90448f584d4f0204d43c7403808930c 100644 (file)
--- a/check.c
+++ b/check.c
@@ -139,7 +139,7 @@ void check_user()
     oldmask = umask(077);      /* make sure the timestamp files are private */
 
     rtn = check_timestamp();
-    if (rtn && sudo_pw_ent->pw_uid) {  /* if timestamp is not current... */
+    if (rtn && user_uid) {     /* if timestamp is not current... */
        if (rtn == 2)
            reminder();         /* do the reminder if ticket file is new */
        check_passwd();
@@ -172,7 +172,7 @@ int user_is_exempt()
        return(TRUE);
 
     for (gr_mem = grp->gr_mem; *gr_mem; gr_mem++) {
-       if (strcmp(sudo_pw_ent->pw_name, *gr_mem) == 0)
+       if (strcmp(user_name, *gr_mem) == 0)
            return(TRUE);
     }
 
@@ -205,11 +205,9 @@ static int check_timestamp()
     else
        p = tty;
 
-    (void) sprintf(timestampfile, "%s/%s.%s", _PATH_SUDO_TIMEDIR,
-                  sudo_pw_ent->pw_name, p);
+    (void) sprintf(timestampfile, "%s/%s.%s", _PATH_SUDO_TIMEDIR, user_name, p);
 #else
-    (void) sprintf(timestampfile, "%s/%s", _PATH_SUDO_TIMEDIR,
-                  sudo_pw_ent->pw_name);
+    (void) sprintf(timestampfile, "%s/%s", _PATH_SUDO_TIMEDIR, user_name);
 #endif /* USE_TTY_TICKETS */
 
     timedir_is_good = 1;       /* now there's an assumption for ya... */
@@ -364,11 +362,9 @@ void remove_timestamp()
     else
        p = tty;
 
-    (void) sprintf(timestampfile, "%s/%s.%s", _PATH_SUDO_TIMEDIR,
-                  sudo_pw_ent->pw_name, p);
+    (void) sprintf(timestampfile, "%s/%s.%s", _PATH_SUDO_TIMEDIR, user_name, p);
 #else
-    (void) sprintf(timestampfile, "%s/%s", _PATH_SUDO_TIMEDIR,
-                  sudo_pw_ent->pw_name);
+    (void) sprintf(timestampfile, "%s/%s", _PATH_SUDO_TIMEDIR, user_name);
 #endif /* USE_TTY_TICKETS */
 
     /* become root */
@@ -462,7 +458,7 @@ static void check_passwd()
     /* get a password from the user */
 #ifdef HAVE_SKEY
        set_perms(PERM_ROOT);
-       pass = skey_getpass(prompt, sudo_pw_ent, TRUE);
+       pass = skey_getpass(prompt, user_pw_ent, TRUE);
        set_perms(PERM_USER);
 #else
 #  ifdef USE_GETPASS
@@ -491,24 +487,21 @@ static void check_passwd()
         */
 #ifdef SHADOW_TYPE
 #  if (SHADOW_TYPE == SPW_ULTRIX4)
-       if (!strcmp(sudo_pw_ent->pw_passwd,
-           (char *) crypt16(pass, sudo_pw_ent->pw_passwd)))
+       if (!strcmp(user_passwd, (char *)crypt16(pass, user_passwd)))
            return;             /* if the passwd is correct return() */
 #  endif /* ULTRIX4 */
 #  if (SHADOW_TYPE == SPW_SECUREWARE) && !defined(__alpha)
-       strncpy(salt, sudo_pw_ent->pw_passwd, 2);
+       strncpy(salt, user_passwd, 2);
        i = AUTH_SALT_SIZE + AUTH_CIPHERTEXT_SEG_CHARS;
-       if (strncmp(sudo_pw_ent->pw_passwd, crypt(pass, salt), i) == 0)
+       if (strncmp(user_passwd, crypt(pass, salt), i) == 0)
            return;           /* if the passwd is correct return() */
 #  endif /* SECUREWARE && !__alpha */
 #  if (SHADOW_TYPE == SPW_SECUREWARE) && defined(__alpha)
        if (crypt_type == AUTH_CRYPT_BIGCRYPT) {
-           if (!strcmp(sudo_pw_ent->pw_passwd,
-               bigcrypt(pass, sudo_pw_ent->pw_passwd)))
+           if (!strcmp(user_passwd, bigcrypt(pass, user_passwd)))
                return;             /* if the passwd is correct return() */
        } else if (crypt_type == AUTH_CRYPT_CRYPT16) {
-           if (!strcmp(sudo_pw_ent->pw_passwd,
-               crypt16(pass, sudo_pw_ent->pw_passwd)))
+           if (!strcmp(user_passwd, crypt16(pass, user_passwd)))
                return;             /* if the passwd is correct return() */
        } else {
            (void) fprintf(stderr,
@@ -521,26 +514,25 @@ static void check_passwd()
 
 #ifdef HAVE_SKEY
        set_perms(PERM_ROOT);
-       if (!strcmp(sudo_pw_ent->pw_passwd,
-           skey_crypt(pass, sudo_pw_ent->pw_passwd, sudo_pw_ent, TRUE))) {
+       if (!strcmp(user_passwd,
+           skey_crypt(pass, user_passwd, user_pw_ent, TRUE))) {
            set_perms(PERM_USER);
            return;             /* if the passwd is correct return() */
        }
        set_perms(PERM_USER);
 #else
-       if (!strcmp(sudo_pw_ent->pw_passwd,
-           (char *) crypt(pass, sudo_pw_ent->pw_passwd)))
+       if (!strcmp(user_passwd, (char *) crypt(pass, user_passwd)))
            return;             /* if the passwd is correct return() */
 #endif /* HAVE_SKEY */
 
 #ifdef HAVE_KERB4
-       if (sudo_pw_ent->pw_uid && sudo_krb_validate_user(sudo_pw_ent, pass) == 0)
+       if (user_uid && sudo_krb_validate_user(user_pw_ent, pass) == 0)
            return;
 #endif /* HAVE_KERB4 */
 
 #ifdef HAVE_AFS
        code = ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION+KA_USERAUTH_DOSETPAG,
-                                          sudo_pw_ent->pw_name,
+                                          user_name,
                                           (char *) 0, 
                                           (char *) 0,
                                           pass,
@@ -553,7 +545,7 @@ static void check_passwd()
 #endif /* HAVE_AFS */
 #ifdef HAVE_DCE
        /* XXX - this seems wrong... */
-       if (dce_pwent(sudo_pw_ent->pw_name, pass))
+       if (dce_pwent(user_name, pass))
            return;
 #endif /* HAVE_DCE */
 
index 82c6c156461b9add63ccb7467786f5369351c9af..6f712a717955c585eaf5937ecaba2998cbc569af 100644 (file)
--- a/logging.c
+++ b/logging.c
@@ -159,8 +159,7 @@ void log_error(code)
      * necesary for mail and file logs.
      */
     now = time((time_t) 0);
-    (void) sprintf(logline, "%19.19s : %8.8s : ", ctime(&now),
-                  sudo_pw_ent->pw_name);
+    (void) sprintf(logline, "%19.19s : %8.8s : ", ctime(&now), user_name);
 
     /*
      * we need a pointer to the end of logline (XXX - use a #define not 33)
@@ -194,7 +193,7 @@ void log_error(code)
        case GLOBAL_NO_PW_ENT:
            (void) sprintf(p,
                "There is no passwd entry for uid %ld (TTY=%s).  ",
-               (long) sudo_pw_ent->pw_uid, tty);
+               (long) user_uid, tty);
            break;
 
        case PASSWORD_NOT_CORRECT:
@@ -319,10 +318,9 @@ void log_error(code)
            *tmp = '\0';
 
            if (count == 0)
-               syslog(pri, "%8.8s : %s", sudo_pw_ent->pw_name, p);
+               syslog(pri, "%8.8s : %s", user_name, p);
            else
-               syslog(pri, "%8.8s : (command continued) %s",
-                      sudo_pw_ent->pw_name, p);
+               syslog(pri, "%8.8s : (command continued) %s", user_name, p);
 
            *tmp = save;                        /* restore saved character */
 
@@ -331,10 +329,9 @@ void log_error(code)
                ;
        } else {
            if (count == 0)
-               syslog(pri, "%8.8s : %s", sudo_pw_ent->pw_name, p);
+               syslog(pri, "%8.8s : %s", user_name, p);
            else
-               syslog(pri, "%8.8s : (command continued) %s",
-                      sudo_pw_ent->pw_name, p);
+               syslog(pri, "%8.8s : (command continued) %s", user_name, p);
        }
     }
     closelog();
@@ -540,18 +537,18 @@ void inform_user(code)
        case VALIDATE_NO_USER:
            (void) fprintf(stderr,
                "%s is not in the sudoers file.  This incident will be reported.\n\n",
-               sudo_pw_ent->pw_name);
+               user_name);
            break;
 
        case VALIDATE_NOT_OK:
            if (cmnd_args)
                (void) fprintf(stderr,
                    "Sorry, user %s is not allowed to execute \"%s %s\" on %s.\n\n",
-                   sudo_pw_ent->pw_name, cmnd, cmnd_args, host);
+                   user_name, cmnd, cmnd_args, host);
            else
                (void) fprintf(stderr,
                    "Sorry, user %s is not allowed to execute \"%s\" on %s.\n\n",
-                   sudo_pw_ent->pw_name, cmnd, host);
+                   user_name, cmnd, host);
            break;
 
        case VALIDATE_ERROR:
index d35d4e01d9014f9d6e0627df6792fe0c6866deea..bf1c16125454d52de9b0ebaa119f22b5c8cc5b2f 100644 (file)
@@ -329,13 +329,13 @@ userlist  :       user
                ;
 
 user           :       NAME {
-                           if (strcmp($1, sudo_pw_ent->pw_name) == 0)
+                           if (strcmp($1, user_name) == 0)
                                user_matches = TRUE;
                            (void) free($1);
                            $1 = NULL; /* XXX */
                        }
                |       NETGROUP {
-                           if (netgr_matches($1, NULL, sudo_pw_ent->pw_name))
+                           if (netgr_matches($1, NULL, user_name))
                                user_matches = TRUE;
                            (void) free($1);
                            $1 = NULL; /* XXX */
diff --git a/sudo.c b/sudo.c
index 9169b45b28a707187f7221c023df08ed303f8006..432bca87beb37987c9cbbe7309508176489990f9 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -129,7 +129,7 @@ extern int user_is_exempt   __P((void));
  */
 int Argc;
 char **Argv;
-struct passwd *sudo_pw_ent;
+struct passwd *user_pw_ent;
 char *cmnd = NULL;
 char *cmnd_args = NULL;
 char *tty = NULL;
@@ -310,9 +310,9 @@ int main(argc, argv)
                    }
 
                    /* replace "-s" with the shell's name */
-                   if ((NewArgv[0] = strrchr(sudo_pw_ent->pw_shell, '/') + 1)
+                   if ((NewArgv[0] = strrchr(user_shell, '/') + 1)
                        == (char *) 1)
-                       NewArgv[0] = sudo_pw_ent->pw_shell;
+                       NewArgv[0] = user_shell;
 
                    for (i = 1; i < Argc; i++)
                        NewArgv[i] = Argv[i];
@@ -349,7 +349,7 @@ int main(argc, argv)
  *  load_globals()
  *
  *  This function primes these important global variables:
- *  sudo_pw_ent, host, cwd, interfaces.
+ *  user_pw_ent, host, cwd, interfaces.
  */
 
 static void load_globals(sudo_mode)
@@ -366,11 +366,11 @@ static void load_globals(sudo_mode)
      * if necesary.  It is assumed that euid is 0 at this point so we
      * can read the shadow passwd file if necesary.
      */
-    sudo_pw_ent = sudo_getpwuid(getuid());
+    user_pw_ent = sudo_getpwuid(getuid());
     set_perms(PERM_ROOT);
     set_perms(PERM_USER);
-    if (sudo_pw_ent == NULL) {
-       /* need to make a fake sudo_pw_ent */
+    if (user_pw_ent == NULL) {
+       /* need to make a fake user_pw_ent */
        struct passwd pw_ent;
        char pw_name[MAX_UID_T_LEN+1];
 
@@ -378,7 +378,7 @@ static void load_globals(sudo_mode)
        pw_ent.pw_uid = getuid();
        (void) sprintf(pw_name, "%ld", pw_ent.pw_uid);
        pw_ent.pw_name = pw_name;
-       sudo_pw_ent = &pw_ent;
+       user_pw_ent = &pw_ent;
 
        /* complain, log, and die */
        log_error(GLOBAL_NO_PW_ENT);
@@ -409,7 +409,7 @@ static void load_globals(sudo_mode)
 #endif /* UMASK */
 
 #ifdef NO_ROOT_SUDO
-    if (sudo_pw_ent -> pw_uid == 0) {
+    if (user_uid == 0) {
        (void) fprintf(stderr,
                       "You are already root, you don't need to use sudo.\n");
        exit(1);
@@ -603,14 +603,14 @@ static void add_env()
     }
 
     /* add the SUDO_USER envariable */
-    if (sudo_setenv("SUDO_USER", sudo_pw_ent -> pw_name)) {
+    if (sudo_setenv("SUDO_USER", user_name)) {
        perror("malloc");
        (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
        exit(1);
     }
 
     /* add the SUDO_UID envariable */
-    (void) sprintf(idstr, "%ld", (long) sudo_pw_ent -> pw_uid);
+    (void) sprintf(idstr, "%ld", (long) user_uid);
     if (sudo_setenv("SUDO_UID", idstr)) {
        perror("malloc");
        (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
@@ -645,8 +645,8 @@ static void load_cmnd(sudo_mode)
 
     /* If we are running a shell command args start at position 1 */
     if ((sudo_mode & MODE_SHELL)) {
-       if (sudo_pw_ent->pw_shell && *sudo_pw_ent->pw_shell) {
-           old_cmnd = sudo_pw_ent->pw_shell;
+       if (user_shell && *user_shell) {
+           old_cmnd = user_shell;
            arg_start = 1;
        } else {
            (void) fprintf(stderr, "%s: Unable to determine shell.", Argv[0]);
@@ -794,8 +794,8 @@ void set_perms(perm)
                                break;
 
        case        PERM_USER : 
-                               if (seteuid(sudo_pw_ent -> pw_uid)) {
-                                   perror("seteuid(sudo_pw_ent -> pw_uid)");
+                               if (seteuid(user_uid)) {
+                                   perror("seteuid(user_uid)");
                                    exit(1); 
                                }
                                break;
@@ -806,7 +806,7 @@ void set_perms(perm)
                                    exit(1);
                                }
 
-                               if (setuid(sudo_pw_ent -> pw_uid)) {
+                               if (setuid(user_uid)) {
                                    perror("setuid(uid)");
                                    exit(1);
                                }
diff --git a/sudo.h b/sudo.h
index 40e62d5a074577fe83187ae8c08f9806c61d04e5..556acfef15b91480fa61e67c920b5751eb88b074 100644 (file)
--- a/sudo.h
+++ b/sudo.h
@@ -131,6 +131,16 @@ extern int top;
 #define PERM_FULL_USER           0x03
 #define PERM_SUDOERS             0x04
 
+/*
+ * Shortcuts for user_pw_ent
+ */
+#define user_name              (user_pw_ent -> pw_name)
+#define user_passwd            (user_pw_ent -> pw_passwd)
+#define user_uid               (user_pw_ent -> pw_uid)
+#define user_gid               (user_pw_ent -> pw_gid)
+#define user_shell             (user_pw_ent -> pw_shell)
+#define user_dir               (user_pw_ent -> pw_dir)
+
 /*
  * Prototypes
  */
@@ -170,7 +180,7 @@ extern char host[];
 extern char cwd[];
 extern struct interface *interfaces;
 extern int num_interfaces;
-extern struct passwd *sudo_pw_ent;
+extern struct passwd *user_pw_ent;
 extern char *tty;
 extern char *cmnd;
 extern char *cmnd_args;
index 1d9d254226c38cd581ba852b9bdb63b6d27c4d84..f5fb5b8f8b146275baac8aa55886cc3350d47706 100644 (file)
@@ -66,7 +66,7 @@ char *cmnd = NULL;
 char *cmnd_args = NULL;
 char host[MAXHOSTNAMELEN+1];
 char cwd[MAXPATHLEN+1];
-struct passwd *sudo_pw_ent;
+struct passwd *user_pw_ent;
 char **Argv;
 int  Argc;
 uid_t uid;
@@ -198,7 +198,7 @@ main(argc, argv)
     Argv = argv;
     Argc = argc;
 
-    sudo_pw_ent = &pw_ent;             /* need sudo_pw_ent->pw_name defined */
+    user_pw_ent = &pw_ent;             /* need user_pw_ent->pw_name defined */
 
     cmnd = argv[1];
     pw_ent.pw_name = argv[2];
index ab7d58329954ab266aee8eb85c76880d7fbf2b8b..371b1e104abe2759e407f7253ca0bc1f9594955e 100644 (file)
--- a/visudo.c
+++ b/visudo.c
@@ -108,7 +108,7 @@ int parse_error = FALSE;
  */
 char host[] = "";
 char *cmnd = "";
-struct passwd *sudo_pw_ent;
+struct passwd *user_pw_ent;
 
 
 /********************************************************************
@@ -170,8 +170,8 @@ int main(argc, argv)
        exit(1);
     }
 
-    /* sudo_pw_ent needs to be defined to _something_, this will do */
-    sudo_pw_ent = pwd;
+    /* user_pw_ent needs to be defined to _something_, this will do */
+    user_pw_ent = pwd;
 
     /*
      * Copy sudoers file to stmp