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