module ldap : no module named .py

David Hláčik david at hlacik.eu
Thu Jun 5 15:53:04 CEST 2008


FYI,

this is the result of test.py :
-- syslog level: notice message: nnrpd authentication class instance created
** set_auth_hook for <nnrpd_auth.AUTH instance at 0xb7f1f5ec>
-- syslog level: notice message: authentication module successfully hooked
into nnrpd
-- syslog level: notice message: nnrpd authentication class instance created
-- syslog level: notice message: n_a authenticate() invoked: hostname None,
ipaddress None, interface None, user boss
-- syslog level: notice message: authentication by username succeeded
(281, 'No error', 'default_user')

And this is the result (from news.notice) when used as auth hook in INN :
(inn will load nnrpd_auth.py and instantiate as in nnrpd_auth.py on the end
written and call method authenticate(attributes) ) :

Jun  5 13:33:12 dev01 nnrpd[9550]: david-nb.net.hlacik.eu (10.10.10.199)
connect
Jun  5 13:33:12 dev01 nnrpd[9550]: python interpreter initialized OK
Jun  5 13:33:12 dev01 nnrpd[9550]: python: nnrpd authentication class
instance created
Jun  5 13:33:12 dev01 nnrpd[9550]: python: authentication module
successfully hooked into nnrpd
Jun  5 13:33:12 dev01 nnrpd[9550]: python method authen_init not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python method authen_close not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python method access_init not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python method access_close not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python method dynamic_init not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python method dynamic_close not found
Jun  5 13:33:12 dev01 nnrpd[9550]: python: n_a authenticate() invoked:
hostname david-nb.net.hlacik.eu, ipaddress 10.10.10.199, interface
10.10.10.183, user boss
Jun  5 13:33:12 dev01 nnrpd[9550]: python: Error: No module named py
Jun  5 13:33:12 dev01 nnrpd[9550]: python authenticate method returned wrong
result
Jun  5 13:33:12 dev01 nnrpd[9550]: david-nb.net.hlacik.eu times user 0.016
system 0.016 idle 0.000 elapsed 0.073

On Thu, Jun 5, 2008 at 3:50 PM, David Hláčik <david at hlacik.eu> wrote:

