diff options
2 files changed, 75 insertions, 2 deletions
diff --git a/meta/recipes-support/ca-certificates/ca-certificates/0003-update-ca-certificates-use-relative-symlinks-from-ET.patch b/meta/recipes-support/ca-certificates/ca-certificates/0003-update-ca-certificates-use-relative-symlinks-from-ET.patch new file mode 100644 index 0000000000..4bd967f788 --- /dev/null +++ b/meta/recipes-support/ca-certificates/ca-certificates/0003-update-ca-certificates-use-relative-symlinks-from-ET.patch | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | From a9fc13b2aee55655d58fcb77a3180fa99f96438a Mon Sep 17 00:00:00 2001 | ||
| 2 | From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com> | ||
| 3 | Date: Wed, 28 Mar 2018 16:45:05 +0100 | ||
| 4 | Subject: [PATCH] update-ca-certificates: use relative symlinks from | ||
| 5 | $ETCCERTSDIR | ||
| 6 | MIME-Version: 1.0 | ||
| 7 | Content-Type: text/plain; charset=UTF-8 | ||
| 8 | Content-Transfer-Encoding: 8bit | ||
| 9 | |||
| 10 | update-ca-certificates symlinks (trusted) certificates | ||
| 11 | from $CERTSDIR or $LOCALCERTSDIR into $ETCCERTSDIR. | ||
| 12 | update-ca-certificates can call hook scripts installed | ||
| 13 | into /etc/ca-certificates/update.d. Those scripts are | ||
| 14 | passed the pem file in /etc/ssl/certs/ that was added or | ||
| 15 | removed in this run and those pem files are absolute | ||
| 16 | symlinks into $CERTSDIR or $LOCALCERTSDIR at the moment. | ||
| 17 | |||
| 18 | When running update-ca-certificates during image build | ||
| 19 | time, they thusly all point into the host's file system, | ||
| 20 | not into the $SYSROOT. This means: | ||
| 21 | * the host's file system layout must match the one | ||
| 22 | produced by OE, and | ||
| 23 | * it also means that the host must have installed the same | ||
| 24 | (or more) certificates as the target in $CERTSDIR and | ||
| 25 | $LOCALCERTSDIR | ||
| 26 | |||
| 27 | This is a problem when wanting to execute hook scripts, | ||
| 28 | because they all need to be taught about $SYSROOT, and | ||
| 29 | behave differently depending on whether they're called | ||
| 30 | at image build time, or on the target, as otherwise they | ||
| 31 | will be trying to actually read the host's certificates | ||
| 32 | from $CERTSDIR or $LOCALCERTSDIR. | ||
| 33 | |||
| 34 | This also is a problem when running anything else during | ||
| 35 | image build time that depends on the trusted CA | ||
| 36 | certificates. | ||
| 37 | |||
| 38 | Changing the symlink to be relative solves all of these | ||
| 39 | problems. Do so. | ||
| 40 | |||
| 41 | Upstream-Status: Inappropriate [OE-specific] | ||
| 42 | Signed-off-by: André Draszik <andre.draszik@jci.com> | ||
| 43 | --- | ||
| 44 | sbin/update-ca-certificates | 6 ++++-- | ||
| 45 | 1 file changed, 4 insertions(+), 2 deletions(-) | ||
| 46 | |||
| 47 | diff --git a/sbin/update-ca-certificates b/sbin/update-ca-certificates | ||
| 48 | index 00f80c7..7e911a9 100755 | ||
| 49 | --- a/sbin/update-ca-certificates | ||
| 50 | +++ b/sbin/update-ca-certificates | ||
| 51 | @@ -29,6 +29,7 @@ CERTSDIR=$SYSROOT/usr/share/ca-certificates | ||
| 52 | LOCALCERTSDIR=$SYSROOT/usr/local/share/ca-certificates | ||
| 53 | CERTBUNDLE=ca-certificates.crt | ||
| 54 | ETCCERTSDIR=$SYSROOT/etc/ssl/certs | ||
| 55 | +FSROOT=../../../ # to get from $ETCCERTSDIR to the root of the file system | ||
| 56 | HOOKSDIR=$SYSROOT/etc/ca-certificates/update.d | ||
| 57 | |||
| 58 | while [ $# -gt 0 ]; | ||
| 59 | @@ -125,9 +126,10 @@ add() { | ||
| 60 | PEM="$ETCCERTSDIR/$(basename "$CERT" .crt | sed -e 's/ /_/g' \ | ||
| 61 | -e 's/[()]/=/g' \ | ||
| 62 | -e 's/,/_/g').pem" | ||
| 63 | - if ! test -e "$PEM" || [ "$(readlink "$PEM")" != "${CERT##$SYSROOT}" ] | ||
| 64 | + DST="$(echo ${CERT} | sed -e "s|^$SYSROOT||" -e "s|^/|$FSROOT|" )" | ||
| 65 | + if ! test -e "$PEM" || [ "$(readlink "$PEM")" != "${DST}" ] | ||
| 66 | then | ||
| 67 | - ln -sf "${CERT##$SYSROOT}" "$PEM" | ||
| 68 | + ln -sf "${DST}" "$PEM" | ||
| 69 | echo "+$PEM" >> "$ADDED" | ||
| 70 | fi | ||
| 71 | # Add trailing newline to certificate, if it is missing (#635570) | ||
diff --git a/meta/recipes-support/ca-certificates/ca-certificates_20170717.bb b/meta/recipes-support/ca-certificates/ca-certificates_20170717.bb index 49b7ffc36e..350294858b 100644 --- a/meta/recipes-support/ca-certificates/ca-certificates_20170717.bb +++ b/meta/recipes-support/ca-certificates/ca-certificates_20170717.bb | |||
| @@ -21,10 +21,12 @@ SRC_URI = "git://salsa.debian.org/debian/ca-certificates.git;protocol=https \ | |||
| 21 | file://0001-update-ca-certificates-don-t-use-Debianisms-in-run-p.patch \ | 21 | file://0001-update-ca-certificates-don-t-use-Debianisms-in-run-p.patch \ |
| 22 | file://update-ca-certificates-support-Toybox.patch \ | 22 | file://update-ca-certificates-support-Toybox.patch \ |
| 23 | file://default-sysroot.patch \ | 23 | file://default-sysroot.patch \ |
| 24 | file://sbindir.patch" | 24 | file://sbindir.patch \ |
| 25 | file://0003-update-ca-certificates-use-relative-symlinks-from-ET.patch \ | ||
| 26 | " | ||
| 25 | 27 | ||
| 26 | S = "${WORKDIR}/git" | 28 | S = "${WORKDIR}/git" |
| 27 | SYSROOT_DIRS_class-native += "${sysconfdir}" | 29 | SYSROOT_DIRS_class-native += "${sysconfdir} ${datadir}/ca-certificates" |
| 28 | 30 | ||
| 29 | inherit allarch | 31 | inherit allarch |
| 30 | 32 | ||
