xcrypt.c revision 124208
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#if !defined(HAVE_OSF_SIA) 28 29# ifdef HAVE_CRYPT_H 30# include <crypt.h> 31# endif 32 33# ifdef __hpux 34# include <hpsecurity.h> 35# include <prot.h> 36# endif 37 38# ifdef HAVE_SECUREWARE 39# include <sys/security.h> 40# include <sys/audit.h> 41# include <prot.h> 42# endif 43 44# if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 45# include <shadow.h> 46# endif 47 48# if defined(HAVE_GETPWANAM) && !defined(DISABLE_SHADOW) 49# include <sys/label.h> 50# include <sys/audit.h> 51# include <pwdadj.h> 52# endif 53 54# if defined(HAVE_MD5_PASSWORDS) && !defined(HAVE_MD5_CRYPT) 55# include "md5crypt.h" 56# endif 57 58char * 59xcrypt(const char *password, const char *salt) 60{ 61 char *crypted; 62 63# ifdef HAVE_MD5_PASSWORDS 64 if (is_md5_salt(salt)) 65 crypted = md5_crypt(password, salt); 66 else 67 crypted = crypt(password, salt); 68# elif defined(__hpux) && !defined(HAVE_SECUREWARE) 69 if (iscomsec()) 70 crypted = bigcrypt(password, salt); 71 else 72 crypted = crypt(password, salt); 73# elif defined(HAVE_SECUREWARE) 74 crypted = bigcrypt(password, salt); 75# else 76 crypted = crypt(password, salt); 77# endif 78 79 return crypted; 80} 81 82/* 83 * Handle shadowed password systems in a cleaner way for portable 84 * version. 85 */ 86 87char * 88shadow_pw(struct passwd *pw) 89{ 90 char *pw_password = pw->pw_passwd; 91 92# if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 93 struct spwd *spw = getspnam(pw->pw_name); 94 95 if (spw != NULL) 96 pw_password = spw->sp_pwdp; 97# endif 98# if defined(HAVE_GETPWANAM) && !defined(DISABLE_SHADOW) 99 struct passwd_adjunct *spw; 100 if (issecure() && (spw = getpwanam(pw->pw_name)) != NULL) 101 pw_password = spw->pwa_passwd; 102# elif defined(HAVE_SECUREWARE) 103 struct pr_passwd *spw = getprpwnam(pw->pw_name); 104 105 if (spw != NULL) 106 pw_password = spw->ufld.fd_encrypt; 107# elif defined(__hpux) && !defined(HAVE_SECUREWARE) 108 struct pr_passwd *spw; 109 if (iscomsec() && (spw = getprpwnam(pw->pw_name)) != NULL) 110 pw_password = spw->ufld.fd_encrypt; 111# endif 112 113 return pw_password; 114} 115 116#endif /* !defined(HAVE_OSF_SIA) */ 117