summaryrefslogtreecommitdiff
path: root/gnu/packages/nss.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/nss.scm')
-rw-r--r--gnu/packages/nss.scm191
1 files changed, 135 insertions, 56 deletions
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 2f1ca45df9..13dffa4966 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -1,12 +1,13 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013-2019, 2023 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2021 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014-2021 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016-2019, 2021-2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
-;;; Copyright © 2021, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021-2025 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2024 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,6 +26,7 @@
(define-module (gnu packages nss)
#:use-module (guix packages)
+ #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
#:use-module (guix utils)
#:use-module (guix gexp)
#:use-module (guix download)
@@ -32,22 +34,27 @@
#:use-module (guix build-system cargo)
#:use-module (guix build-system gnu)
#:use-module (guix build-system mozilla)
+ #:use-module (guix build-system trivial)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages certs)
#:use-module (gnu packages check)
#:use-module (gnu packages crates-check)
#:use-module (gnu packages crates-io)
#:use-module (gnu packages compression)
#:use-module (gnu packages perl)
#:use-module (gnu packages sqlite)
- #:use-module (gnu packages time))
+ #:use-module (gnu packages time)
+ #:use-module (gnu packages tls)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26))
(define-public nspr
(package
(name "nspr")
- (version "4.35")
+ (version "4.36")
(source (origin
(method url-fetch)
(uri (string-append
@@ -55,7 +62,7 @@
version "/src/nspr-" version ".tar.gz"))
(sha256
(base32
- "13xwda56yhp1w7v02qvlxvlqiniw8kr4g3fxlljmv6wnlmz2k8vy"))))
+ "15b83ipjxrmw0909l5qqz13pbarhp50d6i58vgjx4720y4bw7pjm"))))
(build-system gnu-build-system)
(inputs
(list perl ;for 'compile-et.pl'
@@ -95,32 +102,6 @@ platform-neutral API for system level and libc-like functions. It is used
in the Mozilla clients.")
(license license:mpl2.0)))
-(define-public nspr-4.36
- (package
- (inherit nspr)
- (version "4.36")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v"
- version "/src/nspr-" version ".tar.gz"))
- (sha256
- (base32
- "15b83ipjxrmw0909l5qqz13pbarhp50d6i58vgjx4720y4bw7pjm"))))))
-
-(define-public nspr-4.32
- (package
- (inherit nspr)
- (version "4.32")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v"
- version "/src/nspr-" version ".tar.gz"))
- (sha256
- (base32
- "0v3zds1id71j5a5si42a658fjz8nv2f6zp6w4gqrqmdr6ksz8sxv"))))))
-
;; nss should track ESRs, but currently doesn't. 3.102.1 is the current ESR.
(define-public nss
@@ -129,7 +110,7 @@ in the Mozilla clients.")
;; IMPORTANT: Also update and test the nss-certs package, which duplicates
;; version and source to avoid a top-level variable reference & module
;; cycle.
- (version "3.99")
+ (version "3.101.4")
(source (origin
(method url-fetch)
(uri (let ((version-with-underscores
@@ -140,11 +121,12 @@ in the Mozilla clients.")
"nss-" version ".tar.gz")))
(sha256
(base32
- "1g89ig40gfi1sp02gybvl2z818lawcnrqjzsws36cdva834c5maw"))
+ "1sqvh49qi9vq55sbg42c5n0kz6w6ni383hgiyhaym6drsmbzb86a"))
;; Create nss.pc and nss-config.
(patches (search-patches "nss-3.56-pkgconfig.patch"
"nss-getcwd-nonnull.patch"
- "nss-increase-test-timeout.patch"))
+ "nss-increase-test-timeout.patch"
+ "nss-disable-broken-tests.patch"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -152,7 +134,7 @@ in the Mozilla clients.")
(delete-file-recursively "nss/lib/zlib")
(delete-file-recursively "nss/lib/sqlite")))))
(build-system gnu-build-system)
- (outputs '("out" "bin"))
+ (outputs '("out" "bin" "static")) ;11 MiB of static archives
(arguments
(list
#:make-flags
@@ -197,6 +179,13 @@ in the Mozilla clients.")
(target-ppc32?)))
#:phases
#~(modify-phases %standard-phases
+ ;; The "PayPalEE.cert" certificate expires every six months, leading
+ ;; to test failures:
+ ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>. To work
+ ;; around that, set the time to roughly the release date.
+ (add-after 'unpack 'set-release-date
+ (lambda _
+ (setenv "GUIX_NSS_RELEASE_DATE" "2025-02-05")))
(replace 'configure
(lambda _
(setenv "CC" #$(cc-for-target))
@@ -237,34 +226,40 @@ in the Mozilla clients.")
(("SOURCE_DIR=.*")
(string-append "SOURCE_DIR=" (getcwd) "/nss\n")))))
- ;; The "PayPalEE.cert" certificate expires every six months,
- ;; leading to test failures:
- ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>. To
- ;; work around that, set the time to roughly the release date.
- (invoke #$(if (target-64bit?) "faketime" "datefudge")
- "2024-01-23" "./nss/tests/all.sh"))
+
+ (let ((release-date (getenv "GUIX_NSS_RELEASE_DATE")))
+ (when (string=? "" release-date)
+ (raise-exception "`GUIX_NSS_RELEASE_DATE' unset"))
+ (invoke #$(if (target-64bit?) "faketime" "datefudge")
+ release-date "./nss/tests/all.sh")))
(format #t "test suite not run~%"))))
(replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append (assoc-ref outputs "bin") "/bin"))
- (inc (string-append out "/include/nss"))
- (lib (string-append out "/lib/nss"))
+ (lambda _
+ (let* ((inc (string-append #$output "/include/nss"))
+ (lib (string-append #$output "/lib/nss"))
(obj (match (scandir "dist" (cut string-suffix? "OBJ" <>))
((obj) (string-append "dist/" obj)))))
;; Install nss-config to $out/bin.
(install-file (string-append obj "/bin/nss-config")
- (string-append out "/bin"))
+ (string-append #$output "/bin"))
(delete-file (string-append obj "/bin/nss-config"))
;; Install nss.pc to $out/lib/pkgconfig.
(install-file (string-append obj "/lib/pkgconfig/nss.pc")
- (string-append out "/lib/pkgconfig"))
+ (string-append #$output "/lib/pkgconfig"))
(delete-file (string-append obj "/lib/pkgconfig/nss.pc"))
(rmdir (string-append obj "/lib/pkgconfig"))
;; Install other files.
(copy-recursively "dist/public/nss" inc)
- (copy-recursively (string-append obj "/bin") bin)
- (copy-recursively (string-append obj "/lib") lib)))))))
+ (copy-recursively (string-append obj "/bin") #$output:bin)
+ (copy-recursively (string-append obj "/lib") lib))))
+ (add-after 'install 'move-static-archives
+ (lambda _
+ (with-directory-excursion #$output
+ (for-each (lambda (f)
+ (install-file f
+ (string-append #$output:static
+ "/" (dirname f))))
+ (find-files "." "\\.a$"))))))))
(inputs (list sqlite zlib))
(propagated-inputs (list nspr)) ;required by nss.pc.
(native-inputs (list perl ;for tests
@@ -276,13 +271,15 @@ in the Mozilla clients.")
(properties '((timeout . 216000))) ;60 hours
(home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
- (synopsis "Network Security Services")
+ (synopsis "Network Security Services (ESR)")
(description
"Network Security Services (@dfn{NSS}) is a set of libraries designed to
support cross-platform development of security-enabled client and server
applications. Applications built with NSS can support SSL v2 and v3, TLS,
PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other
-security standards.")
+security standards.
+
+This package tracks the Extended Support Release (ESR) channel.")
(license license:mpl2.0)))
;; nss-rapid tracks the rapid release channel. Unless your package requires a
@@ -307,7 +304,10 @@ security standards.")
"nss-" version ".tar.gz")))
(sha256
(base32
- "03qwl3ps3xgc9pkc07qrsa4vd2r57mjwicv3gb483gfk2ashdvxc"))))
+ "03qwl3ps3xgc9pkc07qrsa4vd2r57mjwicv3gb483gfk2ashdvxc"))
+ (patches
+ (remove (cut string-suffix? <> "nss-disable-broken-tests.patch")
+ (origin-patches (package-source nss))))))
(arguments
(substitute-keyword-arguments (package-arguments nss)
((#:phases phases)
@@ -350,9 +350,6 @@ security standards.")
(invoke #$(if (target-64bit?) "faketime" "datefudge")
"2025-06-19" "./nss/tests/all.sh"))
(format #t "test suite not run~%"))))))))
- (propagated-inputs
- (modify-inputs (package-propagated-inputs nss)
- (replace "nspr" nspr-4.36)))
(synopsis "Network Security Services (Rapid Release)")
(description
"Network Security Services (@dfn{NSS}) is a set of libraries designed to
@@ -363,6 +360,88 @@ security standards.
This package tracks the Rapid Release channel, which updates frequently.")))
+(define-public nss-certs
+ (package
+ (inherit nss)
+ (name "nss-certs")
+ (build-system gnu-build-system)
+ (outputs '("out"))
+ (native-inputs
+ (list certdata2pem openssl))
+ (inputs '())
+ (propagated-inputs '())
+ (arguments
+ (list #:modules '((guix build gnu-build-system)
+ (guix build utils)
+ (rnrs io ports)
+ (srfi srfi-26))
+ #:phases
+ #~(modify-phases
+ (map (cut assq <> %standard-phases)
+ '(set-paths install-locale unpack))
+ (add-after 'unpack 'install
+ (lambda _
+ (let ((certsdir (string-append #$output
+ "/etc/ssl/certs/")))
+ (with-directory-excursion "nss/lib/ckfw/builtins/"
+ (unless (file-exists? "blacklist.txt")
+ (call-with-output-file "blacklist.txt" (const #t)))
+ ;; Extract selected single certificates from blob.
+ (invoke "certdata2pem")
+ ;; Copy .pem files into the output.
+ (for-each (cut install-file <> certsdir)
+ (find-files "." ".*\\.pem$")))
+ (invoke "openssl" "rehash" certsdir)))))))
+ (synopsis "CA certificates from Mozilla")
+ (description
+ "This package provides certificates for Certification Authorities (CA)
+taken from the NSS package and thus ultimately from the Mozilla project.")
+ (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
+ (license license:mpl2.0)))
+
+(define-public nss-certs-for-test
+ (hidden-package
+ (package
+ (inherit nss-certs)
+ (name "nss-certs-for-test")
+ (source #f)
+ (build-system trivial-build-system)
+ (native-inputs (list nss-certs))
+ (inputs '())
+ (propagated-inputs '())
+ (arguments
+ (list #:modules '((guix build utils)
+ (rnrs io ports)
+ (srfi srfi-26))
+ #:builder
+ #~(begin
+ (use-modules (guix build utils)
+ (rnrs io ports)
+ (srfi srfi-26))
+ (define certs-dir (string-append #$output "/etc/ssl/certs/"))
+ (define ca-files
+ (find-files (string-append #+(this-package-native-input
+ "nss-certs")
+ "/etc/ssl/certs")
+ (lambda (file stat)
+ (string-suffix? ".pem" file))))
+ (define (concatenate-files files result)
+ "Make RESULT the concatenation of all of FILES."
+ (define (dump file port)
+ (display (call-with-input-file file get-string-all) port)
+ (newline port))
+ (call-with-output-file result
+ (lambda (port)
+ (for-each (cut dump <> port) files))))
+
+ (mkdir-p certs-dir)
+ (concatenate-files
+ ca-files (string-append certs-dir "/ca-certificates.crt"))
+ (for-each (cut install-file <> certs-dir) ca-files))))
+ (native-search-paths
+ (list $SSL_CERT_DIR
+ $SSL_CERT_FILE)))))
+
(define-public nsncd
(package
(name "nsncd")