Fwd: Error modlist.py in addModlist

Garland, Ken R garlandkr at gmail.com
Tue Mar 20 00:48:44 CET 2007


thanks, i think i was getting by with my own tests but i'm sure users
will crash it with error. i've added your suggestion for encoding.

On 3/19/07, Joao S. O. Bueno Calligaris <gwidion at mpc.com.br> wrote:
> On Monday 19 March 2007 15:37, Alain Spineux wrote:
> > I didn't read your code, but I know ldap dont like python's unicode
> > string.
> >
> > Convert any strings coming from your web interface into string,
> > using str().
> >
>
> better do your_unicode_string.encode("utf-8")   - that way your
> application won't crash on non ASCII characters.
>
> > Hope this help
> >
> > On 3/19/07, Garland, Ken R <garlandkr at gmail.com> wrote:
> > > I've sliced together a script to add users to ldap, which works
> > > great. however, now i'm implementing it into a webapp and having
> > > some issues.
> > >
> > > --------------------
> > > Spyce exception
> > > File:   /home/kgarland/downloads/spyce- 2.1/www/newadd.spy
> > > Message:
> > >
> > > AttributeError: 'str' object has no attribute 'keys'
> > >
> > > Stack:  /usr/lib/python2.4/site-packages/ldap/modlist.py:34, in
> > > addModlist:
> > >
> > > for attrtype in entry.keys ():
> > >
> > > newadd.spy:19, in passcheck:
> > >                 mymodlist = ldap.modlist.addModlist(entry)
> > > --------------------
> > >
> > > My code causing the issue:
> > >
> > > --------------------
> > > def passcheck(self, api, passwd, firstname, lastname, vamcdrop):
> > >         import string, sys, ldap, crack, hashlib, base64
> > >         try:
> > >                 crack.VeryFascistCheck(passwd)
> > >         except ValueError, reason:
> > >                 print("Please use a different password, %s." %
> > > reason) else:
> > >                 l=ldap.initialize("ldaps://null")
> > >                 l.bind_s('cn=removed,dc=removed,dc=removed',
> > > 'removed') y = hashlib.sha1(passwd).digest()
> > >                 base64encode = base64.encodestring(y)
> > >                 userpass = string.rstrip(base64encode)
> > >                 uid = firstname.lower() + "." + lastname.lower()
> > >                 mydn = "uid=" + uid + ",ou=VA,dc=pharmacy,dc=com"
> > >                 entry = "{'uid': ['" + uid + "'], 'objectClass':
> > > ['top', 'inetOrgPerson'], 'userPassword': ['" + '{SHA}' +
> > > userpass + "'], 'vamc': ['" + vamcdrop + "'], 'sn': ['" +
> > > lastname + "'], 'givenName': ['" + firstname + "'], 'cn': ['" +
> > > firstname + " " + lastname + "']}"
> > >                 mymodlist = ldap.modlist.addModlist(entry)
> > >                 l.add_s(mydn, mymodlist)
> > >                 print "Adding the following information into
> > > LDAP:" print "<br>"
> > >                 print entry
> > > --------------------
> > >
> > > Looks like modlist is not happy with the string being presented
> > > to it. Printing the entry variable gives the same results for
> > > both the webapp and commandline.
> > >
> > > Web:
> > > {'uid': ['null.null'], 'objectClass': ['top', 'inetOrgPerson'],
> > > 'userPassword': ['{SHA}null'], 'vamc': ['null'], 'sn': ['null'],
> > > 'givenName': ['null'], 'cn': ['null null']}
> > >
> > > Shell:
> > > {'uid': ['null.null'], 'objectClass': ['top', 'inetOrgPerson'],
> > > 'userPassword': ['{SHA}null'], 'vamc': ['null'], 'sn': ['null'],
> > > 'givenName': ['null'], 'cn': ['null null']}
> > >
> > > 


More information about the python-ldap mailing list