1 # Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING
3 from ipsilon.info.common import InfoProviderBase
4 from ipsilon.info.common import InfoProviderInstaller
5 from ipsilon.util.plugin import PluginObject
6 from ipsilon.util.policy import Policy
17 class InfoProvider(InfoProviderBase):
19 def __init__(self, *pargs):
20 super(InfoProvider, self).__init__(*pargs)
21 self.mapper = Policy(posix_map)
23 self.new_config(self.name)
25 def _get_posix_user(self, user):
26 p = pwd.getpwnam(user)
27 return {'username': p.pw_name, 'uidNumber': p.pw_uid,
28 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
29 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
31 def _get_posix_groups(self, user, group):
33 getgrouplist = getattr(os, 'getgrouplist', None)
35 ids = getgrouplist(user, group)
44 g = grp.getgrgid(group)
54 def get_user_attrs(self, user):
57 posix_user = self._get_posix_user(user)
58 userattrs, extras = self.mapper.map_attributes(posix_user)
59 groups = self._get_posix_groups(posix_user['username'],
60 posix_user['gidNumber'])
62 reply['_groups'] = groups
63 reply['_extras'] = {'posix': extras}
71 class Installer(InfoProviderInstaller):
73 def __init__(self, *pargs):
74 super(Installer, self).__init__()
78 def install_args(self, group):
79 group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
80 help='Use passwd data to populate user attrs')
82 def configure(self, opts, changes):
83 if opts['info_nss'] != 'yes':
86 # Add configuration data to database
87 po = PluginObject(*self.pargs)
90 po.wipe_config_values()
92 # Update global config to add info plugin
94 po.save_enabled_state()