xref: /freebsd/crypto/openssh/openbsd-compat/xcrypt.c (revision d95e11bf7e5a59b5c3f81bd8dfc2918ee7d3bada)
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