Fix installation for silc-client and silc-toolkit packages
[silc.git] / debian-silc-server / postinst
1 #!/bin/sh
2
3 set -e
4
5 . /usr/share/debconf/confmodule
6
7 CONFIGDIR="/etc/silcd"
8 CONFIGFILE="$CONFIGDIR/silcd.conf"
9 IPCONFIGFILE="$CONFIGDIR/silcd-primary-ip.conf"
10 ADMINCONFIGFILE="$CONFIGDIR/silcd-admin.conf"
11 DEFAULT_CONFIGDIR="/usr/share/doc/silcd/examples"
12 DEFAULT_CONFIGFILE="$DEFAULT_CONFIGDIR/silcd.conf.default.gz"
13 DEFAULT_IPCONFIGFILE="$DEFAULT_CONFIGDIR/silcd-primary-ip.conf.default"
14 DEFAULT_ADMINCONFIGFILE="$DEFAULT_CONFIGDIR/silcd-admin.conf.default"
15
16 read_config() {
17     PARAMETER="$1"
18     sed -n -e "s/^[^#]*$PARAMETER  *=  *\"\(\(\\\.\|[^\"]\)*\)\".*$/\1/p" \
19         "$CONFIGFILE" | sed -e 's/\\//g'
20 }
21
22 if [ -e "$CONFIGFILE" ]; then
23     PUBLIC_KEY="$(read_config PublicKey)"
24     PRIVATE_KEY="$(read_config PrivateKey)"
25 else
26     PUBLIC_KEY="/etc/silcd/silcd.pub"
27     PRIVATE_KEY="/etc/silcd/silcd.prv"
28 fi
29
30 retrieve_debconf_answers() {
31     db_get silcd/server-name
32     SERVER_NAME="$RET"
33     db_get silcd/host-name
34     HOST_NAME="$RET"
35     db_get silcd/real-name
36     REAL_NAME="$RET"
37     db_get silcd/email
38     EMAIL="$RET"
39     db_get silcd/organization
40     ORGANIZATION="$RET"
41     db_get silcd/country
42     COUNTRY="$RET"
43     db_get silcd/admin-nick
44     ADMIN_NICK="$RET"
45     db_get silcd/admin-passphrase
46     ADMIN_PASSPHRASE="$RET"
47 }
48
49 rfc2253ize() {
50     # We espace: symbols ,w+"\<> and spaces at end and begining
51     echo "$1" | sed -e 's/[,;+"\\<>]/\\\0/g;s/ $/\\\0/g;s/^[ #]/\\\0/g'
52 }
53
54 create_key_pair() {
55     local tmpdir
56
57     retrieve_debconf_answers
58
59     if [ -z "$SERVER_NAME" -o -z "$HOST_NAME" ]; then
60         # Don't create keypair
61         return
62     fi
63
64     IDENTIFIER="UN=$(rfc2253ize "SERVER_NAME"), HN=$(rfc2253ize "$HOST_NAME")"
65     if [ -n "$REAL_NAME" ]; then
66         IDENTIFIER="$IDENTIFIER, RN=$(rfc2253ize "$REAL_NAME")"
67     fi
68     if [ -n "$EMAIL" ]; then
69         IDENTIFIER="$IDENTIFIER, E=$(rfc2253ize "$EMAIL")"
70     fi
71     if [ -n "$COUNTRY" ]; then
72         IDENTIFIER="$IDENTIFIER, C=$(rfc2253ize "$COUNTRY")"
73     fi
74
75     tmpdir=$(mktemp -d -t silcd.XXXXXX)
76     chmod 700 "$tmpdir"
77     silcd --create-key-pair="$tmpdir" --identifier="$IDENTIFIER"
78     mkdir -p "$(dirname "$PUBLIC_KEY")" "$(dirname "$PRIVATE_KEY")"
79     mv -f "$tmpdir/silcd.pub" "$PUBLIC_KEY"
80     mv -f "$tmpdir/silcd.prv" "$PRIVATE_KEY"
81     chmod 0600 "$PRIVATE_KEY"
82     rmdir "$tmpdir"
83 }
84
85 change_setting() {
86     FILE="$1"
87     shift
88     KEY="$1"
89     shift
90     VALUE="$*"
91  
92     VALUE="$(echo "$VALUE" | sed -e 's,/,\\/,g;s,",\\\\",g')"
93     sed -i -e "s/\([^#]*$KEY  *=  *\"\)[^\"]*\(\"\)/\1$VALUE\2/" "$FILE"
94 }
95
96 update_config_file() {
97     retrieve_debconf_answers
98     IP="$(getent hosts "$HOST_NAME" | awk '{print $1}')" 
99
100     # silcd.conf
101     TEMPFILE=$(tempfile)
102     zcat "$DEFAULT_CONFIGFILE" > "$TEMPFILE"
103
104     change_setting "$TEMPFILE" ServerType "$SERVER_NAME"
105     change_setting "$TEMPFILE" hostname "$HOST_NAME"
106     change_setting "$TEMPFILE" Admin "$REAL_NAME"
107     change_setting "$TEMPFILE" AdminEmail "$EMAIL"
108     change_setting "$TEMPFILE" Location "$COUNTRY"
109
110     ucf --debconf-ok "$TEMPFILE" "$CONFIGFILE"
111
112     rm -f "$TEMPFILE"
113
114     # silcd-primary-ip.conf
115     TEMPFILE=$(tempfile)
116     cat "$DEFAULT_IPCONFIGFILE" > "$TEMPFILE"
117
118     change_setting "$TEMPFILE" ip "$IP"
119
120     ucf --debconf-ok "$TEMPFILE" "$IPCONFIGFILE"
121
122     rm -f "$TEMPFILE"
123
124     # silcd-admin.conf
125     TEMPFILE="$(tempfile)"
126     cat "$DEFAULT_ADMINCONFIGFILE" > "$TEMPFILE"
127
128     change_setting "$TEMPFILE" Nick "$ADMIN_NICK"
129     change_setting "$TEMPFILE" Passphrase "$ADMIN_PASSPHRASE"
130
131     ucf --debconf-ok "$TEMPFILE" "$ADMINCONFIGFILE"
132
133     rm -f "$TEMPFILE"
134 }
135
136 case "$1" in
137     configure)
138         if [ "$DEBCONF_RECONFIGURE" = "1" ] ||
139            ! [ -e "$PUBLIC_KEY" -a -e "$PRIVATE_KEY" ]; then
140             create_key_pair
141         fi
142         update_config_file
143         ;;
144
145     reconfigure)
146         create_key_pair
147         update_config_file
148         ;;
149
150     abort-upgrade|abort-remove|abort-deconfigure)
151         ;;
152
153     *)
154         echo "postinst called with unknown argument \`$1'" >&2
155         exit 1
156         ;;
157 esac
158
159 # We are going to start a daemon, so we need to be debconf clean.
160 db_stop
161
162 #DEBHELPER#
163
164 exit 0
165
166 #vim: et sw=4