ossa-scanner 0.1.12__py3-none-any.whl → 0.1.14__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 CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.12"
1
+ __version__ = "0.1.14"
@@ -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):
@@ -26,7 +28,7 @@ def list_packages(package_manager):
26
28
 
27
29
  packages = result.stdout.splitlines()
28
30
  extracted_packages = set()
29
- max_packages = 500000
31
+ max_packages = 2
30
32
  k_packages = 0
31
33
 
32
34
  for line in packages:
@@ -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("License:") or "License" in line:
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": info.get("licenses", "NOASSERTION"),
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ossa_scanner
3
- Version: 0.1.12
3
+ Version: 0.1.14
4
4
  Summary: Open Source Software Advisory generator for Core and Base Linux Packages.
5
5
  Home-page: https://github.com/oscarvalenzuelab/ossa_scanner
6
6
  Author: Oscar Valenzuela
@@ -1,4 +1,4 @@
1
- ossa_scanner/__init__.py,sha256=LcIlFjHZFfiF9Rd4UHoakmombOFkxIYk00I181frGBM,23
1
+ ossa_scanner/__init__.py,sha256=PIBqEOI-nqKFL9oJAWQQwlHuujG9Cd7EmdxDrThNQto,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=b4njHvSQmTNNFnjyut-1uGY8qXiRidZRCyRmHN2x_f4,7219
9
+ ossa_scanner/utils/package_manager.py,sha256=-CMETt4aJOn332zfQ3_DftvtNZaJgGMBxM4UOvcO2QU,8049
10
10
  ossa_scanner/utils/swhid_calculator.py,sha256=7-bO4RglJr-kt5SjUfnlcPZD0k0-s_dveHEjRo-zEMc,1317
11
- ossa_scanner-0.1.12.dist-info/LICENSE,sha256=9slQ_XNiEkio28l90NwihP7a90fCL2GQ6YhcVXTBls4,1064
12
- ossa_scanner-0.1.12.dist-info/METADATA,sha256=fdkugAYWIj__48rNpCaxnbO5M14muJILo5i4mSE136c,1938
13
- ossa_scanner-0.1.12.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
14
- ossa_scanner-0.1.12.dist-info/entry_points.txt,sha256=UVoAo-wTPxT82g3cfqTs2CmQnazd57TAwhd9VwEKD1c,55
15
- ossa_scanner-0.1.12.dist-info/top_level.txt,sha256=uUp5CvhZfJLapXn9DyUXvgH7QK3uzF2ibH943lWN5Bs,13
16
- ossa_scanner-0.1.12.dist-info/RECORD,,
11
+ ossa_scanner-0.1.14.dist-info/LICENSE,sha256=9slQ_XNiEkio28l90NwihP7a90fCL2GQ6YhcVXTBls4,1064
12
+ ossa_scanner-0.1.14.dist-info/METADATA,sha256=1VXLCFqRfUQH9s21d2z5FY_-nEZ50KkL7LXSzcRX1g4,1938
13
+ ossa_scanner-0.1.14.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
14
+ ossa_scanner-0.1.14.dist-info/entry_points.txt,sha256=UVoAo-wTPxT82g3cfqTs2CmQnazd57TAwhd9VwEKD1c,55
15
+ ossa_scanner-0.1.14.dist-info/top_level.txt,sha256=uUp5CvhZfJLapXn9DyUXvgH7QK3uzF2ibH943lWN5Bs,13
16
+ ossa_scanner-0.1.14.dist-info/RECORD,,