Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Commit

Permalink
Handle multiple user names with the same UID better. (#319535, Laszlo
Browse files Browse the repository at this point in the history
2005-12-04  Matthias Clasen  <mclasen@redhat.com>

	Handle multiple user names with the same UID better.
	(#319535, Laszlo Peter)

	* glib/gutils.c (g_get_any_init_do): When determining user
	data, first look up $LOGNAME. If the UID doesn't match
	getuid(), fall back to the current behaviour of looking
	up the user data based on getuid().
  • Loading branch information
Matthias Clasen authored and Matthias Clasen committed Dec 4, 2005
1 parent 00f952f commit 8529c47
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 4 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
@@ -1,3 +1,13 @@
2005-12-04 Matthias Clasen <mclasen@redhat.com>

Handle multiple user names with the same UID better.
(#319535, Laszlo Peter)

* glib/gutils.c (g_get_any_init_do): When determining user
data, first look up $LOGNAME. If the UID doesn't match
getuid(), fall back to the current behaviour of looking
up the user data based on getuid().

2005-12-04 Matthias Clasen <mclasen@redhat.com>

* glib/gmacros.h (G_GNUC_WARN_UNUSED_RESULT): Add a macro
Expand Down
10 changes: 10 additions & 0 deletions ChangeLog.pre-2-10
@@ -1,3 +1,13 @@
2005-12-04 Matthias Clasen <mclasen@redhat.com>

Handle multiple user names with the same UID better.
(#319535, Laszlo Peter)

* glib/gutils.c (g_get_any_init_do): When determining user
data, first look up $LOGNAME. If the UID doesn't match
getuid(), fall back to the current behaviour of looking
up the user data based on getuid().

2005-12-04 Matthias Clasen <mclasen@redhat.com>

* glib/gmacros.h (G_GNUC_WARN_UNUSED_RESULT): Add a macro
Expand Down
10 changes: 10 additions & 0 deletions ChangeLog.pre-2-12
@@ -1,3 +1,13 @@
2005-12-04 Matthias Clasen <mclasen@redhat.com>

Handle multiple user names with the same UID better.
(#319535, Laszlo Peter)

* glib/gutils.c (g_get_any_init_do): When determining user
data, first look up $LOGNAME. If the UID doesn't match
getuid(), fall back to the current behaviour of looking
up the user data based on getuid().

2005-12-04 Matthias Clasen <mclasen@redhat.com>

* glib/gmacros.h (G_GNUC_WARN_UNUSED_RESULT): Add a macro
Expand Down
27 changes: 23 additions & 4 deletions glib/gutils.c
Expand Up @@ -1555,7 +1555,8 @@ g_get_any_init_do (void)
struct passwd *pw = NULL;
gpointer buffer = NULL;
gint error;

gchar *logname;

# if defined (HAVE_POSIX_GETPWUID_R) || defined (HAVE_NONPOSIX_GETPWUID_R)
struct passwd pwd;
# ifdef _SC_GETPW_R_SIZE_MAX
Expand All @@ -1567,7 +1568,9 @@ g_get_any_init_do (void)
# else /* _SC_GETPW_R_SIZE_MAX */
glong bufsize = 64;
# endif /* _SC_GETPW_R_SIZE_MAX */


logname = (gchar *) g_getenv ("LOGNAME");

do
{
g_free (buffer);
Expand All @@ -1578,15 +1581,31 @@ g_get_any_init_do (void)
errno = 0;

# ifdef HAVE_POSIX_GETPWUID_R
error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
if (logname) {
error = getpwnam_r (logname, &pwd, buffer, bufsize, &pw);
if (!pw || (pw->pw_uid != getuid ())) {
/* LOGNAME is lying, fall back to looking up the uid */
error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
}
} else {
error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
}
error = error < 0 ? errno : error;
# else /* HAVE_NONPOSIX_GETPWUID_R */
/* HPUX 11 falls into the HAVE_POSIX_GETPWUID_R case */
# if defined(_AIX) || defined(__hpux)
error = getpwuid_r (getuid (), &pwd, buffer, bufsize);
pw = error == 0 ? &pwd : NULL;
# else /* !_AIX */
pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
if (logname) {
pw = getpwnam_r (logname, &pwd, buffer, bufsize);
if (!pw || (pw->pw_uid != getuid ())) {
/* LOGNAME is lying, fall back to looking up the uid */
pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
}
} else {
pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
}
error = pw ? 0 : errno;
# endif /* !_AIX */
# endif /* HAVE_NONPOSIX_GETPWUID_R */
Expand Down

0 comments on commit 8529c47

Please sign in to comment.