mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-10-26 22:20:59 +01:00
ADMIN: dump-certs: create files in a tmpdir
Files dumped from the socket are put in a temporary directory, this
directory is then removed upon exit.
Variable were cleaned to be clearer:
- crt_filename -> prev_crt
- key_filename -> prev_key
- ${crt_filename}.${tmp} -> new_crt
- ${key_filename}.${tmp} -> new_key
This commit is contained in:
parent
8781c65d8a
commit
172ac6ad03
@ -12,6 +12,7 @@ export DRY_RUN=0
|
|||||||
export DEBUG=
|
export DEBUG=
|
||||||
export VERBOSE=
|
export VERBOSE=
|
||||||
export M="@1 "
|
export M="@1 "
|
||||||
|
export TMP
|
||||||
|
|
||||||
vecho() {
|
vecho() {
|
||||||
|
|
||||||
@ -77,37 +78,41 @@ cmp_certkey() {
|
|||||||
|
|
||||||
dump_certificate() {
|
dump_certificate() {
|
||||||
name=$1
|
name=$1
|
||||||
crt_filename=$2
|
prev_crt=$2
|
||||||
key_filename=$3
|
prev_key=$3
|
||||||
|
r="tmp.${RANDOM}"
|
||||||
tmp="tmp.${RANDOM}"
|
|
||||||
d="old.$(date +%s)"
|
d="old.$(date +%s)"
|
||||||
|
new_crt="$TMP/$(basename "$prev_crt").${r}"
|
||||||
|
new_key="$TMP/$(basename "$prev_key").${r}"
|
||||||
|
|
||||||
if ! touch "${crt_filename}.${tmp}" || ! touch "${key_filename}.${tmp}"; then
|
if ! touch "${new_crt}" || ! touch "${new_key}"; then
|
||||||
echo "error: can't dump \"$name\", can't create tmp files" >&2
|
echo "error: can't dump \"$name\", can't create tmp files" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "${M}dump ssl cert ${name}" | socat "${SOCKET}" - | openssl pkey >> "${key_filename}.${tmp}"
|
echo "${M}dump ssl cert ${name}" | socat "${SOCKET}" - | openssl pkey >> "${new_key}"
|
||||||
# use crl2pkcs7 as a way to dump multiple x509, storeutl could be used in modern versions of openssl
|
# use crl2pkcs7 as a way to dump multiple x509, storeutl could be used in modern versions of openssl
|
||||||
echo "${M}dump ssl cert ${name}" | socat "${SOCKET}" - | openssl crl2pkcs7 -nocrl -certfile /dev/stdin | openssl pkcs7 -print_certs >> "${crt_filename}.${tmp}"
|
echo "${M}dump ssl cert ${name}" | socat "${SOCKET}" - | openssl crl2pkcs7 -nocrl -certfile /dev/stdin | openssl pkcs7 -print_certs >> "${new_crt}"
|
||||||
|
|
||||||
if ! cmp -s <(openssl x509 -in "${crt_filename}.${tmp}" -pubkey -noout) <(openssl pkey -in "${key_filename}.${tmp}" -pubout); then
|
if ! cmp -s <(openssl x509 -in "${new_crt}" -pubkey -noout) <(openssl pkey -in "${new_key}" -pubout); then
|
||||||
echo "Error: Private key \"${key_filename}.${tmp}\" and public key \"${crt_filename}.${tmp}\" don't match" >&2
|
echo "Error: Private key \"${new_key}\" and public key \"${new_crt}\" don't match" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if cmp_certkey "${crt_filename}" "${crt_filename}.${tmp}"; then
|
if cmp_certkey "${prev_crt}" "${new_crt}"; then
|
||||||
echo "notice: ${crt_filename} is already up to date"
|
echo "notice: ${crt_filename} is already up to date" >&2
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# move the current certificates to ".old.timestamp"
|
# move the current certificates to ".old.timestamp"
|
||||||
mv "${crt_filename}" "${crt_filename}.${d}"
|
if [ -f "${prev_crt}" ] && [ -f "${prev_key}" ]; then
|
||||||
[ "${crt_filename}" != "${key_filename}" ] && mv "${key_filename}" "${key_filename}.${d}"
|
mv "${prev_crt}" "${prev_crt}.${d}"
|
||||||
|
[ "${prev_crt}" != "${prev_key}" ] && mv "${prev_key}" "${prev_key}.${d}"
|
||||||
|
fi
|
||||||
|
|
||||||
mv "${crt_filename}.${tmp}" "${crt_filename}"
|
# move the new certificates to old place
|
||||||
[ "${crt_filename}" != "${key_filename}" ] && mv "${key_filename}.${tmp}" "${key_filename}"
|
mv "${new_crt}" "${prev_crt}"
|
||||||
|
[ "${prev_crt}" != "${prev_key}" ] && mv "${new_key}" "${prev_key}"
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -202,6 +207,7 @@ main() {
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
TMP=${TMP:-$(mktemp -d)}
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
dump_all_certificates
|
dump_all_certificates
|
||||||
@ -215,4 +221,5 @@ main() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trap 'rm -rf -- "$TMP"' EXIT
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user