From: Todd C. Miller Date: Thu, 20 Jan 2011 21:11:31 +0000 (-0500) Subject: When listing, use separate lbufs for the defaults and the privileges and X-Git-Tag: SUDO_1_7_5~64 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9e3bc10788e88687a1006a87d04f445b4d4b766;p=sudo When listing, use separate lbufs for the defaults and the privileges and only print something if the number of privileges is non-zero. Fixes extraneous Defaults output for "sudo -U unauthorized_user -l". --HG-- branch : 1.7 --- diff --git a/sudo_nss.c b/sudo_nss.c index fc6989edb..b76b2515b 100644 --- a/sudo_nss.c +++ b/sudo_nss.c @@ -247,52 +247,51 @@ display_privs(snl, pw) struct passwd *pw; { struct sudo_nss *nss; - struct lbuf lbuf; + struct lbuf defs, privs; int count; /* Reset group vector so group matching works correctly. */ reset_groups(pw); - lbuf_init(&lbuf, output, 4, NULL); + lbuf_init(&defs, output, 4, NULL); + lbuf_init(&privs, output, 4, NULL); /* Display defaults from all sources. */ - lbuf_append(&lbuf, "Matching Defaults entries for ", pw->pw_name, + lbuf_append(&defs, "Matching Defaults entries for ", pw->pw_name, " on this host:\n", NULL); count = 0; tq_foreach_fwd(snl, nss) { - count += nss->display_defaults(nss, pw, &lbuf); - } - if (count) { - lbuf_append(&lbuf, "\n\n", NULL); - lbuf_print(&lbuf); + count += nss->display_defaults(nss, pw, &defs); } + if (count) + lbuf_append(&defs, "\n\n", NULL); + else + defs.len = 0; /* Display Runas and Cmnd-specific defaults from all sources. */ - lbuf.len = 0; - lbuf_append(&lbuf, "Runas and Command-specific defaults for ", pw->pw_name, + lbuf_append(&defs, "Runas and Command-specific defaults for ", pw->pw_name, ":\n", NULL); count = 0; tq_foreach_fwd(snl, nss) { - count += nss->display_bound_defaults(nss, pw, &lbuf); - } - if (count) { - lbuf_append(&lbuf, "\n\n", NULL); - lbuf_print(&lbuf); + count += nss->display_bound_defaults(nss, pw, &defs); } + if (count) + lbuf_append(&defs, "\n\n", NULL); /* Display privileges from all sources. */ - lbuf.len = 0; - lbuf_append(&lbuf, "User ", pw->pw_name, + lbuf_append(&privs, "User ", pw->pw_name, " may run the following commands on this host:\n", NULL); count = 0; tq_foreach_fwd(snl, nss) { - count += nss->display_privs(nss, pw, &lbuf); + count += nss->display_privs(nss, pw, &privs); } if (count) { - lbuf_print(&lbuf); + lbuf_print(&defs); + lbuf_print(&privs); } - lbuf_destroy(&lbuf); + lbuf_destroy(&defs); + lbuf_destroy(&privs); } /*