xcrypt.c revision 128456
1/* 2 * Copyright (c) 2003 Ben Lindstrom. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25#include "includes.h" 26 27# ifdef HAVE_CRYPT_H 28# include <crypt.h> 29# endif 30 31# ifdef __hpux 32# include <hpsecurity.h> 33# include <prot.h> 34# endif 35 36# ifdef HAVE_SECUREWARE 37# include <sys/security.h> 38# include <sys/audit.h> 39# include <prot.h> 40# endif 41 42# if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 43# include <shadow.h> 44# endif 45 46# if defined(HAVE_GETPWANAM) && !defined(DISABLE_SHADOW) 47# include <sys/label.h> 48# include <sys/audit.h> 49# include <pwdadj.h> 50# endif 51 52# if defined(HAVE_MD5_PASSWORDS) && !defined(HAVE_MD5_CRYPT) 53# include "md5crypt.h" 54# endif 55 56char * 57xcrypt(const char *password, const char *salt) 58{ 59 char *crypted; 60 61# ifdef HAVE_MD5_PASSWORDS 62 if (is_md5_salt(salt)) 63 crypted = md5_crypt(password, salt); 64 else 65 crypted = crypt(password, salt); 66# elif defined(__hpux) && !defined(HAVE_SECUREWARE) 67 if (iscomsec()) 68 crypted = bigcrypt(password, salt); 69 else 70 crypted = crypt(password, salt); 71# elif defined(HAVE_SECUREWARE) 72 crypted = bigcrypt(password, salt); 73# else 74 crypted = crypt(password, salt); 75# endif 76 77 return crypted; 78} 79 80/* 81 * Handle shadowed password systems in a cleaner way for portable 82 * version. 83 */ 84 85char * 86shadow_pw(struct passwd *pw) 87{ 88 char *pw_password = pw->pw_passwd; 89 90# if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 91 struct spwd *spw = getspnam(pw->pw_name); 92 93 if (spw != NULL) 94 pw_password = spw->sp_pwdp; 95# endif 96# if defined(HAVE_GETPWANAM) && !defined(DISABLE_SHADOW) 97 struct passwd_adjunct *spw; 98 if (issecure() && (spw = getpwanam(pw->pw_name)) != NULL) 99 pw_password = spw->pwa_passwd; 100# elif defined(HAVE_SECUREWARE) 101 struct pr_passwd *spw = getprpwnam(pw->pw_name); 102 103 if (spw != NULL) 104 pw_password = spw->ufld.fd_encrypt; 105# endif 106 107 return pw_password; 108} 109