In Telef\'{o}nica we have a very slow ldap server which takes 5 seconds to
respond.  Even with the configurable caching, addingg an option to pull the
administrative database from a local file if specifed.



git-svn-id: https://svn.apache.org/repos/asf/incubator/tashi/trunk@1455136 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/etc/TashiDefaults.cfg b/etc/TashiDefaults.cfg
index d28b73b..14d18f2 100644
--- a/etc/TashiDefaults.cfg
+++ b/etc/TashiDefaults.cfg
@@ -62,6 +62,10 @@
 [GetentOverride]
 baseData = tashi.clustermanager.data.Pickled
 fetchThreshold = 60.0
+#  Use local version of getent file
+;getentFromLocalFile = False
+;getentLocalFile = /var/tmp/getent.tmp
+
 
 [LdapOverride]
 baseData = tashi.clustermanager.data.Pickled
diff --git a/src/tashi/clustermanager/data/getentoverride.py b/src/tashi/clustermanager/data/getentoverride.py
index 2cd5e69..0a88696 100644
--- a/src/tashi/clustermanager/data/getentoverride.py
+++ b/src/tashi/clustermanager/data/getentoverride.py
@@ -29,6 +29,8 @@
 		self.log = logging.getLogger(__name__)
 		self.baseDataObject = instantiateImplementation(config.get("GetentOverride", "baseData"), config)
 		self.dfs = instantiateImplementation(config.get("ClusterManager", "dfs"), config)
+		self.useLocal = config.get("GetentOverride", "getentFromLocalFile")
+		self.localFileName = config.get("GetentOverride", "getentLocalFile")
 
 		self.users = {}
 		self.lastUserUpdate = 0.0
@@ -105,7 +107,18 @@
 		now = time.time()
 		if (now - self.lastUserUpdate > self.fetchThreshold):
 			myUsers = {}
-			p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+            #  Use local getent file instead of querying the administrative db
+			if self.useLocal:
+				if os.path.exists(self.localFileName):
+					cmd = "cat %s" % self.localFileName
+					p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
+				else:
+					self.log.warning("getent cache file not found (%s)" % (self.localFileName))
+					p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+            #  Query administrative database
+			else:
+				p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+
 			try:
 				for l in p.stdout.xreadlines():
 					ws = l.strip().split(":")