Ian Kent 36ee82
diff --git a/daemon/lookup.c b/daemon/lookup.c
Ian Kent 36ee82
index fd99cf2..0be10d3 100644
Ian Kent 36ee82
--- a/daemon/lookup.c
Ian Kent 36ee82
+++ b/daemon/lookup.c
Ian Kent 36ee82
@@ -222,6 +222,28 @@ int lookup_nss_read_master(struct master *master, time_t age)
Ian Kent 36ee82
 		      "reading master %s %s", this->source, master->name);
Ian Kent 36ee82
 
Ian Kent 36ee82
 		result = read_master_map(master, this->source, age);
Ian Kent 36ee82
+
Ian Kent 36ee82
+		/*
Ian Kent 36ee82
+		 * If the name of the master map hasn't been explicitly
Ian Kent 36ee82
+		 * configured and we're not reading an included master map
Ian Kent 36ee82
+		 * then we're using auto.master as the default. Many setups
Ian Kent 36ee82
+		 * also use auto_master as the default master map so we
Ian Kent 36ee82
+		 * check for this map when auto.master isn't found.
Ian Kent 36ee82
+		 */
Ian Kent 36ee82
+		if (result != NSS_STATUS_SUCCESS &&
Ian Kent 36ee82
+		    !master->depth && !defaults_master_set()) {
Ian Kent 36ee82
+			char *tmp = strchr(master->name, '.');
Ian Kent 36ee82
+			if (tmp) {
Ian Kent 36ee82
+				debug(logopt,
Ian Kent 36ee82
+				      "%s not found, replacing '.' with '_'",
Ian Kent 36ee82
+				       master->name);
Ian Kent 36ee82
+				*tmp = '_';
Ian Kent 36ee82
+				result = read_master_map(master, this->source, age);
Ian Kent 36ee82
+				if (result != NSS_STATUS_SUCCESS)
Ian Kent 36ee82
+					*tmp = '.';
Ian Kent 36ee82
+			}
Ian Kent 36ee82
+		}
Ian Kent 36ee82
+
Ian Kent 36ee82
 		if (result == NSS_STATUS_UNKNOWN) {
Ian Kent 36ee82
 			debug(logopt, "no map - continuing to next source");
Ian Kent 36ee82
 			continue;
Ian Kent 36ee82
diff --git a/include/defaults.h b/include/defaults.h
Ian Kent 36ee82
index 0e0e2a5..e296478 100644
Ian Kent 36ee82
--- a/include/defaults.h
Ian Kent 36ee82
+++ b/include/defaults.h
Ian Kent 36ee82
@@ -43,6 +43,7 @@ struct ldap_searchdn;
Ian Kent 36ee82
 
Ian Kent 36ee82
 unsigned int defaults_read_config(unsigned int);
Ian Kent 36ee82
 const char *defaults_get_master_map(void);
Ian Kent 36ee82
+int defaults_master_set(void);
Ian Kent 36ee82
 unsigned int defaults_get_timeout(void);
Ian Kent 36ee82
 unsigned int defaults_get_browse_mode(void);
Ian Kent 36ee82
 unsigned int defaults_get_logging(void);
Ian Kent 36ee82
diff --git a/lib/defaults.c b/lib/defaults.c
Ian Kent 36ee82
index 94885e8..f494103 100644
Ian Kent 36ee82
--- a/lib/defaults.c
Ian Kent 36ee82
+++ b/lib/defaults.c
Ian Kent 36ee82
@@ -350,6 +350,15 @@ const char *defaults_get_master_map(void)
Ian Kent 36ee82
 	return (const char *) master;
Ian Kent 36ee82
 }
Ian Kent 36ee82
 
Ian Kent 36ee82
+int defaults_master_set(void)
Ian Kent 36ee82
+{
Ian Kent 36ee82
+	char *val = getenv(ENV_NAME_MASTER_MAP);
Ian Kent 36ee82
+	if (!val)
Ian Kent 36ee82
+		return 0;
Ian Kent 36ee82
+
Ian Kent 36ee82
+	return 1;
Ian Kent 36ee82
+}
Ian Kent 36ee82
+
Ian Kent 36ee82
 unsigned int defaults_get_timeout(void)
Ian Kent 36ee82
 {
Ian Kent 36ee82
 	long timeout;