X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Flogin%2Fauthkrb.py;h=6c561acd6547ca045367e2b1510e810b36625551;hp=c67b93b82ff34ece285033552f75020f0b84d4e9;hb=62b4656571be6e8671ada295047eac385d330f66;hpb=0b578c4a5961baf85275a5cbc93676aca61758b5 diff --git a/ipsilon/login/authkrb.py b/ipsilon/login/authkrb.py index c67b93b..6c561ac 100755 --- a/ipsilon/login/authkrb.py +++ b/ipsilon/login/authkrb.py @@ -20,6 +20,7 @@ from ipsilon.login.common import LoginPageBase, LoginManagerBase from ipsilon.login.common import FACILITY from ipsilon.util.plugin import PluginObject +from ipsilon.util.user import UserSession from string import Template import cherrypy import os @@ -36,13 +37,18 @@ class Krb(LoginPageBase): class KrbAuth(LoginPageBase): def root(self, *args, **kwargs): + trans = self.get_valid_transaction('login', **kwargs) # If we can get here, we must be authenticated and remote_user # was set. Check the session has a user set already or error. - if self.user and self.user.name: + us = UserSession() + us.remote_login() + self.user = us.get_user() + if not self.user.is_anonymous: userdata = {'krb_principal_name': self.user.name} - return self.lm.auth_successful(self.user.name, userdata) + return self.lm.auth_successful(trans, self.user.name, + 'krb', userdata) else: - return self.lm.auth_failed() + return self.lm.auth_failed(trans) class KrbError(LoginPageBase): @@ -52,7 +58,7 @@ class KrbError(LoginPageBase): # If we have no negotiate header return whatever mod_auth_kerb # generated and wait for the next request - if not 'WWW-Authenticate' in cherrypy.request.headers: + if 'WWW-Authenticate' not in cherrypy.request.headers: cherrypy.response.status = 401 if self.lm.next_login: @@ -64,7 +70,8 @@ class KrbError(LoginPageBase): cont=conturl) # If we get here, negotiate failed - return self.lm.auth_failed() + trans = self.get_valid_transaction('login', **kwargs) + return self.lm.auth_failed(trans) class LoginManager(LoginManagerBase): @@ -82,6 +89,7 @@ plugin for actual authentication. """ self.page = Krb(site, self) self.page.__dict__['negotiate'] = KrbAuth(site, self) self.page.__dict__['unauthorized'] = KrbError(site, self) + self.page.__dict__['failed'] = KrbError(site, self) return self.page @@ -101,6 +109,7 @@ CONF_TEMPLATE = """ Require valid-user ErrorDocument 401 /${instance}/login/krb/unauthorized + ErrorDocument 500 /${instance}/login/krb/failed """ @@ -155,5 +164,4 @@ class Installer(object): order = [] order.insert(0, 'krb') globalconf['order'] = ','.join(order) - po.set_config(globalconf) - po.save_plugin_config(FACILITY) + po.save_plugin_config(FACILITY, globalconf)