Return to getspwuid.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers |
1.1 ! misho 1: /* ! 2: * Copyright (c) 1996, 1998-2005, 2010 ! 3: * Todd C. Miller <Todd.Miller@courtesan.com> ! 4: * ! 5: * Permission to use, copy, modify, and distribute this software for any ! 6: * purpose with or without fee is hereby granted, provided that the above ! 7: * copyright notice and this permission notice appear in all copies. ! 8: * ! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ! 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ! 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ! 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ! 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! 16: * ! 17: * Sponsored in part by the Defense Advanced Research Projects ! 18: * Agency (DARPA) and Air Force Research Laboratory, Air Force ! 19: * Materiel Command, USAF, under agreement number F39502-99-1-0512. ! 20: */ ! 21: ! 22: #include <config.h> ! 23: ! 24: #include <sys/types.h> ! 25: #include <sys/stat.h> ! 26: #include <sys/param.h> ! 27: #include <stdio.h> ! 28: #ifdef STDC_HEADERS ! 29: # include <stdlib.h> ! 30: # include <stddef.h> ! 31: #else ! 32: # ifdef HAVE_STDLIB_H ! 33: # include <stdlib.h> ! 34: # endif ! 35: #endif /* STDC_HEADERS */ ! 36: #ifdef HAVE_STRING_H ! 37: # include <string.h> ! 38: #endif /* HAVE_STRING_H */ ! 39: #ifdef HAVE_STRINGS_H ! 40: # include <strings.h> ! 41: #endif /* HAVE_STRINGS_H */ ! 42: #ifdef HAVE_UNISTD_H ! 43: # include <unistd.h> ! 44: #endif /* HAVE_UNISTD_H */ ! 45: #include <pwd.h> ! 46: #include <grp.h> ! 47: #ifdef HAVE_GETSPNAM ! 48: # include <shadow.h> ! 49: #endif /* HAVE_GETSPNAM */ ! 50: #ifdef HAVE_GETPRPWNAM ! 51: # ifdef __hpux ! 52: # undef MAXINT ! 53: # include <hpsecurity.h> ! 54: # else ! 55: # include <sys/security.h> ! 56: # endif /* __hpux */ ! 57: # include <prot.h> ! 58: #endif /* HAVE_GETPRPWNAM */ ! 59: #ifdef HAVE_GETPWANAM ! 60: # include <sys/label.h> ! 61: # include <sys/audit.h> ! 62: # include <pwdadj.h> ! 63: #endif /* HAVE_GETPWANAM */ ! 64: #ifdef HAVE_GETAUTHUID ! 65: # include <auth.h> ! 66: #endif /* HAVE_GETAUTHUID */ ! 67: ! 68: #include "sudoers.h" ! 69: ! 70: /* ! 71: * Exported for auth/secureware.c ! 72: */ ! 73: #if defined(HAVE_GETPRPWNAM) && defined(__alpha) ! 74: int crypt_type = INT_MAX; ! 75: #endif /* HAVE_GETPRPWNAM && __alpha */ ! 76: ! 77: /* ! 78: * Return a copy of the encrypted password for the user described by pw. ! 79: * If shadow passwords are in use, look in the shadow file. ! 80: */ ! 81: char * ! 82: sudo_getepw(const struct passwd *pw) ! 83: { ! 84: char *epw = NULL; ! 85: ! 86: /* If there is a function to check for shadow enabled, use it... */ ! 87: #ifdef HAVE_ISCOMSEC ! 88: if (!iscomsec()) ! 89: goto done; ! 90: #endif /* HAVE_ISCOMSEC */ ! 91: #ifdef HAVE_ISSECURE ! 92: if (!issecure()) ! 93: goto done; ! 94: #endif /* HAVE_ISSECURE */ ! 95: ! 96: #ifdef HAVE_GETPRPWNAM ! 97: { ! 98: struct pr_passwd *spw; ! 99: ! 100: if ((spw = getprpwnam(pw->pw_name)) && spw->ufld.fd_encrypt) { ! 101: # ifdef __alpha ! 102: crypt_type = spw->ufld.fd_oldcrypt; ! 103: # endif /* __alpha */ ! 104: epw = spw->ufld.fd_encrypt; ! 105: } ! 106: } ! 107: #endif /* HAVE_GETPRPWNAM */ ! 108: #ifdef HAVE_GETSPNAM ! 109: { ! 110: struct spwd *spw; ! 111: ! 112: if ((spw = getspnam(pw->pw_name)) && spw->sp_pwdp) ! 113: epw = spw->sp_pwdp; ! 114: } ! 115: #endif /* HAVE_GETSPNAM */ ! 116: #ifdef HAVE_GETSPWUID ! 117: { ! 118: struct s_passwd *spw; ! 119: ! 120: if ((spw = getspwuid(pw->pw_uid)) && spw->pw_passwd) ! 121: epw = spw->pw_passwd; ! 122: } ! 123: #endif /* HAVE_GETSPWUID */ ! 124: #ifdef HAVE_GETPWANAM ! 125: { ! 126: struct passwd_adjunct *spw; ! 127: ! 128: if ((spw = getpwanam(pw->pw_name)) && spw->pwa_passwd) ! 129: epw = spw->pwa_passwd; ! 130: } ! 131: #endif /* HAVE_GETPWANAM */ ! 132: #ifdef HAVE_GETAUTHUID ! 133: { ! 134: AUTHORIZATION *spw; ! 135: ! 136: if ((spw = getauthuid(pw->pw_uid)) && spw->a_password) ! 137: epw = spw->a_password; ! 138: } ! 139: #endif /* HAVE_GETAUTHUID */ ! 140: ! 141: #if defined(HAVE_ISCOMSEC) || defined(HAVE_ISSECURE) ! 142: done: ! 143: #endif ! 144: /* If no shadow password, fall back on regular password. */ ! 145: return estrdup(epw ? epw : pw->pw_passwd); ! 146: } ! 147: ! 148: void ! 149: sudo_setspent(void) ! 150: { ! 151: #ifdef HAVE_GETPRPWNAM ! 152: setprpwent(); ! 153: #endif ! 154: #ifdef HAVE_GETSPNAM ! 155: setspent(); ! 156: #endif ! 157: #ifdef HAVE_GETSPWUID ! 158: setspwent(); ! 159: #endif ! 160: #ifdef HAVE_GETPWANAM ! 161: setpwaent(); ! 162: #endif ! 163: #ifdef HAVE_GETAUTHUID ! 164: setauthent(); ! 165: #endif ! 166: } ! 167: ! 168: void ! 169: sudo_endspent(void) ! 170: { ! 171: #ifdef HAVE_GETPRPWNAM ! 172: endprpwent(); ! 173: #endif ! 174: #ifdef HAVE_GETSPNAM ! 175: endspent(); ! 176: #endif ! 177: #ifdef HAVE_GETSPWUID ! 178: endspwent(); ! 179: #endif ! 180: #ifdef HAVE_GETPWANAM ! 181: endpwaent(); ! 182: #endif ! 183: #ifdef HAVE_GETAUTHUID ! 184: endauthent(); ! 185: #endif ! 186: }