%dir %{python2_sitelib}/ipsilon/info
%{python2_sitelib}/ipsilon/info/__init__*
%{python2_sitelib}/ipsilon/info/common*
-%{python2_sitelib}/ipsilon/info/nss*
+%{python2_sitelib}/ipsilon/info/infonss*
%dir %{python2_sitelib}/ipsilon/providers
%{python2_sitelib}/ipsilon/providers/__init__*
%{python2_sitelib}/ipsilon/providers/common*
--- /dev/null
+# Copyright (C) 2014 Ipsilon Project Contributors
+#
+# See the file named COPYING for the project license
+
+from ipsilon.info.common import InfoProviderBase
+from ipsilon.info.common import InfoProviderInstaller
+from ipsilon.util.plugin import PluginObject
+from ipsilon.util.policy import Policy
+import grp
+import pwd
+import os
+
+
+posix_map = [
+ ['gecos', 'fullname']
+]
+
+
+class InfoProvider(InfoProviderBase):
+
+ def __init__(self, *pargs):
+ super(InfoProvider, self).__init__(*pargs)
+ self.mapper = Policy(posix_map)
+ self.name = 'nss'
+ self.new_config(self.name)
+
+ def _get_posix_user(self, user):
+ p = pwd.getpwnam(user)
+ return {'username': p.pw_name, 'uidNumber': p.pw_uid,
+ 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
+ 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
+
+ def _get_posix_groups(self, user, group):
+ groups = set()
+ getgrouplist = getattr(os, 'getgrouplist', None)
+ if getgrouplist:
+ ids = getgrouplist(user, group)
+ for i in ids:
+ try:
+ g = grp.getgrgid(i)
+ groups.add(g.gr_name)
+ except KeyError:
+ pass
+
+ else:
+ g = grp.getgrgid(group)
+ groups.add(g.gr_name)
+
+ allg = grp.getgrall()
+ for g in allg:
+ if user in g.gr_mem:
+ groups.add(g.gr_name)
+
+ return list(groups)
+
+ def get_user_attrs(self, user):
+ reply = dict()
+ try:
+ posix_user = self._get_posix_user(user)
+ userattrs, extras = self.mapper.map_attributes(posix_user)
+ groups = self._get_posix_groups(posix_user['username'],
+ posix_user['gidNumber'])
+ reply = userattrs
+ reply['_groups'] = groups
+ reply['_extras'] = {'posix': extras}
+
+ except KeyError:
+ pass
+
+ return reply
+
+
+class Installer(InfoProviderInstaller):
+
+ def __init__(self, *pargs):
+ super(Installer, self).__init__()
+ self.name = 'nss'
+ self.pargs = pargs
+
+ def install_args(self, group):
+ group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
+ help='Use passwd data to populate user attrs')
+
+ def configure(self, opts):
+ if opts['info_nss'] != 'yes':
+ return
+
+ # Add configuration data to database
+ po = PluginObject(*self.pargs)
+ po.name = 'nss'
+ po.wipe_data()
+ po.wipe_config_values()
+
+ # Update global config to add info plugin
+ po.is_enabled = True
+ po.save_enabled_state()
+++ /dev/null
-# Copyright (C) 2014 Ipsilon Project Contributors
-#
-# See the file named COPYING for the project license
-
-from ipsilon.info.common import InfoProviderBase
-from ipsilon.info.common import InfoProviderInstaller
-from ipsilon.util.plugin import PluginObject
-from ipsilon.util.policy import Policy
-import grp
-import pwd
-import os
-
-
-posix_map = [
- ['gecos', 'fullname']
-]
-
-
-class InfoProvider(InfoProviderBase):
-
- def __init__(self, *pargs):
- super(InfoProvider, self).__init__(*pargs)
- self.mapper = Policy(posix_map)
- self.name = 'nss'
- self.new_config(self.name)
-
- def _get_posix_user(self, user):
- p = pwd.getpwnam(user)
- return {'username': p.pw_name, 'uidNumber': p.pw_uid,
- 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
- 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
-
- def _get_posix_groups(self, user, group):
- groups = set()
- getgrouplist = getattr(os, 'getgrouplist', None)
- if getgrouplist:
- ids = getgrouplist(user, group)
- for i in ids:
- try:
- g = grp.getgrgid(i)
- groups.add(g.gr_name)
- except KeyError:
- pass
-
- else:
- g = grp.getgrgid(group)
- groups.add(g.gr_name)
-
- allg = grp.getgrall()
- for g in allg:
- if user in g.gr_mem:
- groups.add(g.gr_name)
-
- return list(groups)
-
- def get_user_attrs(self, user):
- reply = dict()
- try:
- posix_user = self._get_posix_user(user)
- userattrs, extras = self.mapper.map_attributes(posix_user)
- groups = self._get_posix_groups(posix_user['username'],
- posix_user['gidNumber'])
- reply = userattrs
- reply['_groups'] = groups
- reply['_extras'] = {'posix': extras}
-
- except KeyError:
- pass
-
- return reply
-
-
-class Installer(InfoProviderInstaller):
-
- def __init__(self, *pargs):
- super(Installer, self).__init__()
- self.name = 'nss'
- self.pargs = pargs
-
- def install_args(self, group):
- group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
- help='Use passwd data to populate user attrs')
-
- def configure(self, opts):
- if opts['info_nss'] != 'yes':
- return
-
- # Add configuration data to database
- po = PluginObject(*self.pargs)
- po.name = 'nss'
- po.wipe_data()
- po.wipe_config_values()
-
- # Update global config to add info plugin
- po.is_enabled = True
- po.save_enabled_state()