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.info.common import InfoMapping
8 from ipsilon.util.plugin import PluginObject
19 class InfoProvider(InfoProviderBase):
21 def __init__(self, *pargs):
22 super(InfoProvider, self).__init__(*pargs)
23 self.mapper = InfoMapping()
24 self.mapper.set_mapping(posix_map)
26 self.new_config(self.name)
28 def _get_posix_user(self, user):
29 p = pwd.getpwnam(user)
30 return {'username': p.pw_name, 'uidNumber': p.pw_uid,
31 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
32 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
34 def _get_posix_groups(self, user, group):
36 getgrouplist = getattr(os, 'getgrouplist', None)
38 ids = getgrouplist(user, group)
47 g = grp.getgrgid(group)
57 def get_user_attrs(self, user):
60 posix_user = self._get_posix_user(user)
61 userattrs, extras = self.mapper.map_attrs(posix_user)
62 groups = self._get_posix_groups(posix_user['username'],
63 posix_user['gidNumber'])
65 reply['_groups'] = groups
66 reply['_extras'] = {'posix': extras}
74 class Installer(InfoProviderInstaller):
76 def __init__(self, *pargs):
77 super(Installer, self).__init__()
81 def install_args(self, group):
82 group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
83 help='Use passwd data to populate user attrs')
85 def configure(self, opts):
86 if opts['info_nss'] != 'yes':
89 # Add configuration data to database
90 po = PluginObject(*self.pargs)
93 po.wipe_config_values()
95 # Update global config to add info plugin
97 po.save_enabled_state()