From 8e21c871f01b8d296cba6434d1e8d922c6261f7d Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Wed, 6 Mar 2024 13:41:12 +0530 Subject: [PATCH 1/9] Use proper pattern to route generic PURL with download_url Signed-off-by: Keshav Priyadarshi --- minecode/visitors/generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecode/visitors/generic.py b/minecode/visitors/generic.py index 628b3ba8..b050320e 100644 --- a/minecode/visitors/generic.py +++ b/minecode/visitors/generic.py @@ -56,7 +56,7 @@ def map_generic_package(package_url): return error -@priority_router.route('pkg:generic/.*') +@priority_router.route("pkg:generic/.*?download_url=.*") def process_request(purl_str): """ Process `priority_resource_uri` containing a generic Package URL (PURL) with From 1306c5bd1eb9add1e332b8aef97888efa4c89f07 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Wed, 6 Mar 2024 13:46:04 +0530 Subject: [PATCH 2/9] Support directory listed package indexing Signed-off-by: Keshav Priyadarshi --- minecode/visitors/generic.py | 84 ++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/minecode/visitors/generic.py b/minecode/visitors/generic.py index b050320e..b8f3ae66 100644 --- a/minecode/visitors/generic.py +++ b/minecode/visitors/generic.py @@ -9,13 +9,12 @@ import logging -from packageurl import PackageURL - +from fetchcode.package import info from packagedcode.models import PackageData +from packageurl import PackageURL from minecode import priority_router - """ Collect generic packages from a download URL. """ @@ -77,3 +76,82 @@ def process_request(purl_str): if error_msg: return error_msg + + +def map_directory_listed_package(package_url): + """ + Add a GNU `package_url` to the PackageDB. + + Return an error string if any errors are encountered during the process + """ + from minecode.model_utils import add_package_to_scan_queue + from minecode.model_utils import merge_or_create_package + + packages = [p for p in info(str(package_url)) or []] + + if not packages: + error = f"Could not find package using fetchcode: {package_url}" + logger.error(error) + return error + + package_data = packages[0].to_dict() + + # Remove obsolete Package fields see https://github.com/nexB/fetchcode/issues/108 + del package_data["api_url"] + del package_data["license_expression"] + del package_data["declared_license"] + del package_data["root_path"] + del package_data["contains_source_code"] + del package_data["purl"] + + package = PackageData(**package_data) + + db_package, _, _, error = merge_or_create_package(package, visit_level=0) + + # Submit package for scanning + if db_package: + add_package_to_scan_queue(db_package) + + return error + + +DIR_SUPPORTED_PURLS = [ + "pkg:generic/busybox@.*", + "pkg:generic/bzip2@.*", + "pkg:generic/dnsmasq@.*", + "pkg:generic/dropbear@.*", + "pkg:generic/ebtables@.*", + "pkg:generic/hostapd@.*", + "pkg:generic/iproute2@.*", + "pkg:generic/iptables@.*", + "pkg:generic/libnl@.*", + "pkg:generic/lighttpd@.*", + "pkg:generic/nftables@.*", + "pkg:generic/openssh@.*", + "pkg:generic/samba@.*", + "pkg:generic/syslinux@.*", + "pkg:generic/toybox@.*", + "pkg:generic/uclibc@@.*", + "pkg:generic/uclibc-ng@.*", + "pkg:generic/util-linux@.*", + "pkg:generic/wpa_supplicant@.*", + "pkg:generic/ipkg@.*", +] + + +@priority_router.route(*DIR_SUPPORTED_PURLS) +def process_request(purl_str): + """ + Process `priority_resource_uri` containing a generic Package URL (PURL) + supported by fetchcode + """ + try: + package_url = PackageURL.from_string(purl_str) + except ValueError as e: + error = f"error occured when parsing {purl_str}: {e}" + return error + + error_msg = map_directory_listed_package(package_url) + + if error_msg: + return error_msg From 77d9faa19d9a402bdd46b70d4d3e041ef47075c3 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Wed, 6 Mar 2024 13:46:48 +0530 Subject: [PATCH 3/9] Support GNU package indexing Signed-off-by: Keshav Priyadarshi --- minecode/visitors/gnu.py | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 minecode/visitors/gnu.py diff --git a/minecode/visitors/gnu.py b/minecode/visitors/gnu.py new file mode 100644 index 00000000..3e703a8f --- /dev/null +++ b/minecode/visitors/gnu.py @@ -0,0 +1,41 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# purldb is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/purldb for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + + +import logging + +from packageurl import PackageURL + +from minecode import priority_router +from minecode.visitors.generic import map_directory_listed_package + +logger = logging.getLogger(__name__) +handler = logging.StreamHandler() +logger.addHandler(handler) +logger.setLevel(logging.INFO) + + +@priority_router.route("pkg:gnu/.*") +def process_request(purl_str): + """ + Process `priority_resource_uri` containing a GNU Package URL (PURL) as a + URI. + + This involves obtaining Package information for the PURL using + https://github.com/nexB/fetchcode and using it to create a new + PackageDB entry. The package is then added to the scan queue afterwards. + """ + package_url = PackageURL.from_string(purl_str) + if not package_url.version: + return + + error_msg = map_directory_listed_package(package_url) + + if error_msg: + return error_msg From c36ec1e54c608c03509d2f8f4e35f20ace962e02 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Thu, 7 Mar 2024 23:56:49 +0530 Subject: [PATCH 4/9] Add test for generic dir listed packages Signed-off-by: Keshav Priyadarshi --- minecode/tests/test_generic.py | 56 +++++++++++++++++++++------------- minecode/visitors/generic.py | 4 +-- requirements.txt | 2 +- setup.cfg | 3 +- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/minecode/tests/test_generic.py b/minecode/tests/test_generic.py index e290d750..919ebc20 100644 --- a/minecode/tests/test_generic.py +++ b/minecode/tests/test_generic.py @@ -7,24 +7,22 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import os - from django.test import TestCase as DjangoTestCase +from packagedcode.maven import _parse +from packageurl import PackageURL +from minecode.route import NoRouteAvailable from minecode.utils_test import JsonBasedTesting from minecode.visitors import generic from packagedb.models import Package -from packagedcode.maven import _parse -from packageurl import PackageURL - class GenericPriorityQueueTests(JsonBasedTesting, DjangoTestCase): def test_process_request(self): package_count = Package.objects.all().count() self.assertEqual(0, package_count) - purl = 'pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz' + purl = "pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz" error_msg = generic.process_request(purl) self.assertEqual(None, error_msg) @@ -32,37 +30,51 @@ def test_process_request(self): self.assertEqual(1, package_count) package = Package.objects.first() - self.assertEqual('test', package.name) - self.assertEqual('1.0.0', package.version) - self.assertEqual('http://example.com/test.tar.gz', package.download_url) + self.assertEqual("test", package.name) + self.assertEqual("1.0.0", package.version) + self.assertEqual("http://example.com/test.tar.gz", package.download_url) def test_process_request_no_download_url(self): package_count = Package.objects.all().count() self.assertEqual(0, package_count) - purl = 'pkg:generic/test@1.0.0' - error_msg = generic.process_request(purl) + purl = "pkg:generic/test@1.0.0" - self.assertEqual( - f'package_url {purl} does not contain a download_url qualifier', - error_msg - ) - package_count = Package.objects.all().count() - self.assertEqual(0, package_count) + with self.assertRaises(NoRouteAvailable): + generic.process_request(purl) def test_map_generic_package(self): package_count = Package.objects.all().count() self.assertEqual(0, package_count) - purl = 'pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz' + purl = "pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz" package_url = PackageURL.from_string(purl) error_msg = generic.map_generic_package(package_url) - self.assertEqual('', error_msg) + self.assertEqual("", error_msg) package_count = Package.objects.all().count() self.assertEqual(1, package_count) package = Package.objects.first() - self.assertEqual('test', package.name) - self.assertEqual('1.0.0', package.version) - self.assertEqual('http://example.com/test.tar.gz', package.download_url) + self.assertEqual("test", package.name) + self.assertEqual("1.0.0", package.version) + self.assertEqual("http://example.com/test.tar.gz", package.download_url) + + def test_process_request_dir_listed(self): + package_count = Package.objects.all().count() + self.assertEqual(0, package_count) + + purl = "pkg:generic/ipkg@0.99.33" + error_msg = generic.process_request_dir_listed(purl) + + self.assertEqual(None, error_msg) + package_count = Package.objects.all().count() + self.assertEqual(1, package_count) + + package = Package.objects.first() + self.assertEqual("ipkg", package.name) + self.assertEqual("0.99.33", package.version) + self.assertEqual( + "https://web.archive.org/web/20090326020239/http:/handhelds.org/download/packages/ipkg/ipkg_0.99.33_arm.ipk", + package.download_url, + ) diff --git a/minecode/visitors/generic.py b/minecode/visitors/generic.py index b8f3ae66..2494ed9e 100644 --- a/minecode/visitors/generic.py +++ b/minecode/visitors/generic.py @@ -140,7 +140,7 @@ def map_directory_listed_package(package_url): @priority_router.route(*DIR_SUPPORTED_PURLS) -def process_request(purl_str): +def process_request_dir_listed(purl_str): """ Process `priority_resource_uri` containing a generic Package URL (PURL) supported by fetchcode @@ -148,7 +148,7 @@ def process_request(purl_str): try: package_url = PackageURL.from_string(purl_str) except ValueError as e: - error = f"error occured when parsing {purl_str}: {e}" + error = f"error occurred when parsing {purl_str}: {e}" return error error_msg = map_directory_listed_package(package_url) diff --git a/requirements.txt b/requirements.txt index 39c6b4d2..0801fd8f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -39,7 +39,7 @@ extractcode==31.0.0 extractcode-7z==16.5.210531 extractcode-libarchive==3.5.1.210531 fasteners==0.19 -fetchcode==0.3.0 +# fetchcode==0.3.0 fetchcode-container==1.2.3.210512 fingerprints==1.2.3 fontawesomefree==6.5.1 diff --git a/setup.cfg b/setup.cfg index fb55cee1..e453a428 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,7 +45,8 @@ install_requires = djangorestframework == 3.14.0 django-filter == 23.5 drf-spectacular == 0.26.5 - fetchcode == 0.3.0 + fetchcode @ git+https://github.com/nexB/fetchcode.git@refs/pull/107/head + # fetchcode == 0.3.0 gunicorn == 21.2.0 ftputil == 5.0.4 jawa == 2.2.0 From f0171d594ba96d5d784203f7206a5073c7632fdb Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Fri, 8 Mar 2024 00:07:15 +0530 Subject: [PATCH 5/9] Add test for gnu package indexing Signed-off-by: Keshav Priyadarshi --- minecode/tests/test_gnu.py | 61 +++ minecode/tests/testfiles/gnu/glibc/index.html | 494 ++++++++++++++++++ 2 files changed, 555 insertions(+) create mode 100644 minecode/tests/test_gnu.py create mode 100644 minecode/tests/testfiles/gnu/glibc/index.html diff --git a/minecode/tests/test_gnu.py b/minecode/tests/test_gnu.py new file mode 100644 index 00000000..9ecbf994 --- /dev/null +++ b/minecode/tests/test_gnu.py @@ -0,0 +1,61 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# purldb is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/purldb for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + + +import os + +from django.test import TestCase +from mock import patch + +from minecode.utils_test import JsonBasedTesting +from minecode.visitors import gnu +from packagedb.models import Package + + +class GnuPriorityQueueTests(JsonBasedTesting, TestCase): + test_data_dir = os.path.join(os.path.dirname(__file__), "testfiles") + + def setUp(self): + super(GnuPriorityQueueTests, self).setUp() + glibc_data_loc = self.get_test_loc("gnu/glibc/index.html") + + with open(glibc_data_loc) as f: + self.glibc_data_content = f.read() + + @patch("requests.get") + def test_process_request(self, mock_get): + mock_get.side_effect = [ + type( + "Response", + (), + { + "content": self.glibc_data_content.encode(), + "raise_for_status": lambda: None, + }, + ) + ] + + package_count = Package.objects.all().count() + self.assertEqual(0, package_count) + + purl = "pkg:gnu/glibc@2.15" + error_msg = gnu.process_request(purl) + + self.assertEqual(None, error_msg) + package_count = Package.objects.all().count() + self.assertEqual(1, package_count) + + package = Package.objects.first() + self.assertEqual("glibc", package.name) + self.assertEqual("2.15", package.version) + print(package.download_url) + self.assertEqual( + "https://ftp.gnu.org/pub/gnu/glibc/glibc-2.15.tar.gz", + package.download_url, + ) diff --git a/minecode/tests/testfiles/gnu/glibc/index.html b/minecode/tests/testfiles/gnu/glibc/index.html new file mode 100644 index 00000000..77ef81c1 --- /dev/null +++ b/minecode/tests/testfiles/gnu/glibc/index.html @@ -0,0 +1,494 @@ + + + + Index of /pub/gnu/glibc + + +

