diff options
authorAlexander Bokovoy <>2011-07-01 12:41:45 +0300
committerAlexander Bokovoy <>2011-07-29 12:58:10 +0300
commit4c4b8a8189b5390628890717c01f2b6cb3e06c6a (patch)
parent1ebe3c1d12e8694baa00c713a60122a40a0c51a3 (diff)
Make error reporting more 'local' for various configurations of nss_ldap packages When nss_ldap-based configuration does not work, report proper package name instead of always assuming nss_ldap. At least, in RHEL6 and Fedora appropriate package is called nss-pam-ldapd while in older releases and other distributions it might be called differently. The change makes less confusing error reporting. It also introduces common utility function package_installed_name() which provides an interface to query package manager for existence of mutually exclusive packages which is helpful to distinguish between different configuration paths.
2 files changed, 21 insertions, 2 deletions
diff --git a/ipa-client/ipa-install/ipa-client-install b/ipa-client/ipa-install/ipa-client-install
index 2e1a28c..6ad001b 100755
--- a/ipa-client/ipa-install/ipa-client-install
+++ b/ipa-client/ipa-install/ipa-client-install
@@ -31,7 +31,7 @@ try:
from ipaclient import ipadiscovery
import ipaclient.ipachangeconf
import ipaclient.ntpconf
- from ipapython.ipautil import run, user_input, CalledProcessError, file_exists
+ from ipapython.ipautil import run, user_input, CalledProcessError, file_exists, package_installed_name
from ipapython import ipautil
from ipapython import dnsclient
from ipapython import sysrestore
@@ -989,7 +989,8 @@ def main():
n = n + 1
if not found:
- print "nss_ldap is not able to use DNS discovery!"
+ package = package_installed_name(["nss-pam-ldapd","nss_ldap"])
+ print "Unable to use DNS discovery! Recognized configuration: %s" % (package)
print "Changing configuration to use hardcoded server name: " +cli_server
diff --git a/ipapython/ b/ipapython/
index da6e94c..6bfebca 100644
--- a/ipapython/
+++ b/ipapython/
@@ -1171,3 +1171,21 @@ def bind_port_responder(port, socket_stream=True, socket_timeout=None, responder
s.sendto(responder_data, addr)
+def package_installed_name(packages):
+ """
+ Find out which of mutually exclusive packages is installed
+ packages is a list of package names to check
+ Returns package name or None
+ """
+ args = ["/bin/rpm","-q","--queryformat","%{NAME}"]
+ for package in packages:
+ try:
+ (package_name, error, retcode) = run(args+[package])
+ return package_name
+ except CalledProcessError:
+ continue
+ return None