ipa-client-install: Do not add already configured sources to nsswitch.conf entries

Makes sure that any new sources added are not already present
in the entry.

https://fedorahosted.org/freeipa/ticket/4508

Reviewed-By: Petr Viktorin <pviktori@redhat.com>
This commit is contained in:
Tomas Babej 2014-08-27 09:10:59 +02:00 committed by Petr Viktorin
parent 93346b1cf9
commit fd26560a16

View File

@ -399,7 +399,7 @@ def is_ipa_client_installed(on_master=False):
return installed
def configure_nsswitch_database(fstore, database, services, preserve=True,
append=True, default_value=None):
append=True, default_value=()):
"""
Edits the specified nsswitch.conf database (e.g. passwd, group, sudoers)
to use the specified service(s).
@ -430,28 +430,34 @@ def configure_nsswitch_database(fstore, database, services, preserve=True,
opts = conf.parse(f)
raw_database_entry = conf.findOpts(opts, 'option', database)[1]
if not raw_database_entry:
# If there is no database entry, database is not present in
# the nsswitch.conf. Set the list of services to the
# default list, if passed.
configured_services = ' '.join(default_value or [])
else:
configured_services = raw_database_entry['value'].strip()
if append:
new_services = ' ' + configured_services + ' ' + ' '.join(services)
# Detect the list of already configured services
if not raw_database_entry:
# If there is no database entry, database is not present in
# the nsswitch.conf. Set the list of services to the
# default list, if passed.
configured_services = list(default_value)
else:
new_services = ' ' + ' '.join(services) + ' ' + configured_services
configured_services = raw_database_entry['value'].strip().split()
# Make sure no service is added if already mentioned in the list
added_services = [s for s in services
if s not in configured_services]
# Prepend / append the list of new services
if append:
new_value = ' ' + ' '.join(configured_services + added_services)
else:
new_value = ' ' + ' '.join(added_services + configured_services)
else:
# Preserve not set, let's rewrite existing configuration
new_services = ' ' + ' '.join(services)
new_value = ' ' + ' '.join(services)
# Set new services as sources for database
opts = [{'name': database,
'type':'option',
'action':'set',
'value': new_services
'value': new_value
},
{'name':'empty',
'type':'empty'