diff options
author | Alexander Bokovoy <abokovoy@redhat.com> | 2011-07-01 12:15:12 +0300 |
---|---|---|
committer | Alexander Bokovoy <abokovoy@redhat.com> | 2011-07-01 12:30:35 +0300 |
commit | 8abb95575390a6784159afcb163bdef8589f470b (patch) | |
tree | ef922b914704860b99ebb0723916d004971b88fe /ipapython/ipautil.py | |
parent | c746abd63ac544273a2ddec44a3845e4eb880e62 (diff) | |
download | freeipa-8abb95575390a6784159afcb163bdef8589f470b.tar.gz freeipa-8abb95575390a6784159afcb163bdef8589f470b.tar.xz freeipa-8abb95575390a6784159afcb163bdef8589f470b.zip |
Make error reporting more 'local' for various configurations of nss_ldap packages
https://fedorahosted.org/freeipa/ticket/1369
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.
Diffstat (limited to 'ipapython/ipautil.py')
-rw-r--r-- | ipapython/ipautil.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index 91d19e95f..1573e0a17 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -1169,3 +1169,21 @@ def bind_port_responder(port, socket_stream=True, socket_timeout=None, responder s.sendto(responder_data, addr) finally: s.close() + +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 |