Hi Krzysztof,
On Wed, Mar 03, 2010 at 12:29:01AM +0100, Krzysztof Ol??dzki wrote:
> First, sorry for the problem I have made. :(
hey please don't be sorry, here we say that we don't make
omelettes without breaking eggs :-)
> Accoriding to crypt(3) from man-pages-3.21 it is required to define
> _XOPEN_SOURCE:
I've seen this man page but it does not reflect anything I've seen
on any other system, nor even what is required on my machines !
...
Oh sorry, I did not build the test program with -Wall. Shame on me!
Yes I now do see the same one on linux with glibc 2.7 :-(
(...)
> This short program proves the man page is right:
>
> --- ctest.c begin ---
> #include <unistd.h>
>
> int main() {
> char *c;
>
> crypt(c, c);
>
> return 0;
> }
> --- ctest.c end ---
>
> $ cc ctest.c -o ctest -Wall -lcrypt ; echo $?
> ctest.c: In function 'main':
> ctest.c:6: warning: implicit declaration of function 'crypt'
> 0
>
> $ cc ctest.c -o ctest -Wall -lcrypt -D_XOPEN_SOURCE ; echo $?
> 0
>
> It behaves exactly in the same way on glibc-2.7, 2.8 and 2.9 on both
> i386 and x86-64.
>
> In /usr/include/unistd.h I found:
>
> >#ifdef __USE_XOPEN
> >/* Encrypt at most 8 characters from KEY using salt to perturb DES. */
> >extern char *crypt (__const char *__key, __const char *__salt)
> > __THROW __nonnull ((1, 2));
>
> (...)
>
> __USE_XOPEN is defined in features.h:
>
> >#ifdef _XOPEN_SOURCE
> ># define __USE_XOPEN 1
> (...)
>
> However, instead of using _XOPEN_SOURCE we may use something less
> invasive (I hope), like for example _GNU_SOURCE.
>
> Could you please check, if it helps? Also, there is no point in
> including unistd.c and adding one of the above defines for crypt() if
> CONFIG_HAP_CRYPT is not defined. So, the final fix may look like this:
You rock :-)
Here on linux glibc-2.7, it does not cause any warning (not either
for strdup which you initially had). Solaris 8 builds without a
warning too.
Let's wait for Ross to test on FreeBSD and if that's OK, I apply
the patch and release 1.4.1.
>
> --- cut here ---
> index 93af8d6..b00727f 100644
> --- a/src/auth.c
> +++ b/src/auth.c
> @@ -10,12 +10,14 @@
> *
> */
>
> -#define _XOPEN_SOURCE 500
> +#ifdef CONFIG_HAP_CRYPT
> +#define _GNU_SOURCE
> +#include <unistd.h>
> +#endif
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> -#include <unistd.h>
>
> #include <common/config.h>
> --- cut here ---
>
> Finally, encryption was only tested on Linux and FreeBSD so it could be
> nice to verify if it works on Solaris in the same way (with -lcrypt) and
> to add USE_LIBCRYPT for "ifeq ($(TARGET),solaris)".
OK I'm testing it now then and will keep you informed.
Thanks,
Willy