1 # Copyright (C) 2014 Ipsilon Project Contributors
3 # See the file named COPYING for the project license
5 from ipsilon.info.common import InfoProviderBase
6 from ipsilon.info.common import InfoProviderInstaller
7 from ipsilon.util.plugin import PluginObject
8 from ipsilon.util.policy import Policy
19 class InfoProvider(InfoProviderBase):
21 def __init__(self, *pargs):
22 super(InfoProvider, self).__init__(*pargs)
23 self.mapper = Policy(posix_map)
25 self.new_config(self.name)
27 def _get_posix_user(self, user):
28 p = pwd.getpwnam(user)
29 return {'username': p.pw_name, 'uidNumber': p.pw_uid,
30 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
31 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
33 def _get_posix_groups(self, user, group):
35 getgrouplist = getattr(os, 'getgrouplist', None)
37 ids = getgrouplist(user, group)
46 g = grp.getgrgid(group)
56 def get_user_attrs(self, user):
59 posix_user = self._get_posix_user(user)
60 userattrs, extras = self.mapper.map_attributes(posix_user)
61 groups = self._get_posix_groups(posix_user['username'],
62 posix_user['gidNumber'])
64 reply['_groups'] = groups
65 reply['_extras'] = {'posix': extras}
73 class Installer(InfoProviderInstaller):
75 def __init__(self, *pargs):
76 super(Installer, self).__init__()
80 def install_args(self, group):
81 group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
82 help='Use passwd data to populate user attrs')
84 def configure(self, opts):
85 if opts['info_nss'] != 'yes':
88 # Add configuration data to database
89 po = PluginObject(*self.pargs)
92 po.wipe_config_values()
94 # Update global config to add info plugin
96 po.save_enabled_state()