Skip to contentSkip to conversation

nfs-utils 1.1.3 and glibc 2.2

DISCUSSION Gabor Z. Papp 2 participants 5 messages Jul 28, 2008 – Jul 29, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hello,

seems like nfs-utils no more compatible with glibc 2.2?

make[2]: Entering directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'
gcc -DHAVE_CONFIG_H -I. -I../../support/include -I../../support/include -D_GNU_SOURCE -Wall -Wstrict-prototypes -pipe -g -O2 -MT network.o -MD -MP -MF .deps/network.Tpo -c -o network.o network.c network.c: In function 'nfs_name_to_address':
network.c:154: error: 'AI_ADDRCONFIG' undeclared (first use in this function) network.c:154: error: (Each undeclared identifier is reported only once network.c:154: error: for each function it appears in.) network.c:160: error: 'AI_V4MAPPED' undeclared (first use in this function) network.c:160: error: 'AI_ALL' undeclared (first use in this function) make[2]: *** [network.o] Error 1
make[2]: Leaving directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'

1.1.2 compiles fine.

#1 lore raw
Quoted 3 lines · Gabor Z. Papp

Hello,

seems like nfs-utils no more compatible with glibc 2.2?

Does glibc 2.2 have getaddrinfo(3)? If so, it should have these macros defined somewhere.

Other parts of nfs-utils already use getaddrinfo, and ./configure is designed to blow up if getaddrinfo(3) isn't present, so I find this a little odd.

Quoted 14 lines

make[2]: Entering directory
`/home/gzp/src/nfs-utils-1.1.3/utils/mount'
gcc -DHAVE_CONFIG_H -I. -I../../support/include

(quoted diff) +0 -2
-I../../support/include -D_GNU_SOURCE -Wall -Wstrict-prototypes  -pipe
-g -O2 -MT network.o -MD -MP -MF .deps/network.Tpo -c -o network.o network.c

network.c: In function 'nfs_name_to_address':
network.c:154: error: 'AI_ADDRCONFIG' undeclared (first use in this function) network.c:154: error: (Each undeclared identifier is reported only once network.c:154: error: for each function it appears in.) network.c:160: error: 'AI_V4MAPPED' undeclared (first use in this function) network.c:160: error: 'AI_ALL' undeclared (first use in this function) make[2]: *** [network.o] Error 1
make[2]: Leaving directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'

Quoted 1 line

1.1.2 compiles fine.

--
Chuck Lever

#2 lore raw
In reply to Gabor Z. Papp
Quoted 3 lines · Gabor Z. Papp

Hello,

seems like nfs-utils no more compatible with glibc 2.2?

By the way, this wasn't by design. :-)

Quoted 14 lines

make[2]: Entering directory
`/home/gzp/src/nfs-utils-1.1.3/utils/mount'
gcc -DHAVE_CONFIG_H -I. -I../../support/include

(quoted diff) +0 -2
-I../../support/include -D_GNU_SOURCE -Wall -Wstrict-prototypes  -pipe
-g -O2 -MT network.o -MD -MP -MF .deps/network.Tpo -c -o network.o network.c

network.c: In function 'nfs_name_to_address':
network.c:154: error: 'AI_ADDRCONFIG' undeclared (first use in this function) network.c:154: error: (Each undeclared identifier is reported only once network.c:154: error: for each function it appears in.) network.c:160: error: 'AI_V4MAPPED' undeclared (first use in this function) network.c:160: error: 'AI_ALL' undeclared (first use in this function) make[2]: *** [network.o] Error 1
make[2]: Leaving directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'

Quoted 1 line

1.1.2 compiles fine.

Can you tell me what distribution you are using? I don't think I have access to a glibc2.2-based distribution to do testing/debugging, but if you are using a fairly contemporary distribution that is glibc2.2-based, I might try setting up a temporary guest for testing.

In my distribution (Fedora), these macros, along with getaddrinfo(3), are defined in /usr/include/netdb.h. utils/mount/network.c appears to include this file directly, so I am still puzzled by this.

