Skip to content

Commit 2a0dda1

Browse files
peppelinuxc00kiemon5ter
authored andcommitted
Fixed xmlsec temporary files deletions.
PYSAML2_KEEP_XMLSEC_TMP replaced with PYSAML2_DELETE_XMLSEC_TMP and this latter is True by default. Unit tests involved: 40 42 50 # this produces six xml temp file probably for handled exceptions in its tests 51
1 parent 8379d70 commit 2a0dda1

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

docs/howto/config.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@ Format::
157157

158158
Whether debug information should be sent to the log file.
159159

160+
os.environ['PYSAML2_DELETE_XMLSEC_TMP']
161+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
162+
163+
If set to "False" will keep temporary xml files in `/tmp`.
164+
Default: True, delete temporary files.
165+
160166
entityid
161167
^^^^^^^^
162168

src/saml2/sigver.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,15 @@ def _get_xmlsec_cryptobackend(path=None, search_paths=None):
210210
ENC_NODE_NAME = 'urn:oasis:names:tc:SAML:2.0:assertion:EncryptedAssertion'
211211
ENC_KEY_CLASS = 'EncryptedKey'
212212

213+
def get_environ_delete_tmpfiles():
214+
xmlsec_delete_tmpfiles = os.environ.get('PYSAML2_DELETE_XMLSEC_TMP', "True")
215+
if xmlsec_delete_tmpfiles.upper() == 'FALSE':
216+
xmlsec_delete_tmpfiles = False
217+
logger.warn('PYSAML2_DELETE_XMLSEC_TMP set to False, '
218+
'temporary xml files will not be deleted.')
219+
else:
220+
xmlsec_delete_tmpfiles = True
221+
return xmlsec_delete_tmpfiles
213222

214223
def _make_vals(val, klass, seccont, klass_inst=None, prop=None, part=False,
215224
base64encode=False, elements_to_sign=None):
@@ -679,9 +688,7 @@ def __init__(self, xmlsec_binary, **kwargs):
679688
CryptoBackend.__init__(self, **kwargs)
680689
assert (isinstance(xmlsec_binary, six.string_types))
681690
self.xmlsec = xmlsec_binary
682-
self._xmlsec_delete_tmpfiles = os.environ.get(
683-
'PYSAML2_KEEP_XMLSEC_TMP', False
684-
)
691+
self._xmlsec_delete_tmpfiles = get_environ_delete_tmpfiles()
685692

686693
try:
687694
self.non_xml_crypto = RSACrypto(kwargs['rsa_key'])
@@ -710,8 +717,7 @@ def encrypt(self, text, recv_key, template, session_key_type, xpath=''):
710717
:return:
711718
"""
712719
logger.debug('Encryption input len: %d', len(text))
713-
_, fil = make_temp(text, decode=False)
714-
720+
f, fil = make_temp(text, decode=False)
715721
com_list = [
716722
self.xmlsec,
717723
'--encrypt',
@@ -748,10 +754,9 @@ def encrypt_assertion(self, statement, enc_key, template, key_type='des-192', no
748754
if isinstance(statement, SamlBase):
749755
statement = pre_encrypt_assertion(statement)
750756

751-
_, fil = make_temp(
752-
_str(statement), decode=False, delete=self._xmlsec_delete_tmpfiles
753-
)
754-
_, tmpl = make_temp(_str(template), decode=False)
757+
f, fil = make_temp(
758+
_str(statement), decode=False)
759+
t, tmpl = make_temp(_str(template), decode=False)
755760

756761
if not node_xpath:
757762
node_xpath = ASSERT_XPATH
@@ -1307,10 +1312,7 @@ def __init__(
13071312

13081313
self.encrypt_key_type = encrypt_key_type
13091314
# keep certificate files to debug xmlsec invocations
1310-
if os.environ.get('PYSAML2_KEEP_XMLSEC_TMP', None):
1311-
self._xmlsec_delete_tmpfiles = False
1312-
else:
1313-
self._xmlsec_delete_tmpfiles = True
1315+
self._xmlsec_delete_tmpfiles = get_environ_delete_tmpfiles()
13141316

13151317
def correctly_signed(self, xml, must=False):
13161318
logger.debug('verify correct signature')
@@ -1366,18 +1368,15 @@ def decrypt_keys(self, enctext, keys=None, id_attr=''):
13661368
for key in keys:
13671369
if not isinstance(key, six.binary_type):
13681370
key = key.encode("ascii")
1369-
_, key_file = make_temp(key, decode=False, delete=False)
1371+
key_file, _ = make_temp(key, decode=False)
13701372
key_files.append(key_file)
13711373

13721374
try:
1373-
dectext = self.decrypt(enctext, key_file=key_files, id_attr=id_attr)
1375+
dectext = self.decrypt(enctext, key_file=[x.name for x in key_files], id_attr=id_attr)
13741376
except DecryptError as e:
13751377
raise
13761378
else:
13771379
return dectext
1378-
finally:
1379-
for key_file in key_files:
1380-
os.unlink(key_file)
13811380

13821381
def decrypt(self, enctext, key_file=None, id_attr=''):
13831382
""" Decrypting an encrypted text by the use of a private key.

0 commit comments

Comments
 (0)