diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-12 20:02:30 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-12 20:02:30 +0000 |
commit | 5371d99e8766f25864ddf20fb0866e57fc0b7991 (patch) | |
tree | 7da25c486c5cee518ba959fd05f3629a0479b253 /sysdeps/unix | |
parent | a82a3db95077c8343b988a6f1b03adea3d40f6d4 (diff) | |
download | glibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.tar glibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.tar.gz glibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.tar.bz2 glibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.zip |
Fix getlogin_r namespace (bug 18527).
Various functions in XPG4 bring in references to getlogin_r, which is
not in XPG4; this is also a bug for some older POSIX versions which
aren't yet covered by the linknamespace tests. This patch fixes this
by making getlogin_r into a weak alias for __getlogin_r and using
__getlogin_r as needed.
Tested for x86_64 and x86 (testsuite, and that disassembly of
installed stripped shared libraries is unchanged by the patch).
[BZ #18527]
* login/getlogin_r.c (getlogin_r): Rename to __getlogin_r and
define as weak alias of __getlogin_r. Use libc_hidden_weak.
* sysdeps/mach/hurd/getlogin_r.c (getlogin_r): Likewise.
* sysdeps/unix/getlogin_r.c (getlogin_r): Likewise.
* sysdeps/unix/sysv/linux/getlogin_r.c (getlogin_r): Likewise.
* include/unistd.h (__getlogin_r): Declare. Use
libc_hidden_proto.
* posix/glob.c (glob): Call __getlogin_r instead of getlogin_r.
* conform/Makefile (test-xfail-XPG3/glob.h/linknamespace): Remove
variable.
(test-xfail-XPG3/wordexp.h/linknamespace): Likewise.
(test-xfail-XPG4/glob.h/linknamespace): Likewise.
(test-xfail-XPG4/wordexp.h/linknamespace): Likewise.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/getlogin_r.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/getlogin_r.c | 10 |
2 files changed, 10 insertions, 6 deletions
diff --git a/sysdeps/unix/getlogin_r.c b/sysdeps/unix/getlogin_r.c index 4a31d254ee..8bb3de5e75 100644 --- a/sysdeps/unix/getlogin_r.c +++ b/sysdeps/unix/getlogin_r.c @@ -34,7 +34,7 @@ STATIC #endif int -getlogin_r (name, name_len) +__getlogin_r (name, name_len) char *name; size_t name_len; { @@ -99,5 +99,7 @@ getlogin_r (name, name_len) return result; } #ifndef STATIC -libc_hidden_def (getlogin_r) +libc_hidden_def (__getlogin_r) +weak_alias (__getlogin_r, getlogin_r) +libc_hidden_weak (getlogin_r) #endif diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c index 2c52b2183b..aa61f6134d 100644 --- a/sysdeps/unix/sysv/linux/getlogin_r.c +++ b/sysdeps/unix/sysv/linux/getlogin_r.c @@ -21,9 +21,9 @@ #define STATIC static static int getlogin_r_fd0 (char *name, size_t namesize); -#define getlogin_r getlogin_r_fd0 +#define __getlogin_r getlogin_r_fd0 #include <sysdeps/unix/getlogin_r.c> -#undef getlogin_r +#undef __getlogin_r /* Try to determine login name from /proc/self/loginuid and return 0 @@ -109,7 +109,7 @@ __getlogin_r_loginuid (name, namesize) code. Otherwise return 0. */ int -getlogin_r (name, namesize) +__getlogin_r (name, namesize) char *name; size_t namesize; { @@ -119,4 +119,6 @@ getlogin_r (name, namesize) return getlogin_r_fd0 (name, namesize); } -libc_hidden_def (getlogin_r) +libc_hidden_def (__getlogin_r) +weak_alias (__getlogin_r, getlogin_r) +libc_hidden_weak (getlogin_r) |