Browse Source

Wrap <pwd.h> so that calls go direct and the symbols are all weak.

Hide bcrypt_autorounds(), prefixing with an underbar for static builds.
OPENBSD_5_9
guenther 9 years ago
parent
commit
08d5782520
2 changed files with 8 additions and 7 deletions
  1. +5
    -2
      src/lib/libc/crypt/bcrypt.c
  2. +3
    -5
      src/lib/libc/crypt/cryptutil.c

+ 5
- 2
src/lib/libc/crypt/bcrypt.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: bcrypt.c,v 1.54 2015/09/13 12:42:39 millert Exp $ */
/* $OpenBSD: bcrypt.c,v 1.55 2015/09/13 15:33:48 guenther Exp $ */
/* /*
* Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> * Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
@ -215,6 +215,7 @@ bcrypt_newhash(const char *pass, int log_rounds, char *hash, size_t hashlen)
explicit_bzero(salt, sizeof(salt)); explicit_bzero(salt, sizeof(salt));
return 0; return 0;
} }
DEF_WEAK(bcrypt_newhash);
int int
bcrypt_checkpass(const char *pass, const char *goodhash) bcrypt_checkpass(const char *pass, const char *goodhash)
@ -232,13 +233,14 @@ bcrypt_checkpass(const char *pass, const char *goodhash)
explicit_bzero(hash, sizeof(hash)); explicit_bzero(hash, sizeof(hash));
return 0; return 0;
} }
DEF_WEAK(bcrypt_checkpass);
/* /*
* Measure this system's performance by measuring the time for 8 rounds. * Measure this system's performance by measuring the time for 8 rounds.
* We are aiming for something that takes around 0.1s, but not too much over. * We are aiming for something that takes around 0.1s, but not too much over.
*/ */
int int
bcrypt_autorounds(void)
_bcrypt_autorounds(void)
{ {
struct timespec before, after; struct timespec before, after;
int r = 8; int r = 8;
@ -391,3 +393,4 @@ bcrypt(const char *pass, const char *salt)
return gencrypted; return gencrypted;
} }
DEF_WEAK(bcrypt);

+ 3
- 5
src/lib/libc/crypt/cryptutil.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: cryptutil.c,v 1.11 2015/09/12 14:56:50 guenther Exp $ */
/* $OpenBSD: cryptutil.c,v 1.12 2015/09/13 15:33:48 guenther Exp $ */
/* /*
* Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> * Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
* *
@ -21,8 +21,6 @@
#include <login_cap.h> #include <login_cap.h>
#include <errno.h> #include <errno.h>
int bcrypt_autorounds(void);
int int
crypt_checkpass(const char *pass, const char *goodhash) crypt_checkpass(const char *pass, const char *goodhash)
{ {
@ -70,12 +68,12 @@ crypt_newhash(const char *pass, const char *pref, char *hash, size_t hashlen)
const char *choice = choices[i]; const char *choice = choices[i];
size_t len = strlen(choice); size_t len = strlen(choice);
if (strcmp(pref, choice) == 0) { if (strcmp(pref, choice) == 0) {
rounds = bcrypt_autorounds();
rounds = _bcrypt_autorounds();
break; break;
} else if (strncmp(pref, choice, len) == 0 && } else if (strncmp(pref, choice, len) == 0 &&
pref[len] == ',') { pref[len] == ',') {
if (strcmp(pref + len + 1, "a") == 0) { if (strcmp(pref + len + 1, "a") == 0) {
rounds = bcrypt_autorounds();
rounds = _bcrypt_autorounds();
} else { } else {
rounds = strtonum(pref + len + 1, 4, 31, &errstr); rounds = strtonum(pref + len + 1, 4, 31, &errstr);
if (errstr) { if (errstr) {


Loading…
Cancel
Save