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