diff --git a/ChangeLog b/ChangeLog index d03b2656..57316d1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-16 Nicolas François + + * configure.in: Check if the l64a function exists instead of a64l + which we do not use. + * libmisc/salt.c: Add support for uClibc with no l64a(). + 2007-11-16 Nicolas François * configure.in: Check if the netdb.h header file and the innetgr diff --git a/NEWS b/NEWS index 9135a7ea..38f35c18 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,7 @@ shadow-4.0.18.1 -> shadow-4.0.18.2 UNRELEASED systems, username with an @ will be treated like any other username (i.e. lookup in the local database for an user with an @). Thanks to Mike Frysinger for the patch. +- Add support for uClibc with no l64a(). shadow-4.0.18.1 -> shadow-4.0.18.2 28-10-2007 diff --git a/configure.in b/configure.in index d7546e5a..f86812b8 100644 --- a/configure.in +++ b/configure.in @@ -34,7 +34,7 @@ AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \ utime.h ulimit.h sys/resource.h gshadow.h shadow.h lastlog.h \ locale.h rpc/key_prot.h netdb.h) -AC_CHECK_FUNCS(a64l fchmod fchown fsync getgroups gethostname getspnam \ +AC_CHECK_FUNCS(l64a fchmod fchown fsync getgroups gethostname getspnam \ gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \ memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr) AC_SYS_LARGEFILE diff --git a/libmisc/salt.c b/libmisc/salt.c index 03428987..3ea8ae64 100644 --- a/libmisc/salt.c +++ b/libmisc/salt.c @@ -3,6 +3,8 @@ * * Written by Marek Michalkiewicz , * public domain. + * + * l64a was Written by J.T. Conklin . Public domain. */ #include @@ -14,6 +16,42 @@ #include "prototypes.h" #include "defines.h" #include "getdef.h" + +#ifndef HAVE_L64A +char *l64a(long value) +{ + static char buf[8]; + char *s = buf; + int digit; + int i; + + if (value < 0) { + errno = EINVAL; + return(NULL); + } + + for (i = 0; value != 0 && i < 6; i++) { + digit = value & 0x3f; + + if (digit < 2) + *s = digit + '.'; + else if (digit < 12) + *s = digit + '0' - 2; + else if (digit < 38) + *s = digit + 'A' - 12; + else + *s = digit + 'a' - 38; + + value >>= 6; + s++; + } + + *s = '\0'; + + return(buf); +} +#endif /* !HAVE_L64A */ + /* * Generate 8 base64 ASCII characters of random salt. If MD5_CRYPT_ENAB * in /etc/login.defs is "yes", the salt string will be prefixed by "$1$"