Index of /pub/gnu/glibc

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]README.glibc2004-06-17 12:22 95  
[   ]README.glibc.sig2004-06-17 12:22 65  
[   ]README.olderversions2001-01-25 11:59 124  
[   ]glibc-1.09-crypt.tar.gz1994-11-07 03:00 29K 
[   ]glibc-1.09.1.tar.gz1996-05-27 03:00 1.6M 
[   ]glibc-2.0.1.bin.alpha-linux.tar.gz1997-02-04 03:00 8.3M 
[   ]glibc-2.0.1.bin.m68k-linux.tar.gz1997-02-13 03:00 2.3M 
[   ]glibc-2.0.1.tar.gz1997-02-04 03:00 3.7M 
[   ]glibc-2.0.6.tar.gz1997-12-29 03:00 3.8M 
[   ]glibc-2.1-2.1.1.diff.gz1999-05-24 23:54 737K 
[   ]glibc-2.1.1-2.1.2.diff.gz1999-10-29 10:12 362K 
[   ]glibc-2.1.1.tar.gz1999-05-24 23:58 8.0M 
[   ]glibc-2.1.2-2.1.3.diff.gz2000-02-25 02:46 756K 
[   ]glibc-2.1.2.tar.gz1999-09-07 14:00 8.1M 
[   ]glibc-2.1.3.tar.gz2000-02-25 02:59 8.6M 
[   ]glibc-2.2-2.2.1.diff.gz2001-01-13 16:09 1.0M 
[   ]glibc-2.2-2.2.1.xdelta2001-01-13 16:08 646K 
[   ]glibc-2.2.1-2.2.2.diff.gz2001-02-16 01:29 3.3M 
[   ]glibc-2.2.1.tar.gz2001-01-13 16:18 14M 
[   ]glibc-2.2.2-2.2.3.diff.gz2001-04-27 12:35 1.8M 
[   ]glibc-2.2.2.tar.gz2001-02-16 01:57 14M 
[   ]glibc-2.2.3-2.2.4.diff.gz2001-08-16 02:34 4.0M 
[TXT]glibc-2.2.3-nss.diff2001-05-13 06:37 2.1K 
[   ]glibc-2.2.3.tar.gz2001-04-27 12:49 15M 
[   ]glibc-2.2.4-2.2.5.diff.gz2002-01-21 13:20 2.5M 
[   ]glibc-2.2.4.tar.gz2001-08-16 02:31 16M 
[   ]glibc-2.2.5-2.3.diff.bz22002-10-03 06:43 4.0M 
[   ]glibc-2.2.5-2.3.diff.gz2002-10-03 16:59 5.3M 
[   ]glibc-2.2.5.tar.gz2002-01-21 13:14 16M 
[   ]glibc-2.2.tar.gz2000-11-10 03:20 13M 
[   ]glibc-2.3-2.3.1.diff.gz2002-10-11 08:20 528K 
[   ]glibc-2.3.1-2.3.2.diff.bz22003-03-01 16:55 1.6M 
[   ]glibc-2.3.1-2.3.2.diff.gz2003-03-01 16:56 2.3M 
[   ]glibc-2.3.1.tar.gz2002-10-11 08:16 17M 
[   ]glibc-2.3.2-2.3.3.diff.bz22004-08-03 04:00 2.1M 
[   ]glibc-2.3.2-2.3.3.diff.bz2.sig2004-08-03 04:00 65  
[   ]glibc-2.3.2-2.3.3.diff.gz2004-08-03 04:00 2.8M 
[   ]glibc-2.3.2-2.3.3.diff.gz.sig2004-08-03 04:00 65  
[   ]glibc-2.3.2.tar.bz22003-03-01 16:55 13M 
[   ]glibc-2.3.2.tar.gz2003-03-01 16:57 17M 
[   ]glibc-2.3.3-2.3.4.diff.bz22005-01-26 22:34 1.6M 
[   ]glibc-2.3.3-2.3.4.diff.bz2.sig2005-01-26 22:34 65  
[   ]glibc-2.3.3-2.3.4.diff.gz2005-01-26 22:34 2.2M 
[   ]glibc-2.3.3-2.3.4.diff.gz.sig2005-01-26 22:34 65  
[   ]glibc-2.3.3.tar.bz22004-08-03 04:00 12M 
[   ]glibc-2.3.3.tar.bz2.sig2004-08-03 04:00 65  
[   ]glibc-2.3.3.tar.gz2004-08-03 04:01 17M 
[   ]glibc-2.3.3.tar.gz.sig2004-08-03 04:01 65  
[   ]glibc-2.3.4-2.3.5.diff.gz2005-04-07 01:54 1.2M 
[   ]glibc-2.3.4-2.3.5.diff.gz.sig2005-04-07 01:54 65  
[   ]glibc-2.3.4.tar.bz22005-01-26 22:34 13M 
[   ]glibc-2.3.4.tar.bz2.sig2005-01-26 22:34 65  
[   ]glibc-2.3.4.tar.gz2005-01-26 22:34 17M 
[   ]glibc-2.3.4.tar.gz.sig2005-01-26 22:34 65  
[   ]glibc-2.3.5.tar.bz22005-04-07 01:54 13M 
[   ]glibc-2.3.5.tar.bz2.sig2005-04-07 01:54 65  
[   ]glibc-2.3.5.tar.gz2005-04-07 01:55 17M 
[   ]glibc-2.3.5.tar.gz.sig2005-04-07 01:55 65  
[   ]glibc-2.3.6.tar.bz22005-11-03 20:12 13M 
[   ]glibc-2.3.6.tar.bz2.sig2005-11-03 20:12 65  
[   ]glibc-2.3.6.tar.gz2005-11-03 20:12 18M 
[   ]glibc-2.3.6.tar.gz.sig2005-11-03 20:12 65  
[   ]glibc-2.3.tar.bz22002-10-03 06:41 13M 
[   ]glibc-2.3.tar.gz2002-10-03 17:00 17M 
[   ]glibc-2.4-2.5.diff.gz2006-09-29 16:56 585K 
[   ]glibc-2.4-2.5.diff.gz.sig2006-09-29 16:56 65  
[   ]glibc-2.4.tar.bz22006-03-06 07:30 14M 
[   ]glibc-2.4.tar.bz2.sig2006-03-06 07:30 65  
[   ]glibc-2.4.tar.gz2006-03-06 07:30 20M 
[   ]glibc-2.4.tar.gz.sig2006-03-06 07:30 65  
[   ]glibc-2.5-2.5.1.diff.bz22007-07-31 16:51 378K 
[   ]glibc-2.5-2.5.1.diff.bz2.sig2007-07-31 16:51 65  
[   ]glibc-2.5-2.5.1.diff.gz2007-07-31 16:51 594K 
[   ]glibc-2.5-2.5.1.diff.gz.sig2007-07-31 16:51 65  
[   ]glibc-2.5.1.tar.bz22007-07-31 16:29 15M 
[   ]glibc-2.5.1.tar.bz2.sig2007-07-31 16:29 65  
[   ]glibc-2.5.1.tar.gz2007-07-31 16:29 20M 
[   ]glibc-2.5.1.tar.gz.sig2007-07-31 16:29 65  
[   ]glibc-2.5.tar.bz22006-09-29 16:49 15M 
[   ]glibc-2.5.tar.bz2.sig2006-09-29 16:49 65  
[   ]glibc-2.5.tar.gz2006-09-29 16:50 20M 
[   ]glibc-2.5.tar.gz.sig2006-09-29 16:50 65  
[   ]glibc-2.6-2.6.1.diff.bz22007-07-31 16:51 34K 
[   ]glibc-2.6-2.6.1.diff.bz2.sig2007-07-31 16:51 65  
[   ]glibc-2.6-2.6.1.diff.gz2007-07-31 16:51 37K 
[   ]glibc-2.6-2.6.1.diff.gz.sig2007-07-31 16:51 65  
[   ]glibc-2.6.1.tar.bz22007-07-31 16:30 15M 
[   ]glibc-2.6.1.tar.bz2.sig2007-07-31 16:30 65  
[   ]glibc-2.6.1.tar.gz2007-07-31 16:52 20M 
[   ]glibc-2.6.1.tar.gz.sig2007-07-31 16:52 65  
[   ]glibc-2.6.tar.bz22007-05-17 22:23 15M 
[   ]glibc-2.6.tar.bz2.sig2007-05-17 22:23 65  
[   ]glibc-2.6.tar.gz2007-05-17 22:24 20M 
[   ]glibc-2.6.tar.gz.sig2007-05-17 22:24 65  
[   ]glibc-2.7.tar.bz22007-10-19 17:45 15M 
[   ]glibc-2.7.tar.bz2.sig2007-10-19 17:45 65  
[   ]glibc-2.7.tar.gz2007-10-19 17:45 20M 
[   ]glibc-2.7.tar.gz.sig2007-10-19 17:45 65  
[   ]glibc-2.8.tar.bz22009-02-26 16:48 15M 
[   ]glibc-2.8.tar.bz2.sig2009-02-26 16:48 65  
[   ]glibc-2.8.tar.gz2009-03-10 17:05 20M 
[   ]glibc-2.8.tar.gz.sig2009-03-10 17:12 65  
[   ]glibc-2.9.tar.bz22009-03-10 16:58 15M 
[   ]glibc-2.9.tar.bz2.sig2009-03-10 16:58 65  
[   ]glibc-2.9.tar.gz2009-02-26 16:45 21M 
[   ]glibc-2.9.tar.gz.sig2009-02-26 16:45 65  
[   ]glibc-2.10.1.tar.bz22009-05-17 21:24 15M 
[   ]glibc-2.10.1.tar.bz2.sig2009-05-17 21:24 72  
[   ]glibc-2.10.1.tar.gz2009-05-17 21:27 21M 
[   ]glibc-2.10.1.tar.gz.sig2009-05-17 21:27 72  
[   ]glibc-2.11.1.tar.bz22009-12-29 11:00 15M 
[   ]glibc-2.11.1.tar.bz2.sig2009-12-29 11:00 198  
[   ]glibc-2.11.1.tar.gz2009-12-29 10:58 20M 
[   ]glibc-2.11.1.tar.gz.sig2009-12-29 10:58 198  
[   ]glibc-2.11.1.tar.xz2009-12-29 11:01 9.6M 
[   ]glibc-2.11.1.tar.xz.sig2009-12-29 11:01 198  
[   ]glibc-2.11.2.tar.bz22010-05-19 19:58 15M 
[   ]glibc-2.11.2.tar.bz2.sig2010-05-19 19:58 198  
[   ]glibc-2.11.2.tar.gz2010-05-19 19:57 20M 
[   ]glibc-2.11.2.tar.gz.sig2010-05-19 19:57 198  
[   ]glibc-2.11.2.tar.xz2010-05-19 19:59 9.7M 
[   ]glibc-2.11.2.tar.xz.sig2010-05-19 19:59 198  
[   ]glibc-2.11.3.tar.bz22010-11-29 22:52 15M 
[   ]glibc-2.11.3.tar.bz2.sig2010-11-29 22:52 198  
[   ]glibc-2.11.3.tar.gz2010-11-29 22:51 20M 
[   ]glibc-2.11.3.tar.gz.sig2010-11-29 22:51 198  
[   ]glibc-2.11.3.tar.xz2010-11-29 22:52 9.7M 
[   ]glibc-2.11.3.tar.xz.sig2010-11-29 22:52 198  
[   ]glibc-2.11.tar.bz22009-11-03 15:33 15M 
[   ]glibc-2.11.tar.bz2.sig2009-11-03 15:33 65  
[   ]glibc-2.11.tar.gz2009-11-03 15:33 20M 
[   ]glibc-2.11.tar.gz.sig2009-11-03 15:33 65  
[   ]glibc-2.11.tar.xz2009-11-03 15:34 9.7M 
[   ]glibc-2.11.tar.xz.sig2009-11-03 15:34 65  
[   ]glibc-2.12.1.tar.bz22010-08-03 06:06 15M 
[   ]glibc-2.12.1.tar.bz2.sig2010-08-03 06:06 72  
[   ]glibc-2.12.1.tar.gz2010-08-03 06:09 20M 
[   ]glibc-2.12.1.tar.gz.sig2010-08-03 06:09 71  
[   ]glibc-2.12.1.tar.xz2010-08-03 06:10 9.7M 
[   ]glibc-2.12.1.tar.xz.sig2010-08-03 06:10 72  
[   ]glibc-2.12.2.tar.bz22010-12-13 08:58 15M 
[   ]glibc-2.12.2.tar.bz2.sig2010-12-13 09:01 72  
[   ]glibc-2.12.2.tar.gz2010-12-13 09:03 20M 
[   ]glibc-2.12.2.tar.gz.sig2010-12-13 09:06 72  
[   ]glibc-2.12.2.tar.xz2010-12-13 09:05 9.7M 
[   ]glibc-2.12.2.tar.xz.sig2010-12-13 09:06 72  
[   ]glibc-2.13.tar.bz22011-02-01 04:49 15M 
[   ]glibc-2.13.tar.bz2.sig2011-02-01 04:49 72  
[   ]glibc-2.13.tar.gz2011-02-01 04:51 20M 
[   ]glibc-2.13.tar.gz.sig2011-02-01 04:51 72  
[   ]glibc-2.13.tar.xz2011-02-01 04:53 9.8M 
[   ]glibc-2.13.tar.xz.sig2011-02-01 04:53 72  
[   ]glibc-2.14.1.tar.bz22011-10-07 09:58 15M 
[   ]glibc-2.14.1.tar.bz2.sig2011-10-07 10:06 72  
[   ]glibc-2.14.1.tar.gz2011-10-07 09:56 20M 
[   ]glibc-2.14.1.tar.gz.sig2011-10-07 10:06 72  
[   ]glibc-2.14.1.tar.xz2011-10-07 10:02 9.7M 
[   ]glibc-2.14.1.tar.xz.sig2011-10-07 10:06 72  
[   ]glibc-2.14.tar.bz22011-06-01 07:11 15M 
[   ]glibc-2.14.tar.bz2.sig2011-06-01 07:11 72  
[   ]glibc-2.14.tar.gz2011-06-01 07:21 20M 
[   ]glibc-2.14.tar.gz.sig2011-06-01 07:21 72  
[   ]glibc-2.14.tar.xz2011-06-01 07:25 9.7M 
[   ]glibc-2.14.tar.xz.sig2011-06-01 07:25 72  
[   ]glibc-2.15.tar.bz22012-03-21 13:45 16M 
[   ]glibc-2.15.tar.bz2.sig2012-03-21 13:45 490  
[   ]glibc-2.15.tar.gz2012-03-21 13:42 21M 
[   ]glibc-2.15.tar.gz.sig2012-03-21 13:42 490  
[   ]glibc-2.15.tar.xz2012-03-21 13:48 9.8M 
[   ]glibc-2.15.tar.xz.sig2012-03-21 13:48 490  
[   ]glibc-2.16.0.tar.bz22012-06-30 16:00 15M 
[   ]glibc-2.16.0.tar.bz2.sig2012-06-30 16:00 490  
[   ]glibc-2.16.0.tar.gz2012-06-30 16:05 20M 
[   ]glibc-2.16.0.tar.gz.sig2012-06-30 16:05 490  
[   ]glibc-2.16.0.tar.xz2012-06-30 16:07 9.5M 
[   ]glibc-2.16.0.tar.xz.sig2012-06-30 16:07 490  
[   ]glibc-2.17.tar.bz22012-12-25 16:06 16M 
[   ]glibc-2.17.tar.bz2.sig2012-12-25 16:07 72  
[   ]glibc-2.17.tar.gz2012-12-25 16:10 22M 
[   ]glibc-2.17.tar.gz.sig2012-12-25 16:10 72  
[   ]glibc-2.17.tar.xz2012-12-25 16:11 10M 
[   ]glibc-2.17.tar.xz.sig2012-12-25 16:11 72  
[   ]glibc-2.18.tar.bz22013-08-12 16:02 16M 
[   ]glibc-2.18.tar.bz2.sig2013-08-12 16:02 490  
[   ]glibc-2.18.tar.gz2013-08-12 15:54 22M 
[   ]glibc-2.18.tar.gz.sig2013-08-12 15:54 490  
[   ]glibc-2.18.tar.xz2013-08-12 15:57 11M 
[   ]glibc-2.18.tar.xz.sig2013-08-12 15:57 490  
[   ]glibc-2.19.tar.bz22014-02-07 12:00 18M 
[   ]glibc-2.19.tar.bz2.sig2014-02-07 12:00 473  
[   ]glibc-2.19.tar.gz2014-02-07 11:57 24M 
[   ]glibc-2.19.tar.gz.sig2014-02-07 11:57 473  
[   ]glibc-2.19.tar.xz2014-02-07 12:01 12M 
[   ]glibc-2.19.tar.xz.sig2014-02-07 12:01 473  
[   ]glibc-2.20.tar.bz22014-09-07 11:55 18M 
[   ]glibc-2.20.tar.bz2.sig2014-09-07 11:55 473  
[   ]glibc-2.20.tar.gz2014-09-07 11:52 24M 
[   ]glibc-2.20.tar.gz.sig2014-09-07 11:52 473  
[   ]glibc-2.20.tar.xz2014-09-07 11:57 12M 
[   ]glibc-2.20.tar.xz.sig2014-09-07 11:57 473  
[   ]glibc-2.21.tar.bz22015-02-06 10:18 18M 
[   ]glibc-2.21.tar.bz2.sig2015-02-06 10:18 473  
[   ]glibc-2.21.tar.gz2015-02-06 10:14 24M 
[   ]glibc-2.21.tar.gz.sig2015-02-06 10:14 473  
[   ]glibc-2.21.tar.xz2015-02-06 10:21 12M 
[   ]glibc-2.21.tar.xz.sig2015-02-06 10:21 473  
[   ]glibc-2.22.tar.bz22015-08-05 03:26 19M 
[   ]glibc-2.22.tar.bz2.sig2015-08-05 03:26 473  
[   ]glibc-2.22.tar.gz2015-08-05 03:19 25M 
[   ]glibc-2.22.tar.gz.sig2015-08-05 03:19 473  
[   ]glibc-2.22.tar.xz2015-08-05 03:22 12M 
[   ]glibc-2.22.tar.xz.sig2015-08-05 03:22 473  
[   ]glibc-2.23.tar.bz22016-02-19 00:39 19M 
[   ]glibc-2.23.tar.bz2.sig2016-02-19 00:39 473  
[   ]glibc-2.23.tar.gz2016-02-19 00:45 26M 
[   ]glibc-2.23.tar.gz.sig2016-02-19 00:45 473  
[   ]glibc-2.23.tar.xz2016-02-19 00:49 13M 
[   ]glibc-2.23.tar.xz.sig2016-02-19 00:49 473  
[   ]glibc-2.24.tar.bz22016-08-04 11:03 19M 
[   ]glibc-2.24.tar.bz2.sig2016-08-04 11:03 819  
[   ]glibc-2.24.tar.gz2016-08-04 11:11 26M 
[   ]glibc-2.24.tar.gz.sig2016-08-04 11:11 819  
[   ]glibc-2.24.tar.xz2016-08-04 11:15 13M 
[   ]glibc-2.24.tar.xz.sig2016-08-04 11:15 819  
[   ]glibc-2.25.tar.bz22017-02-05 11:16 20M 
[   ]glibc-2.25.tar.bz2.sig2017-02-05 11:16 455  
[   ]glibc-2.25.tar.gz2017-02-05 11:14 26M 
[   ]glibc-2.25.tar.gz.sig2017-02-05 11:14 455  
[   ]glibc-2.25.tar.xz2017-02-05 11:17 13M 
[   ]glibc-2.25.tar.xz.sig2017-02-05 11:17 455  
[   ]glibc-2.26.tar.bz22017-08-02 10:06 20M 
[   ]glibc-2.26.tar.bz2.sig2017-08-02 10:06 455  
[   ]glibc-2.26.tar.gz2017-08-02 10:05 28M 
[   ]glibc-2.26.tar.gz.sig2017-08-02 10:05 455  
[   ]glibc-2.26.tar.xz2017-08-02 10:08 14M 
[   ]glibc-2.26.tar.xz.sig2017-08-02 10:08 455  
[   ]glibc-2.27.tar.bz22018-02-01 15:37 21M 
[   ]glibc-2.27.tar.bz2.sig2018-02-01 15:37 801  
[   ]glibc-2.27.tar.gz2018-02-01 15:38 29M 
[   ]glibc-2.27.tar.gz.sig2018-02-01 15:38 801  
[   ]glibc-2.27.tar.xz2018-02-01 15:39 15M 
[   ]glibc-2.27.tar.xz.sig2018-02-01 15:39 801  
[   ]glibc-2.28.tar.bz22018-08-01 02:37 23M 
[   ]glibc-2.28.tar.bz2.sig2018-08-01 02:37 801  
[   ]glibc-2.28.tar.gz2018-08-01 02:38 31M 
[   ]glibc-2.28.tar.gz.sig2018-08-01 02:38 801  
[   ]glibc-2.28.tar.xz2018-08-01 02:39 16M 
[   ]glibc-2.28.tar.xz.sig2018-08-01 02:39 801  
[   ]glibc-2.29.tar.bz22019-01-31 12:36 23M 
[   ]glibc-2.29.tar.bz2.sig2019-01-31 12:36 488  
[   ]glibc-2.29.tar.gz2019-01-31 13:01 31M 
[   ]glibc-2.29.tar.gz.sig2019-01-31 13:06 488  
[   ]glibc-2.29.tar.xz2019-01-31 13:08 16M 
[   ]glibc-2.29.tar.xz.sig2019-01-31 13:08 488  
[   ]glibc-2.30.tar.bz22019-08-01 15:59 23M 
[   ]glibc-2.30.tar.bz2.sig2019-08-01 15:59 833  
[   ]glibc-2.30.tar.gz2019-08-01 15:59 31M 
[   ]glibc-2.30.tar.gz.sig2019-08-01 15:59 833  
[   ]glibc-2.30.tar.xz2019-08-01 15:59 16M 
[   ]glibc-2.30.tar.xz.sig2019-08-01 15:59 833  
[   ]glibc-2.31.tar.bz22020-02-01 07:45 23M 
[   ]glibc-2.31.tar.bz2.sig2020-02-01 07:45 488  
[   ]glibc-2.31.tar.gz2020-02-01 07:24 31M 
[   ]glibc-2.31.tar.gz.sig2020-02-01 07:24 488  
[   ]glibc-2.31.tar.xz2020-02-01 07:26 16M 
[   ]glibc-2.31.tar.xz.sig2020-02-01 07:26 488  
[   ]glibc-2.32.tar.bz22020-08-05 23:35 23M 
[   ]glibc-2.32.tar.bz2.sig2020-08-05 23:35 833  
[   ]glibc-2.32.tar.gz2020-08-05 23:34 31M 
[   ]glibc-2.32.tar.gz.sig2020-08-05 23:34 833  
[   ]glibc-2.32.tar.xz2020-08-05 23:35 16M 
[   ]glibc-2.32.tar.xz.sig2020-08-05 23:35 833  
[   ]glibc-2.33.tar.bz22021-02-01 14:22 23M 
[   ]glibc-2.33.tar.bz2.sig2021-02-01 14:22 833  
[   ]glibc-2.33.tar.gz2021-02-01 14:22 32M 
[   ]glibc-2.33.tar.gz.sig2021-02-01 14:22 833  
[   ]glibc-2.33.tar.xz2021-02-01 14:21 16M 
[   ]glibc-2.33.tar.xz.sig2021-02-01 14:21 833  
[   ]glibc-2.34.tar.bz22021-08-01 23:14 24M 
[   ]glibc-2.34.tar.bz2.sig2021-08-01 23:14 833  
[   ]glibc-2.34.tar.gz2021-08-01 23:14 32M 
[   ]glibc-2.34.tar.gz.sig2021-08-01 23:14 833  
[   ]glibc-2.34.tar.xz2021-08-01 23:14 16M 
[   ]glibc-2.34.tar.xz.sig2021-08-01 23:14 833  
[   ]glibc-2.35.tar.bz22022-02-03 01:36 25M 
[   ]glibc-2.35.tar.bz2.sig2022-02-03 01:36 833  
[   ]glibc-2.35.tar.gz2022-02-03 01:35 34M 
[   ]glibc-2.35.tar.gz.sig2022-02-03 01:35 833  
[   ]glibc-2.35.tar.xz2022-02-03 01:35 17M 
[   ]glibc-2.35.tar.xz.sig2022-02-03 01:35 833  
[   ]glibc-2.36.tar.bz22022-08-01 21:05 26M 
[   ]glibc-2.36.tar.bz2.sig2022-08-01 21:05 833  
[   ]glibc-2.36.tar.gz2022-08-01 21:05 35M 
[   ]glibc-2.36.tar.gz.sig2022-08-01 21:05 833  
[   ]glibc-2.36.tar.xz2022-08-01 21:05 18M 
[   ]glibc-2.36.tar.xz.sig2022-08-01 21:05 833  
[   ]glibc-2.37.tar.bz22023-02-01 20:13 26M 
[   ]glibc-2.37.tar.bz2.sig2023-02-01 20:13 833  
[   ]glibc-2.37.tar.gz2023-02-01 20:13 35M 
[   ]glibc-2.37.tar.gz.sig2023-02-01 20:13 833  
[   ]glibc-2.37.tar.xz2023-02-01 20:14 18M 
[   ]glibc-2.37.tar.xz.sig2023-02-01 20:14 833  
[   ]glibc-2.38.tar.bz22023-07-31 17:34 26M 
[   ]glibc-2.38.tar.bz2.sig2023-07-31 17:34 833  
[   ]glibc-2.38.tar.gz2023-07-31 17:34 36M 
[   ]glibc-2.38.tar.gz.sig2023-07-31 17:34 833  
[   ]glibc-2.38.tar.xz2023-07-31 17:34 18M 
[   ]glibc-2.38.tar.xz.sig2023-07-31 17:34 833  
[   ]glibc-2.39.tar.bz22024-01-31 17:06 25M 
[   ]glibc-2.39.tar.bz2.sig2024-01-31 17:06 833  
[   ]glibc-2.39.tar.gz2024-01-31 17:06 35M 
[   ]glibc-2.39.tar.gz.sig2024-01-31 17:06 833  
[   ]glibc-2.39.tar.xz2024-01-31 17:06 18M 
[   ]glibc-2.39.tar.xz.sig2024-01-31 17:06 833  
[   ]glibc-crypt-2.1.tar.gz2000-03-01 05:49 40K 
[   ]glibc-crypt.README1999-10-29 10:09 1.0K 
[   ]glibc-libidn-2.3.4.tar.bz22005-01-26 22:34 98K 
[   ]glibc-libidn-2.3.4.tar.bz2.sig2005-01-26 22:34 65  
[   ]glibc-libidn-2.3.4.tar.gz2005-01-26 22:34 121K 
[   ]glibc-libidn-2.3.4.tar.gz.sig2005-01-26 22:34 64  
[   ]glibc-libidn-2.3.5.tar.bz22005-04-07 01:55 99K 
[   ]glibc-libidn-2.3.5.tar.bz2.sig2005-04-07 01:55 65  
[   ]glibc-libidn-2.3.5.tar.gz2005-04-07 01:55 121K 
[   ]glibc-libidn-2.3.5.tar.gz.sig2005-04-07 01:55 65  
[   ]glibc-libidn-2.3.6.tar.bz22005-11-03 20:12 99K 
[   ]glibc-libidn-2.3.6.tar.bz2.sig2005-11-03 20:12 65  
[   ]glibc-libidn-2.3.6.tar.gz2005-11-03 20:12 123K 
[   ]glibc-libidn-2.3.6.tar.gz.sig2005-11-03 20:12 65  
[   ]glibc-libidn-2.4.tar.bz22006-03-06 07:30 100K 
[   ]glibc-libidn-2.4.tar.bz2.sig2006-03-06 07:30 65  
[   ]glibc-libidn-2.4.tar.gz2006-03-06 07:30 124K 
[   ]glibc-libidn-2.4.tar.gz.sig2006-03-06 07:30 65  
[   ]glibc-libidn-2.5.1.tar.gz2007-07-31 16:30 123K 
[   ]glibc-libidn-2.5.1.tar.gz.sig2007-07-31 16:30 65  
[   ]glibc-libidn-2.5.tar.bz22006-09-29 16:50 100K 
[   ]glibc-libidn-2.5.tar.bz2.sig2006-09-29 16:50 65  
[   ]glibc-libidn-2.5.tar.gz2006-09-29 16:50 125K 
[   ]glibc-libidn-2.5.tar.gz.sig2006-09-29 16:50 65  
[   ]glibc-libidn-2.6.1.tar.bz22007-08-07 13:29 100K 
[   ]glibc-libidn-2.6.1.tar.bz2.sig2007-08-07 13:29 65  
[   ]glibc-libidn-2.6.1.tar.gz2007-07-31 16:30 123K 
[   ]glibc-libidn-2.6.1.tar.gz.sig2007-07-31 16:30 65  
[   ]glibc-libidn-2.6.tar.bz22007-05-17 22:24 100K 
[   ]glibc-libidn-2.6.tar.bz2.sig2007-05-17 22:24 65  
[   ]glibc-libidn-2.6.tar.gz2007-05-17 22:24 125K 
[   ]glibc-libidn-2.6.tar.gz.sig2007-05-17 22:24 65  
[   ]glibc-libidn-2.7.tar.bz22007-10-19 17:45 100K 
[   ]glibc-libidn-2.7.tar.bz2.sig2007-10-19 17:45 65  
[   ]glibc-libidn-2.7.tar.gz2007-10-19 17:45 123K 
[   ]glibc-libidn-2.7.tar.gz.sig2007-10-19 17:45 65  
[   ]glibc-libidn-2.8.tar.bz22009-02-26 16:45 100K 
[   ]glibc-libidn-2.8.tar.bz2.sig2009-02-26 16:45 65  
[   ]glibc-libidn-2.8.tar.gz2009-02-26 16:45 124K 
[   ]glibc-libidn-2.8.tar.gz.sig2009-02-26 16:45 65  
[   ]glibc-libidn-2.9.tar.bz22009-02-26 16:45 100K 
[   ]glibc-libidn-2.9.tar.bz2.sig2009-02-26 16:45 65  
[   ]glibc-libidn-2.9.tar.gz2009-02-26 16:45 124K 
[   ]glibc-libidn-2.9.tar.gz.sig2009-02-26 16:45 65  
[   ]glibc-libidn-2.10.1.tar.bz22009-05-17 21:27 100K 
[   ]glibc-libidn-2.10.1.tar.bz2.sig2009-05-17 21:27 72  
[   ]glibc-libidn-2.10.1.tar.gz2009-05-17 21:27 124K 
[   ]glibc-libidn-2.10.1.tar.gz.sig2009-05-17 21:27 72  
[   ]glibc-linuxthreads-2.0.1.tar.gz1997-02-04 03:00 69K 
[   ]glibc-linuxthreads-2.0.6.tar.gz1997-12-29 03:00 85K 
[   ]glibc-linuxthreads-2.1.1.tar.gz1999-05-24 23:59 121K 
[   ]glibc-linuxthreads-2.1.2.tar.gz1999-10-19 12:23 124K 
[   ]glibc-linuxthreads-2.1.3.tar.gz2000-02-25 02:47 150K 
[   ]glibc-linuxthreads-2.2.1.tar.gz2001-01-13 16:09 199K 
[   ]glibc-linuxthreads-2.2.2.tar.gz2001-02-16 01:21 204K 
[   ]glibc-linuxthreads-2.2.3.tar.gz2001-04-27 12:32 210K 
[   ]glibc-linuxthreads-2.2.4.tar.gz2001-08-16 02:35 215K 
[   ]glibc-linuxthreads-2.2.5.tar.gz2002-01-21 13:15 221K 
[   ]glibc-linuxthreads-2.2.tar.gz2000-11-10 02:43 197K 
[   ]glibc-linuxthreads-2.3.1.tar.gz2002-10-11 08:20 238K 
[   ]glibc-linuxthreads-2.3.2.tar.bz22003-03-01 16:55 211K 
[   ]glibc-linuxthreads-2.3.2.tar.gz2003-03-01 16:57 279K 
[   ]glibc-linuxthreads-2.3.3.tar.bz22004-08-03 04:01 224K 
[   ]glibc-linuxthreads-2.3.3.tar.bz2.sig2004-08-03 04:01 65  
[   ]glibc-linuxthreads-2.3.3.tar.gz2004-08-03 04:01 303K 
[   ]glibc-linuxthreads-2.3.3.tar.gz.sig2004-08-03 04:01 65  
[   ]glibc-linuxthreads-2.3.4-2.3.5.diff.gz2005-04-07 01:55 2.6K 
[   ]glibc-linuxthreads-2.3.4-2.3.5.diff.gz.sig2005-04-07 01:55 65  
[   ]glibc-linuxthreads-2.3.4.tar.bz22005-01-26 22:34 231K 
[   ]glibc-linuxthreads-2.3.4.tar.bz2.sig2005-01-26 22:34 65  
[   ]glibc-linuxthreads-2.3.4.tar.gz2005-01-26 22:34 315K 
[   ]glibc-linuxthreads-2.3.4.tar.gz.sig2005-01-26 22:34 65  
[   ]glibc-linuxthreads-2.3.5.tar.bz22005-04-07 01:55 231K 
[   ]glibc-linuxthreads-2.3.5.tar.bz2.sig2005-04-07 01:55 65  
[   ]glibc-linuxthreads-2.3.5.tar.gz2005-04-07 01:55 316K 
[   ]glibc-linuxthreads-2.3.5.tar.gz.sig2005-04-07 01:55 65  
[   ]glibc-linuxthreads-2.3.6.tar.bz22005-11-03 20:12 238K 
[   ]glibc-linuxthreads-2.3.6.tar.bz2.sig2005-11-03 20:12 65  
[   ]glibc-linuxthreads-2.3.6.tar.gz2005-11-03 20:12 320K 
[   ]glibc-linuxthreads-2.3.6.tar.gz.sig2005-11-03 20:12 65  
[   ]glibc-linuxthreads-2.3.tar.bz22002-10-03 06:37 180K 
[   ]glibc-linuxthreads-2.3.tar.gz2002-10-03 16:58 238K 
[   ]glibc-linuxthreads-2.5.tar.bz22006-10-02 15:30 237K 
[   ]glibc-linuxthreads-2.5.tar.bz2.sig2006-10-02 15:30 65  
[   ]glibc-localedata-2.0.1.tar.gz1997-02-04 03:00 488K 
[   ]glibc-localedata-2.0.6.tar.gz1997-12-29 03:00 510K 
[   ]glibc-ports-2.3.5.tar.bz22005-04-07 01:55 141K 
[   ]glibc-ports-2.3.5.tar.bz2.sig2005-04-07 01:55 65  
[   ]glibc-ports-2.3.5.tar.gz2005-04-07 01:55 191K 
[   ]glibc-ports-2.3.5.tar.gz.sig2005-04-07 01:55 65  
[   ]glibc-ports-2.3.6.tar.bz22005-11-03 20:12 139K 
[   ]glibc-ports-2.3.6.tar.bz2.sig2005-11-03 20:12 65  
[   ]glibc-ports-2.3.6.tar.gz2005-11-03 20:12 196K 
[   ]glibc-ports-2.3.6.tar.gz.sig2005-11-03 20:12 65  
[   ]glibc-ports-2.4.tar.bz22006-03-06 07:30 373K 
[   ]glibc-ports-2.4.tar.bz2.sig2006-03-06 07:30 65  
[   ]glibc-ports-2.4.tar.gz2006-03-06 07:30 534K 
[   ]glibc-ports-2.4.tar.gz.sig2006-03-06 07:30 65  
[   ]glibc-ports-2.5.tar.bz22006-10-02 23:38 400K 
[   ]glibc-ports-2.5.tar.bz2.sig2006-10-02 23:38 65  
[   ]glibc-ports-2.6-2.6.1.diff.gz2007-08-06 15:29 1.6K 
[   ]glibc-ports-2.6-2.6.1.diff.gz.sig2007-08-06 15:29 65  
[   ]glibc-ports-2.6.1.tar.bz22007-08-06 15:12 421K 
[   ]glibc-ports-2.6.1.tar.bz2.sig2007-08-06 15:14 65  
[   ]glibc-ports-2.6.1.tar.gz2007-08-06 15:12 593K 
[   ]glibc-ports-2.6.1.tar.gz.sig2007-08-06 15:14 65  
[   ]glibc-ports-2.6.tar.bz22007-05-23 16:20 421K 
[   ]glibc-ports-2.6.tar.bz2.sig2007-05-23 16:20 65  
[   ]glibc-ports-2.6.tar.gz2007-05-23 16:20 592K 
[   ]glibc-ports-2.6.tar.gz.sig2007-05-23 16:20 65  
[   ]glibc-ports-2.7.tar.bz22007-10-22 09:27 425K 
[   ]glibc-ports-2.7.tar.bz2.sig2007-10-22 09:27 65  
[   ]glibc-ports-2.7.tar.gz2007-10-22 09:27 598K 
[   ]glibc-ports-2.7.tar.gz.sig2007-10-22 09:27 65  
[   ]glibc-ports-2.8.tar.bz22009-05-17 21:27 432K 
[   ]glibc-ports-2.8.tar.bz2.sig2009-05-17 21:27 72  
[   ]glibc-ports-2.8.tar.gz2009-05-17 21:27 621K 
[   ]glibc-ports-2.8.tar.gz.sig2009-05-17 21:27 72  
[   ]glibc-ports-2.9.tar.bz22009-05-17 21:27 447K 
[   ]glibc-ports-2.9.tar.bz2.sig2009-05-17 21:28 72  
[   ]glibc-ports-2.9.tar.gz2009-05-17 21:28 642K 
[   ]glibc-ports-2.9.tar.gz.sig2009-05-17 21:28 72  
[   ]glibc-ports-2.10.1.tar.bz22009-08-02 14:26 571K 
[   ]glibc-ports-2.10.1.tar.bz2.sig2009-08-02 14:26 72  
[   ]glibc-ports-2.10.1.tar.gz2009-08-02 14:26 803K 
[   ]glibc-ports-2.10.1.tar.gz.sig2009-08-02 14:26 72  
[   ]glibc-ports-2.11.tar.bz22009-11-30 11:14 586K 
[   ]glibc-ports-2.11.tar.bz2.sig2009-11-30 11:14 198  
[   ]glibc-ports-2.11.tar.gz2009-11-30 11:14 828K 
[   ]glibc-ports-2.11.tar.gz.sig2009-11-30 11:14 198  
[   ]glibc-ports-2.12.1.tar.bz22010-11-16 17:36 607K 
[   ]glibc-ports-2.12.1.tar.bz2.sig2010-11-16 17:36 197  
[   ]glibc-ports-2.12.1.tar.gz2010-11-16 17:36 891K 
[   ]glibc-ports-2.12.1.tar.gz.sig2010-11-16 17:36 197  
[   ]glibc-ports-2.13.tar.bz22011-03-06 14:12 611K 
[   ]glibc-ports-2.13.tar.bz2.sig2011-03-06 14:12 196  
[   ]glibc-ports-2.13.tar.gz2011-03-06 14:12 866K 
[   ]glibc-ports-2.13.tar.gz.sig2011-03-06 14:12 196  
[   ]glibc-ports-2.14.1.tar.bz22011-10-17 08:59 616K 
[   ]glibc-ports-2.14.1.tar.bz2.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.14.1.tar.gz2011-10-17 08:59 869K 
[   ]glibc-ports-2.14.1.tar.gz.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.14.1.tar.xz2011-10-17 08:59 477K 
[   ]glibc-ports-2.14.1.tar.xz.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.14.tar.bz22011-10-17 08:59 616K 
[   ]glibc-ports-2.14.tar.bz2.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.14.tar.gz2011-10-17 08:59 879K 
[   ]glibc-ports-2.14.tar.gz.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.14.tar.xz2011-10-17 08:59 486K 
[   ]glibc-ports-2.14.tar.xz.sig2011-10-17 08:59 72  
[   ]glibc-ports-2.15.tar.bz22012-03-21 13:48 543K 
[   ]glibc-ports-2.15.tar.bz2.sig2012-03-21 13:48 490  
[   ]glibc-ports-2.15.tar.gz2012-03-21 13:48 786K 
[   ]glibc-ports-2.15.tar.gz.sig2012-03-21 13:48 490  
[   ]glibc-ports-2.15.tar.xz2012-03-21 13:48 412K 
[   ]glibc-ports-2.15.tar.xz.sig2012-03-21 13:48 490  
[   ]glibc-ports-2.16.0.tar.bz22012-06-30 16:08 1.3M 
[   ]glibc-ports-2.16.0.tar.bz2.sig2012-06-30 16:08 490  
[   ]glibc-ports-2.16.0.tar.gz2012-06-30 16:08 1.8M 
[   ]glibc-ports-2.16.0.tar.gz.sig2012-06-30 16:08 490  
[   ]glibc-ports-2.16.0.tar.xz2012-06-30 16:08 904K 
[   ]glibc-ports-2.16.0.tar.xz.sig2012-06-30 16:08 490  
[   ]nss_db-2.2.tar.gz2000-11-10 02:42 126K 
[   ]nss_lwres-0.91.tar.gz2000-11-10 02:38 107K 
[   ]nss_lwres-0.92.tar.gz2001-01-11 17:02 107K 

