Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/libbb/bb_pwd.c


Ignore:
Timestamp:
Feb 25, 2011, 9:26:54 PM (13 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.18.3 to avoid problems with the tar command which is now failing on recent versions with busybox 1.7.3
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mindi-busybox/libbb/bb_pwd.c

    r1765 r2725  
    44 *
    55 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
     6 * Copyright (C) 2008 by Tito Ragusa <farmatito@tiscali.it>
    67 *
    7  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
     8 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
    89 */
    910
    1011#include "libbb.h"
    1112
    12 #define assert(x) ((void)0)
     13/* TODO: maybe change API to return malloced data?
     14 * This will allow to stop using libc functions returning
     15 * pointers to static data (getpwuid)
     16 */
    1317
    14 /* internal function for bb_getpwuid and bb_getgrgid */
    15 /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more
    16  * flexible:
    17  *
    18  * bufsize > 0:      If idname is not NULL it is copied to buffer,
    19  *                   and buffer is returned. Else id as string is written
    20  *                   to buffer, and NULL is returned.
    21  *
    22  * bufsize == 0:     idname is returned.
    23  *
    24  * bufsize < 0:      If idname is not NULL it is returned.
    25  *                   Else an error message is printed and the program exits.
    26  */
    27 static char* bb_getug(char *buffer, int bufsize, char *idname, long id, char prefix)
     18struct passwd* FAST_FUNC xgetpwnam(const char *name)
    2819{
    29     if (bufsize > 0) {
    30         assert(buffer != NULL);
    31         if (idname) {
    32             return safe_strncpy(buffer, idname, bufsize);
    33         }
    34         snprintf(buffer, bufsize, "%ld", id);
    35     } else if (bufsize < 0 && !idname) {
    36         bb_error_msg_and_die("unknown %cid %ld", prefix, id);
    37     }
    38     return idname;
     20    struct passwd *pw = getpwnam(name);
     21    if (!pw)
     22        bb_error_msg_and_die("unknown user %s", name);
     23    return pw;
    3924}
    4025
    41 /* bb_getpwuid, bb_getgrgid:
    42  * bb_getXXXid(buf, bufsz, id) - copy user/group name or id
    43  *               as a string to buf, return user/group name or NULL
    44  * bb_getXXXid(NULL, 0, id) - return user/group name or NULL
    45  * bb_getXXXid(NULL, -1, id) - return user/group name or exit
    46  */
    47 /* gets a username given a uid */
    48 char* bb_getpwuid(char *name, int bufsize, long uid)
     26struct group* FAST_FUNC xgetgrnam(const char *name)
    4927{
    50     struct passwd *myuser = getpwuid(uid);
    51 
    52     return bb_getug(name, bufsize,
    53             (myuser ? myuser->pw_name : (char*)myuser),
    54             uid, 'u');
    55 }
    56 /* gets a groupname given a gid */
    57 char* bb_getgrgid(char *group, int bufsize, long gid)
    58 {
    59     struct group *mygroup = getgrgid(gid);
    60 
    61     return bb_getug(group, bufsize,
    62             (mygroup ? mygroup->gr_name : (char*)mygroup),
    63             gid, 'g');
     28    struct group *gr = getgrnam(name);
     29    if (!gr)
     30        bb_error_msg_and_die("unknown group %s", name);
     31    return gr;
    6432}
    6533
    66 /* returns a gid given a group name */
    67 long xgroup2gid(const char *name)
     34
     35struct passwd* FAST_FUNC xgetpwuid(uid_t uid)
     36{
     37    struct passwd *pw = getpwuid(uid);
     38    if (!pw)
     39        bb_error_msg_and_die("unknown uid %u", (unsigned)uid);
     40    return pw;
     41}
     42
     43struct group* FAST_FUNC xgetgrgid(gid_t gid)
     44{
     45    struct group *gr = getgrgid(gid);
     46    if (!gr)
     47        bb_error_msg_and_die("unknown gid %u", (unsigned)gid);
     48    return gr;
     49}
     50
     51char* FAST_FUNC xuid2uname(uid_t uid)
     52{
     53    struct passwd *pw = xgetpwuid(uid);
     54    return pw->pw_name;
     55}
     56
     57char* FAST_FUNC xgid2group(gid_t gid)
     58{
     59    struct group *gr = xgetgrgid(gid);
     60    return gr->gr_name;
     61}
     62
     63char* FAST_FUNC uid2uname(uid_t uid)
     64{
     65    struct passwd *pw = getpwuid(uid);
     66    return (pw) ? pw->pw_name : NULL;
     67}
     68
     69char* FAST_FUNC gid2group(gid_t gid)
     70{
     71    struct group *gr = getgrgid(gid);
     72    return (gr) ? gr->gr_name : NULL;
     73}
     74
     75char* FAST_FUNC uid2uname_utoa(long uid)
     76{
     77    char *name = uid2uname(uid);
     78    return (name) ? name : utoa(uid);
     79}
     80
     81char* FAST_FUNC gid2group_utoa(long gid)
     82{
     83    char *name = gid2group(gid);
     84    return (name) ? name : utoa(gid);
     85}
     86
     87long FAST_FUNC xuname2uid(const char *name)
     88{
     89    struct passwd *myuser;
     90
     91    myuser = xgetpwnam(name);
     92    return myuser->pw_uid;
     93}
     94
     95long FAST_FUNC xgroup2gid(const char *name)
    6896{
    6997    struct group *mygroup;
    7098
    71     mygroup = getgrnam(name);
    72     if (mygroup == NULL)
    73         bb_error_msg_and_die("unknown group name: %s", name);
    74 
     99    mygroup = xgetgrnam(name);
    75100    return mygroup->gr_gid;
    76101}
    77102
    78 /* returns a uid given a username */
    79 long xuname2uid(const char *name)
    80 {
    81     struct passwd *myuser;
    82 
    83     myuser = getpwnam(name);
    84     if (myuser == NULL)
    85         bb_error_msg_and_die("unknown user name: %s", name);
    86 
    87     return myuser->pw_uid;
    88 }
    89 
    90 unsigned long get_ug_id(const char *s,
    91         long (*xname2id)(const char *))
     103unsigned long FAST_FUNC get_ug_id(const char *s,
     104        long FAST_FUNC (*xname2id)(const char *))
    92105{
    93106    unsigned long r;
Note: See TracChangeset for help on using the changeset viewer.