components/python/pywbem/patches/01-CVE-2013-6418-CVE-2013-6444.patch
author Drew Fisher <drew.fisher@oracle.com>
Tue, 19 Jan 2016 13:53:42 -0800
changeset 5293 bb35a9811599
permissions -rw-r--r--
22562431 problem in PYTHON-MOD/PYWBEM
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5293
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     1
http://sourceforge.net/p/pywbem/code/622/
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
http://sourceforge.net/p/pywbem/code/627/
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     3
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     4
fixed TOCTOU error when validating peer's certificate
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     6
By TOCTOU it's meant time-of-check-time-of-use. Up to now, pywbem made
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     7
two connections for one request (applies just to ssl). The first one
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
made the verification (without the hostname check) and the second one
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
was used for request. No verification was done for the latter, which
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    10
could be abused.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    12
Peer's certificate is now validated when connecting over ssl. To
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    13
prevent man-in-the-middle attack, verification of hostname is also
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
added. Peer's hostname must match the commonName of its certificate.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
Or it must be contained in subjectAltName (list of aliases). M2Crypto
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
package is used for that purpose.  Thanks to it both security
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
enhancements could be implemented quiete easily.  Downside is a new
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
dependency added to pywbem. Verification can be skipped if
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    19
no_verification is set to False.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    21
Certificate trust store can now be specified by user. Some default
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
paths, valid for several distributions, were added.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    24
Authored by:  miminar 2014-01-17
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    25
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    26
NOTE:  The code and patches are littered with whitespace issues.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    27
Generation of patches needs to be done carefully.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    28
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    29
--- pywbem-0.7.0/cim_http.py.orig	2008-11-05 17:01:51.000000000 -0800
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    30
+++ pywbem-0.7.0/cim_http.py	2014-01-17 06:11:05.000000000 -0800
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    31
@@ -4,8 +4,7 @@
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    32
 #
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    33
 # This program is free software; you can redistribute it and/or modify
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
 # it under the terms of the GNU Lesser General Public License as
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    35
-# published by the Free Software Foundation; either version 2 of the
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    36
-# License.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    37
+# published by the Free Software Foundation; version 2 of the License.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    38
 #   
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    39
 # This program is distributed in the hope that it will be useful, but
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    40
 # WITHOUT ANY WARRANTY; without even the implied warranty of
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    41
@@ -29,7 +28,8 @@ being transferred is XML.  It is up to t
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    42
 data and interpret the result.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    43
 '''
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    44
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    45
-import sys, string, re, os, socket, pwd
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    46
+from M2Crypto import SSL, Err
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    47
+import sys, string, re, os, socket, getpass
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    48
 from stat import S_ISSOCK
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    49
 import cim_obj
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    50
 from types import StringTypes
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    51
@@ -59,6 +59,15 @@ def parse_url(url):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    52
     if m:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    53
         host = url[len(m.group(0)):]
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    54
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    55
+    # IPv6 with/without port
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    56
+    m = re.match("^\[?([0-9A-Fa-f:]*)\]?(:([0-9]*))?$", host)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    57
+    if m:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    58
+        host = m.group(1)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    59
+        port_tmp = m.group(3)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    60
+        if port_tmp:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    61
+            port = int(port_tmp)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    62
+        return host, port, ssl
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    64
     s = string.split(host, ":")         # Set port number
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
     if len(s) != 1:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    66
         host = s[0]
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
@@ -66,8 +75,26 @@ def parse_url(url):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    68
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    69
     return host, port, ssl
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    70
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    71
+def get_default_ca_certs():
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    72
+    """
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    73
+    Try to find out system path with ca certificates. This path is cached and
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    74
+    returned. If no path is found out, None is returned.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
+    """
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    76
+    if not hasattr(get_default_ca_certs, '_path'):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
+        for path in (
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
+                '/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt',
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    79
+                '/etc/ssl/certs',
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    80
+                '/etc/ssl/certificates'):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
+            if os.path.exists(path):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    82
+                get_default_ca_certs._path = path
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    83
+                break
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
+        else:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    85
+            get_default_ca_certs._path = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    86
+    return get_default_ca_certs._path
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    87
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    88
 def wbem_request(url, data, creds, headers = [], debug = 0, x509 = None,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    89
-                 verify_callback = None):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    90
+                 verify_callback = None, ca_certs = None,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    91
+                 no_verification = False):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    92
     """Send XML data over HTTP to the specified url. Return the
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
     response in XML.  Uses Python's build-in httplib.  x509 may be a
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    94
     dictionary containing the location of the SSL certificate and key
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    95
@@ -97,9 +124,48 @@ def wbem_request(url, data, creds, heade
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    96
     
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    97
     class HTTPSConnection(HTTPBaseConnection, httplib.HTTPSConnection):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    98
         def __init__(self, host, port=None, key_file=None, cert_file=None, 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    99
-                     strict=None):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   100
+                     strict=None, ca_certs=None, verify_callback=None):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   101
             httplib.HTTPSConnection.__init__(self, host, port, key_file, 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   102
                                              cert_file, strict)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   103
+            self.ca_certs = ca_certs
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   104
+            self.verify_callback = verify_callback
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   105
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   106
+        def connect(self):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   107
+            "Connect to a host on a given (SSL) port."
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   108
+            self.sock = socket.create_connection((self.host, self.port),
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   109
+                                            self.timeout, self.source_address)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   110
+            if self._tunnel_host:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   111
+                self.sock = sock
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   112
+                self._tunnel()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   113
+            ctx = SSL.Context('sslv23')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
+            if self.cert_file:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
+                ctx.load_cert(self.cert_file, keyfile=self.key_file)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
+            if self.ca_certs:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
+                ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   118
+                    depth=9, callback=verify_callback)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
+                if os.path.isdir(self.ca_certs):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   120
+                    ctx.load_verify_locations(capath=self.ca_certs)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   121
+                else:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   122
+                    ctx.load_verify_locations(cafile=self.ca_certs)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
+            try:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
+                self.sock = SSL.Connection(ctx, self.sock)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
+                # Below is a body of SSL.Connection.connect() method
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
+                # except for the first line (socket connection). We want to preserve
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   127
+                # tunneling ability.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   128
+                self.sock.addr = (self.host, self.port)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   129
+                self.sock.setup_ssl()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   130
+                self.sock.set_connect_state()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   131
+                ret = self.sock.connect_ssl()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   132
+                if self.ca_certs:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   133
+                    check = getattr(self.sock, 'postConnectionCheck',
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   134
+                             self.sock.clientPostConnectionCheck)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   135
+                    if check is not None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   136
+                        if not check(self.sock.get_peer_cert(), self.host):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   137
+                            raise Error('SSL error: post connection check failed')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   138
+                return ret
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   139
+            except ( Err.SSLError, SSL.SSLError, SSL.SSLTimeoutError
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   140
+                   , SSL.Checker.WrongHost), arg:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
+                raise Error("SSL error: %s" % arg)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   142
     
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   143
     class FileHTTPConnection(HTTPBaseConnection, httplib.HTTPConnection):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   144
         def __init__(self, uds_path):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   145
@@ -109,47 +175,36 @@ def wbem_request(url, data, creds, heade
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   146
             self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   147
             self.sock.connect(self.uds_path)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   148
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   149
-    host, port, ssl = parse_url(url)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
+    host, port, use_ssl = parse_url(url)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
     key_file = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   153
     cert_file = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   155
-    if ssl:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   156
-
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   157
-        if x509 is not None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   158
+    if use_ssl and x509 is not None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   159
             cert_file = x509.get('cert_file')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   160
             key_file = x509.get('key_file')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   161
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   162
-        if verify_callback is not None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   163
-            try:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   164
-                from OpenSSL import SSL
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   165
-                ctx = SSL.Context(SSL.SSLv3_METHOD)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   166
-                ctx.set_verify(SSL.VERIFY_PEER, verify_callback)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   167
-                # Add the key and certificate to the session
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   168
-                if cert_file is not None and key_file is not None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   169
-                  ctx.use_certificate_file(cert_file)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   170
-                  ctx.use_privatekey_file(key_file)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   171
-                s = SSL.Connection(ctx, socket.socket(socket.AF_INET,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   172
-                                                      socket.SOCK_STREAM))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   173
-                s.connect((host, port))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   174
-                s.do_handshake()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   175
-                s.shutdown()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   176
-                s.close()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   177
-            except socket.error, arg:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   178
-                raise Error("Socket error: %s" % (arg,))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   179
-            except socket.sslerror, arg:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   180
-                raise Error("SSL error: %s" % (arg,))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   181
-
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   182
     numTries = 0
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   183
     localAuthHeader = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   184
     tryLimit = 5
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   185
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   186
+    if isinstance(data, unicode):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   187
+        data = data.encode('utf-8')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   188
     data = '<?xml version="1.0" encoding="utf-8" ?>\n' + data
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   189
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   190
+    if not no_verification and ca_certs is None:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   191
+        ca_certs = get_default_ca_certs()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   192
+    elif no_verification:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   193
+        ca_certs = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   194
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   195
     local = False
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   196
-    if ssl:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   197
-        h = HTTPSConnection(host, port = port, key_file = key_file,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   198
-                                            cert_file = cert_file)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   199
+    if use_ssl:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   200
+        h = HTTPSConnection(host,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   201
+                port = port,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   202
+                key_file = key_file,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
+                cert_file = cert_file,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   204
+                ca_certs = ca_certs,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   205
+                verify_callback = verify_callback)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   206
     else:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   207
         if url.startswith('http'):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   208
             h = HTTPConnection(host, port = port)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   209
@@ -167,12 +222,12 @@ def wbem_request(url, data, creds, heade
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   210
                 raise Error('Invalid URL')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   211
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   212
     locallogin = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   213
-    if host in ('localhost', '127.0.0.1'):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   214
+    if host in ('localhost', 'localhost6', '127.0.0.1', '::1'):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   215
         local = True
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   216
     if local:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   217
         uid = os.getuid()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   218
         try:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   219
-            locallogin = pwd.getpwuid(uid)[0]
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   220
+            locallogin = getpass.getuser()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   221
         except KeyError:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   222
             locallogin = None
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   223
     while numTries < tryLimit:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   224
@@ -191,6 +246,8 @@ def wbem_request(url, data, creds, heade
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   225
             h.putheader('PegasusAuthorization', 'Local "%s"' % locallogin)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   226
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   227
         for hdr in headers:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   228
+            if isinstance(hdr, unicode):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   229
+                hdr = hdr.encode('utf-8')
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   230
             s = map(lambda x: string.strip(x), string.split(hdr, ":", 1))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   231
             h.putheader(urllib.quote(s[0]), urllib.quote(s[1]))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   232
 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   233
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   234
--- pywbem-0.7.0/cim_operations.py.orig       2008-12-12 09:40:22.000000000 -0800
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   235
+++ pywbem-0.7.0/cim_operations.py 2014-01-17 06:11:05.000000000 -0800
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   236
@@ -4,8 +4,7 @@
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   237
 #
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   238
 # This program is free software; you can redistribute it and/or modify
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   239
 # it under the terms of the GNU Lesser General Public License as
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   240
-# published by the Free Software Foundation; either version 2 of the
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   241
-# License.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   242
+# published by the Free Software Foundation; version 2 of the License.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   243
 #   
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   244
 # This program is distributed in the hope that it will be useful, but
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   245
 # WITHOUT ANY WARRANTY; without even the implied warranty of
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   246
@@ -28,7 +27,7 @@ import sys, string
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   247
 from types import StringTypes
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   248
 from xml.dom import minidom
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   249
 import cim_obj, cim_xml, cim_http, cim_types
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   250
-from cim_obj import CIMClassName, CIMInstanceName, CIMInstance, CIMClass
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   251
+from cim_obj import CIMClassName, CIMInstanceName, CIMInstance, CIMClass, NocaseDict
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   252
 from datetime import datetime, timedelta
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   253
 from tupletree import dom_to_tupletree, xml_to_tupletree
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   254
 from tupleparse import parse_cim
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   255
@@ -79,12 +78,12 @@ class WBEMConnection(object):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   256
     the request before it is sent, and the reply before it is
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   257
     unpacked.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   258
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   259
-    verify_callback is used to verify the server certificate.  
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   260
-    It is passed to OpenSSL.SSL.set_verify, and is called during the SSL
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   261
-    handshake.  verify_callback should take five arguments: A Connection 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   262
-    object, an X509 object, and three integer variables, which are in turn 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   263
-    potential error number, error depth and return code. verify_callback 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   264
-    should return True if verification passes and False otherwise.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   265
+    verify_callback is used to verify the server certificate.  It is passed to
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   266
+    M2Crypto.SSL.Context.set_verify, and is called during the SSL handshake.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   267
+    verify_callback should take five arguments: An SSL Context object, an X509
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   268
+    object, and three integer variables, which are in turn potential error
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   269
+    number, error depth and return code. verify_callback should return True if
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   270
+    verification passes and False otherwise.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   271
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   272
     The value of the x509 argument is used only when the url contains
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   273
     'https'. x509 must be a dictionary containing the keys 'cert_file' 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   274
@@ -92,14 +91,27 @@ class WBEMConnection(object):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   275
     filename of an certificate and the value of 'key_file' must consist 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   276
     of a filename containing the private key belonging to the public key 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   277
     that is part of the certificate in cert_file. 
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   278
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   279
+    ca_certs specifies where CA certificates for verification purposes are
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   280
+    located. These are trusted certificates. Note that the certificates have to
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   281
+    be in PEM format. Either it is a directory prepared using the c_rehash tool
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   282
+    included with OpenSSL or an pemfile. If None, default system path will be
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   283
+    used.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   284
+
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   285
+    no_verification allows to disable peer's verification. This is insecure and
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   286
+    should be avoided. If True, peer's certificate is not verified and ca_certs
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   287
+    argument is ignored.
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   288
     """
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   289
     
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   290
     def __init__(self, url, creds = None, default_namespace = DEFAULT_NAMESPACE,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   291
-                 x509 = None, verify_callback = None):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   292
+                 x509 = None, verify_callback = None, ca_certs = None,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   293
+                 no_verification = False):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   294
         self.url = url
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   295
         self.creds = creds
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   296
         self.x509 = x509
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   297
         self.verify_callback = verify_callback
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   298
+        self.ca_certs = ca_certs
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   299
+        self.no_verification = no_verification
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   300
         self.last_request = self.last_reply = ''
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   301
         self.default_namespace = default_namespace
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   302
         self.debug = False
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   303
@@ -165,7 +177,9 @@ class WBEMConnection(object):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   304
             resp_xml = cim_http.wbem_request(self.url, req_xml.toxml(),
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   305
                                              self.creds, headers,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   306
                                              x509 = self.x509,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   307
-                                             verify_callback = self.verify_callback)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   308
+                                             verify_callback = self.verify_callback,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   309
+                                             ca_certs = self.ca_certs,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   310
+                                             no_verification = self.no_verification)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   311
         except cim_http.AuthError:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   312
             raise
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   313
         except cim_http.Error, arg:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   314
@@ -322,7 +336,9 @@ class WBEMConnection(object):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   315
             resp_xml = cim_http.wbem_request(self.url, req_xml.toxml(),
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   316
                                              self.creds, headers,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   317
                                              x509 = self.x509,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   318
-                                             verify_callback = self.verify_callback)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   319
+                                             verify_callback = self.verify_callback,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   320
+                                             ca_certs = self.ca_certs,
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   321
+                                             no_verification = self.no_verification)
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   322
         except cim_http.Error, arg:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   323
             # Convert cim_http exceptions to CIMError exceptions
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   324
             raise CIMError(0, str(arg))
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   325
@@ -812,7 +828,7 @@ class WBEMConnection(object):
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   326
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   327
         # Convert zero or more PARAMVALUE elements into dictionary
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   328
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   329
-        output_params = {}
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   330
+        output_params = NocaseDict()
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   331
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   332
         for p in result:
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   333
             if p[1] == 'reference':
bb35a9811599 22562431 problem in PYTHON-MOD/PYWBEM
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   334