mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-22 09:57:41 +00:00
sync user_args size calculation with sudo.c
Add -g group option, renaming old -g to -G Add set_runasgr() and set_runaspw() and use them
This commit is contained in:
parent
7f05a4ff6f
commit
18d42bf8b4
@ -105,6 +105,8 @@ void print_defaults __P((void));
|
|||||||
void print_privilege __P((struct privilege *));
|
void print_privilege __P((struct privilege *));
|
||||||
void print_userspecs __P((void));
|
void print_userspecs __P((void));
|
||||||
void usage __P((void)) __attribute__((__noreturn__));
|
void usage __P((void)) __attribute__((__noreturn__));
|
||||||
|
void set_runasgr __P((char *));
|
||||||
|
void set_runaspw __P((char *));
|
||||||
|
|
||||||
extern void ts_setgrfile __P((const char *));
|
extern void ts_setgrfile __P((const char *));
|
||||||
extern void ts_setgrent __P((void));
|
extern void ts_setgrent __P((void));
|
||||||
@ -127,7 +129,7 @@ main(argc, argv)
|
|||||||
struct cmndspec *cs;
|
struct cmndspec *cs;
|
||||||
struct privilege *priv;
|
struct privilege *priv;
|
||||||
struct userspec *us;
|
struct userspec *us;
|
||||||
char *p, *grfile, *pwfile, *runas_user, hbuf[MAXHOSTNAMELEN];
|
char *p, *grfile, *pwfile, *runas_group, *runas_user, hbuf[MAXHOSTNAMELEN];
|
||||||
int ch, dflag, rval, matched;
|
int ch, dflag, rval, matched;
|
||||||
#ifdef YYDEBUG
|
#ifdef YYDEBUG
|
||||||
extern int yydebug;
|
extern int yydebug;
|
||||||
@ -138,8 +140,8 @@ main(argc, argv)
|
|||||||
Argc = argc;
|
Argc = argc;
|
||||||
|
|
||||||
dflag = 0;
|
dflag = 0;
|
||||||
grfile = pwfile = runas_user = NULL;
|
grfile = pwfile = runas_group = runas_user = NULL;
|
||||||
while ((ch = getopt(argc, argv, "dg:h:p:u:")) != -1) {
|
while ((ch = getopt(argc, argv, "dg:G:h:p:u:")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'd':
|
case 'd':
|
||||||
dflag = 1;
|
dflag = 1;
|
||||||
@ -147,9 +149,12 @@ main(argc, argv)
|
|||||||
case 'h':
|
case 'h':
|
||||||
user_host = optarg;
|
user_host = optarg;
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'G':
|
||||||
grfile = optarg;
|
grfile = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'g':
|
||||||
|
runas_group = optarg;
|
||||||
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
pwfile = optarg;
|
pwfile = optarg;
|
||||||
break;
|
break;
|
||||||
@ -219,8 +224,9 @@ main(argc, argv)
|
|||||||
char *to, **from;
|
char *to, **from;
|
||||||
size_t size, n;
|
size_t size, n;
|
||||||
|
|
||||||
size = (size_t) (NewArgv[NewArgc-1] - NewArgv[1]) +
|
for (size = 0, from = NewArgv + 1; *from; from++)
|
||||||
strlen(NewArgv[NewArgc-1]) + 1;
|
size += strlen(*from) + 1;
|
||||||
|
|
||||||
user_args = (char *) emalloc(size);
|
user_args = (char *) emalloc(size);
|
||||||
for (to = user_args, from = NewArgv + 1; *from; from++) {
|
for (to = user_args, from = NewArgv + 1; *from; from++) {
|
||||||
n = strlcpy(to, *from, size - (to - user_args));
|
n = strlcpy(to, *from, size - (to - user_args));
|
||||||
@ -234,13 +240,6 @@ main(argc, argv)
|
|||||||
|
|
||||||
/* Initialize default values. */
|
/* Initialize default values. */
|
||||||
init_defaults();
|
init_defaults();
|
||||||
if (*runas_user == '#') {
|
|
||||||
if ((runas_pw = sudo_getpwuid(atoi(runas_user + 1))) == NULL)
|
|
||||||
runas_pw = sudo_fakepwnam(runas_user);
|
|
||||||
} else {
|
|
||||||
if ((runas_pw = sudo_getpwnam(runas_user)) == NULL)
|
|
||||||
errorx(1, "no passwd entry for %s!", runas_user);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load ip addr/mask for each interface. */
|
/* Load ip addr/mask for each interface. */
|
||||||
load_interfaces();
|
load_interfaces();
|
||||||
@ -257,6 +256,18 @@ main(argc, argv)
|
|||||||
(void) fputs(" (problem with defaults entries)", stdout);
|
(void) fputs(" (problem with defaults entries)", stdout);
|
||||||
puts(".");
|
puts(".");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set runas passwd/group entries based on command line or sudoers.
|
||||||
|
* Note that if runas_group was specified without runas_user we
|
||||||
|
* defer setting runas_pw so the match routines know to ignore it.
|
||||||
|
*/
|
||||||
|
if (runas_group != NULL) {
|
||||||
|
set_runasgr(runas_group);
|
||||||
|
if (runas_user != NULL)
|
||||||
|
set_runaspw(runas_user);
|
||||||
|
} else
|
||||||
|
set_runaspw(runas_user ? runas_user : def_runas_default);
|
||||||
|
|
||||||
if (dflag) {
|
if (dflag) {
|
||||||
(void) putchar('\n');
|
(void) putchar('\n');
|
||||||
dump_sudoers();
|
dump_sudoers();
|
||||||
@ -297,6 +308,32 @@ main(argc, argv)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_runaspw(user)
|
||||||
|
char *user;
|
||||||
|
{
|
||||||
|
if (*user == '#') {
|
||||||
|
if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
|
||||||
|
runas_pw = sudo_fakepwnam(user);
|
||||||
|
} else {
|
||||||
|
if ((runas_pw = sudo_getpwnam(user)) == NULL)
|
||||||
|
errorx(1, "unknown user: %s", user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_runasgr(group)
|
||||||
|
char *group;
|
||||||
|
{
|
||||||
|
if (*group == '#') {
|
||||||
|
if ((runas_gr = sudo_getgrgid(atoi(group + 1))) == NULL)
|
||||||
|
runas_gr = sudo_fakegrnam(group);
|
||||||
|
} else {
|
||||||
|
if ((runas_gr = sudo_getgrnam(group)) == NULL)
|
||||||
|
errorx(1, "unknown group: %s", group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
update_defaults(skip_cmnd)
|
update_defaults(skip_cmnd)
|
||||||
int skip_cmnd;
|
int skip_cmnd;
|
||||||
@ -525,6 +562,6 @@ dump_sudoers()
|
|||||||
void
|
void
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
(void) fprintf(stderr, "usage: %s [-d] [-g grfile] [-h host] [-p pwfile] [-u user] <user> <command> [args]\n", getprogname());
|
(void) fprintf(stderr, "usage: %s [-d] [-G grfile] [-g group] [-h host] [-p pwfile] [-u user] <user> <command> [args]\n", getprogname());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user