diff options
author | Timo Weingärtner <timo@tiwe.de> | 2012-02-25 21:08:57 +0100 |
---|---|---|
committer | Timo Weingärtner <timo@tiwe.de> | 2012-02-25 21:09:41 +0100 |
commit | 8f32f842b33bdc6617b41dc9f18b222fd3013e21 (patch) | |
tree | 204edc905feee66d6a8d27426b15ecb5fd50b250 /update-known-hosts | |
download | openssh-known-hosts-8ca603d373973396a423fe73ea5dee211465843e.tar.gz |
Imported Debian version 0.1debian/0.1
Diffstat (limited to 'update-known-hosts')
-rwxr-xr-x | update-known-hosts | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/update-known-hosts b/update-known-hosts new file mode 100755 index 0000000..14f873f --- /dev/null +++ b/update-known-hosts @@ -0,0 +1,74 @@ +#!/bin/dash + +set -euC + +CONFDIR=/etc/openssh-known-hosts +PLUGIN_PATH=/usr/share/openssh-known-hosts/plugins:/usr/local/share/openssh-known-hosts/plugins +CACHEDIR=/var/cache/openssh-known-hosts +LOCK=/var/lock/openssh-known-hosts +OUTFILE=/var/lib/openssh-known-hosts/ssh_known_hosts + +path_search () { + if [ "${1}" != "${1#*/}" ]; then + echo $1 + else + echo "$2" | tr ':' '\n' | while read -r path; do + if [ -f "${path}/${1}" ]; then + echo "${path}/${1}" + break + fi + done + fi +} + +lockfile-create "${LOCK}" +lockfile-touch "${LOCK}" & +LOCKPID="$!" + +cd "${CACHEDIR}" + +find -mindepth 2 -maxdepth 2 -type f -name new -delete + +run-parts --list "${CONFDIR}/sources/" | while read source; do + source=`basename ${source}` + mkdir -p ${source} + ( + set -a + cd ${source} + . "${CONFDIR}/sources/${source}" + `path_search "$PLUGIN" "$PLUGIN_PATH"` >| log 2>&1 || { + exitcode=$? + rm -f new + ignore='' + for e in ${EXIT_IGNORE:-0}; do + if [ "$e" = "$exitcode" ]; then + ignore=1 + break + fi + done + if [ ! "$ignore" ]; then + echo "${source} exited with code ${exitcode}, log follows:" + cat log + echo + fi + } + ) + if [ -e ${source}/new ]; then + mv ${source}/new ${source}/current + fi + if [ -e ${source}/current ]; then + cat ${source}/current >&3 + fi +done 3>| "${OUTFILE}.new" + +mv "${OUTFILE}.new" "${OUTFILE}" + +for d in *; do + [ -d $d ] || continue + [ -e "${CONFDIR}/sources/$d" ] || rm -fr $d +done + +kill "${LOCKPID}" +lockfile-remove "${LOCK}" + +# vim:set ft=sh: |