[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [XEND] Switch to PAM authentication for login sessions



# HG changeset patch
# User Alastair Tse <atse@xxxxxxxxxxxxx>
# Node ID 6173a6f5de2b39027c4f730593aaa82e84521f90
# Parent  e295ad19deed521cbea316011a252e07807cf5bc
[XEND] Switch to PAM authentication for login sessions
[XENAPI] Fix case difference in API for Host.* functions

Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
 tools/python/scripts/xapi.py              |   13 +++++++----
 tools/python/xen/xend/XendAuthSessions.py |   33 ++++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 9 deletions(-)

diff -r e295ad19deed -r 6173a6f5de2b tools/python/scripts/xapi.py
--- a/tools/python/scripts/xapi.py      Wed Oct 18 17:54:58 2006 +0100
+++ b/tools/python/scripts/xapi.py      Thu Oct 19 15:37:16 2006 +0100
@@ -20,6 +20,7 @@ from optparse import *
 from optparse import *
 from pprint import pprint
 from types import DictType
+from getpass import getpass
 
 MB = 1024 * 1024
 
@@ -30,7 +31,6 @@ SR_LIST_FORMAT = '%(name_label)-18s %(uu
                  '%(type)-10s'
 VDI_LIST_FORMAT = '%(name_label)-18s %(uuid)-36s %(virtual_size)-8s '\
                   '%(sector_size)-8s'
-LOGIN = ('atse', 'passwd')
 
 COMMANDS = {
     'host-info': ('', 'Get Xen Host Info'),
@@ -132,8 +132,11 @@ def execute(fn, *args):
 
 
 def _connect(*args):
-    server = ServerProxy('httpu:///var/run/xend/xmlrpc.sock')        
-    session = execute(server.session.login_with_password, *LOGIN)
+    server = ServerProxy('httpu:///var/run/xend/xmlrpc.sock')
+    login = raw_input("Login: ")
+    password = getpass()
+    creds = (login, password)
+    session = execute(server.session.login_with_password, *creds)
     host = execute(server.session.get_this_host, session)
     return (server, session)
 
@@ -158,9 +161,9 @@ def resolve_vm(server, session, vm_name)
 
 def xapi_host_info(*args):
     server, session = _connect()
-    hosts = execute(server.Host.get_all, session)
+    hosts = execute(server.host.get_all, session)
     for host in hosts: # there is only one, but ..
-        hostinfo = execute(server.Host.get_record, session, host)
+        hostinfo = execute(server.host.get_record, session, host)
         print HOST_INFO_FORMAT % ('Name', hostinfo['name_label'])
         print HOST_INFO_FORMAT % ('Version', hostinfo['software_version'])
         print HOST_INFO_FORMAT % ('CPUs', len(hostinfo['host_CPUs']))
diff -r e295ad19deed -r 6173a6f5de2b tools/python/xen/xend/XendAuthSessions.py
--- a/tools/python/xen/xend/XendAuthSessions.py Wed Oct 18 17:54:58 2006 +0100
+++ b/tools/python/xen/xend/XendAuthSessions.py Thu Oct 19 15:37:16 2006 +0100
@@ -16,6 +16,7 @@
 #============================================================================
 
 import time
+import PAM
 
 from xen.xend import uuid
 from xen.xend.XendError import *
@@ -26,7 +27,6 @@ class XendAuthSessions:
 
     def __init__(self):
         self.sessions = {}
-        self.users = {'atse': 'passwd'}
 
     def init(self):
         pass
@@ -47,11 +47,36 @@ class XendAuthSessions:
         if type(session) == type(str()):
             return (session in self.sessions)
         return False
-    
+
     def is_authorized(self, username, password):
-        if username in self.users and self.users[username] == password:
+        pam_auth = PAM.pam()
+        pam_auth.start("login")
+        pam_auth.set_item(PAM.PAM_USER, username)
+
+        def _pam_conv(auth, query_list, user_data):
+            resp = []
+            for i in range(len(query_list)):
+                query, qtype = query_list[i]
+                if qtype == PAM.PAM_PROMPT_ECHO_ON:
+                    resp.append((username, 0))
+                elif qtype == PAM.PAM_PROMPT_ECHO_OFF:
+                    resp.append((password, 0))
+                else:
+                    return None
+            return resp
+
+        pam_auth.set_item(PAM.PAM_CONV, _pam_conv)
+        
+        try:
+            pam_auth.authenticate()
+            pam_auth.acct_mgmt()
+        except PAM.error, resp:
+            return False
+        except Exception, e:
+            log.warn("Error with PAM: %s" % str(e))
+            return False
+        else:
             return True
-        return False
 
     def get_user(self, session):
         try:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.