Fix multiple definitions of __nss_*_database (bug 22918)

Message ID 874llxjgxa.fsf@linux-m68k.org
State New
Headers show
Series
  • Fix multiple definitions of __nss_*_database (bug 22918)
Related show

Commit Message

Andreas Schwab March 3, 2018, 3:51 p.m.
[BZ #22918]
	* nss/nsswitch.h (DEFINE_DATABASE): Don't define __nss_*_database.
	* nss/nsswitch.c (DEFINE_DATABASE): Define __nss_*_database here.
	* nscd/gai.c (__nss_hosts_database): Readd definition.
	* posix/tst-rfc3484.c (__nss_hosts_database): Likewise.
	* posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise.
	* posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise.
---
 nscd/gai.c            | 3 +++
 nss/nsswitch.c        | 2 +-
 nss/nsswitch.h        | 8 ++++----
 posix/tst-rfc3484-2.c | 1 +
 posix/tst-rfc3484-3.c | 1 +
 posix/tst-rfc3484.c   | 1 +
 6 files changed, 11 insertions(+), 5 deletions(-)

-- 
2.16.2


-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Comments

Carlos O'Donell March 3, 2018, 4 p.m. | #1
On 03/03/2018 07:51 AM, Andreas Schwab wrote:
> 	[BZ #22918]

> 	* nss/nsswitch.h (DEFINE_DATABASE): Don't define __nss_*_database.

> 	* nss/nsswitch.c (DEFINE_DATABASE): Define __nss_*_database here.

> 	* nscd/gai.c (__nss_hosts_database): Readd definition.

> 	* posix/tst-rfc3484.c (__nss_hosts_database): Likewise.

> 	* posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise.

> 	* posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise.


LGTM.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>


> ---

>  nscd/gai.c            | 3 +++

>  nss/nsswitch.c        | 2 +-

>  nss/nsswitch.h        | 8 ++++----

>  posix/tst-rfc3484-2.c | 1 +

>  posix/tst-rfc3484-3.c | 1 +

>  posix/tst-rfc3484.c   | 1 +

>  6 files changed, 11 insertions(+), 5 deletions(-)

> 

> diff --git a/nscd/gai.c b/nscd/gai.c

> index d081747797..576fd0045b 100644

> --- a/nscd/gai.c

> +++ b/nscd/gai.c

> @@ -45,3 +45,6 @@

>  #ifdef HAVE_LIBIDN

>  # include <libidn/idn-stub.c>

>  #endif

> +

> +/* Some variables normally defined in libc.  */

> +service_user *__nss_hosts_database attribute_hidden;

> diff --git a/nss/nsswitch.c b/nss/nsswitch.c

> index 4b8deedabf..ee46f24424 100644

> --- a/nss/nsswitch.c

> +++ b/nss/nsswitch.c

> @@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database,

>  

>  /* Declare external database variables.  */

>  #define DEFINE_DATABASE(name)						      \

> -  extern service_user *__nss_##name##_database attribute_hidden;	      \

> +  service_user *__nss_##name##_database attribute_hidden;		      \

>    weak_extern (__nss_##name##_database)

>  #include "databases.def"

>  #undef DEFINE_DATABASE

> diff --git a/nss/nsswitch.h b/nss/nsswitch.h

> index eccb535ef5..63573b9ebc 100644

> --- a/nss/nsswitch.h

> +++ b/nss/nsswitch.h

> @@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots)

>  #define MAX_NR_ADDRS    48

>  

>  /* Prototypes for __nss_*_lookup2 functions.  */

> -#define DEFINE_DATABASE(arg)				    \

> -  service_user *__nss_##arg##_database attribute_hidden;    \

> -  int __nss_##arg##_lookup2 (service_user **, const char *, \

> -			     const char *, void **);	    \

> +#define DEFINE_DATABASE(arg)						      \

> +  extern service_user *__nss_##arg##_database attribute_hidden;		      \

> +  int __nss_##arg##_lookup2 (service_user **, const char *,		      \

> +			     const char *, void **);			      \

