]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix getlogin_r namespace (bug 18527).
authorJoseph Myers <joseph@codesourcery.com>
Fri, 12 Jun 2015 20:02:30 +0000 (20:02 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 12 Jun 2015 20:02:30 +0000 (20:02 +0000)
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.

ChangeLog
NEWS
conform/Makefile
include/unistd.h
login/getlogin_r.c
posix/glob.c
sysdeps/mach/hurd/getlogin_r.c
sysdeps/unix/getlogin_r.c
sysdeps/unix/sysv/linux/getlogin_r.c

index ba9f629452fd0cfda1913b448dd88ed598f09015..9403f2883c4c64be71d43eac16744f34ba88226b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2015-06-12  Joseph Myers  <joseph@codesourcery.com>
+
+       [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.
+
 2015-06-12  Martin Sebor  <msebor@redhat.com>
 
        [BZ #18512]
diff --git a/NEWS b/NEWS
index da8bccfef3ccb936f78b38dc62f3fc189ed5a5c8..b9b4ce2a3c7b8aa9cb10644e4fb36795547f6061 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -21,7 +21,7 @@ Version 2.22
   18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
   18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
   18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507,
-  18512, 18519, 18520, 18522.
+  18512, 18519, 18520, 18522, 18527.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
index 8c11dc41c8e30e9f653da4d1001e867500aa73c5..57dbc9225e38f61aeafef2df4c038d419d200ba3 100644 (file)
@@ -345,15 +345,11 @@ test-xfail-XOPEN2K/ndbm.h/linknamespace = yes
 test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
 
 # Unsorted expected failures.
-test-xfail-XPG3/glob.h/linknamespace = yes
 test-xfail-XPG3/unistd.h/linknamespace = yes
-test-xfail-XPG3/wordexp.h/linknamespace = yes
 test-xfail-XPG4/fmtmsg.h/linknamespace = yes
-test-xfail-XPG4/glob.h/linknamespace = yes
 test-xfail-XPG4/netdb.h/linknamespace = yes
 test-xfail-XPG4/syslog.h/linknamespace = yes
 test-xfail-XPG4/unistd.h/linknamespace = yes
-test-xfail-XPG4/wordexp.h/linknamespace = yes
 test-xfail-POSIX/mqueue.h/linknamespace = yes
 test-xfail-POSIX/semaphore.h/linknamespace = yes
 test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
index 762acc079afcd1499be6bdf4fa385ebb2492dcb3..61df3af357dcbb44acb760a069b2a60f11348d36 100644 (file)
@@ -14,6 +14,8 @@ libc_hidden_proto (execvp)
 libc_hidden_proto (getpid)
 libc_hidden_proto (getsid)
 libc_hidden_proto (getdomainname)
+extern __typeof (getlogin_r) __getlogin_r  __nonnull ((1));
+libc_hidden_proto (__getlogin_r)
 libc_hidden_proto (getlogin_r)
 libc_hidden_proto (seteuid)
 libc_hidden_proto (setegid)
index a49fb4a0dfb039a28ac79bd9ec7904482656b3c6..8848b61544762a59484c13f81656376bf48d026a 100644 (file)
    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)
index 5b927763c4a875c4397e6c606c79d21b9dbc33d3..d65e55dcd62fe465de8fa2b64cf7b37bb0e8068c 100644 (file)
@@ -619,7 +619,7 @@ glob (pattern, flags, errfunc, pglob)
                buflen = 20;
              name = alloca_account (buflen, alloca_used);
 
-             success = getlogin_r (name, buflen) == 0;
+             success = __getlogin_r (name, buflen) == 0;
              if (success)
                {
                  struct passwd *p;
index f1c2951b392fba7e8bfa2f5a7a039f7ef4d0b361..9c66f865ab384f3f0ed30d5df712d1ff846c9a75 100644 (file)
@@ -25,7 +25,7 @@
    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;
 {
@@ -45,4 +45,6 @@ getlogin_r (name, name_len)
   memcpy (name, login, len);
   return 0;
 }
-libc_hidden_def (getlogin_r)
+libc_hidden_def (__getlogin_r)
+weak_alias (__getlogin_r, getlogin_r)
+libc_hidden_weak (getlogin_r)
index 4a31d254eeef7d2c31324c24b87ba937e7edbf48..8bb3de5e75c490d788f853ce394cab3db6025f66 100644 (file)
@@ -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
index 2c52b2183b1ce143432625d5e21c15005a02c0ee..aa61f6134dd1c60687472c17dc8d568a009e9d13 100644 (file)
@@ -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)