12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/bin/sh
- #
- # update-ca-certificates script for embedded systems.
- #
- # Copyright (C) 2009 Phil Sutter <phil@nwl.cc>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- CRTCONF=/etc/ca-certificates.conf
- CRTDIR=/usr/share/ca-certificates
- LNKDIR=/etc/ssl/certs
- OPENSSL="openssl"
- cert_type() { # (certfile)
- grep -qE '^-----BEGIN (X509 |TRUSTED |)CERTIFICATE-----' $1 && {
- echo "cert"
- return 0
- }
- grep -qE '^-----BEGIN X509 CRL-----' $1 && {
- echo "crl"
- return 0
- }
- echo "unknown"
- return 1
- }
- ${OPENSSL} version >/dev/null 2>&1 || {
- echo "Fatal: no openssl executable found, bailing out"
- exit 1
- }
- for l in $(ls ${DESTDIR}${LNKDIR}/* 2>/dev/null); do
- [ -L "$l" ] && rm -f "$l"
- done
- cat ${DESTDIR}$CRTCONF | while read crt; do
- [ -n "$crt" ] || continue
- [[ "$crt" = -* ]] && continue
- cname="$(basename $crt)"
- ln -s ${CRTDIR}/$crt ${DESTDIR}${LNKDIR}/$cname
- ctype="$(cert_type ${DESTDIR}${CRTDIR}/$crt)"
- case $ctype in
- cert)
- sslcmd="x509"
- pfx=""
- ;;
- crl)
- sslcmd="crl"
- pfx="r"
- ;;
- *)
- echo "Warning: ignoring unknown filetype ${DESTDIR}${CRTDIR}/$crt"
- continue
- ;;
- esac
- hsh="$(${OPENSSL} $sslcmd -hash -noout -in ${DESTDIR}${CRTDIR}/$crt)"
- idx=0
- while [ -e ${DESTDIR}${LNKDIR}/${hsh}.${pfx}${idx} ]; do
- let "idx++"
- done
- ln -s ${CRTDIR}/$crt ${DESTDIR}${LNKDIR}/${hsh}.${pfx}${idx}
- done
- cat /etc/ssl/certs/*.0 > /etc/ssl/cert.pem
- exit 0
|