Thanks for the tips everyone! I keep going between UserDb and LoginManager to try to get this to work. UserDb gives me weird errors, and isn't really current, so I'm focusing on LM. I feel like I'm getting closer to a solution, but I'm still having difficuties... I followed jPenny's how to regarding accessing SQL method variables from within python, and wrapped the retrieveItem result in a User Class. It seems like it is at least running my code now, but no authentication... Am I close? Can Anyone working with LoginManager offer any insight into this? Thanks! -e- Here's the code I have in UserSources.py class User(BasicUser): """ A wrapper for the basic user class """ icon='misc_/UserDb/User_icon' def __init__(self, name, password, roles, domains): self.name =name self.__ =password self.roles =filter(None, map(strip, split(roles, ','))) self.domains=filter(None, map(strip, split(domains, ','))) def getUserName(self): return self.name def _getPassword(self): return self.__ def getRoles(self): return self.roles def getDomains(self): return self.domains class PGCryptUserSource(BasicUserSource): """ A sql based encrypted user source """ meta_type="PG Crypt User Source" __plugin_kind__="User Source" def retrieveItem(self, name): try: res=self.getuserbyusername(username=name) except: return None fields2index={} fieldnames=res._schema.items() for i in range(len(fieldnames)): fields2index[fieldnames[i][0]]=fieldnames[i][1] username=res[0][fields2index['username']] password=res[0][fields2index['password']] roles=res[0][fields2index['roles']] domains=res[0][fields2index['domains']] return User(username, password, roles, domains) def rolesForUser(self, user): name = user.getUserName() res = self.getuserbyusername(username=name) fields2index={} fieldnames=res._schema.items() for i in range(len(fieldnames)): fields2index[fieldnames[i][0]]=fieldnames[i][1] roles=res[0][fields2index['roles']] return roles def domainsForUser(self, user): name = user.getUserName() res = self.getuserbyusername(username=name) fields2index={} fieldnames=res._schema.items() for i in range(len(fieldnames)): fields2index[fieldnames[i][0]]=fieldnames[i][1] domains=res[0][fields2index['domains']] return domains def authenticateUser(self, user, password, request): name = user.getUserName() res = self.getuserbyusername(username=name) fields2index={} fieldnames=res._schema.items() for i in range(len(fieldnames)): fields2index[fieldnames[i][0]]=fieldnames[i][1] passwd=res[0][fields2index['password']] if crypt.crypt(password,'ab')==passwd: return 1 else: return 0 Here's one of the tracebacks that I get: Error Type: TypeError Error Value: argument 1: expected read-only character buffer, None found Traceback (innermost last): File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 222, in publish_module File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/zope/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook (Object: Traversable) File /usr/local/zope/lib/python/ZPublisher/Publish.py, line 162, in publish File /usr/local/zope/lib/python/ZPublisher/BaseRequest.py, line 440, in traverse File /usr/local/zope/lib/python/Products/LoginManager/LoginManager.py, line 108, in validate (Object: ProviderContainer) File /usr/local/zope/lib/python/Products/LoginManager/LoginMethods.py, line 235, in findLogin (Object: PlugInBase) File /usr/local/zope/lib/python/Products/LoginManager/LoginManager.py, line 65, in getItem (Object: ProviderContainer) File /usr/local/zope/lib/python/Products/ZPatterns/Rack.py, line 60, in getItem (Object: ProviderContainer) File /usr/local/zope/lib/python/Products/LoginManager/UserSources.py, line 522, in retrieveItem (Object: ProviderContainer) File /usr/local/zope/lib/python/Products/LoginManager/UserSources.py, line 485, in __init__ TypeError: (see above) _______________________________________________ Zope maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )