Browse Source

change prototype for crypt_newhash. the login_cap_t is a holdover from its

pwd_gensalt origins, but a string argument works equally work and is more
friendly to consumers beyond local user accounts.
ok deraadt
OPENBSD_5_7
tedu 10 years ago
parent
commit
a5c612c089
4 changed files with 13 additions and 19 deletions
  1. +1
    -3
      src/include/login_cap.h
  2. +2
    -1
      src/include/unistd.h
  3. +6
    -7
      src/lib/libc/crypt/crypt_checkpass.3
  4. +4
    -8
      src/lib/libc/crypt/cryptutil.c

+ 1
- 3
src/include/login_cap.h View File

@ -1,4 +1,4 @@
/* $OpenBSD: login_cap.h,v 1.14 2014/11/19 22:59:50 tedu Exp $ */
/* $OpenBSD: login_cap.h,v 1.15 2014/11/21 05:13:44 tedu Exp $ */
/*- /*-
* Copyright (c) 1995,1997 Berkeley Software Design, Inc. All rights reserved. * Copyright (c) 1995,1997 Berkeley Software Design, Inc. All rights reserved.
@ -104,8 +104,6 @@ int secure_path(char *);
int setclasscontext(char *, unsigned int); int setclasscontext(char *, unsigned int);
int setusercontext(login_cap_t *, struct passwd *, uid_t, unsigned int); int setusercontext(login_cap_t *, struct passwd *, uid_t, unsigned int);
int crypt_newhash(const char *pass, login_cap_t *lc, char *hash, size_t hashlen);
__END_DECLS __END_DECLS
#endif /* _LOGIN_CAP_H_ */ #endif /* _LOGIN_CAP_H_ */

+ 2
- 1
src/include/unistd.h View File

@ -1,4 +1,4 @@
/* $OpenBSD: unistd.h,v 1.93 2014/09/18 04:37:56 guenther Exp $ */
/* $OpenBSD: unistd.h,v 1.94 2014/11/21 05:13:44 tedu Exp $ */
/* $NetBSD: unistd.h,v 1.26.4.1 1996/05/28 02:31:51 mrg Exp $ */ /* $NetBSD: unistd.h,v 1.26.4.1 1996/05/28 02:31:51 mrg Exp $ */
/*- /*-
@ -489,6 +489,7 @@ int pipe2(int [2], int);
int acct(const char *); int acct(const char *);
int closefrom(int); int closefrom(int);
int crypt_checkpass(const char *, const char *); int crypt_checkpass(const char *, const char *);
int crypt_newhash(const char *, const char *, char *, size_t);
int des_cipher(const char *, char *, int32_t, int); int des_cipher(const char *, char *, int32_t, int);
int des_setkey(const char *); int des_setkey(const char *);
void endusershell(void); void endusershell(void);


+ 6
- 7
src/lib/libc/crypt/crypt_checkpass.3 View File

@ -1,4 +1,4 @@
.\" $OpenBSD: crypt_checkpass.3,v 1.1 2014/11/20 19:18:25 tedu Exp $
.\" $OpenBSD: crypt_checkpass.3,v 1.2 2014/11/21 05:13:44 tedu Exp $
.\" .\"
.\" Copyright (c) Ted Unangst <tedu@openbsd.org> .\" Copyright (c) Ted Unangst <tedu@openbsd.org>
.\" .\"
@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: November 20 2014 $
.Dd $Mdocdate: November 21 2014 $
.Dt CRYPT_CHECKPASS 3 .Dt CRYPT_CHECKPASS 3
.Os .Os
.Sh NAME .Sh NAME
@ -25,9 +25,8 @@
.In unistd.h .In unistd.h
.Ft int .Ft int
.Fn crypt_checkpass "const char *password" "const char *hash" .Fn crypt_checkpass "const char *password" "const char *hash"
.In login_cap.h
.Ft int .Ft int
.Fn crypt_newhash "const char *password" "login_cap_t *lc" "char *hash" "size_t hashsize"
.Fn crypt_newhash "const char *password" "const char *pref" "char *hash" "size_t hashsize"
.Sh DESCRIPTION .Sh DESCRIPTION
The The
.Fn crypt_checkpass .Fn crypt_checkpass
@ -47,9 +46,9 @@ The provided
.Fa password .Fa password
is randomly salted and hashed and stored in is randomly salted and hashed and stored in
.Fa hash . .Fa hash .
The login class argument
.Fa lc
is used to identify the preferred hashing algorithm and parameters.
The
.Fa pref
argument identifies the preferred hashing algorithm and parameters.
Refer to Refer to
.Xr login.conf 5 . .Xr login.conf 5 .
.Sh RETURN VALUES .Sh RETURN VALUES


+ 4
- 8
src/lib/libc/crypt/cryptutil.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: cryptutil.c,v 1.2 2014/11/17 16:47:28 tedu Exp $ */
/* $OpenBSD: cryptutil.c,v 1.3 2014/11/21 05:13:44 tedu Exp $ */
/* /*
* Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> * Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
* *
@ -55,16 +55,14 @@ fail:
} }
int int
crypt_newhash(const char *pass, login_cap_t *lc, char *hash, size_t hashlen)
crypt_newhash(const char *pass, const char *pref, char *hash, size_t hashlen)
{ {
int rv = -1; int rv = -1;
char *pref;
char *defaultpref = "blowfish,8";
const char *defaultpref = "blowfish,8";
const char *errstr; const char *errstr;
int rounds; int rounds;
if (lc == NULL ||
(pref = login_getcapstr(lc, "localcipher", NULL, NULL)) == NULL)
if (pref == NULL)
pref = defaultpref; pref = defaultpref;
if (strncmp(pref, "blowfish,", 9) != 0) { if (strncmp(pref, "blowfish,", 9) != 0) {
errno = EINVAL; errno = EINVAL;
@ -76,7 +74,5 @@ crypt_newhash(const char *pass, login_cap_t *lc, char *hash, size_t hashlen)
rv = bcrypt_newhash(pass, rounds, hash, hashlen); rv = bcrypt_newhash(pass, rounds, hash, hashlen);
err: err:
if (pref != defaultpref)
free(pref);
return rv; return rv;
} }

Loading…
Cancel
Save