author | Drew Fisher <drew.fisher@oracle.com> |
Tue, 19 Jan 2016 13:53:42 -0800 | |
changeset 5293 | bb35a9811599 |
permissions | -rw-r--r-- |
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 |