e9a3a96af8a1a4302104969aae782c98367ed913
[cascardo/ipsilon.git] / ipsilon / info / nss.py
1 #!/usr/bin/python
2 #
3 # Copyright (C) 2014 Ipsilon Project Contributors
4 #
5 # See the file named COPYING for the project license
6
7 from ipsilon.info.common import InfoProviderBase
8 from ipsilon.info.common import InfoProviderInstaller
9 from ipsilon.util.plugin import PluginObject
10 import pwd
11
12
13 class InfoProvider(InfoProviderBase):
14
15     def __init__(self):
16         super(InfoProvider, self).__init__()
17         self.name = 'nss'
18
19     def get_user_attrs(self, user):
20         userattrs = None
21         try:
22             p = pwd.getpwnam(user)
23             userattrs = {'uidNumber': p[2], 'gidNumber': p[3],
24                          'gecos': p[4], 'homeDirectory': p[5],
25                          'loginShell': p[6]}
26         except KeyError:
27             pass
28
29         return userattrs
30
31
32 class Installer(InfoProviderInstaller):
33
34     def __init__(self):
35         super(Installer, self).__init__()
36         self.name = 'nss'
37
38     def install_args(self, group):
39         group.add_argument('--info-nss', choices=['yes', 'no'], default='no',
40                            help='Use passwd data to populate user attrs')
41
42     def configure(self, opts):
43         if opts['info_nss'] != 'yes':
44             return
45
46         # Add configuration data to database
47         po = PluginObject()
48         po.name = 'nss'
49         po.wipe_data()
50         po.wipe_config_values(self.facility)
51
52         # Replace global config, only one plugin info can be used
53         po.name = 'global'
54         globalconf = po.get_plugin_config(self.facility)
55         if 'order' in globalconf:
56             order = globalconf['order'].split(',')
57         else:
58             order = []
59         order.append('nss')
60         globalconf['order'] = ','.join(order)
61         po.set_config(globalconf)
62         po.save_plugin_config(self.facility)