File: leafnode.postinst

package info (click to toggle)
leafnode 1.11.5-5
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,356 kB
  • ctags: 576
  • sloc: ansic: 10,626; sh: 4,107; xml: 637; makefile: 281; perl: 84; sed: 4
file content (225 lines) | stat: -rw-r--r-- 7,597 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
#!/bin/sh 

set -e

# we need the debconf library
. /usr/share/debconf/confmodule

CONFIG=/etc/news/leafnode/config
SAMPLE=/usr/share/leafnode/config.example
FETCHNEWS=/usr/sbin/fetchnews
DEBIAN_CONFIG=/etc/news/leafnode/debian-config

# If we saved the config file, restore it.
if [ -e /etc/news/leafnode/config.save-upgrade ]; then
	if [ ! -e /etc/news/leafnode/config ]; then
		mv /etc/news/leafnode/config.save-upgrade /etc/news/leafnode/config
	else
		rm -f /etc/news/leafnode/config.save-upgrade
	fi
fi

if [ ! -e ${DEBIAN_CONFIG} ]; then
	cp -p /usr/share/leafnode/debian-config ${DEBIAN_CONFIG}
fi

########################################################################
#
# User configuration
#
########################################################################

if [ "$1" = "configure" ]; then
# Server - keep as many settings we don't know about as possible
    db_get leafnode/server || true
    server=$RET
 
    # Is this a fresh configuration?
    if [ -e $CONFIG ]; then
        cp $CONFIG ${CONFIG}.new
	cp $CONFIG ${CONFIG}.0
    else
        # Debhelper may decide to compress the sample file, so we
        # handle either case.
        if [ -f ${SAMPLE}.gz ] ; then
           gunzip -c ${SAMPLE}.gz > ${CONFIG}.new
        else
           cp $SAMPLE ${CONFIG}.new
        fi

	touch ${CONFIG}
	chown root ${CONFIG}
	chgrp news ${CONFIG}
	chmod 640 ${CONFIG}
    fi

    # Do the substitution (once only - can have multiple server = lines)
awk '/^server.*=/ { if (x == foo) { print "server = '${server}'"; x= "foo"} else print }
!/^server.*=/ { print }' < ${CONFIG}.new > ${CONFIG}

    # Perhaps there was no server line?
    if ! grep "server.*=" ${CONFIG} > /dev/null ; then
        echo server = $server > ${CONFIG}.tmp
        cat ${CONFIG}.tmp ${CONFIG}.new > ${CONFIG}
        rm -f ${CONFIG}.tmp
    fi
    rm -f ${CONFIG}.new
    # Glad that's over...

    # TCP wrappers?
    db_get leafnode/tcpd || true
    if [ "$RET" = "true" ]; then
       if ! grep -q '#-- leafnode begin' /etc/hosts.deny 2>/dev/null; then
                echo "#-- leafnode begin" >> /etc/hosts.deny
                echo "leafnode: ALL" >> /etc/hosts.deny
                echo "#-- leafnode end" >> /etc/hosts.deny
                echo "#-- leafnode begin" >> /etc/hosts.allow
                echo "leafnode: 127.0.0.1" >> /etc/hosts.allow
                echo "#-- leafnode end" >> /etc/hosts.allow
       fi
    else
       if grep -q '#-- leafnode begin' /etc/hosts.deny 2>/dev/null; then
	  cp /etc/hosts.allow /etc/hosts.allow.new
          sed -e '/#-- leafnode begin/,/#-- leafnode end/d' \
                        </etc/hosts.allow.new >/etc/hosts.allow
          rm -f /etc/hosts.allow.new
	  cp /etc/hosts.deny /etc/hosts.deny.new
          sed -e '/#-- leafnode begin/,/#-- leafnode end/d' \
                        </etc/hosts.deny.new >/etc/hosts.deny
          rm -f /etc/hosts.deny.new
       fi
    fi

    # Network type?
    db_get leafnode/network || true
    case "$RET" in
      "permanent")
        sed "/NETWORK=/ c\\
NETWORK=permanent\\" < ${DEBIAN_CONFIG} > ${DEBIAN_CONFIG}.new
	mv ${DEBIAN_CONFIG}.new ${DEBIAN_CONFIG}
	;;
      "PPP")
        sed "/NETWORK=/ c\\
NETWORK=PPP\\" < ${DEBIAN_CONFIG} > ${DEBIAN_CONFIG}.new
	mv ${DEBIAN_CONFIG}.new ${DEBIAN_CONFIG}
	;;
      "none")
        sed "/NETWORK=/ c\\
NETWORK=none\\" < ${DEBIAN_CONFIG} > ${DEBIAN_CONFIG}.new
	mv ${DEBIAN_CONFIG}.new ${DEBIAN_CONFIG}
	;;
      *)
      	# FIXME: Error
        ;;
    esac
fi

########################################################################
#
# Automatic updates
#
########################################################################

