void print_privilege(struct privilege *);
void print_userspecs(void);
void usage(void) __attribute__((__noreturn__));
-void set_runasgr(char *);
-void set_runaspw(char *);
void cleanup(int);
+static void set_runaspw(const char *);
+static void set_runasgr(const char *);
+static int cb_runas_default(const char *);
static int testsudoers_printf(int msg_type, const char *fmt, ...);
static int testsudoers_print(const char *msg);
struct interface *interfaces;
struct sudo_user sudo_user;
struct passwd *list_pw;
+static char *runas_group, *runas_user;
extern int parse_error;
sudo_printf_t sudo_printf = testsudoers_printf;
struct cmndspec *cs;
struct privilege *priv;
struct userspec *us;
- char *p, *grfile, *pwfile, *runas_group, *runas_user;
+ char *p, *grfile, *pwfile;
char hbuf[MAXHOSTNAMELEN + 1];
int match, host_match, runas_match, cmnd_match;
int ch, dflag;
#endif
dflag = 0;
- grfile = pwfile = runas_group = runas_user = NULL;
+ grfile = pwfile = NULL;
while ((ch = getopt(argc, argv, "dg:G:h:p:tu:")) != -1) {
switch (ch) {
case 'd':
argc -= 2;
}
if ((sudo_user.pw = sudo_getpwnam(user_name)) == NULL)
- errorx(1, "no passwd entry for %s!", user_name);
+ errorx(1, _("unknown user: %s"), user_name);
if (user_host == NULL) {
if (gethostname(hbuf, sizeof(hbuf)) != 0)
for (to = user_args, from = argv + 1; *from; from++) {
n = strlcpy(to, *from, size - (to - user_args));
if (n >= size - (to - user_args))
- errorx(1, "internal error, init_vars() overflow");
+ errorx(1, _("internal error, init_vars() overflow"));
to += n;
*to++ = ' ';
}
/* Initialize default values. */
init_defaults();
+ /* Set runas callback. */
+ sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
+
/* Load ip addr/mask for each interface. */
if (get_net_ifs(&p) > 0)
set_interfaces(p);
}
}
} else
- puts("\thost unmatched");
+ puts(_("\thost unmatched"));
}
}
- printf("\nCommand %s\n", match == ALLOW ? "allowed" :
- match == DENY ? "denied" : "unmatched");
+ puts(match == ALLOW ? _("\nCommand allowed") :
+ match == DENY ? _("\nCommand denied") : _("\nCommand unmatched"));
/*
* Exit codes:
exit(match == ALLOW ? 0 : match + 3);
}
-void
-set_runaspw(char *user)
+static void
+set_runaspw(const char *user)
{
+ if (runas_pw != NULL)
+ pw_delref(runas_pw);
if (*user == '#') {
if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
runas_pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0);
} else {
if ((runas_pw = sudo_getpwnam(user)) == NULL)
- errorx(1, "unknown user: %s", user);
+ errorx(1, _("unknown user: %s"), user);
}
}
-void
-set_runasgr(char *group)
+static void
+set_runasgr(const char *group)
{
+ if (runas_gr != NULL)
+ gr_delref(runas_gr);
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);
+ errorx(1, _("unknown group: %s"), group);
}
}
+/*
+ * Callback for runas_default sudoers setting.
+ */
+static int
+cb_runas_default(const char *user)
+{
+ /* Only reset runaspw if user didn't specify one. */
+ if (!runas_user && !runas_group)
+ set_runaspw(user);
+ return TRUE;
+}
+
void
sudo_setspent(void)
{