about summary refs log tree commit diff
path: root/login
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-12 20:02:30 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-12 20:02:30 +0000
commit5371d99e8766f25864ddf20fb0866e57fc0b7991 (patch)
tree7da25c486c5cee518ba959fd05f3629a0479b253 /login
parenta82a3db95077c8343b988a6f1b03adea3d40f6d4 (diff)
downloadglibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.tar.gz
glibc-5371d99e8766f25864ddf20fb0866e57fc0b7991.tar.xz
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 'login')
-rw-r--r--login/getlogin_r.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/login/getlogin_r.c b/login/getlogin_r.c
index a49fb4a0df..8848b61544 100644
--- a/login/getlogin_r.c
+++ b/login/getlogin_r.c
@@ -23,13 +23,15 @@
    If it cannot be determined or some other error occurred, return the error
    code.  Otherwise return 0.  */
 int
-getlogin_r (name, name_len)
+__getlogin_r (name, name_len)
      char *name;
      size_t name_len;
 {
   __set_errno (ENOSYS);
   return errno;
 }
-libc_hidden_def (getlogin_r)
+libc_hidden_def (__getlogin_r)
+weak_alias (__getlogin_r, getlogin_r)
+libc_hidden_weak (getlogin_r)
 
 stub_warning (getlogin_r)