# Some people reported that using localhost in /etc/hosts.allow doesn't work.
# This will clean up after old leafnode installs that used localhost.
perl -i.leafnode.bak -pe '
	if (/^#-- leafnode begin/) { $in=1 };
	if (/^#-- leafnode end/) { undef $in};
	if ($in && /leafnode:.*localhost/) { s/localhost/127.0.0.1/}
	' /etc/hosts.allow
rm /etc/hosts.allow.leafnode.bak

if [ "$1" = "configure" ]; then
	if [ "$2" -a -e /etc/news/leafnode/config -a -e /var/lib/leafnode/groupinfo -a ! -e /var/spool/leafnode/leaf.node/groupinfo ]; then
		if dpkg --compare-versions "$2" lt "1.6"; then
			# Change format of groupinfo file. Parallells
			# update.sh in the source package.
			server=`awk '{ if ($1 == "server") printf("%s\n", substr($0,index($0,"=")+1)); }' < /etc/news/leafnode/config | tr -d '	 '`
			cd /var/spool/news/interesting.groups
			if [ "$server" ]; then
				ls -c1 | xargs -i@@ grep @@\  /var/lib/leafnode/groupinfo | \
					cut -d\  -f 1,4 > /var/spool/news/leaf.node/$server
			fi
			awk '{ printf("%s %d %d 0", $1, $2, $3); for (i = 5; i <= NF; i++) printf(" %s", $i); printf("\n"); }' < /var/lib/leafnode/groupinfo > /var/spool/news/leaf.node/groupinfo
			rm -f /var/lib/leafnode/groupinfo
			find /var/lib/leafnode/ -type f -not -name 'config*' -exec mv '{}' /var/spool/news/leaf.node/ \;
			chown news.news /var/spool/news/leaf.node/*
			chmod 664 /var/spool/news/leaf.node/*
			rmdir -p /var/lib/leafnode || true
		fi
	fi	

        # Other upgrades
        if [ $2 ] ; then
		if dpkg --compare-versions "$2" lt "1.9.3"; then
		    mv /var/spool/news/leaf.node/groupinfo /var/spool/news/leaf.node/groupinfo.old
		    sort -f < /var/spool/news/leaf.node/groupinfo.old > /var/spool/news/leaf.node/groupinfo
		    rm /var/spool/news/leaf.node/groupinfo.old
		fi

		# Spooling mistook
		if dpkg --compare-versions "$2" lt "1.9.4-9"; then
			if dpkg --compare-versions "$2" gt "1.9.4-5"; then
                		sed "/NETWORK=perm/ c\\
NETWORK=permanent\\" < /etc/news/leafnode/debian-config > /etc/news/leafnode/debian-config.new
	                	cat /etc/news/leafnode/debian-config.new >/etc/news/leafnode/debian-config
				rm /etc/news/leafnode/debian-config.new
			fi
		fi

		# Require chmod +x of out.going files if upgrading in
		# order to ensure that they are posted.
		if dpkg --compare-versions "$2" lt "1.9.24-1"; then
			find /var/spool/news/out.going -type f \
			   -exec chmod +x '{}' ';'
		fi
	fi
fi

# Old versions had this line wrong in the config file. Correct.
if grep -q maxcount /etc/news/leafnode/config; then
	cp /etc/news/leafnode/config /etc/news/leafnode/config.new
	sed -e "s/maxcount/maxfetch/" < /etc/news/leafnode/config.new > /etc/news/leafnode/config
	rm -f /etc/news/leafnode/config.new
fi

cd /var/spool/news/message.id
for a in 0 1 2 3 4 5 6 7 8 9 ; do for b in 0 1 2 3 4 5 6 7 8 9 ; do \
install -g news -o news -d ${a}${b}0 ${a}${b}1 ${a}${b}2 ${a}${b}3 ${a}${b}4 \
	${a}${b}5 ${a}${b}6 ${a}${b}7 ${a}${b}8 ${a}${b}9 ; \
done ; done

#
# This enables leafnode in inetd.conf, so save for "last".
#
update-inetd --comment-chars "#disabled#" --disable nntp
update-inetd --group MAIL --add --comment-chars "#disabled#" \
		"nntp		stream	tcp	nowait	news	/usr/sbin/tcpd	/usr/sbin/leafnode" 

if [ "$1" = "purge" ]; then
   db_purge || true
fi

#DEBHELPER#

########################################################################
#
# Configuration reprise
#
########################################################################

if [ "$1" = "configure" ]; then
   # Update list of groups if the user decided to do that
   db_get leafnode/update-groups || true
   if [ "$RET" = "true" ]; then
       echo -n "Updating list of active groups... "
       if ${FETCHNEWS} -f >/dev/null ; then
          echo done
       else
          echo failed
       fi
       
       # But don't do it again unless the user asks for it
       db_set leafnode/update-groups false
   fi
fi