This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.11-354-gaa6436d
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 9 Apr 2010 02:05:04 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.11-354-gaa6436d
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via aa6436d6adc6570e5c934d02a656b4569ee703e6 (commit)
from ad3d3e8f20c95aae9d26970c169bca6f48072681 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=aa6436d6adc6570e5c934d02a656b4569ee703e6
commit aa6436d6adc6570e5c934d02a656b4569ee703e6
Author: Ulrich Drepper <drepper@redhat.com>
Date: Thu Apr 8 19:04:33 2010 -0700
Fix reading loginuid file in getlogin{,_r}.
diff --git a/ChangeLog b/ChangeLog
index 9d83777..540d1b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2010-04-08 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): When
+ reading the loginuid file use a buffer which is always large enough.
+ NUL-terminate the string.
+
* malloc/malloc.c (_int_malloc): Return NULL if printing error message
returns.
diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c
index d07846c..d9c66fe 100644
--- a/sysdeps/unix/sysv/linux/getlogin_r.c
+++ b/sysdeps/unix/sysv/linux/getlogin_r.c
@@ -37,13 +37,20 @@ __getlogin_r_loginuid (name, namesize)
if (fd == -1)
return 1;
- ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, name, namesize));
+ /* We are reading a 32-bit number. 12 bytes are enough for the text
+ representation. If not, something is wrong. */
+ char uidbuf[12];
+ ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, uidbuf,
+ sizeof (uidbuf)));
close_not_cancel_no_status (fd);
uid_t uid;
char *endp;
if (n <= 0
- || (uid = strtoul (name, &endp, 10), endp == name || *endp != '\0'))
+ || n == sizeof (uidbuf)
+ || (uidbuf[n] = '\0',
+ uid = strtoul (uidbuf, &endp, 10),
+ endp == uidbuf || *endp != '\0'))
return 1;
size_t buflen = 1024;
@@ -84,8 +91,9 @@ __getlogin_r_loginuid (name, namesize)
}
-/* Return the login name of the user, or NULL if it can't be determined.
- The returned pointer, if not NULL, is good only until the next call. */
+/* Return at most NAME_LEN characters of the login name of the user in NAME.
+ If it cannot be determined or some other error occurred, return the error
+ code. Otherwise return 0. */
int
getlogin_r (name, namesize)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 4 ++++
sysdeps/unix/sysv/linux/getlogin_r.c | 16 ++++++++++++----
2 files changed, 16 insertions(+), 4 deletions(-)
hooks/post-receive
--
GNU C Library master sources