|
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;
|