Skip to content

Commit e28a7f8

Browse files
committed
DB2 exception
Remove will_be_mocked fix: auto fix ibm_db import issue (Yelp#239) Supports https://github.ibm.com/git-defenders/detect-secrets-discuss/issues/306 * fix: support python 2 * fix: cov
1 parent 8be693b commit e28a7f8

File tree

4 files changed

+42
-32
lines changed

4 files changed

+42
-32
lines changed

detect_secrets/core/secrets_collection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ def load_baseline_from_dict(cls, data):
146146
secret='will be replaced',
147147
lineno=item['line_number'],
148148
is_secret=item.get('is_secret'),
149+
output_raw=result.output_raw,
149150
)
150151
secret.secret_hash = item['hashed_secret']
151152
result.data[filename][secret] = secret

detect_secrets/plugins/db2.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
11
from __future__ import absolute_import
22

3+
import os
34
import re
5+
import subprocess
6+
import sys
7+
8+
try:
9+
import ibm_db
10+
except ImportError as ie: # pragma: no cover
11+
# Try to fix the ibm_db dynamic lib import issue
12+
if 'darwin' not in sys.platform:
13+
raise ie
14+
15+
if hasattr(ie, 'msg'):
16+
message = ie.msg
17+
else:
18+
# python 2
19+
message = ie.message
20+
21+
if 'Library not loaded: libdb2.dylib' not in message:
22+
raise ie
23+
24+
if hasattr(ie, 'path'):
25+
ibm_db_darwin_so = ie.path
26+
else:
27+
# python 2
28+
so_file_search = re.search(r'dlopen\((.*),', message, re.IGNORECASE)
29+
if so_file_search:
30+
ibm_db_darwin_so = so_file_search.group(1)
31+
32+
if not ibm_db_darwin_so:
33+
raise ie
34+
35+
site_packages = os.path.dirname(ibm_db_darwin_so)
36+
libdb2_dylib = os.path.join(site_packages, 'clidriver/lib/libdb2.dylib')
37+
if os.path.exists(libdb2_dylib):
38+
subprocess.call(
39+
['install_name_tool', '-change', 'libdb2.dylib', libdb2_dylib, ibm_db_darwin_so],
40+
)
441

5-
import ibm_db
6-
import requests
42+
import ibm_db
743

844
from .base import classproperty
945
from .base import RegexBasedDetector
@@ -135,7 +171,7 @@ def verify_db2_credentials(
135171
return VerifiedResult.VERIFIED_TRUE
136172
else:
137173
return VerifiedResult.VERIFIED_FALSE
138-
except requests.exceptions.RequestException as e:
174+
except Exception as e:
139175
if 'Timeout' in str(e):
140176
return VerifiedResult.UNVERIFIED
141177
else:

tests/plugins/db2_test.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import textwrap
44

55
import pytest
6-
import requests
76
from mock import MagicMock
87
from mock import patch
98

@@ -78,7 +77,7 @@ def test_verify_invalid_connect_returns_none(self, mock_db2_connect):
7877

7978
@patch('detect_secrets.plugins.db2.ibm_db.connect')
8079
def test_verify_invalid_connect_throws_exception(self, mock_db2_connect):
81-
mock_db2_connect.side_effect = requests.exceptions.RequestException('oops')
80+
mock_db2_connect.side_effect = Exception('oops')
8281

8382
potential_secret = PotentialSecret('test db2', 'test filename', DB2_PASSWORD)
8483
assert Db2Detector().verify(
@@ -180,7 +179,7 @@ def test_verify_from_url(self, mock_db2_connect):
180179

181180
@patch('detect_secrets.plugins.db2.ibm_db.connect')
182181
def test_verify_times_out(self, mock_db2_connect):
183-
mock_db2_connect.side_effect = requests.exceptions.RequestException('Timeout')
182+
mock_db2_connect.side_effect = Exception('Timeout')
184183

185184
potential_secret = PotentialSecret('test db2', 'test filename', DB2_PASSWORD)
186185
assert Db2Detector().verify(

will_be_mocked

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)