Signature · 1 line
Chuck Lever
#3 lore raw

* "Chuck Lever" <[email protected]>:

| > make[2]: Entering directory
| > `/home/gzp/src/nfs-utils-1.1.3/utils/mount'
| > gcc -DHAVE_CONFIG_H -I. -I../../support/include
| > -I../../support/include -D_GNU_SOURCE -Wall -Wstrict-prototypes  -pipe
| > -g -O2 -MT network.o -MD -MP -MF .deps/network.Tpo -c -o network.o network.c
| > network.c: In function 'nfs_name_to_address':
| > network.c:154: error: 'AI_ADDRCONFIG' undeclared (first use in this function)
| > network.c:154: error: (Each undeclared identifier is reported only once
| > network.c:154: error: for each function it appears in.)
| > network.c:160: error: 'AI_V4MAPPED' undeclared (first use in this function)
| > network.c:160: error: 'AI_ALL' undeclared (first use in this function)
| > make[2]: *** [network.o] Error 1
| > make[2]: Leaving directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'
| >
| > 1.1.2 compiles fine.

| Can you tell me what distribution you are using?

No distro.

| In my distribution (Fedora), these macros, along with getaddrinfo(3),
| are defined in /usr/include/netdb.h.  utils/mount/network.c appears to
| include this file directly, so I am still puzzled by this.

I'll attach the glibc 2.2.5 netdb.h, and grep AI_ in /usr/include returns only this:

$ grep AI_ *
netdb.h:#  define GAI_WAIT      0
netdb.h:#  define GAI_NOWAIT    1
netdb.h:# define AI_PASSIVE     0x0001  /* Socket address is intended for `bind'.  */
netdb.h:# define AI_CANONNAME   0x0002  /* Request for canonical name.  */
netdb.h:# define AI_NUMERICHOST 0x0004  /* Don't use name resolution. */
netdb.h:# define EAI_BADFLAGS     -1    /* Invalid value for `ai_flags' field.  */
netdb.h:# define EAI_NONAME       -2    /* NAME or SERVICE is unknown.  */
netdb.h:# define EAI_AGAIN        -3    /* Temporary failure in name resolution.  */
netdb.h:# define EAI_FAIL         -4    /* Non-recoverable failure in name res.  */
netdb.h:# define EAI_NODATA       -5    /* No address associated with NAME.  */
netdb.h:# define EAI_FAMILY       -6    /* `ai_family' not supported. */
netdb.h:# define EAI_SOCKTYPE     -7    /* `ai_socktype' not supported.  */
netdb.h:# define EAI_SERVICE      -8    /* SERVICE not supported for `ai_socktype'.  */
netdb.h:# define EAI_ADDRFAMILY   -9    /* Address family for NAME no tsupported.  */
netdb.h:# define EAI_MEMORY       -10   /* Memory allocation failure. */
netdb.h:# define EAI_SYSTEM       -11   /* System error returned in `errno'.  */
netdb.h:#  define EAI_INPROGRESS  -100  /* Processing request in progress.  */
netdb.h:#  define EAI_CANCELED    -101  /* Request canceled.  */
netdb.h:#  define EAI_NOTCANCELED -102  /* Request not canceled.  */
netdb.h:#  define EAI_ALLDONE     -103  /* All requests done.  */
netdb.h:#  define EAI_INTR        -104  /* Interrupted by a signal. */
netdb.h:/* Enqueue ENT requests from the LIST.  If MODE is GAI_WAIT wait until all
netdb.h:   requests are handled.  If WAIT is GAI_NOWAIT return immediately after
#4 lore raw
Quoted 43 lines · Gabor Z. Papp
| > make[2]: Entering directory
| > `/home/gzp/src/nfs-utils-1.1.3/utils/mount'
| > gcc -DHAVE_CONFIG_H -I. -I../../support/include
| > -I../../support/include -D_GNU_SOURCE -Wall -Wstrict-prototypes  -pipe
| > -g -O2 -MT network.o -MD -MP -MF .deps/network.Tpo -c -o network.o network.c
| > network.c: In function 'nfs_name_to_address':
| > network.c:154: error: 'AI_ADDRCONFIG' undeclared (first use in this function)
| > network.c:154: error: (Each undeclared identifier is reported only once
| > network.c:154: error: for each function it appears in.)
| > network.c:160: error: 'AI_V4MAPPED' undeclared (first use in this function)
| > network.c:160: error: 'AI_ALL' undeclared (first use in this function)
| > make[2]: *** [network.o] Error 1
| > make[2]: Leaving directory `/home/gzp/src/nfs-utils-1.1.3/utils/mount'
| >
| > 1.1.2 compiles fine.

| Can you tell me what distribution you are using?

No distro.

| In my distribution (Fedora), these macros, along with getaddrinfo(3),
| are defined in /usr/include/netdb.h.  utils/mount/network.c appears to
| include this file directly, so I am still puzzled by this.

I'll attach the glibc 2.2.5 netdb.h, and grep AI_ in /usr/include returns only this:

$ grep AI_ *
netdb.h:#  define GAI_WAIT      0
netdb.h:#  define GAI_NOWAIT    1
netdb.h:# define AI_PASSIVE     0x0001  /* Socket address is intended for `bind'.  */
netdb.h:# define AI_CANONNAME   0x0002  /* Request for canonical name.  */
netdb.h:# define AI_NUMERICHOST 0x0004  /* Don't use name resolution. */
netdb.h:# define EAI_BADFLAGS     -1    /* Invalid value for `ai_flags' field.  */
netdb.h:# define EAI_NONAME       -2    /* NAME or SERVICE is unknown.  */
netdb.h:# define EAI_AGAIN        -3    /* Temporary failure in name resolution.  */
netdb.h:# define EAI_FAIL         -4    /* Non-recoverable failure in name res.  */
netdb.h:# define EAI_NODATA       -5    /* No address associated with NAME.  */
netdb.h:# define EAI_FAMILY       -6    /* `ai_family' not supported. */
netdb.h:# define EAI_SOCKTYPE     -7    /* `ai_socktype' not supported.  */
netdb.h:# define EAI_SERVICE      -8    /* SERVICE not supported for `ai_socktype'.  */
netdb.h:# define EAI_ADDRFAMILY   -9    /* Address family for NAME no tsupported.  */
netdb.h:# define EAI_MEMORY       -10   /* Memory allocation failure. */
Quoted 8 lines
netdb.h:# define EAI_SYSTEM       -11   /* System error returned in `errno'.  */
netdb.h:#  define EAI_INPROGRESS  -100  /* Processing request in progress.  */
netdb.h:#  define EAI_CANCELED    -101  /* Request canceled.  */
netdb.h:#  define EAI_NOTCANCELED -102  /* Request not canceled.  */
netdb.h:#  define EAI_ALLDONE     -103  /* All requests done.  */
netdb.h:#  define EAI_INTR        -104  /* Interrupted by a signal. */
netdb.h:/* Enqueue ENT requests from the LIST.  If MODE is GAI_WAIT wait until all
netdb.h:   requests are handled.  If WAIT is GAI_NOWAIT return immediately after

I downloaded glibc-2.2.5 yesterday to take a look.

There is an "interesting" comment in glibc-2.2.5/include/netdb.h, followed by all the missing AI_ macro definitions:

"/* The following declarations and definitions have been removed from
the public header since we don't want people to use them. */"

All of these are now included in /usr/include/netdb.h with no qualification whatever, so at some point the glibc maintainers changed their mind about this.

Likely the correct fix for this is to restore the old nfs_gethostbyname() and have ./configure detect the presence of these AI_ macros. If they are not present, use the original function. If they are, use the new one.

Alternately, we can define these in utils/mount/network.c if they are not already defined. This would work if the actual value of these macros has not changed over time.

I'll post a proposed fix as soon as I can, but some research will be required to figure out why these were banned originally.

Signature · 1 line
Chuck Lever