chiark / gitweb /
Commit 2.4.5-5 as unpacked
[innduct.git] / samples / nnrpd_access_wrapper.py
1 ##  $Id: nnrpd_access_wrapper.py 7899 2008-06-22 18:22:07Z iulius $
2 ##
3 ##  Example wrapper for support of old Python authentication scripts,
4 ##  by Erik Klavon. 
5 ##
6 ##  This file contains a sample Python script which can be used to
7 ##  duplicate the behaviour of the old nnrppythonauth functionality.
8 ##  This script only supports access control.
9 ##
10 ##  How to use this wrapper:
11 ##    - insert your authentication class into this file;
12 ##    - rename your authentication class OLDAUTH.
13 ##
14 ##  See the INN Python Filtering and Authentication Hooks documentation
15 ##  for more information.
16 ##  The use of this file is *discouraged*.
17
18 ##  Old AUTH class.
19 ##  Insert your old auth class here.
20 ##  Do not include the code which sets the hook.
21
22
23
24
25 ##  Wrapper ACCESS class.  It creates an instance of the old class and
26 ##  calls its methods.  Arguments and return values are munged as
27 ##  needed to fit the new way of doing things.
28
29 class MYACCESS:
30     """Provide access callbacks to nnrpd."""
31     def access_init(self):
32         self.old = OLDAUTH()
33
34     def access(self, attributes):
35         attributes['type'] = buffer('connect')
36         perm = (self.old).authenticate(attributes)
37         result = dict([('users','*')])        
38         if perm[1] == 1:
39                 result['read'] = perm[3]
40         if perm[2] == 1:
41                 result['post'] = perm[3]
42         return result
43
44     def access_close(self):
45         (self.old).close()
46
47
48 ##  The rest is used to hook up the access module on nnrpd.  It is unlikely
49 ##  you will ever need to modify this.
50
51 ##  Import functions exposed by nnrpd.  This import must succeed, or nothing
52 ##  will work!
53 from nnrpd import *
54
55 ##  Create a class instance.
56 myaccess = MYACCESS()
57
58 ##  ...and try to hook up on nnrpd.  This would make access object methods visible
59 ##  to nnrpd.
60 try:
61     set_auth_hook(myaccess)
62     syslog('notice', "access module successfully hooked into nnrpd")
63 except Exception, errmsg:
64     syslog('error', "Cannot obtain nnrpd hook for access method: %s" % errmsg[0])