+
Apache/2.4.29 (Trisquel_GNU/Linux) Server at ftp.gnu.org Port 443
+ \ No newline at end of file From e63e3ef545fe519c1c0e5ff1f2b4631abccf3807 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Tue, 12 Mar 2024 13:04:32 +0530 Subject: [PATCH 6/9] Bump fetchcode from 0.3.0 to 0.4.0 Signed-off-by: Keshav Priyadarshi --- requirements.txt | 2 +- setup.cfg | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0801fd8f..aeb0909a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -39,7 +39,7 @@ extractcode==31.0.0 extractcode-7z==16.5.210531 extractcode-libarchive==3.5.1.210531 fasteners==0.19 -# fetchcode==0.3.0 +fetchcode==0.4.0 fetchcode-container==1.2.3.210512 fingerprints==1.2.3 fontawesomefree==6.5.1 diff --git a/setup.cfg b/setup.cfg index e453a428..ae553775 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,8 +45,7 @@ install_requires = djangorestframework == 3.14.0 django-filter == 23.5 drf-spectacular == 0.26.5 - fetchcode @ git+https://github.com/nexB/fetchcode.git@refs/pull/107/head - # fetchcode == 0.3.0 + fetchcode == 0.4.0 gunicorn == 21.2.0 ftputil == 5.0.4 jawa == 2.2.0 From 798ba8b9440bfb42ce09bc7eaa69bb75bc881780 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Tue, 12 Mar 2024 13:14:47 +0530 Subject: [PATCH 7/9] Update docstring Signed-off-by: Keshav Priyadarshi --- minecode/tests/test_generic.py | 18 +++++++++--------- minecode/visitors/generic.py | 8 ++++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/minecode/tests/test_generic.py b/minecode/tests/test_generic.py index 919ebc20..dafe8be2 100644 --- a/minecode/tests/test_generic.py +++ b/minecode/tests/test_generic.py @@ -22,7 +22,7 @@ def test_process_request(self): package_count = Package.objects.all().count() self.assertEqual(0, package_count) - purl = "pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz" + purl = 'pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz' error_msg = generic.process_request(purl) self.assertEqual(None, error_msg) @@ -30,9 +30,9 @@ def test_process_request(self): self.assertEqual(1, package_count) package = Package.objects.first() - self.assertEqual("test", package.name) - self.assertEqual("1.0.0", package.version) - self.assertEqual("http://example.com/test.tar.gz", package.download_url) + self.assertEqual('test', package.name) + self.assertEqual('1.0.0', package.version) + self.assertEqual('http://example.com/test.tar.gz', package.download_url) def test_process_request_no_download_url(self): package_count = Package.objects.all().count() @@ -47,18 +47,18 @@ def test_map_generic_package(self): package_count = Package.objects.all().count() self.assertEqual(0, package_count) - purl = "pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz" + purl = 'pkg:generic/test@1.0.0?download_url=http://example.com/test.tar.gz' package_url = PackageURL.from_string(purl) error_msg = generic.map_generic_package(package_url) - self.assertEqual("", error_msg) + self.assertEqual('', error_msg) package_count = Package.objects.all().count() self.assertEqual(1, package_count) package = Package.objects.first() - self.assertEqual("test", package.name) - self.assertEqual("1.0.0", package.version) - self.assertEqual("http://example.com/test.tar.gz", package.download_url) + self.assertEqual('test', package.name) + self.assertEqual('1.0.0', package.version) + self.assertEqual('http://example.com/test.tar.gz', package.download_url) def test_process_request_dir_listed(self): package_count = Package.objects.all().count() diff --git a/minecode/visitors/generic.py b/minecode/visitors/generic.py index 2494ed9e..8e0a1f9e 100644 --- a/minecode/visitors/generic.py +++ b/minecode/visitors/generic.py @@ -80,7 +80,7 @@ def process_request(purl_str): def map_directory_listed_package(package_url): """ - Add a GNU `package_url` to the PackageDB. + Add a directory listed `package_url` to the PackageDB. Return an error string if any errors are encountered during the process """ @@ -143,7 +143,11 @@ def map_directory_listed_package(package_url): def process_request_dir_listed(purl_str): """ Process `priority_resource_uri` containing a generic Package URL (PURL) - supported by fetchcode + supported by fetchcode. + + This involves obtaining Package information for the PURL using + https://github.com/nexB/fetchcode and using it to create a new + PackageDB entry. The package is then added to the scan queue afterwards. """ try: package_url = PackageURL.from_string(purl_str) From 6ab8b1ddf0c9447a9e0c5466a5695e310a355d7f Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Wed, 13 Mar 2024 11:55:45 +0530 Subject: [PATCH 8/9] Remove debug statements Signed-off-by: Keshav Priyadarshi --- minecode/tests/test_gnu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecode/tests/test_gnu.py b/minecode/tests/test_gnu.py index 9ecbf994..ec336f59 100644 --- a/minecode/tests/test_gnu.py +++ b/minecode/tests/test_gnu.py @@ -54,7 +54,7 @@ def test_process_request(self, mock_get): package = Package.objects.first() self.assertEqual("glibc", package.name) self.assertEqual("2.15", package.version) - print(package.download_url) + self.assertEqual( "https://ftp.gnu.org/pub/gnu/glibc/glibc-2.15.tar.gz", package.download_url, From 4953229c7383ce78b863aa097b47b41db4238e95 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Mon, 18 Mar 2024 14:08:55 +0530 Subject: [PATCH 9/9] Add packagedata_from_dict to filter out unsupported fields Signed-off-by: Keshav Priyadarshi --- minecode/visitors/generic.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/minecode/visitors/generic.py b/minecode/visitors/generic.py index 8e0a1f9e..652ea286 100644 --- a/minecode/visitors/generic.py +++ b/minecode/visitors/generic.py @@ -9,6 +9,7 @@ import logging +import attr from fetchcode.package import info from packagedcode.models import PackageData from packageurl import PackageURL @@ -78,6 +79,18 @@ def process_request(purl_str): return error_msg +def packagedata_from_dict(package_data): + """ + Return a PackageData built from a `package_data` mapping. + Ignore unknown and unsupported fields. + """ + supported = {attr.name for attr in attr.fields(PackageData)} + cleaned_package_data = { + key: value for key, value in package_data.items() if key in supported + } + return PackageData(**cleaned_package_data) + + def map_directory_listed_package(package_url): """ Add a directory listed `package_url` to the PackageDB. @@ -97,14 +110,7 @@ def map_directory_listed_package(package_url): package_data = packages[0].to_dict() # Remove obsolete Package fields see https://github.com/nexB/fetchcode/issues/108 - del package_data["api_url"] - del package_data["license_expression"] - del package_data["declared_license"] - del package_data["root_path"] - del package_data["contains_source_code"] - del package_data["purl"] - - package = PackageData(**package_data) + package = packagedata_from_dict(package_data) db_package, _, _, error = merge_or_create_package(package, visit_level=0)