]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
Improve the login.defs unknown item error message
authorSerge Hallyn <serge@hallyn.com>
Wed, 4 Oct 2023 15:38:48 +0000 (10:38 -0500)
committerSerge Hallyn <serge@hallyn.com>
Fri, 20 Oct 2023 23:46:23 +0000 (18:46 -0500)
Closes #746

Only print the 'unknown item' message to syslog if we are
actually parsing a login.defs.  Prefix it with "shadow:" to make
it clear in syslog where it came from.

Also add the source filename to the console message.  I'm not
quite clear on the econf API, so not sure whether in that path we
will end up actually having the path, or printing ''.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
lib/getdef.c
lib/getdef.h
src/groupadd.c
src/useradd.c

index f4f8734f7601f30933dbcb6fa81f81937e16af7a..977660c27d726d0ddc91cfb0610ad61dc36198ea 100644 (file)
@@ -363,7 +363,7 @@ unsigned long getdef_ulong (const char *item, unsigned long dflt)
  * (also used when loading the initial defaults)
  */
 
-int putdef_str (const char *name, const char *value)
+int putdef_str (const char *name, const char *value, const char *srcfile)
 {
        struct itemdef *d;
        char *cp;
@@ -378,6 +378,8 @@ int putdef_str (const char *name, const char *value)
         */
        d = def_find (name);
        if (NULL == d) {
+               if (NULL != srcfile)
+                       SYSLOG ((LOG_CRIT, "shadow: unknown configuration item '%s' in '%s'", name, srcfile));
                return -1;
        }
 
@@ -431,7 +433,6 @@ static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *name)
        fprintf (shadow_logfd,
                 _("configuration error - unknown item '%s' (notify administrator)\n"),
                 name);
-       SYSLOG ((LOG_CRIT, "unknown configuration item `%s'", name));
 
 out:
        return NULL;
@@ -512,7 +513,7 @@ static void def_load (void)
                 * The error was already reported to the user and to
                 * syslog. The tools will just use their default values.
                 */
-               (void)putdef_str (keys[i], value);
+               (void)putdef_str (keys[i], value, econf_getPath(defs_file));
 
                free(value);
        }
@@ -585,7 +586,7 @@ static void def_load (void)
                 * The error was already reported to the user and to
                 * syslog. The tools will just use their default values.
                 */
-               (void)putdef_str (name, value);
+               (void)putdef_str (name, value, def_fname);
        }
 
        if (ferror (fp) != 0) {
index 2bd3fc5fc3013dd4b433af1addfd4c42ef3b719d..f55e28b7810eee3d7d9bb867a506d369a91c2e4c 100644 (file)
@@ -16,7 +16,7 @@ extern int getdef_num (const char *, int);
 extern unsigned long getdef_ulong (const char *, unsigned long);
 extern unsigned int getdef_unum (const char *, unsigned int);
 extern /*@observer@*/ /*@null@*/const char *getdef_str (const char *);
-extern int putdef_str (const char *, const char *);
+extern int putdef_str (const char *, const char *, const char *);
 extern void setdef_config_file (const char* file);
 
 /* default UMASK value if not specified in /etc/login.defs */
index d242184558315ff98bf38fb930fe9a61f6249ac1..0a59509a8e50080e3854e14195268afdb16311c1 100644 (file)
@@ -429,7 +429,7 @@ static void process_flags (int argc, char **argv)
                        }
                        /* terminate name, point to value */
                        *cp++ = '\0';
-                       if (putdef_str (optarg, cp) < 0) {
+                       if (putdef_str (optarg, cp, NULL) < 0) {
                                exit (E_BAD_ARG);
                        }
                        break;
index 2d8597258bd14373f82c3573e598f41b0a73df97..9c00d6466db36d3347d01ddac9c34add22978ffa 100644 (file)
@@ -1399,7 +1399,7 @@ static void process_flags (int argc, char **argv)
                                /* terminate name, point to value */
                                *cp = '\0';
                                cp++;
-                               if (putdef_str (optarg, cp) < 0) {
+                               if (putdef_str (optarg, cp, NULL) < 0) {
                                        exit (E_BAD_ARG);
                                }
                                break;