libsubid: don't print error messages on stderr by default

Closes #325

Add a new subid_init() function which can be used to specify the
stream on which error messages should be printed.  (If you want to
get fancy you can redirect that to memory :)  If subid_init() is
not called, use stderr.  If NULL is passed, then /dev/null will
be used.

This patch also fixes up the 'Prog', which previously had to be
defined by any program linking against libsubid.  Now, by default
in libsubid it will show (subid).  Once subid_init() is called,
it will use the first variable passed to subid_init().

Signed-off-by: Serge Hallyn <serge@hallyn.com>
This commit is contained in:
Serge Hallyn
2021-05-08 17:42:14 -05:00
parent 3ac8d97825
commit 2b22a6909d
75 changed files with 311 additions and 191 deletions

View File

@@ -62,6 +62,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool
dflg = false, /* set last password change date */
@@ -814,6 +815,7 @@ int main (int argc, char **argv)
* Get the program name so that error messages can use it.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
sanitize_env ();
(void) setlocale (LC_ALL, "");

View File

@@ -18,6 +18,7 @@
#include "idmapping.h"
const char *Prog;
FILE *shadow_logfd = NULL;
int main(int argc, char **argv)
{
@@ -25,6 +26,7 @@ int main(int argc, char **argv)
unsigned long start, count;
bool check_uids;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
if (argc != 5)
exit(1);

View File

@@ -57,6 +57,7 @@
* Global variables.
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char fullnm[BUFSIZ];
static char roomno[BUFSIZ];
static char workph[BUFSIZ];
@@ -639,6 +640,7 @@ int main (int argc, char **argv)
* prefix to most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
sanitize_env ();
(void) setlocale (LC_ALL, "");

View File

@@ -59,6 +59,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool eflg = false;
static bool md5flg = false;
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
@@ -437,6 +438,7 @@ int main (int argc, char **argv)
int line = 0;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -56,6 +56,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool eflg = false;
static bool md5flg = false;
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
@@ -429,6 +430,7 @@ int main (int argc, char **argv)
int line = 0;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -59,6 +59,7 @@
* Global variables
*/
const char *Prog; /* Program name */
FILE *shadow_logfd = NULL;
static bool amroot; /* Real UID is root */
static char loginsh[BUFSIZ]; /* Name of new login shell */
/* command line options */
@@ -441,6 +442,7 @@ int main (int argc, char **argv)
* most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -46,6 +46,7 @@
/* Global variables */
const char *Prog;
FILE *shadow_logfd = NULL;
static bool cflg = false;
/* local function prototypes */
@@ -144,6 +145,7 @@ int main (int argc, char **argv)
struct spwd *spwd;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
sanitize_env ();

View File

@@ -62,6 +62,7 @@ static void reset (void);
* Global variables
*/
const char *Prog; /* Program name */
FILE *shadow_logfd = NULL;
static FILE *fail; /* failure file stream */
static time_t seconds; /* that number of days in seconds */
static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
@@ -573,6 +574,7 @@ int main (int argc, char **argv)
* most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -7,6 +7,7 @@
/* Test program for the subid freeing routine */
const char *Prog;
FILE *shadow_logfd = NULL;
void usage(void)
{
@@ -23,6 +24,7 @@ int main(int argc, char *argv[])
bool group = false; // get subuids by default
Prog = Basename (argv[0]);
shadow_logfd = stderr;
while ((c = getopt(argc, argv, "g")) != EOF) {
switch(c) {
case 'g': group = true; break;

View File

@@ -4,6 +4,7 @@
#include "prototypes.h"
const char *Prog;
FILE *shadow_logfd = NULL;
void usage(void)
{
@@ -19,6 +20,7 @@ int main(int argc, char *argv[])
uid_t *uids;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
if (argc < 2) {
usage();
}

View File

@@ -58,6 +58,7 @@
*/
/* The name of this command, as it is invoked */
const char *Prog;
FILE *shadow_logfd = NULL;
#ifdef SHADOWGRP
/* Indicate if shadow groups are enabled on the system
@@ -988,6 +989,7 @@ int main (int argc, char **argv)
*/
bywho = getuid ();
Prog = Basename (argv[0]);
shadow_logfd = stderr;
OPENLOG ("gpasswd");
setbuf (stdout, NULL);

View File

@@ -72,6 +72,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static /*@null@*/char *group_name;
static gid_t group_id;
@@ -598,6 +599,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -58,6 +58,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char *group_name;
static gid_t group_id = -1;
@@ -376,6 +377,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -65,6 +65,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char *adduser = NULL;
static char *deluser = NULL;
@@ -595,6 +596,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -76,6 +76,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
#ifdef SHADOWGRP
static bool is_shadow_grp;
@@ -792,6 +793,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -43,6 +43,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
/* local function prototypes */
static void print_groups (const char *member);
@@ -126,6 +127,7 @@ int main (int argc, char **argv)
* Get the program name so that error messages can use it.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
if (argc == 1) {

View File

@@ -66,6 +66,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static const char *grp_file = GROUP_FILE;
static bool use_system_grp_file = true;
@@ -840,6 +841,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -59,6 +59,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool gr_locked = false;
static bool sgr_locked = false;
@@ -146,6 +147,7 @@ int main (int argc, char **argv)
struct sgrp sgent;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -59,6 +59,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool gr_locked = false;
static bool sgr_locked = false;
@@ -145,6 +146,7 @@ int main (int argc, char **argv)
const struct sgrp *sg;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -62,6 +62,7 @@
* Global variables
*/
const char *Prog; /* Program name */
FILE *shadow_logfd = NULL;
static FILE *lastlogfile; /* lastlog file stream */
static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
static bool has_umin = false;
@@ -317,6 +318,7 @@ int main (int argc, char **argv)
* most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -4,6 +4,7 @@
#include "prototypes.h"
const char *Prog;
FILE *shadow_logfd = NULL;
void usage(void)
{
@@ -19,6 +20,7 @@ int main(int argc, char *argv[])
struct subordinate_range **ranges;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
if (argc < 2) {
usage();
}

View File

@@ -83,6 +83,7 @@ static pam_handle_t *pamh = NULL;
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static const char *hostname = "";
static /*@null@*/ /*@only@*/char *username = NULL;
@@ -577,6 +578,7 @@ int main (int argc, char **argv)
amroot = (getuid () == 0);
Prog = Basename (argv[0]);
shadow_logfd = stderr;
if (geteuid() != 0) {
fprintf (stderr, _("%s: Cannot possibly work without effective root\n"), Prog);

View File

@@ -44,6 +44,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
#ifndef DEFAULT_HUP_MESG
#define DEFAULT_HUP_MESG _("login time exceeded\n\n")
@@ -187,6 +188,7 @@ int main (int argc, char **argv)
* Start syslogging everything
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
OPENLOG ("logoutd");

View File

@@ -7,6 +7,7 @@
/* Test program for the subid creation routine */
const char *Prog;
FILE *shadow_logfd = NULL;
void usage(void)
{
@@ -26,6 +27,7 @@ int main(int argc, char *argv[])
bool ok;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
while ((c = getopt(argc, argv, "gn")) != EOF) {
switch(c) {
case 'n': makenew = true; break;

View File

@@ -46,6 +46,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool verify_range(struct passwd *pw, struct map_range *range, bool *allow_setgroups)
@@ -176,6 +177,7 @@ int main(int argc, char **argv)
bool allow_setgroups = false;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
/*
* The valid syntax are

View File

@@ -49,6 +49,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
extern char **newenvp;
extern char **environ;
@@ -443,6 +444,7 @@ int main (int argc, char **argv)
* don't need to re-exec anything. -- JWP
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
is_newgrp = (strcmp (Prog, "newgrp") == 0);
OPENLOG (is_newgrp ? "newgrp" : "sg");
argc--;

View File

@@ -46,6 +46,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool verify_range(struct passwd *pw, struct map_range *range)
{
@@ -106,6 +107,7 @@ int main(int argc, char **argv)
int written;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
/*
* The valid syntax are

View File

@@ -75,6 +75,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool rflg = false; /* create a system account */
#ifndef USE_PAM
@@ -1052,6 +1053,7 @@ int main (int argc, char **argv)
#endif /* USE_PAM */
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -66,6 +66,7 @@
* Global variables
*/
const char *Prog; /* Program name */
FILE *shadow_logfd = NULL;
static char *name; /* The name of user whose password is being changed */
static char *myname; /* The current user's name */
@@ -752,6 +753,7 @@ int main (int argc, char **argv)
* most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -70,6 +70,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool use_system_pw_file = true;
static bool use_system_spw_file = true;

View File

@@ -89,6 +89,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool spw_locked = false;
static bool pw_locked = false;
@@ -176,6 +177,7 @@ int main (int argc, char **argv)
struct spwd spent;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -53,6 +53,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static bool spw_locked = false;
static bool pw_locked = false;
@@ -137,6 +138,7 @@ int main (int argc, char **argv)
const struct spwd *spwd;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -82,6 +82,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static /*@observer@*/const char *caller_tty = NULL; /* Name of tty SU is run from */
static bool caller_is_root = false;
static uid_t caller_uid;
@@ -716,6 +717,7 @@ static void save_caller_context (char **argv)
* most error messages.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
caller_uid = getuid ();
caller_is_root = (caller_uid == 0);

View File

@@ -50,6 +50,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char name[BUFSIZ];
static char pass[BUFSIZ];
@@ -106,6 +107,7 @@ static RETSIGTYPE catch_signals (unused int sig)
#endif
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE);

View File

@@ -96,6 +96,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
/*
* These defaults are used if there is no defaults file.
@@ -2391,6 +2392,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -91,6 +91,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char *user_name;
static uid_t user_id;
@@ -1015,6 +1016,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE);

View File

@@ -105,6 +105,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static char *user_name;
static char *user_newname;
@@ -2200,6 +2201,7 @@ int main (int argc, char **argv)
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);

View File

@@ -63,6 +63,7 @@
* Global variables
*/
const char *Prog;
FILE *shadow_logfd = NULL;
static const char *filename, *fileeditname;
static bool filelocked = false;
@@ -481,6 +482,7 @@ int main (int argc, char **argv)
bool do_vipw;
Prog = Basename (argv[0]);
shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);