diff --git a/ChangeLog b/ChangeLog index 68a25ba2..ea829baa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-04-11 Nicolas François + + * libmisc/getgr_nam_gid.c: Added support for NULL argument. + * libmisc/chowntty.c: Reuse getgr_nam_gid(), and get rid of atol(). + 2009-04-11 Peter Vrabec * libmisc/find_new_gid.c, libmisc/find_new_uid.c: For system diff --git a/libmisc/chowntty.c b/libmisc/chowntty.c index 3d4da107..6b97ab76 100644 --- a/libmisc/chowntty.c +++ b/libmisc/chowntty.c @@ -2,7 +2,7 @@ * Copyright (c) 1989 - 1994, Julianne Frances Haugh * Copyright (c) 1996 - 2001, Marek Michałkiewicz * Copyright (c) 2003 - 2005, Tomasz Kłoczko - * Copyright (c) 2007 - 2008, Nicolas François + * Copyright (c) 2007 - 2009, Nicolas François * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -51,7 +51,6 @@ void chown_tty (const struct passwd *info) { - char *group; /* TTY group name or number */ struct group *grent; gid_t gid; @@ -60,18 +59,11 @@ void chown_tty (const struct passwd *info) * ID. Otherwise, use the user's primary group ID. */ - group = getdef_str ("TTYGROUP"); - if (NULL == group) { - gid = info->pw_gid; - } else if ((group[0] >= '0') && (group[0] <= '9')) { - gid = (gid_t) atol (group); + grent = getgr_nam_gid (getdef_str ("TTYGROUP")); + if (NULL != grent) { + gid = grent->gr_gid; } else { - grent = getgrnam (group); /* local, no need for xgetgrnam */ - if (NULL != grent) { - gid = grent->gr_gid; - } else { - gid = info->pw_gid; - } + gid = info->pw_gid; } /* diff --git a/libmisc/getgr_nam_gid.c b/libmisc/getgr_nam_gid.c index 7120304c..5398a2d9 100644 --- a/libmisc/getgr_nam_gid.c +++ b/libmisc/getgr_nam_gid.c @@ -49,6 +49,10 @@ extern struct group *getgr_nam_gid (const char *grname) long long int gid; char *endptr; + if (NULL == grname) { + return NULL; + } + errno = 0; gid = strtoll (grname, &endptr, 10); if ( ('\0' != *grname)