Add in a patch to make busybox use the normal pwd.h and grp.h
functions. Add in simple implementations of these functions, which can, optionally, be used instead of the system versions. -Erik
This commit is contained in:
parent
3654ca56fa
commit
ab050f5522
28
Makefile
28
Makefile
@ -42,6 +42,17 @@ DOSTATIC = false
|
|||||||
# Do not enable this for production builds...
|
# Do not enable this for production builds...
|
||||||
DODEBUG = false
|
DODEBUG = false
|
||||||
|
|
||||||
|
# Setting this to `true' will cause busybox to directly use the system's
|
||||||
|
# password and group functions. Assuming you use GNU libc, when this is
|
||||||
|
# `true', you will need to install the /etc/nsswitch.conf configuration file
|
||||||
|
# and the required libnss_* libraries. This generally makes your embedded
|
||||||
|
# system quite a bit larger... If you leave this off, busybox will directly
|
||||||
|
# use the /etc/password, /etc/group files (and your system will be smaller, and
|
||||||
|
# I will get fewer emails asking about how glibc NSS works). Enabling this adds
|
||||||
|
# just 1.4k to the binary size (which is a _lot_ less then glibc NSS costs),
|
||||||
|
# Most people will want to leave this set to false.
|
||||||
|
USE_SYSTEM_PWD_GRP = false
|
||||||
|
|
||||||
# This enables compiling with dmalloc ( http://dmalloc.com/ )
|
# This enables compiling with dmalloc ( http://dmalloc.com/ )
|
||||||
# which is an excellent public domain mem leak and malloc problem
|
# which is an excellent public domain mem leak and malloc problem
|
||||||
# detector. To enable dmalloc, before running busybox you will
|
# detector. To enable dmalloc, before running busybox you will
|
||||||
@ -158,10 +169,20 @@ ifdef BB_INIT_SCRIPT
|
|||||||
CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"'
|
CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(USE_SYSTEM_PWD_GRP),true)
|
||||||
|
PWD_LIB = pwd_grp/libpwd.a
|
||||||
|
LIBRARIES += $(PWD_LIB)
|
||||||
|
else
|
||||||
|
CFLAGS += -DUSE_SYSTEM_PWD_GRP
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Put user-supplied flags at the end, where they
|
# Put user-supplied flags at the end, where they
|
||||||
# have a chance of winning.
|
# have a chance of winning.
|
||||||
CFLAGS += $(CFLAGS_EXTRA)
|
CFLAGS += $(CFLAGS_EXTRA)
|
||||||
|
|
||||||
|
.EXPORT_ALL_VARIABLES:
|
||||||
|
|
||||||
all: busybox busybox.links doc
|
all: busybox busybox.links doc
|
||||||
|
|
||||||
doc: olddoc
|
doc: olddoc
|
||||||
@ -220,15 +241,19 @@ docs/busybox/busyboxdocumentation.html: docs/busybox.sgml
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
busybox: $(OBJECTS)
|
busybox: $(PWD_LIB) $(OBJECTS)
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBRARIES)
|
$(CC) $(LDFLAGS) -o $@ $^ $(LIBRARIES)
|
||||||
$(STRIP)
|
$(STRIP)
|
||||||
|
|
||||||
|
$(PWD_LIB):
|
||||||
|
$(MAKE) -eC pwd_grp
|
||||||
|
|
||||||
busybox.links: Config.h applets.h
|
busybox.links: Config.h applets.h
|
||||||
- $(BB_SRC_DIR)/busybox.mkll $(CONFIG_H) $(BB_SRC_DIR)/applets.h >$@
|
- $(BB_SRC_DIR)/busybox.mkll $(CONFIG_H) $(BB_SRC_DIR)/applets.h >$@
|
||||||
|
|
||||||
nfsmount.o cmdedit.o: %.o: %.h
|
nfsmount.o cmdedit.o: %.o: %.h
|
||||||
$(OBJECTS): %.o: %.c Config.h busybox.h applets.h Makefile
|
$(OBJECTS): %.o: %.c Config.h busybox.h applets.h Makefile
|
||||||
|
$(CC) $(CFLAGS) -c $*.c -o $*.o
|
||||||
|
|
||||||
utility.o: loop.h
|
utility.o: loop.h
|
||||||
|
|
||||||
@ -240,6 +265,7 @@ test tests:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
- cd tests && $(MAKE) clean
|
- cd tests && $(MAKE) clean
|
||||||
|
- cd pwd_grp && $(MAKE) clean
|
||||||
- rm -f docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html \
|
- rm -f docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html \
|
||||||
docs/busybox.lineo.com/BusyBox.html
|
docs/busybox.lineo.com/BusyBox.html
|
||||||
- rm -f docs/busybox.txt docs/busybox.dvi docs/busybox.ps \
|
- rm -f docs/busybox.txt docs/busybox.dvi docs/busybox.ps \
|
||||||
|
@ -29,8 +29,6 @@
|
|||||||
#include "messages.c"
|
#include "messages.c"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <grp.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
|
|
||||||
static long uid = -1;
|
static long uid = -1;
|
||||||
|
10
cmdedit.c
10
cmdedit.c
@ -54,10 +54,6 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BB_FEATURE_USERNAME_COMPLETION
|
|
||||||
#include <pwd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const int MAX_HISTORY = 15; /* Maximum length of the linked list for the command line history */
|
static const int MAX_HISTORY = 15; /* Maximum length of the linked list for the command line history */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -354,10 +350,10 @@ static char** username_tab_completion(char *ud, int *num_matches)
|
|||||||
char *temp;
|
char *temp;
|
||||||
int nm = 0;
|
int nm = 0;
|
||||||
|
|
||||||
setpwent ();
|
bb_setpwent ();
|
||||||
userlen = strlen (ud + 1);
|
userlen = strlen (ud + 1);
|
||||||
|
|
||||||
while ((entry = getpwent ()) != NULL) {
|
while ((entry = bb_getpwent ()) != NULL) {
|
||||||
/* Null usernames should result in all users as possible completions. */
|
/* Null usernames should result in all users as possible completions. */
|
||||||
if (!userlen || !strncmp (ud + 1, entry->pw_name, userlen)) {
|
if (!userlen || !strncmp (ud + 1, entry->pw_name, userlen)) {
|
||||||
|
|
||||||
@ -369,7 +365,7 @@ static char** username_tab_completion(char *ud, int *num_matches)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
endpwent ();
|
bb_endpwent ();
|
||||||
(*num_matches) = nm;
|
(*num_matches) = nm;
|
||||||
return (matches);
|
return (matches);
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
/*struct passwd *getpwnam();*/
|
/*struct passwd *getpwnam();*/
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
#define RW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
|
#define RW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
extern int whoami_main(int argc, char **argv)
|
extern int whoami_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
2
id.c
2
id.c
@ -23,8 +23,6 @@
|
|||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
47
include/grp.h
Normal file
47
include/grp.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#ifndef __BB_GRP_H
|
||||||
|
#define __BB_GRP_H
|
||||||
|
|
||||||
|
#if defined USE_SYSTEM_PWD_GRP
|
||||||
|
#include <grp.h>
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define bb_setgrent setgrent
|
||||||
|
#define bb_endgrent endgrent
|
||||||
|
#define bb_getgrent getgrent
|
||||||
|
#define bb_getgrgid getgrgid
|
||||||
|
#define bb_getgrnam getgrnam
|
||||||
|
#define bb_fgetgrent fgetgrent
|
||||||
|
#define bb_setgroups setgroups
|
||||||
|
#define bb_initgroups initgroups
|
||||||
|
#define __bb_getgrent __getgrent
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <features.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* The group structure */
|
||||||
|
struct group
|
||||||
|
{
|
||||||
|
char *gr_name; /* Group name. */
|
||||||
|
char *gr_passwd; /* Password. */
|
||||||
|
gid_t gr_gid; /* Group ID. */
|
||||||
|
char **gr_mem; /* Member list. */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void bb_setgrent __P ((void));
|
||||||
|
extern void bb_endgrent __P ((void));
|
||||||
|
extern struct group * bb_getgrent __P ((void));
|
||||||
|
|
||||||
|
extern struct group * bb_getgrgid __P ((__const gid_t gid));
|
||||||
|
extern struct group * bb_getgrnam __P ((__const char * name));
|
||||||
|
|
||||||
|
extern struct group * bb_fgetgrent __P ((FILE * file));
|
||||||
|
|
||||||
|
extern int bb_setgroups __P ((size_t n, __const gid_t * groups));
|
||||||
|
extern int bb_initgroups __P ((__const char * user, gid_t gid));
|
||||||
|
|
||||||
|
extern struct group * __bb_getgrent __P ((int grp_fd));
|
||||||
|
|
||||||
|
#endif /* USE_SYSTEM_PWD_GRP */
|
||||||
|
#endif /* __BB_GRP_H */
|
||||||
|
|
51
include/pwd.h
Normal file
51
include/pwd.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#ifndef __BB_PWD_H
|
||||||
|
#define __BB_PWD_H
|
||||||
|
|
||||||
|
#if defined USE_SYSTEM_PWD_GRP
|
||||||
|
#include <pwd.h>
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define bb_setpwent setpwent
|
||||||
|
#define bb_endpwent endpwent
|
||||||
|
#define bb_getpwent getpwent
|
||||||
|
#define bb_putpwent putpwent
|
||||||
|
#define bb_getpw getpw
|
||||||
|
#define bb_fgetpwent fgetpwent
|
||||||
|
#define bb_getpwuid getpwuid
|
||||||
|
#define bb_getpwnam getpwnam
|
||||||
|
#define __bb_getpwent __bb_getpwent
|
||||||
|
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <features.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* The passwd structure. */
|
||||||
|
struct passwd
|
||||||
|
{
|
||||||
|
char *pw_name; /* Username. */
|
||||||
|
char *pw_passwd; /* Password. */
|
||||||
|
uid_t pw_uid; /* User ID. */
|
||||||
|
gid_t pw_gid; /* Group ID. */
|
||||||
|
char *pw_gecos; /* Real name. */
|
||||||
|
char *pw_dir; /* Home directory. */
|
||||||
|
char *pw_shell; /* Shell program. */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void bb_setpwent __P ((void));
|
||||||
|
extern void bb_endpwent __P ((void));
|
||||||
|
extern struct passwd * bb_getpwent __P ((void));
|
||||||
|
|
||||||
|
extern int bb_putpwent __P ((__const struct passwd * __p, FILE * __f));
|
||||||
|
extern int bb_getpw __P ((uid_t uid, char *buf));
|
||||||
|
|
||||||
|
extern struct passwd * bb_fgetpwent __P ((FILE * file));
|
||||||
|
|
||||||
|
extern struct passwd * bb_getpwuid __P ((__const uid_t));
|
||||||
|
extern struct passwd * bb_getpwnam __P ((__const char *));
|
||||||
|
|
||||||
|
extern struct passwd * __bb_getpwent __P ((__const int passwd_fd));
|
||||||
|
|
||||||
|
#endif /* USE_SYSTEM_PWD_GRP */
|
||||||
|
#endif /* __BB_PWD_H */
|
||||||
|
|
@ -54,10 +54,6 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BB_FEATURE_USERNAME_COMPLETION
|
|
||||||
#include <pwd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const int MAX_HISTORY = 15; /* Maximum length of the linked list for the command line history */
|
static const int MAX_HISTORY = 15; /* Maximum length of the linked list for the command line history */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -354,10 +350,10 @@ static char** username_tab_completion(char *ud, int *num_matches)
|
|||||||
char *temp;
|
char *temp;
|
||||||
int nm = 0;
|
int nm = 0;
|
||||||
|
|
||||||
setpwent ();
|
bb_setpwent ();
|
||||||
userlen = strlen (ud + 1);
|
userlen = strlen (ud + 1);
|
||||||
|
|
||||||
while ((entry = getpwent ()) != NULL) {
|
while ((entry = bb_getpwent ()) != NULL) {
|
||||||
/* Null usernames should result in all users as possible completions. */
|
/* Null usernames should result in all users as possible completions. */
|
||||||
if (!userlen || !strncmp (ud + 1, entry->pw_name, userlen)) {
|
if (!userlen || !strncmp (ud + 1, entry->pw_name, userlen)) {
|
||||||
|
|
||||||
@ -369,7 +365,7 @@ static char** username_tab_completion(char *ud, int *num_matches)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
endpwent ();
|
bb_endpwent ();
|
||||||
(*num_matches) = nm;
|
(*num_matches) = nm;
|
||||||
return (matches);
|
return (matches);
|
||||||
}
|
}
|
||||||
|
129
utility.c
129
utility.c
@ -52,6 +52,8 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/utsname.h> /* for uname(2) */
|
#include <sys/utsname.h> /* for uname(2) */
|
||||||
|
#include "pwd_grp/pwd.h"
|
||||||
|
#include "pwd_grp/grp.h"
|
||||||
|
|
||||||
/* Busybox mount uses either /proc/filesystems or /dev/mtab to get the
|
/* Busybox mount uses either /proc/filesystems or /dev/mtab to get the
|
||||||
* list of available filesystems used for the -t auto option */
|
* list of available filesystems used for the -t auto option */
|
||||||
@ -856,117 +858,72 @@ extern int parse_mode(const char *s, mode_t * theMode)
|
|||||||
#if defined BB_CHMOD_CHOWN_CHGRP || defined BB_PS || defined BB_LS \
|
#if defined BB_CHMOD_CHOWN_CHGRP || defined BB_PS || defined BB_LS \
|
||||||
|| defined BB_TAR || defined BB_ID || defined BB_LOGGER \
|
|| defined BB_TAR || defined BB_ID || defined BB_LOGGER \
|
||||||
|| defined BB_LOGNAME || defined BB_WHOAMI || defined BB_SH
|
|| defined BB_LOGNAME || defined BB_WHOAMI || defined BB_SH
|
||||||
|
|
||||||
/* This parses entries in /etc/passwd and /etc/group. This is desirable
|
|
||||||
* for BusyBox, since we want to avoid using the glibc NSS stuff, which
|
|
||||||
* increases target size and is often not needed or wanted for embedded
|
|
||||||
* systems.
|
|
||||||
*
|
|
||||||
* /etc/passwd entries look like this:
|
|
||||||
* root:x:0:0:root:/root:/bin/bash
|
|
||||||
* and /etc/group entries look like this:
|
|
||||||
* root:x:0:
|
|
||||||
*
|
|
||||||
* This uses buf as storage to hold things.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
unsigned long my_getid(const char *filename, char *name, long id, long *gid)
|
|
||||||
{
|
|
||||||
FILE *file;
|
|
||||||
char *rname, *start, *end, buf[128];
|
|
||||||
long rid;
|
|
||||||
long rgid = 0;
|
|
||||||
|
|
||||||
file = fopen(filename, "r");
|
|
||||||
if (file == NULL) {
|
|
||||||
/* Do not complain. It is ok for /etc/passwd and
|
|
||||||
* friends to be missing... */
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (fgets(buf, 128, file) != NULL) {
|
|
||||||
if (buf[0] == '#')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* username/group name */
|
|
||||||
start = buf;
|
|
||||||
end = strchr(start, ':');
|
|
||||||
if (end == NULL)
|
|
||||||
continue;
|
|
||||||
*end = '\0';
|
|
||||||
rname = start;
|
|
||||||
|
|
||||||
/* password */
|
|
||||||
start = end + 1;
|
|
||||||
end = strchr(start, ':');
|
|
||||||
if (end == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* uid in passwd, gid in group */
|
|
||||||
start = end + 1;
|
|
||||||
rid = (unsigned long) strtol(start, &end, 10);
|
|
||||||
if (end == start)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* gid in passwd */
|
|
||||||
start = end + 1;
|
|
||||||
rgid = (unsigned long) strtol(start, &end, 10);
|
|
||||||
|
|
||||||
if (name) {
|
|
||||||
if (0 == strcmp(rname, name)) {
|
|
||||||
if (gid) *gid = rgid;
|
|
||||||
fclose(file);
|
|
||||||
return (rid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (id != -1 && id == rid) {
|
|
||||||
strncpy(name, rname, 8);
|
|
||||||
name[8]='\0';
|
|
||||||
if (gid) *gid = rgid;
|
|
||||||
fclose(file);
|
|
||||||
return (TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(file);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* returns a uid given a username */
|
/* returns a uid given a username */
|
||||||
long my_getpwnam(char *name)
|
long my_getpwnam(char *name)
|
||||||
{
|
{
|
||||||
return my_getid("/etc/passwd", name, -1, NULL);
|
struct passwd *myuser;
|
||||||
|
|
||||||
|
myuser = getpwnam(name);
|
||||||
|
if (myuser==NULL)
|
||||||
|
error_msg_and_die( "unknown username: %s\n", name);
|
||||||
|
|
||||||
|
return myuser->pw_uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns a gid given a group name */
|
/* returns a gid given a group name */
|
||||||
long my_getgrnam(char *name)
|
long my_getgrnam(char *name)
|
||||||
{
|
{
|
||||||
return my_getid("/etc/group", name, -1, NULL);
|
struct group *mygroup;
|
||||||
|
|
||||||
|
mygroup = getgrnam(name);
|
||||||
|
if (mygroup==NULL)
|
||||||
|
error_msg_and_die( "unknown group: %s\n", name);
|
||||||
|
|
||||||
|
return (mygroup->gr_gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gets a username given a uid */
|
/* gets a username given a uid */
|
||||||
void my_getpwuid(char *name, long uid)
|
void my_getpwuid(char *name, long uid)
|
||||||
{
|
{
|
||||||
name[0] = '\0';
|
struct passwd *myuser;
|
||||||
my_getid("/etc/passwd", name, uid, NULL);
|
|
||||||
|
myuser = getpwuid(uid);
|
||||||
|
if (myuser==NULL)
|
||||||
|
error_msg_and_die( "unknown uid %ld\n", (long)uid);
|
||||||
|
|
||||||
|
strcpy(name, myuser->pw_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gets a groupname given a gid */
|
/* gets a groupname given a gid */
|
||||||
void my_getgrgid(char *group, long gid)
|
void my_getgrgid(char *group, long gid)
|
||||||
{
|
{
|
||||||
group[0] = '\0';
|
struct group *mygroup;
|
||||||
my_getid("/etc/group", group, gid, NULL);
|
|
||||||
|
mygroup = getgrgid(gid);
|
||||||
|
if (mygroup==NULL)
|
||||||
|
error_msg_and_die( "unknown gid %ld\n", (long)gid);
|
||||||
|
|
||||||
|
strcpy(group, mygroup->gr_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined BB_ID
|
#if defined BB_ID
|
||||||
/* gets a gid given a user name */
|
/* gets a gid given a user name */
|
||||||
long my_getpwnamegid(char *name)
|
long my_getpwnamegid(char *name)
|
||||||
{
|
{
|
||||||
long gid;
|
struct group *mygroup;
|
||||||
my_getid("/etc/passwd", name, -1, &gid);
|
struct passwd *myuser;
|
||||||
return gid;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
myuser=getpwnam(name);
|
||||||
|
if (myuser==NULL)
|
||||||
|
error_msg_and_die( "unknown user name: %s\n", name);
|
||||||
|
|
||||||
|
mygroup = getgrgid(myuser->pw_gid);
|
||||||
|
if (mygroup==NULL)
|
||||||
|
error_msg_and_die( "unknown gid %ld\n", (long)myuser->pw_gid);
|
||||||
|
|
||||||
|
return mygroup->gr_gid;
|
||||||
|
}
|
||||||
|
#endif /* BB_ID */
|
||||||
#endif
|
#endif
|
||||||
/* BB_CHMOD_CHOWN_CHGRP || BB_PS || BB_LS || BB_TAR \
|
/* BB_CHMOD_CHOWN_CHGRP || BB_PS || BB_LS || BB_TAR \
|
||||||
|| BB_ID || BB_LOGGER || BB_LOGNAME || BB_WHOAMI */
|
|| BB_ID || BB_LOGGER || BB_LOGNAME || BB_WHOAMI */
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
/*struct passwd *getpwnam();*/
|
/*struct passwd *getpwnam();*/
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
#define RW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
|
#define RW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user