forked from rpms/glibc
60 lines
1.9 KiB
Diff
60 lines
1.9 KiB
Diff
|
From d74a39158ab4aafa8af874e996bf5ddbde593bc0 Mon Sep 17 00:00:00 2001
|
||
|
From: DJ Delorie <dj@redhat.com>
|
||
|
Date: Wed, 9 Dec 2020 21:46:30 -0500
|
||
|
Subject: nsswitch: handle missing actions properly
|
||
|
|
||
|
Some internal functions need to know if a database has a nonzero
|
||
|
list of actions; success getting the database does not guarantee
|
||
|
that. Add checks for such as needed.
|
||
|
|
||
|
Skip the ":" in each nsswitch.conf line so as not to add a dummy
|
||
|
action libnss_:.so
|
||
|
|
||
|
diff --git a/grp/initgroups.c b/grp/initgroups.c
|
||
|
index a60ca1c395..a0a836d862 100644
|
||
|
--- a/grp/initgroups.c
|
||
|
+++ b/grp/initgroups.c
|
||
|
@@ -72,11 +72,13 @@ internal_getgrouplist (const char *user, gid_t group, long int *size,
|
||
|
|
||
|
nss_action_list nip;
|
||
|
|
||
|
- if (__nss_database_get (nss_database_initgroups, &nip))
|
||
|
+ if (__nss_database_get (nss_database_initgroups, &nip)
|
||
|
+ && nip != NULL)
|
||
|
{
|
||
|
use_initgroups_entry = true;
|
||
|
}
|
||
|
- else if (__nss_database_get (nss_database_group, &nip))
|
||
|
+ else if (__nss_database_get (nss_database_group, &nip)
|
||
|
+ && nip != NULL)
|
||
|
{
|
||
|
use_initgroups_entry = false;
|
||
|
}
|
||
|
diff --git a/nss/nss_database.c b/nss/nss_database.c
|
||
|
index e8c307d1f3..a036e95fbf 100644
|
||
|
--- a/nss/nss_database.c
|
||
|
+++ b/nss/nss_database.c
|
||
|
@@ -212,7 +212,8 @@ process_line (struct nss_database_data *data, char *line)
|
||
|
if (line[0] == '\0' || name == line)
|
||
|
/* Syntax error. Skip this line. */
|
||
|
return true;
|
||
|
- *line++ = '\0';
|
||
|
+ while (line[0] != '\0' && (isspace (line[0]) || line[0] == ':'))
|
||
|
+ *line++ = '\0';
|
||
|
|
||
|
int db = name_to_database_index (name);
|
||
|
if (db < 0)
|
||
|
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
|
||
|
index 40109c744d..921062e04f 100644
|
||
|
--- a/nss/nsswitch.c
|
||
|
+++ b/nss/nsswitch.c
|
||
|
@@ -81,7 +81,7 @@ __nss_database_lookup2 (const char *database, const char *alternate_name,
|
||
|
if (database_names[database_id] == NULL)
|
||
|
return -1;
|
||
|
|
||
|
- if (__nss_database_get (database_id, ni))
|
||
|
+ if (__nss_database_get (database_id, ni) && *ni)
|
||
|
{
|
||
|
/* Success. */
|
||
|
return 0;
|