# HG changeset patch
# User Alastair Tse <atse@xxxxxxxxxxxxx>
# Node ID f0c7f258c19e0bd1f231dab4185287a0cff4db73
# Parent f895b7c94f1044b737d7eeb718caa8da076419ed
[XEND] Add some docstrings about XendAuthSessions
Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
tools/python/xen/xend/XendAuthSessions.py | 33 +++++++++++++++++++++++++++---
1 files changed, 30 insertions(+), 3 deletions(-)
diff -r f895b7c94f10 -r f0c7f258c19e tools/python/xen/xend/XendAuthSessions.py
--- a/tools/python/xen/xend/XendAuthSessions.py Thu Oct 19 17:46:08 2006 +0100
+++ b/tools/python/xen/xend/XendAuthSessions.py Thu Oct 19 17:46:54 2006 +0100
@@ -16,15 +16,21 @@
#============================================================================
import time
-import PAM
from xen.xend import uuid
from xen.xend.XendError import *
from xen.xend.XendLogging import log
+try:
+ import PAM
+except ImportError:
+ log.warn("python-pam is required for XenAPI support.")
+
class XendAuthSessions:
- """Keeps track of Xen API Login Sessions. (Example only)"""
+ """Keeps track of Xen API Login Sessions using PAM.
+ Note: Login sessions are not valid across instances of Xend.
+ """
def __init__(self):
self.sessions = {}
@@ -32,6 +38,12 @@ class XendAuthSessions:
pass
def login_with_password(self, username, password):
+ """Returns a session UUID if valid, otherwise raises an error.
+
+ @raises XendError: If login fails.
+ @rtype: string
+ @return: Session UUID
+ """
if self.is_authorized(username, password):
new_session = uuid.createString()
self.sessions[new_session] = (username, time.time())
@@ -40,16 +52,31 @@ class XendAuthSessions:
raise XendError("Login failed")
def logout(self, session):
+ """Delete session of it exists."""
if self.is_session_valid(session):
del self.sessions[session]
def is_session_valid(self, session):
+ """Returns true is session is valid."""
if type(session) == type(str()):
return (session in self.sessions)
return False
def is_authorized(self, username, password):
- pam_auth = PAM.pam()
+ """Returns true is a user is authorised via PAM.
+
+ Note: We use the 'login' PAM stack rather than inventing
+ our own.
+
+ @rtype: boolean
+ """
+ pam_auth = None
+ try:
+ pam_auth = PAM.pam()
+ except NameError:
+ # if PAM doesn't exist, let's ignore it
+ return False
+
pam_auth.start("login")
pam_auth.set_item(PAM.PAM_USER, username)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|