#!/bin/sh set -e . /usr/share/debconf/confmodule CONFIGDIR="/etc/silcd" CONFIGFILE="$CONFIGDIR/silcd.conf" IPCONFIGFILE="$CONFIGDIR/silcd-primary-ip.conf" ADMINCONFIGFILE="$CONFIGDIR/silcd-admin.conf" DEFAULT_CONFIGDIR="/usr/share/doc/silcd/examples" DEFAULT_CONFIGFILE="$DEFAULT_CONFIGDIR/silcd.conf.default.gz" DEFAULT_IPCONFIGFILE="$DEFAULT_CONFIGDIR/silcd-primary-ip.conf.default" DEFAULT_ADMINCONFIGFILE="$DEFAULT_CONFIGDIR/silcd-admin.conf.default" read_config() { PARAMETER="$1" sed -n -e "s/^[^#]*$PARAMETER *= *\"\(\(\\\.\|[^\"]\)*\)\".*$/\1/p" \ "$CONFIGFILE" | sed -e 's/\\//g' } if [ -e "$CONFIGFILE" ]; then PUBLIC_KEY="$(read_config PublicKey)" PRIVATE_KEY="$(read_config PrivateKey)" else PUBLIC_KEY="/etc/silcd/silcd.pub" PRIVATE_KEY="/etc/silcd/silcd.prv" fi retrieve_debconf_answers() { db_get silcd/server-name SERVER_NAME="$RET" db_get silcd/host-name HOST_NAME="$RET" db_get silcd/real-name REAL_NAME="$RET" db_get silcd/email EMAIL="$RET" db_get silcd/organization ORGANIZATION="$RET" db_get silcd/country COUNTRY="$RET" db_get silcd/admin-nick ADMIN_NICK="$RET" db_get silcd/admin-passphrase ADMIN_PASSPHRASE="$RET" } rfc2253ize() { # We espace: symbols ,w+"\<> and spaces at end and begining echo "$1" | sed -e 's/[,;+"\\<>]/\\\0/g;s/ $/\\\0/g;s/^[ #]/\\\0/g' } create_key_pair() { local tmpdir retrieve_debconf_answers if [ -z "$SERVER_NAME" -o -z "$HOST_NAME" ]; then # Don't create keypair return fi IDENTIFIER="UN=$(rfc2253ize "SERVER_NAME"), HN=$(rfc2253ize "$HOST_NAME")" if [ -n "$REAL_NAME" ]; then IDENTIFIER="$IDENTIFIER, RN=$(rfc2253ize "$REAL_NAME")" fi if [ -n "$EMAIL" ]; then IDENTIFIER="$IDENTIFIER, E=$(rfc2253ize "$EMAIL")" fi if [ -n "$COUNTRY" ]; then IDENTIFIER="$IDENTIFIER, C=$(rfc2253ize "$COUNTRY")" fi tmpdir=$(mktemp -d -t silcd.XXXXXX) chmod 700 "$tmpdir" silcd --create-key-pair="$tmpdir" --identifier="$IDENTIFIER" mkdir -p "$(dirname "$PUBLIC_KEY")" "$(dirname "$PRIVATE_KEY")" mv -f "$tmpdir/silcd.pub" "$PUBLIC_KEY" mv -f "$tmpdir/silcd.prv" "$PRIVATE_KEY" chmod 0600 "$PRIVATE_KEY" rmdir "$tmpdir" } change_setting() { FILE="$1" shift KEY="$1" shift VALUE="$*" VALUE="$(echo "$VALUE" | sed -e 's,/,\\/,g;s,",\\\\",g')" sed -i -e "s/\([^#]*$KEY *= *\"\)[^\"]*\(\"\)/\1$VALUE\2/" "$FILE" } update_config_file() { retrieve_debconf_answers IP="$(getent hosts "$HOST_NAME" | awk '{print $1}')" # silcd.conf TEMPFILE=$(tempfile) zcat "$DEFAULT_CONFIGFILE" > "$TEMPFILE" change_setting "$TEMPFILE" ServerType "$SERVER_NAME" change_setting "$TEMPFILE" hostname "$HOST_NAME" change_setting "$TEMPFILE" Admin "$REAL_NAME" change_setting "$TEMPFILE" AdminEmail "$EMAIL" change_setting "$TEMPFILE" Location "$COUNTRY" ucf --debconf-ok "$TEMPFILE" "$CONFIGFILE" rm -f "$TEMPFILE" # silcd-primary-ip.conf TEMPFILE=$(tempfile) cat "$DEFAULT_IPCONFIGFILE" > "$TEMPFILE" change_setting "$TEMPFILE" ip "$IP" ucf --debconf-ok "$TEMPFILE" "$IPCONFIGFILE" rm -f "$TEMPFILE" # silcd-admin.conf TEMPFILE="$(tempfile)" cat "$DEFAULT_ADMINCONFIGFILE" > "$TEMPFILE" change_setting "$TEMPFILE" Nick "$ADMIN_NICK" change_setting "$TEMPFILE" Passphrase "$ADMIN_PASSPHRASE" ucf --debconf-ok "$TEMPFILE" "$ADMINCONFIGFILE" rm -f "$TEMPFILE" } case "$1" in configure) if [ "$DEBCONF_RECONFIGURE" = "1" ] || ! [ -e "$PUBLIC_KEY" -a -e "$PRIVATE_KEY" ]; then create_key_pair fi update_config_file ;; reconfigure) create_key_pair update_config_file ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac # We are going to start a daemon, so we need to be debconf clean. db_stop #DEBHELPER# exit 0 #vim: et sw=4