Juan Hernandez has uploaded a new change for review.

Change subject: [WIP] Add support for Kerberos authentication
......................................................................

[WIP] Add support for Kerberos authentication

This patch adds support for Kerberos authentication. To use it the API
object has to be created using the "negotiate" parameter:

  api = ovirtsdk.api.API(
    url="https://ovirt.example.com/ovirt-engine/api";,
    negotiate=True,
    ...
  )

For this to succeed the user must have acquired the Kerberos credentials
(the TGT) before calling the Python SDK.

Change-Id: Ic36e8548e5743aca71757eba46e4970976f08911
Bug-Url: https://bugzilla.redhat.com/1145234
Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com>
---
M 
generator/src/main/java/org/ovirt/engine/sdk/generator/rsdl/templates/EntryPointTemplate
M src/ovirtsdk/infrastructure/connectionspool.py
M src/ovirtsdk/web/connection.py
3 files changed, 18 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine-sdk refs/changes/21/33221/1

diff --git 
a/generator/src/main/java/org/ovirt/engine/sdk/generator/rsdl/templates/EntryPointTemplate
 
b/generator/src/main/java/org/ovirt/engine/sdk/generator/rsdl/templates/EntryPointTemplate
index a5e1dee..4997846 100644
--- 
a/generator/src/main/java/org/ovirt/engine/sdk/generator/rsdl/templates/EntryPointTemplate
+++ 
b/generator/src/main/java/org/ovirt/engine/sdk/generator/rsdl/templates/EntryPointTemplate
@@ -1,12 +1,13 @@
 class API(object):
-    def __init__(self, url, username, password, key_file=None, cert_file=None,
+    def __init__(self, url, username=None, password=None, key_file=None, 
cert_file=None,
                  ca_file=None, port=None, timeout=None, session_timeout=None, 
persistent_auth=True,
-                 renew_session=False, insecure=False, 
validate_cert_chain=True, filter=False, debug=False):  # @ReservedAssignment
+                 renew_session=False, insecure=False, 
validate_cert_chain=True, filter=False, debug=False,
+                 negotiate=False):  # @ReservedAssignment
 
         '''
         @param url: server url (format 
"http/s://server[:port]/ovirt-engine/api")
-        @param username: user (format user@domain)
-        @param password: password
+        [@param username: user (format user@domain)]
+        [@param password: password]
         [@param key_file: client PEM key_file for ssl enabled connection]
         [@param cert_file: client PEM cert_file for ssl enabled connection]
         [@param ca_file: server ca_file for ssl enabled connection]
@@ -19,6 +20,7 @@
         [@param validate_cert_chain: validate the server's CA certificate 
(default is True)]
         [@param filter: enables user-api filtering (default is False)]
         [@param debug: debug (format True|False)]
+        [@param negotiate: use SPNEGO authentication (default is False)]
 
         @raise NoCertificatesError: raised when CA certificate is not provided 
for SSL site (can be disabled using 'insecure=True' argument).
         @raise UnsecuredConnectionAttemptError: raised when HTTP protocol is 
used in url against server running HTTPS.
@@ -66,7 +68,8 @@
             timeout=timeout,
             insecure=insecure,
             validate_cert_chain=validate_cert_chain,
-            debug=debug
+            debug=debug,
+            negotiate=negotiate
         )
 
         # Create the proxy:
diff --git a/src/ovirtsdk/infrastructure/connectionspool.py 
b/src/ovirtsdk/infrastructure/connectionspool.py
index 07027df..16d813d 100644
--- a/src/ovirtsdk/infrastructure/connectionspool.py
+++ b/src/ovirtsdk/infrastructure/connectionspool.py
@@ -29,7 +29,7 @@
     '''
     def __init__(self, url, port, key_file, cert_file, ca_file, strict, 
timeout,
                  username, password, context, count=20, insecure=False, 
validate_cert_chain=True,
-                 debug=False):
+                 debug=False, negotiate=False):
 
         self.__free_connections = Queue(0)
         self.__busy_connections = {}
@@ -59,7 +59,8 @@
                                                         manager=self,
                                                         insecure=insecure,
                                                         
validate_cert_chain=validate_cert_chain,
-                                                        debug=debug))
+                                                        debug=debug,
+                                                        negotiate=negotiate))
 
     def getConnection(self, get_ttl=100):
 #        try:
diff --git a/src/ovirtsdk/web/connection.py b/src/ovirtsdk/web/connection.py
index c268278..ce53ad8 100644
--- a/src/ovirtsdk/web/connection.py
+++ b/src/ovirtsdk/web/connection.py
@@ -40,7 +40,8 @@
                                          
validate_cert_chain=validate_cert_chain,
                                          strict=strict,
                                          timeout=timeout,
-                                         debug=debug)
+                                         debug=debug,
+                                         negotiate=negotiate)
 
         self.__url = url
         self.__manager = manager
@@ -50,6 +51,7 @@
         self.__context = manager.context
         self.__username = username
         self.__password = password
+        self.__negotiate = negotiate
 
     def get_id(self):
         return self.__id
@@ -76,7 +78,10 @@
             # Set the URL:
             self.__curl.setopt(pycurl.URL, self.__url + url)
 
-            # Credentials should be sent only if there isn't a session:
+            # Basic credentials should be sent only if there isn't a session:
+            if self.__negotiate:
+                self.__curl.setopt(pycurl.HTTPAUTH, 
pycurl.HTTPAUTH_GSSNEGOTIATE)
+                self.__curl.setopt(pycurl.USERPWD, ":")
             if not self.__in_session():
                 self.__curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
                 self.__curl.setopt(pycurl.USERPWD, "%s:%s" % (self.__username, 
self.__password))


-- 
To view, visit http://gerrit.ovirt.org/33221
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic36e8548e5743aca71757eba46e4970976f08911
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine-sdk
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to