>    libc_hidden_proto (__nss_##arg##_lookup2)

>  #include "databases.def"

>  #undef DEFINE_DATABASE

> diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c

> index f509534ca9..8c64ac59ff 100644

> --- a/posix/tst-rfc3484-2.c

> +++ b/posix/tst-rfc3484-2.c

> @@ -58,6 +58,7 @@ _res_hconf_init (void)

>  #undef	USE_NSCD

>  #include "../sysdeps/posix/getaddrinfo.c"

>  

> +service_user *__nss_hosts_database attribute_hidden;

>  

>  /* This is the beginning of the real test code.  The above defines

>     (among other things) the function rfc3484_sort.  */

> diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c

> index ae44087a10..1c61aaf844 100644

> --- a/posix/tst-rfc3484-3.c

> +++ b/posix/tst-rfc3484-3.c

> @@ -58,6 +58,7 @@ _res_hconf_init (void)

>  #undef	USE_NSCD

>  #include "../sysdeps/posix/getaddrinfo.c"

>  

> +service_user *__nss_hosts_database attribute_hidden;

>  

>  /* This is the beginning of the real test code.  The above defines

>     (among other things) the function rfc3484_sort.  */

> diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c

> index 7f191abbbc..8f45848e44 100644

> --- a/posix/tst-rfc3484.c

> +++ b/posix/tst-rfc3484.c

> @@ -58,6 +58,7 @@ _res_hconf_init (void)

>  #undef	USE_NSCD

>  #include "../sysdeps/posix/getaddrinfo.c"

>  

> +service_user *__nss_hosts_database attribute_hidden;

>  

>  /* This is the beginning of the real test code.  The above defines

>     (among other things) the function rfc3484_sort.  */

> 



-- 
Cheers,
Carlos.

Patch

diff --git a/nscd/gai.c b/nscd/gai.c
index d081747797..576fd0045b 100644
--- a/nscd/gai.c
+++ b/nscd/gai.c
@@ -45,3 +45,6 @@ 
 #ifdef HAVE_LIBIDN
 # include <libidn/idn-stub.c>
 #endif
+
+/* Some variables normally defined in libc.  */
+service_user *__nss_hosts_database attribute_hidden;
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 4b8deedabf..ee46f24424 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -62,7 +62,7 @@  static service_library *nss_new_service (name_database *database,
 
 /* Declare external database variables.  */
 #define DEFINE_DATABASE(name)						      \
-  extern service_user *__nss_##name##_database attribute_hidden;	      \
+  service_user *__nss_##name##_database attribute_hidden;		      \
   weak_extern (__nss_##name##_database)
 #include "databases.def"
 #undef DEFINE_DATABASE
diff --git a/nss/nsswitch.h b/nss/nsswitch.h
index eccb535ef5..63573b9ebc 100644
--- a/nss/nsswitch.h
+++ b/nss/nsswitch.h
@@ -226,10 +226,10 @@  libc_hidden_proto (__nss_hostname_digits_dots)
 #define MAX_NR_ADDRS    48
 
 /* Prototypes for __nss_*_lookup2 functions.  */
-#define DEFINE_DATABASE(arg)				    \
-  service_user *__nss_##arg##_database attribute_hidden;    \
-  int __nss_##arg##_lookup2 (service_user **, const char *, \
-			     const char *, void **);	    \
+#define DEFINE_DATABASE(arg)						      \
+  extern service_user *__nss_##arg##_database attribute_hidden;		      \
+  int __nss_##arg##_lookup2 (service_user **, const char *,		      \
+			     const char *, void **);			      \
   libc_hidden_proto (__nss_##arg##_lookup2)
 #include "databases.def"
 #undef DEFINE_DATABASE
diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c
index f509534ca9..8c64ac59ff 100644
--- a/posix/tst-rfc3484-2.c
+++ b/posix/tst-rfc3484-2.c
@@ -58,6 +58,7 @@  _res_hconf_init (void)
 #undef	USE_NSCD
 #include "../sysdeps/posix/getaddrinfo.c"
 
+service_user *__nss_hosts_database attribute_hidden;
 
 /* This is the beginning of the real test code.  The above defines
    (among other things) the function rfc3484_sort.  */
diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c
index ae44087a10..1c61aaf844 100644
--- a/posix/tst-rfc3484-3.c
+++ b/posix/tst-rfc3484-3.c
@@ -58,6 +58,7 @@  _res_hconf_init (void)
 #undef	USE_NSCD
 #include "../sysdeps/posix/getaddrinfo.c"
 
+service_user *__nss_hosts_database attribute_hidden;
 
 /* This is the beginning of the real test code.  The above defines
    (among other things) the function rfc3484_sort.  */
diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c
index 7f191abbbc..8f45848e44 100644
--- a/posix/tst-rfc3484.c
+++ b/posix/tst-rfc3484.c
@@ -58,6 +58,7 @@  _res_hconf_init (void)
 #undef	USE_NSCD
 #include "../sysdeps/posix/getaddrinfo.c"
 
+service_user *__nss_hosts_database attribute_hidden;
 
 /* This is the beginning of the real test code.  The above defines
    (among other things) the function rfc3484_sort.  */