> Hello, i am trying to write python authentification hook for
> InternetNewsService (INN) using *python-ldap module*
>
> I have created nnrpd_auth.py ,which is working for me, when i am calling it
>
> from my test.py script.
>
> Alltought when i pass it to INN, when INN calls nnrpd_auth.py and comes to
> line *when ldap module is used first time* it will return error
> "no module named.py"
>
> I will post you my test.py and nnrpd_auth.py.
>  test.py i am using to debug my
> nnrpd_auth.py. Trought test.py as i mentioned nnrpd_auth.py is working
> (ldap module will load fine and post results)
> Is there some bug, or am i blind and forgetting about somethin?
> I am using it on CentOs5.1 with python-2.4.3-19.el5 and
> python-ldap-2.2.0-2.1
>
>
> ----------------nnrpd_auth.py----------------------
> class AUTH:
>     """Provide authentication and authorization callbacks to nnrpd."""
>     def __init__(self):
>         """This is a good place to initialize variables or open a
>            database connection.
>         """
>         # Create a list of NNTP codes to respond on connect
>         self.connectcodes = {   'READPOST':200,
>                                 'READ':201,
>                                 'AUTHNEEDED':480,
>                                 'PERMDENIED':502
>         }
>
>         # Create a list of NNTP codes to respond on authentication
>         self.authcodes = {  'ALLOWED':281,
>                             'DENIED':502
>
>         }
>
>         #LDAP search definitions
>         self.server = 'ldap://dev01.net.hlacik.eu'
>         self.user_dn = 'cn=pdg,ou=Operators,o=Polarion'
>         self.user_pw = 'Pdg1'
>         self.base_dn_users = 'ou=Users,o=Polarion'
>         self.base_dn_groups = 'ou=Groups,o=Polarion'
>
>         syslog('notice', 'nnrpd authentication class instance created')
>
>     def __newsauth(self,match_username,match_password):
>         filter = "(uid=" +  match_username +  ")"
>         attrs = ['userPassword']
>
>         try :
>                 l = ldap.initialize(self.server)
>                 l.bind_s(self.user_dn, self.user_pw)
>                 search = l.search_s( self.base_dn_users,
> ldap.SCOPE_SUBTREE, filter, attrs
> )[0][1]
>                 l.unbind()
>         except ldap.SERVER_DOWN:
>                 syslog('notice', 'Error, server down')
>                 return 2
>         except ldap.INVALID_CREDENTIALS:
>                 syslog('Notice','Error, invalid credentials"')
>                 return 2
>         except ldap.LDAPError, e:
>                 syslog('Notice', "Error, %s" % e)
>         for password in search["userPassword"]:
>                 if password == match_password: return 1
>         return 0
>
>     def newsaccess(self,match_username,match_password):
>         filter  = "(uid=" +  match_username +  ")"
>         attrs = ['cn']
>
>         try :
>                 l = ldap.initialize(self.server)
>                 l.bind_s(self.user_dn, self.user_pw)
>                 cn = l.search_s( self.base_dn_users, ldap.SCOPE_SUBTREE,
> filter, attrs )[0]
> [0]
>                 raw_res = l.search_s( self.base_dn_groups,
> ldap.SCOPE_SUBTREE, "(member=" +
>  cn + ")",attrs)
>                 l.unbind()
>         except ldap.SERVER_DOWN:
>                 syslog('notice', 'Error, LDAP server down')
>                 return 2
>         except ldap.INVALID_CREDENTIALS:
>                 syslog('Notice','Error, invalid LDAP credentials"')
>                 return 2
>         except ldap.LDAPError, e:
>                 syslog('Notice', "LDAP error, %s" % e)
>
>         return raw_res
>     def authenticate(self, attributes):
>         """Called when python_auth is encountered in readers.conf"""
>
>         # just for debugging purposes
>         syslog('notice', 'n_a authenticate() invoked: hostname %s,
> ipaddress %s, interface
> %s, user %s' % (\
>                 attributes['hostname'], \
>                 attributes['ipaddress'], \
>                 attributes['interface'], \
>                 attributes['user']))
>         # username & password auth using LDAP
>         try:
>                 if
> self.__newsauth(str(attributes['user']),str(attributes['pass'])):
>                         syslog('notice', 'authentication by username
> succeeded')
>                         return ( self.authcodes['ALLOWED'], 'No error',
> 'default_user')
>                 else:
>                         syslog('notice', 'authentication by username
> failed')
>                         return ( self.authcodes['DENIED'], 'Access
> Denied!')
>         except Exception, e:
>                 syslog('notice', "Error: %s" % e)
>
>     def access(self, attributes):
>         """Called when python_access is encountered in readers.conf"""
>
>         # just for debugging purposes
>         syslog('notice', 'n_a access() invoked: hostname %s, ipaddress %s,
> interface %s, us
> er %s' % (\
>                 attributes['hostname'], \
>                 attributes['ipaddress'], \
>                 attributes['interface'], \
>                 attributes['user']))
>
>         # allow newsreading from specific host only
>         if '127.0.0.1' == str(attributes['ipaddress']):
>             syslog('notice', 'authentication by IP address succeeded')
>             return {'read':'*','post':'*'}
>         else:
>             syslog('notice', 'authentication by IP address failed')
>             return {'read':'!*','post':'!*'}
>
>     def dynamic(self, attributes):
>         """Called when python_dynamic was reached in the processing of
>            readers.conf and a reader requests either read or post
>            permission for particular newsgroup.
>         """
>         # just for debugging purposes
>         syslog('notice', 'n_a dyanmic() invoked against type %s, hostname
> %s, ipaddress %s,
>  interface %s, user %s' % (\
>                 attributes['type'], \
>                 attributes['hostname'], \
>                 attributes['ipaddress'], \
>                 attributes['interface'], \
>                 attributes['user']))
>
>         # Allow reading of any newsgroup but not posting
>         if 'post' == str(attributes['type']):
>             syslog('notice', 'authorization for post access denied')
>             return "no posting for you"
>         elif 'read' == str(attributes['type']):
>             syslog('notice', 'authorization for read access granted')
>             return None
>         else:
>             syslog('notice', 'authorization type is not known: %s' %
> attributes['type'])
>             return "Internal error";
>
>
> #
> # The rest is used to hook up the auth module on nnrpd. It is unlikely
> # you will ever need to modify this.
> #
>
> # Import functions exposed by nnrpd. This import must succeed, or nothing
> # will work!
> from nnrpd import *
> #from ldap import *
> import ldap
>
> # Create a class instance
> myauth = AUTH()
>
> # ...and try to hook up on nnrpd. This would make auth object methods
> visible
> # to nnrpd.
> try:
>     set_auth_hook(myauth)
>     syslog('notice', "authentication module successfully hooked into
> nnrpd")
> except Exception, errmsg:
>     syslog('error', "Cannot obtain nnrpd hook for authentication method:
> %s" % errmsg[0])
>
> ----test.py----------
> from nnrpd_auth import *
>
> myauth = AUTH()
>
> #print  dir(myauth)
> print
> myauth.authenticate({'user':'boss','pass':'xxx','interface':None,'ipaddress':
> None,'hostname':None})
> #print myauth.newsauth('boss','22')
> #print myauth.newsaccess('boss','xxx')
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ldap/attachments/20080605/d82647d1/attachment.html>


More information about the python-ldap mailing list