3 # Copyright (C) 2014 Ipsilon Project Contributors
5 # See the file named COPYING for the project license
7 from ipsilon.info.common import InfoProviderBase
8 from ipsilon.info.common import InfoProviderInstaller
9 from ipsilon.info.common import InfoMapping
10 from ipsilon.util.plugin import PluginObject
21 class InfoProvider(InfoProviderBase):
24 super(InfoProvider, self).__init__()
25 self.mapper = InfoMapping()
26 self.mapper.set_mapping(posix_map)
29 def _get_posix_user(self, user):
30 p = pwd.getpwnam(user)
31 return {'username': p.pw_name, 'uidNumber': p.pw_uid,
32 'gidNumber': p.pw_gid, 'gecos': p.pw_gecos,
33 'homeDirectory': p.pw_dir, 'loginShell': p.pw_shell}
35 def _get_posix_groups(self, user, group):
37 getgrouplist = getattr(os, 'getgrouplist', None)
39 ids = getgrouplist(user, group)
48 g = grp.getgrgid(group)
58 def get_user_attrs(self, user):
61 posix_user = self._get_posix_user(user)
62 userattrs, extras = self.mapper.map_attrs(posix_user)
63 groups = self._get_posix_groups(posix_user['username'],
64 posix_user['gidNumber'])
65 reply['userdata'] = userattrs
66 reply['groups'] = groups
67 reply['extras'] = {'posix': extras}
75 class Installer(InfoProviderInstaller):
78 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
93 po.wipe_config_values(self.facility)
95 # Replace global config, only one plugin info can be used
97 globalconf = po.get_plugin_config(self.facility)
98 if 'order' in globalconf:
99 order = globalconf['order'].split(',')
103 globalconf['order'] = ','.join(order)
104 po.set_config(globalconf)
105 po.save_plugin_config(self.facility)