Use sudo_printf to display verbose version information.
This commit is contained in:
@@ -293,22 +293,13 @@ int auth_end_session(void)
|
||||
static void
|
||||
pass_warn(void)
|
||||
{
|
||||
struct sudo_conv_message msg[2];
|
||||
struct sudo_conv_reply repl[2];
|
||||
const char *warning = def_badpass_message;
|
||||
|
||||
/* Call conversation function */
|
||||
memset(msg, 0, sizeof(msg));
|
||||
msg[0].msg_type = SUDO_CONV_ERROR_MSG;
|
||||
#ifdef INSULT
|
||||
if (def_insults)
|
||||
msg[0].msg = INSULT;
|
||||
else
|
||||
warning = INSULT;
|
||||
#endif
|
||||
msg[0].msg = def_badpass_message;
|
||||
msg[1].msg_type = SUDO_CONV_ERROR_MSG;
|
||||
msg[1].msg = "\n";
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
sudo_conv(2, msg, repl);
|
||||
sudo_printf(SUDO_CONV_ERROR_MSG, "%s\n", warning);
|
||||
}
|
||||
|
||||
char *
|
||||
@@ -328,16 +319,13 @@ auth_getpass(const char *prompt, int timeout, int type)
|
||||
return repl.reply;
|
||||
}
|
||||
|
||||
#ifdef notyet
|
||||
void
|
||||
dump_auth_methods(void)
|
||||
{
|
||||
sudo_auth *auth;
|
||||
|
||||
/* XXX - conversation function */
|
||||
(void) fputs("Authentication methods:", stdout);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "Authentication methods:");
|
||||
for (auth = auth_switch; auth->name; auth++)
|
||||
(void) printf(" '%s'", auth->name);
|
||||
(void) putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, " '%s'", auth->name);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
}
|
||||
#endif
|
||||
|
@@ -125,54 +125,60 @@ dump_defaults(void)
|
||||
switch (cur->type & T_MASK) {
|
||||
case T_FLAG:
|
||||
if (cur->sd_un.flag)
|
||||
puts(cur->desc);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", cur->desc);
|
||||
break;
|
||||
case T_STR:
|
||||
if (cur->sd_un.str) {
|
||||
(void) printf(cur->desc, cur->sd_un.str);
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
cur->desc, cur->sd_un.str);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
}
|
||||
break;
|
||||
case T_LOGFAC:
|
||||
if (cur->sd_un.ival) {
|
||||
(void) printf(cur->desc, logfac2str(cur->sd_un.ival));
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
cur->desc, logfac2str(cur->sd_un.ival));
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
}
|
||||
break;
|
||||
case T_LOGPRI:
|
||||
if (cur->sd_un.ival) {
|
||||
(void) printf(cur->desc, logpri2str(cur->sd_un.ival));
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
cur->desc, logpri2str(cur->sd_un.ival));
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
}
|
||||
break;
|
||||
case T_UINT:
|
||||
case T_INT:
|
||||
(void) printf(cur->desc, cur->sd_un.ival);
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.ival);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
break;
|
||||
case T_FLOAT:
|
||||
(void) printf(cur->desc, cur->sd_un.fval);
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.fval);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
break;
|
||||
case T_MODE:
|
||||
(void) printf(cur->desc, cur->sd_un.mode);
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.mode);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
break;
|
||||
case T_LIST:
|
||||
if (cur->sd_un.list) {
|
||||
puts(cur->desc);
|
||||
for (item = cur->sd_un.list; item; item = item->next)
|
||||
printf("\t%s\n", item->value);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", cur->desc);
|
||||
for (item = cur->sd_un.list; item; item = item->next) {
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"\t%s\n", item->value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case T_TUPLE:
|
||||
for (def = cur->values; def->sval; def++) {
|
||||
if (cur->sd_un.ival == def->ival) {
|
||||
(void) printf(cur->desc, def->sval);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
cur->desc, def->sval);
|
||||
break;
|
||||
}
|
||||
}
|
||||
putchar('\n');
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -188,20 +194,24 @@ list_options(void)
|
||||
struct sudo_defs_types *cur;
|
||||
char *p;
|
||||
|
||||
(void) puts("Available options in a sudoers ``Defaults'' line:\n");
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"Available options in a sudoers ``Defaults'' line:\n\n");
|
||||
for (cur = sudo_defs_table; cur->name; cur++) {
|
||||
if (cur->name && cur->desc) {
|
||||
switch (cur->type & T_MASK) {
|
||||
case T_FLAG:
|
||||
(void) printf("%s: %s\n", cur->name, cur->desc);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"%s: %s\n", cur->name, cur->desc);
|
||||
break;
|
||||
default:
|
||||
p = strrchr(cur->desc, ':');
|
||||
if (p)
|
||||
(void) printf("%s: %.*s\n", cur->name,
|
||||
(int) (p - cur->desc), cur->desc);
|
||||
else
|
||||
(void) printf("%s: %s\n", cur->name, cur->desc);
|
||||
if (p) {
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "%s: %.*s\n",
|
||||
cur->name, (int) (p - cur->desc), cur->desc);
|
||||
} else {
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"%s: %s\n", cur->name, cur->desc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -333,12 +333,14 @@ dump_interfaces(void)
|
||||
char addrbuf[INET6_ADDRSTRLEN], maskbuf[INET6_ADDRSTRLEN];
|
||||
#endif
|
||||
|
||||
puts("Local IP address and netmask pairs:");
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "Local IP address and netmask pairs:\n");
|
||||
for (i = 0; i < num_interfaces; i++) {
|
||||
switch(interfaces[i].family) {
|
||||
case AF_INET:
|
||||
printf("\t%s / ", inet_ntoa(interfaces[i].addr.ip4));
|
||||
puts(inet_ntoa(interfaces[i].netmask.ip4));
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"\t%s / ", inet_ntoa(interfaces[i].addr.ip4));
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "%s\n",
|
||||
inet_ntoa(interfaces[i].netmask.ip4));
|
||||
break;
|
||||
#ifdef HAVE_IN6_ADDR
|
||||
case AF_INET6:
|
||||
@@ -346,7 +348,8 @@ dump_interfaces(void)
|
||||
addrbuf, sizeof(addrbuf));
|
||||
inet_ntop(AF_INET6, &interfaces[i].netmask.ip6,
|
||||
maskbuf, sizeof(maskbuf));
|
||||
printf("\t%s / %s\n", addrbuf, maskbuf);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG,
|
||||
"\t%s / %s\n", addrbuf, maskbuf);
|
||||
break;
|
||||
#endif /* HAVE_IN6_ADDR */
|
||||
}
|
||||
|
@@ -190,6 +190,10 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
|
||||
if (!sudo_printf)
|
||||
sudo_printf = plugin_printf;
|
||||
|
||||
/* If we have no command (because -V was specified) just return. */
|
||||
if (argc == 0)
|
||||
return TRUE;
|
||||
|
||||
if (!def_transcript)
|
||||
return FALSE;
|
||||
|
||||
|
@@ -523,7 +523,7 @@ display_bound_defaults(int dtype, struct lbuf *lbuf)
|
||||
default:
|
||||
return(-1);
|
||||
}
|
||||
/* printf("Per-%s Defaults entries:\n", dname); */
|
||||
/* sudo_printf(SUDO_CONV_INFO_MSG, "Per-%s Defaults entries:\n", dname); */
|
||||
tq_foreach_fwd(&defaults, d) {
|
||||
if (d->type != dtype)
|
||||
continue;
|
||||
@@ -590,8 +590,8 @@ sudo_file_display_cmnd(struct sudo_nss *nss, struct passwd *pw)
|
||||
}
|
||||
matched:
|
||||
if (match != NULL && !match->negated) {
|
||||
printf("%s%s%s\n", safe_cmnd, user_args ? " " : "",
|
||||
user_args ? user_args : "");
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "%s%s%s\n",
|
||||
safe_cmnd, user_args ? " " : "", user_args ? user_args : "");
|
||||
rval = 0;
|
||||
}
|
||||
return(rval);
|
||||
|
@@ -1156,34 +1156,25 @@ sudoers_policy_version(int verbose)
|
||||
{
|
||||
struct sudo_conv_message msg;
|
||||
struct sudo_conv_reply repl;
|
||||
char *str;
|
||||
|
||||
easprintf(&str, "Sudoers plugin version %s\n", PACKAGE_VERSION);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers plugin version %s\n",
|
||||
PACKAGE_VERSION);
|
||||
|
||||
/* Call conversation function */
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.msg_type = SUDO_CONV_INFO_MSG;
|
||||
msg.msg = str;
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
sudo_conv(1, &msg, &repl);
|
||||
free(str);
|
||||
|
||||
#ifdef notyet
|
||||
if (verbose) {
|
||||
putchar('\n');
|
||||
(void) printf("Sudoers path: %s\n", _PATH_SUDOERS);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\nSudoers path: %s\n", _PATH_SUDOERS);
|
||||
#ifdef HAVE_LDAP
|
||||
# ifdef _PATH_NSSWITCH_CONF
|
||||
(void) printf("nsswitch path: %s\n", _PATH_NSSWITCH_CONF);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "nsswitch path: %s\n", _PATH_NSSWITCH_CONF);
|
||||
# endif
|
||||
(void) printf("ldap.conf path: %s\n", _PATH_LDAP_CONF);
|
||||
(void) printf("ldap.secret path: %s\n", _PATH_LDAP_SECRET);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "ldap.conf path: %s\n", _PATH_LDAP_CONF);
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "ldap.secret path: %s\n", _PATH_LDAP_SECRET);
|
||||
#endif
|
||||
dump_auth_methods();
|
||||
dump_defaults();
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
dump_interfaces();
|
||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||
}
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@@ -55,6 +55,7 @@
|
||||
# include <netgroup.h>
|
||||
#endif /* HAVE_NETGROUP_H */
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
#include <netinet/in.h>
|
||||
@@ -71,27 +72,8 @@
|
||||
#endif /* HAVE_FNMATCH */
|
||||
|
||||
/*
|
||||
* Globals
|
||||
* Function Prototypes
|
||||
*/
|
||||
int Argc, NewArgc;
|
||||
char **Argv, **NewArgv;
|
||||
int num_interfaces;
|
||||
struct interface *interfaces;
|
||||
struct sudo_user sudo_user;
|
||||
struct passwd *list_pw;
|
||||
extern int parse_error;
|
||||
|
||||
/* For getopt(3) */
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
|
||||
#if defined(SUDO_DEVEL) && defined(__OpenBSD__)
|
||||
extern char *malloc_options;
|
||||
#endif
|
||||
#ifdef YYDEBUG
|
||||
extern int yydebug;
|
||||
#endif
|
||||
|
||||
int print_alias(void *, void *);
|
||||
void dump_sudoers(void);
|
||||
void print_defaults(void);
|
||||
@@ -100,6 +82,7 @@ void print_userspecs(void);
|
||||
void usage(void) __attribute__((__noreturn__));
|
||||
void set_runasgr(char *);
|
||||
void set_runaspw(char *);
|
||||
static int testsudoers_printf(int msg_type, const char *fmt, ...);
|
||||
|
||||
extern void setgrfile(const char *);
|
||||
extern void setgrent(void);
|
||||
@@ -114,6 +97,29 @@ extern struct passwd *getpwent(void);
|
||||
extern struct passwd *getpwnam(const char *);
|
||||
extern struct passwd *getpwuid(uid_t);
|
||||
|
||||
/*
|
||||
* Globals
|
||||
*/
|
||||
int Argc, NewArgc;
|
||||
char **Argv, **NewArgv;
|
||||
int num_interfaces;
|
||||
struct interface *interfaces;
|
||||
struct sudo_user sudo_user;
|
||||
struct passwd *list_pw;
|
||||
extern int parse_error;
|
||||
sudo_printf_t sudo_printf = testsudoers_printf;
|
||||
|
||||
/* For getopt(3) */
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
|
||||
#if defined(SUDO_DEVEL) && defined(__OpenBSD__)
|
||||
extern char *malloc_options;
|
||||
#endif
|
||||
#ifdef YYDEBUG
|
||||
extern int yydebug;
|
||||
#endif
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
@@ -527,6 +533,31 @@ print_userspecs(void)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
testsudoers_printf(int msg_type, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
FILE *fp;
|
||||
|
||||
switch (msg_type) {
|
||||
case SUDO_CONV_INFO_MSG:
|
||||
fp = stdout;
|
||||
break;
|
||||
case SUDO_CONV_ERROR_MSG:
|
||||
fp = stderr;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
va_start(ap, fmt);
|
||||
vfprintf(fp, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
dump_sudoers(void)
|
||||
{
|
||||
|
@@ -108,6 +108,7 @@ static int install_sudoers(struct sudoersfile *, int);
|
||||
static int print_unused(void *, void *);
|
||||
static int reparse_sudoers(char *, char *, int, int);
|
||||
static int run_command(char *, char **);
|
||||
static int visudo_printf(int msg_type, const char *fmt, ...);
|
||||
static void print_selfref(char *name, int, int, int);
|
||||
static void print_undefined(char *name, int, int, int);
|
||||
static void setup_signals(void);
|
||||
@@ -136,6 +137,7 @@ int num_interfaces;
|
||||
struct interface *interfaces;
|
||||
struct sudo_user sudo_user;
|
||||
struct passwd *list_pw;
|
||||
sudo_printf_t sudo_printf = visudo_printf;
|
||||
static struct sudoerslist {
|
||||
struct sudoersfile *first, *last;
|
||||
} sudoerslist;
|
||||
@@ -1158,3 +1160,28 @@ usage(void)
|
||||
getprogname());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static int
|
||||
visudo_printf(int msg_type, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
FILE *fp;
|
||||
|
||||
switch (msg_type) {
|
||||
case SUDO_CONV_INFO_MSG:
|
||||
fp = stdout;
|
||||
break;
|
||||
case SUDO_CONV_ERROR_MSG:
|
||||
fp = stderr;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
va_start(ap, fmt);
|
||||
vfprintf(fp, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user