Annotation of embedaddon/sudo/plugins/sudoers/getspwuid.c, revision 1.1
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>