1 /* Look up user and/or group names.
2 Copyright (C) 1988, 1992 Free Software Foundation
6 GNU Tar is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Library General Public License as published
8 by the Free Software Foundation; either version 2, or (at your option)
11 GNU Tar is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU Library General Public License for more details.
16 * Namespace: finduname, finduid, findgname, findgid.
20 * Look up user and/or group names.
22 * This file should be modified for non-unix systems to do something
27 #include <sys/types.h>
45 static int saveuid
= -993;
46 static char saveuname
[TUNMLEN
];
47 static int my_uid
= -993;
49 static int savegid
= -993;
50 static char savegname
[TGNMLEN
];
51 static int my_gid
= -993;
53 #define myuid ( my_uid < 0? (my_uid = getuid()): my_uid )
54 #define mygid ( my_gid < 0? (my_gid = getgid()): my_gid )
57 * Look up a user or group name from a uid/gid, maintaining a cache.
58 * FIXME, for now it's a one-entry cache.
59 * FIXME2, the "-993" is to reduce the chance of a hit on the first lookup.
61 void finduname (char *uname
, int uid
)
70 strncpy (saveuname
, pw
->pw_name
, TUNMLEN
);
72 strncpy (uname
, saveuname
, TUNMLEN
);
75 int finduid (char *uname
)
78 extern struct passwd
*getpwnam ();
80 if (uname
[0] != saveuname
[0]/* Quick test w/o proc call */
81 ||0 != strncmp (uname
, saveuname
, TUNMLEN
)) {
82 strncpy (saveuname
, uname
, TUNMLEN
);
83 pw
= getpwnam (uname
);
94 void findgname (char *gname
, int gid
)
104 strncpy (savegname
, gr
->gr_name
, TGNMLEN
);
106 (void) strncpy (gname
, savegname
, TGNMLEN
);
110 int findgid (char *gname
)
113 extern struct group
*getgrnam ();
115 if (gname
[0] != savegname
[0]/* Quick test w/o proc call */
116 ||0 != strncmp (gname
, savegname
, TUNMLEN
)) {
117 strncpy (savegname
, gname
, TUNMLEN
);
118 gr
= getgrnam (gname
);
120 savegid
= gr
->gr_gid
;