diff options
| author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-09-08 15:21:21 +0200 |
|---|---|---|
| committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-09-15 11:52:30 +0200 |
| commit | 2ae297fe0d8b0736ee16b3be47ef62e17b4afe4e (patch) | |
| tree | a274d294137dd41b31c24aff1ab16a4029628069 /src/shared/libcrypt-util.c | |
| parent | a937ce2d8545568c1de3ba0370fd621ffcbdd8ff (diff) | |
| download | systemd-2ae297fe0d8b0736ee16b3be47ef62e17b4afe4e.tar.gz | |
Move test_password_{one,many} to libcrypt-util.c
They are only used under src/home/, but I want to add tests in test-libcrypt-util.c.
And the functions are almost trivial, so I think it is OK to move them to shared.
Diffstat (limited to 'src/shared/libcrypt-util.c')
| -rw-r--r-- | src/shared/libcrypt-util.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/shared/libcrypt-util.c b/src/shared/libcrypt-util.c index cb12cd65f3..1faf683d71 100644 --- a/src/shared/libcrypt-util.c +++ b/src/shared/libcrypt-util.c @@ -117,3 +117,35 @@ bool looks_like_hashed_password(const char *s) { return !STR_IN_SET(s, "x", "*"); } + +int test_password_one(const char *hashed_password, const char *password) { + struct crypt_data cc = {}; + const char *k; + bool b; + + errno = 0; + k = crypt_r(password, hashed_password, &cc); + if (!k) { + explicit_bzero_safe(&cc, sizeof(cc)); + return errno_or_else(EINVAL); + } + + b = streq(k, hashed_password); + explicit_bzero_safe(&cc, sizeof(cc)); + return b; +} + +int test_password_many(char **hashed_password, const char *password) { + char **hpw; + int r; + + STRV_FOREACH(hpw, hashed_password) { + r = test_password_one(*hpw, password); + if (r < 0) + return r; + if (r > 0) + return true; + } + + return false; +} |
