Skip to content
Snippets Groups Projects
10-DU-nss_name-local_realms.patch 1.88 KiB
Newer Older
Pavel Vondruska's avatar
Pavel Vondruska committed
Description: nss_name_to_uid/gud() search also Local-Realms

--- a/nss.c
+++ b/nss.c
@@ -203,32 +203,44 @@
 	return NULL;
 }
 
-static int nss_name_to_uid(char *name, uid_t *uid)
+static int nss_name_domain_to_uid(char *name, char *domain, uid_t *uid)
 {
 	struct passwd *pw = NULL;
-	char *domain;
 	int err = -ENOENT;
-
-	domain = get_default_domain();
 	pw = nss_getpwnam(name, domain, &err);
-	if (pw == NULL)
-		goto out;
+	if (pw == NULL) return err;
 	*uid = pw->pw_uid;
 	free(pw);
-	err = 0;
-out:
+	return 0;
+}
+
+static int nss_name_to_uid(char *name, uid_t *uid)
+{
+	struct conf_list *realms;
+	struct conf_list_node *r;
+	char *domain;
+	int err;
+
+	domain = get_default_domain();
+	err = nss_name_domain_to_uid(name, domain, uid);
+	if (!err) return err;
+
+	realms = get_local_realms();
+	TAILQ_FOREACH(r, &realms->fields, link) {
+		if (!nss_name_domain_to_uid(name, r->field, uid)) return 0;
+	}
+
 	return err;
 }
 
-static int nss_name_to_gid(char *name, gid_t *gid)
+static int nss_name_domain_to_gid(char *name, char *domain, gid_t *gid)
 {
 	struct group *gr = NULL;
 	struct group grbuf;
-	char *buf, *localname, *domain;
+	char *buf, *localname;
 	size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
 	int err = -EINVAL;
 
-	domain = get_default_domain();
 	localname = strip_domain(name, domain);
 	if (!localname)
 		goto out;
@@ -258,6 +270,25 @@
 	return err;
 }
 
+static int nss_name_to_gid(char *name, gid_t *gid)
+{
+	char *domain;
+	int err;
+	struct conf_list *realms;
+	struct conf_list_node *r;
+
+	domain = get_default_domain();
+	err = nss_name_domain_to_gid(name, domain, gid);
+	if (!err) return 0;
+
+	realms = get_local_realms();
+	TAILQ_FOREACH(r, &realms->fields, link) {
+		if (!nss_name_domain_to_gid(name, r->field, gid)) return 0;
+	}
+	
+	return err;
+}
+
 static int nss_gss_princ_to_ids(char *secname, char *princ,
 				uid_t *uid, uid_t *gid,
 				extra_mapping_params **ex)