summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-09-01 17:25:49 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-09-01 18:04:32 +0200
commit670a1ff8f97962efd6b27436b50fc51b62683c25 (patch)
tree11139ff0e3aa9eb48bc9af2aa48afaa05ad03b0b /utils
parent1186cf1d97d62105aa0f63cd3fce49f124e4e4c4 (diff)
Fix password checking with as-needed linking
Newer gcc toolchains tend to enable as-needed by default, so runtime detection of libcrypt will fail. We can just explicitly link against libcrypt anyway. * configure.ac: Check for `crypt()' in libcrypt. * config.make.in: Substitute HAVE_LIBCRYPT. * libshouldbeinlibc/idvec-verify.c: Include <crypt.h> only when libcrypt is available. Replace weak reference with explicit call and fallback macro. * utils/x.c: Likewise. * libshouldbeinlibc/Makefile (LDLIBS): Add -lcrypt when libcrypt is available.
Diffstat (limited to 'utils')
-rw-r--r--utils/x.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/utils/x.c b/utils/x.c
index 518f3847..90671fc9 100644
--- a/utils/x.c
+++ b/utils/x.c
@@ -30,6 +30,12 @@
#include <grp.h>
#include <netdb.h>
#include <time.h>
+#ifdef HAVE_LIBCRYPT
+#include <crypt.h>
+#else
+#warning "No crypt on this system! Using plain-text passwords."
+#define crypt(password, encrypted) password
+#endif
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -136,7 +142,6 @@ count_parent_gids ()
void verify_passwd (const char *name, const char *password,
uid_t id, int is_group, structh auth *auth)
{
- extern char *crypt (const char salt[2], const char *string);
char *prompt, *unencrypted, *encrypted;
if (!password || !*password