mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-18 17:24:29 +03:00
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.
This commit is contained in:
17
ChangeLog
17
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>
|
2015-06-12 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
[BZ #18512]
|
[BZ #18512]
|
||||||
|
|||||||
2
NEWS
2
NEWS
@@ -21,7 +21,7 @@ Version 2.22
|
|||||||
18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
|
18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
|
||||||
18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
|
18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
|
||||||
18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507,
|
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
|
* Cache information can be queried via sysconf() function on s390 e.g. with
|
||||||
_SC_LEVEL1_ICACHE_SIZE as argument.
|
_SC_LEVEL1_ICACHE_SIZE as argument.
|
||||||
|
|||||||
@@ -345,15 +345,11 @@ test-xfail-XOPEN2K/ndbm.h/linknamespace = yes
|
|||||||
test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
|
test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
|
||||||
|
|
||||||
# Unsorted expected failures.
|
# Unsorted expected failures.
|
||||||
test-xfail-XPG3/glob.h/linknamespace = yes
|
|
||||||
test-xfail-XPG3/unistd.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/fmtmsg.h/linknamespace = yes
|
||||||
test-xfail-XPG4/glob.h/linknamespace = yes
|
|
||||||
test-xfail-XPG4/netdb.h/linknamespace = yes
|
test-xfail-XPG4/netdb.h/linknamespace = yes
|
||||||
test-xfail-XPG4/syslog.h/linknamespace = yes
|
test-xfail-XPG4/syslog.h/linknamespace = yes
|
||||||
test-xfail-XPG4/unistd.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/mqueue.h/linknamespace = yes
|
||||||
test-xfail-POSIX/semaphore.h/linknamespace = yes
|
test-xfail-POSIX/semaphore.h/linknamespace = yes
|
||||||
test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
|
test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ libc_hidden_proto (execvp)
|
|||||||
libc_hidden_proto (getpid)
|
libc_hidden_proto (getpid)
|
||||||
libc_hidden_proto (getsid)
|
libc_hidden_proto (getsid)
|
||||||
libc_hidden_proto (getdomainname)
|
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 (getlogin_r)
|
||||||
libc_hidden_proto (seteuid)
|
libc_hidden_proto (seteuid)
|
||||||
libc_hidden_proto (setegid)
|
libc_hidden_proto (setegid)
|
||||||
|
|||||||
@@ -23,13 +23,15 @@
|
|||||||
If it cannot be determined or some other error occurred, return the error
|
If it cannot be determined or some other error occurred, return the error
|
||||||
code. Otherwise return 0. */
|
code. Otherwise return 0. */
|
||||||
int
|
int
|
||||||
getlogin_r (name, name_len)
|
__getlogin_r (name, name_len)
|
||||||
char *name;
|
char *name;
|
||||||
size_t name_len;
|
size_t name_len;
|
||||||
{
|
{
|
||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return errno;
|
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)
|
stub_warning (getlogin_r)
|
||||||
|
|||||||
@@ -619,7 +619,7 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
buflen = 20;
|
buflen = 20;
|
||||||
name = alloca_account (buflen, alloca_used);
|
name = alloca_account (buflen, alloca_used);
|
||||||
|
|
||||||
success = getlogin_r (name, buflen) == 0;
|
success = __getlogin_r (name, buflen) == 0;
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
struct passwd *p;
|
struct passwd *p;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
If it cannot be determined or some other error occurred, return the error
|
If it cannot be determined or some other error occurred, return the error
|
||||||
code. Otherwise return 0. */
|
code. Otherwise return 0. */
|
||||||
int
|
int
|
||||||
getlogin_r (name, name_len)
|
__getlogin_r (name, name_len)
|
||||||
char *name;
|
char *name;
|
||||||
size_t name_len;
|
size_t name_len;
|
||||||
{
|
{
|
||||||
@@ -45,4 +45,6 @@ getlogin_r (name, name_len)
|
|||||||
memcpy (name, login, len);
|
memcpy (name, login, len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
libc_hidden_def (getlogin_r)
|
libc_hidden_def (__getlogin_r)
|
||||||
|
weak_alias (__getlogin_r, getlogin_r)
|
||||||
|
libc_hidden_weak (getlogin_r)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
STATIC
|
STATIC
|
||||||
#endif
|
#endif
|
||||||
int
|
int
|
||||||
getlogin_r (name, name_len)
|
__getlogin_r (name, name_len)
|
||||||
char *name;
|
char *name;
|
||||||
size_t name_len;
|
size_t name_len;
|
||||||
{
|
{
|
||||||
@@ -99,5 +99,7 @@ getlogin_r (name, name_len)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#ifndef STATIC
|
#ifndef STATIC
|
||||||
libc_hidden_def (getlogin_r)
|
libc_hidden_def (__getlogin_r)
|
||||||
|
weak_alias (__getlogin_r, getlogin_r)
|
||||||
|
libc_hidden_weak (getlogin_r)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
|
|
||||||
#define STATIC static
|
#define STATIC static
|
||||||
static int getlogin_r_fd0 (char *name, size_t namesize);
|
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>
|
#include <sysdeps/unix/getlogin_r.c>
|
||||||
#undef getlogin_r
|
#undef __getlogin_r
|
||||||
|
|
||||||
|
|
||||||
/* Try to determine login name from /proc/self/loginuid and return 0
|
/* 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. */
|
code. Otherwise return 0. */
|
||||||
|
|
||||||
int
|
int
|
||||||
getlogin_r (name, namesize)
|
__getlogin_r (name, namesize)
|
||||||
char *name;
|
char *name;
|
||||||
size_t namesize;
|
size_t namesize;
|
||||||
{
|
{
|
||||||
@@ -119,4 +119,6 @@ getlogin_r (name, namesize)
|
|||||||
|
|
||||||
return getlogin_r_fd0 (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)
|
||||||
|
|||||||
Reference in New Issue
Block a user