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