Changeset 1765 in MondoRescue for branches/2.2.5/mindi-busybox/libbb/bb_pwd.c


Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

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

    r821 r1765  
    55 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
    66 *
    7  * Licensed under the GPL v2, see the file LICENSE in this tarball.
     7 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
    88 */
    99
     10#include "libbb.h"
    1011
    11 #ifdef L_bb_getgrgid
    12   /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more
    13   * flexible :
    14   *
    15   * if bufsize is > 0 char *group cannot be set to NULL.
    16   *                   On success groupname is written on static allocated buffer
    17   *                   group (and a pointer to it is returned).
    18   *                   On failure gid as string is written to static allocated
    19   *                   buffer group and NULL is returned.
    20   * if bufsize is = 0 char *group can be set to NULL.
    21   *                   On success groupname is returned.
    22   *                   On failure NULL is returned.
    23   * if bufsize is < 0 char *group can be set to NULL.
    24   *                   On success groupname is returned.
    25   *                   On failure an error message is printed and
    26   *                   the program exits.
    27   */
     12#define assert(x) ((void)0)
    2813
    29 #include "libbb.h"
    30 #include "grp_.h"
     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 */
     27static char* bb_getug(char *buffer, int bufsize, char *idname, long id, char prefix)
     28{
     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;
     39}
    3140
     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 */
     48char* bb_getpwuid(char *name, int bufsize, long uid)
     49{
     50    struct passwd *myuser = getpwuid(uid);
     51
     52    return bb_getug(name, bufsize,
     53            (myuser ? myuser->pw_name : (char*)myuser),
     54            uid, 'u');
     55}
    3256/* gets a groupname given a gid */
    33 char * bb_getgrgid(char *group, long gid, int bufsize)
     57char* bb_getgrgid(char *group, int bufsize, long gid)
    3458{
    3559    struct group *mygroup = getgrgid(gid);
    3660
    37     return  bb_getug(group, (mygroup) ?
    38             mygroup->gr_name : (char *)mygroup, gid, bufsize, 'g');
     61    return bb_getug(group, bufsize,
     62            (mygroup ? mygroup->gr_name : (char*)mygroup),
     63            gid, 'g');
    3964}
    40 #endif /* L_bb_getgrgid */
    41 
    42 #ifdef L_bb_xgetgrnam
    43 #include <stdio.h>
    44 #include <string.h>
    45 #include "libbb.h"
    46 #include "pwd_.h"
    47 #include "grp_.h"
    48 
    4965
    5066/* returns a gid given a group name */
    51 long bb_xgetgrnam(const char *name)
     67long xgroup2gid(const char *name)
    5268{
    5369    struct group *mygroup;
    5470
    55     mygroup  = getgrnam(name);
    56     if (mygroup==NULL)
     71    mygroup = getgrnam(name);
     72    if (mygroup == NULL)
    5773        bb_error_msg_and_die("unknown group name: %s", name);
    5874
    59     return (mygroup->gr_gid);
     75    return mygroup->gr_gid;
    6076}
    61 #endif /* L_bb_xgetgrnam */
    62 
    63 #ifdef L_bb_xgetpwnam
    64 #include <stdio.h>
    65 #include <string.h>
    66 #include "libbb.h"
    67 #include "pwd_.h"
    68 #include "grp_.h"
    69 
    7077
    7178/* returns a uid given a username */
    72 long bb_xgetpwnam(const char *name)
     79long xuname2uid(const char *name)
    7380{
    7481    struct passwd *myuser;
    7582
    76     myuser  = getpwnam(name);
    77     if (myuser==NULL)
     83    myuser = getpwnam(name);
     84    if (myuser == NULL)
    7885        bb_error_msg_and_die("unknown user name: %s", name);
    7986
    8087    return myuser->pw_uid;
    8188}
    82 #endif /* L_bb_xgetpwnam */
    83 
    84 #ifdef L_bb_getpwuid
    85  /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more
    86   * flexible :
    87   *
    88   * if bufsize is > 0 char *name can not be set to NULL.
    89   *                   On success username is written on the static allocated
    90   *                   buffer name (and a pointer to it is returned).
    91   *                   On failure uid as string is written to the static
    92   *                   allocated buffer name and NULL is returned.
    93   * if bufsize is = 0 char *name can be set to NULL.
    94   *                   On success username is returned.
    95   *                   On failure NULL is returned.
    96   * if bufsize is < 0 char *name can be set to NULL
    97   *                   On success username is returned.
    98   *                   On failure an error message is printed and
    99   *                   the program exits.
    100   */
    101 
    102 #include "libbb.h"
    103 #include "pwd_.h"
    104 
    105 /* gets a username given a uid */
    106 char * bb_getpwuid(char *name, long uid, int bufsize)
    107 {
    108     struct passwd *myuser = getpwuid(uid);
    109 
    110     return  bb_getug(name, (myuser) ?
    111             myuser->pw_name : (char *)myuser , uid, bufsize, 'u');
    112 }
    113 #endif /* L_bb_getpwuid */
    114 
    115 #ifdef L_bb_getug
    116  /*
    117   * if bufsize is > 0 char *buffer can not be set to NULL.
    118   *                   If idname is not NULL it is written on the static
    119   *                   allocated buffer (and a pointer to it is returned).
    120   *                   if idname is NULL, id as string is written to the static
    121   *                   allocated buffer and NULL is returned.
    122   * if bufsize is = 0 char *buffer can be set to NULL.
    123   *                   If idname exists a pointer to it is returned,
    124   *                   else NULL is returned.
    125   * if bufsize is < 0 char *buffer can be set to NULL.
    126   *                   If idname exists a pointer to it is returned,
    127   *                   else an error message is printed and the program exits.
    128   */
    129 
    130 #include <stdio.h>
    131 #include <assert.h>
    132 #include "libbb.h"
    133 
    134 
    135 /* internal function for bb_getpwuid and bb_getgrgid */
    136 char * bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix)
    137 {
    138     if(bufsize > 0 ) {
    139         assert(buffer!=NULL);
    140         if(idname) {
    141             return safe_strncpy(buffer, idname, bufsize);
    142         }
    143         snprintf(buffer, bufsize, "%ld", id);
    144     } else if(bufsize < 0 && !idname) {
    145         bb_error_msg_and_die("unknown %cid %ld", prefix, id);
    146     }
    147     return idname;
    148 }
    149 #endif /* L_bb_getug */
    150 
    151 
    152 #ifdef L_get_ug_id
    153 /* indirect dispatcher for pwd helpers.  */
    154 #include <stdlib.h>
    155 #include "libbb.h"
    15689
    15790unsigned long get_ug_id(const char *s,
    158         long (*__bb_getxxnam)(const char *))
     91        long (*xname2id)(const char *))
    15992{
    16093    unsigned long r;
    161     char *p;
    16294
    163     r = strtoul(s, &p, 10);
    164     if (*p || (s == p)) {
    165         r = __bb_getxxnam(s);
    166     }
    167 
     95    r = bb_strtoul(s, NULL, 10);
     96    if (errno)
     97        return xname2id(s);
    16898    return r;
    16999}
    170 #endif /* L_get_ug_id */
Note: See TracChangeset for help on using the changeset viewer.