ossa-scanner 0.1.12__py3-none-any.whl → 0.1.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ossa_scanner/__init__.py +1 -1
- ossa_scanner/utils/package_manager.py +28 -8
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/METADATA +1 -1
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/RECORD +8 -8
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/LICENSE +0 -0
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/WHEEL +0 -0
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/entry_points.txt +0 -0
- {ossa_scanner-0.1.12.dist-info → ossa_scanner-0.1.13.dist-info}/top_level.txt +0 -0
ossa_scanner/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.13"
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import subprocess
|
2
2
|
import re
|
3
|
+
import os
|
4
|
+
import shutil
|
3
5
|
|
4
6
|
|
5
7
|
def list_packages(package_manager):
|
@@ -39,8 +41,6 @@ def list_packages(package_manager):
|
|
39
41
|
if k_packages >= max_packages:
|
40
42
|
break
|
41
43
|
package_list = sorted(list(extracted_packages))
|
42
|
-
# force filter
|
43
|
-
package_list = [pkg for pkg in package_list if 'K' <= pkg[0].upper() <= 'Z']
|
44
44
|
|
45
45
|
print(f"Total unique packages: {len(package_list)}")
|
46
46
|
return package_list
|
@@ -64,7 +64,7 @@ def get_package_info(package_manager, package_name):
|
|
64
64
|
elif package_manager in ['yum', 'dnf']:
|
65
65
|
return parse_yum_info(output)
|
66
66
|
elif package_manager == 'apt':
|
67
|
-
return parse_apt_info(output)
|
67
|
+
return parse_apt_info(output, package_name)
|
68
68
|
except subprocess.CalledProcessError as e:
|
69
69
|
print(f"Command failed: {e}")
|
70
70
|
return None
|
@@ -128,29 +128,49 @@ def parse_yum_info(output):
|
|
128
128
|
info["summary"] = line.split(":", 1)[1].strip()
|
129
129
|
return info
|
130
130
|
|
131
|
-
def parse_apt_info(output):
|
131
|
+
def parse_apt_info(output, package_name):
|
132
132
|
"""Parses apt-cache show output."""
|
133
133
|
info = {}
|
134
134
|
lines = output.splitlines()
|
135
135
|
|
136
136
|
for line in lines:
|
137
|
-
if line.startswith("
|
138
|
-
info["licenses"] = line.split(":", 1)[1].strip()
|
139
|
-
elif line.startswith("Homepage:"):
|
137
|
+
if line.startswith("Homepage:"):
|
140
138
|
info["website"] = line.split(":", 1)[1].strip()
|
141
139
|
elif "Copyright" in line:
|
142
140
|
info["references"] = line.strip()
|
143
141
|
info["licenses"] = extract_spdx_ids(info["licenses"])
|
144
142
|
severity = license_classificaton(info["licenses"])
|
145
143
|
|
144
|
+
license = apt_get_license_from_source(package_name)
|
145
|
+
|
146
146
|
# Ensure all keys are present even if data is missing
|
147
147
|
return {
|
148
|
-
"licenses":
|
148
|
+
"licenses": license,
|
149
149
|
"copyright": info.get("copyright", "NOASSERTION"),
|
150
150
|
"references": info.get("references", "NOASSERTION"),
|
151
151
|
"severity": severity,
|
152
152
|
}
|
153
153
|
|
154
|
+
def apt_get_license_from_source(package_name):
|
155
|
+
try:
|
156
|
+
subprocess.run(["apt-get", "source", package_name], check=True, capture_output=True, text=True)
|
157
|
+
source_dirs = [d for d in os.listdir() if d.startswith(package_name) and os.path.isdir(d)]
|
158
|
+
if not source_dirs:
|
159
|
+
return "NOASSERTION"
|
160
|
+
package_dir = source_dirs[0]
|
161
|
+
copyright_file = os.path.join(package_dir, "debian", "copyright")
|
162
|
+
licenses = []
|
163
|
+
if os.path.exists(copyright_file):
|
164
|
+
with open(copyright_file, "r", encoding="utf-8") as f:
|
165
|
+
for line in f:
|
166
|
+
if re.search(r"(?i)license:", line):
|
167
|
+
licenses.append(line.split(":", 1)[1].strip())
|
168
|
+
shutil.rmtree(package_dir, ignore_errors=True)
|
169
|
+
return ", ".join(set(licenses)) if licenses else "NOASSERTION"
|
170
|
+
except subprocess.CalledProcessError as e:
|
171
|
+
print(f"Error fetching source package: {e}")
|
172
|
+
return "NOASSERTION"
|
173
|
+
|
154
174
|
def extract_spdx_ids(license_string):
|
155
175
|
if not license_string.strip():
|
156
176
|
return "No valid SPDX licenses found"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ossa_scanner/__init__.py,sha256=
|
1
|
+
ossa_scanner/__init__.py,sha256=khDKUuWafURKVs5EAZkpOMiUHI2-V7axlqrWLPUpuZo,23
|
2
2
|
ossa_scanner/cli.py,sha256=sgr8NFpf_Ut84KYFQjOKRxv8CfAMaTPhMo7DbR53lT4,2311
|
3
3
|
ossa_scanner/scanner.py,sha256=Zmk-Qr8jDoPdCXLkospp2NUgYl7Sdhx_Rhraltxd2u8,4787
|
4
4
|
ossa_scanner/uploader.py,sha256=dPbhSLlQcDyHP-6Ugn6BzYGn_VQ1Ik6TWt2138k3REo,1837
|
@@ -6,11 +6,11 @@ ossa_scanner/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
6
6
|
ossa_scanner/utils/downloader.py,sha256=DRXMg33QB2RiFr3kVjsDUcFcq7RO-4Sbee-twRYeuSM,5330
|
7
7
|
ossa_scanner/utils/hash_calculator.py,sha256=LrDKngWOPbizYJWab2sDJDLB4pD_RrI51L0cZt3VjJY,960
|
8
8
|
ossa_scanner/utils/os_detection.py,sha256=35VbUbFklzd7aojgltKf2PxbnVFcpREA7Tri2YI5nfY,417
|
9
|
-
ossa_scanner/utils/package_manager.py,sha256=
|
9
|
+
ossa_scanner/utils/package_manager.py,sha256=vlSZliCD9an-20WENmwPFRaKtzxwV0G93ik8DU5uLLE,8054
|
10
10
|
ossa_scanner/utils/swhid_calculator.py,sha256=7-bO4RglJr-kt5SjUfnlcPZD0k0-s_dveHEjRo-zEMc,1317
|
11
|
-
ossa_scanner-0.1.
|
12
|
-
ossa_scanner-0.1.
|
13
|
-
ossa_scanner-0.1.
|
14
|
-
ossa_scanner-0.1.
|
15
|
-
ossa_scanner-0.1.
|
16
|
-
ossa_scanner-0.1.
|
11
|
+
ossa_scanner-0.1.13.dist-info/LICENSE,sha256=9slQ_XNiEkio28l90NwihP7a90fCL2GQ6YhcVXTBls4,1064
|
12
|
+
ossa_scanner-0.1.13.dist-info/METADATA,sha256=DHtuF5f0fAFG4laHVd2oPSDz6QI__Kc5DqPBB34Pfto,1938
|
13
|
+
ossa_scanner-0.1.13.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
14
|
+
ossa_scanner-0.1.13.dist-info/entry_points.txt,sha256=UVoAo-wTPxT82g3cfqTs2CmQnazd57TAwhd9VwEKD1c,55
|
15
|
+
ossa_scanner-0.1.13.dist-info/top_level.txt,sha256=uUp5CvhZfJLapXn9DyUXvgH7QK3uzF2ibH943lWN5Bs,13
|
16
|
+
ossa_scanner-0.1.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|