summaryrefslogtreecommitdiff
path: root/packaging/Debian/debian/samba.postinst
blob: fda15e2204dc6457ecf30063345ec07a5935f99b (plain)
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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/bin/sh -e
#
# Post-installation script for the Samba package for Debian GNU/Linux
#
# $Id: samba.postinst,v 1.2.4.1 2003/06/01 04:30:10 peloy Exp $
#

case "$1" in
	configure)
		# continue below
	;;

	abort-upgrade|abort-remove|abort-deconfigure)
		exit 0
	;;

	*)
		echo "postinst called with unknown argument \`$1'" >&2
		exit 0
	;;
esac

# Handle debconf
. /usr/share/debconf/confmodule

INITCONFFILE=/etc/default/samba

# We generate several files during the postinst, and we don't want
#	them to be readable only by root.
umask 022


# Generate configuration file if it does not exist, using default values.
[ -r "${INITCONFFILE}" ] || {
	echo Generating ${INITCONFFILE}... >&2
	cat >${INITCONFFILE} <<'EOFMAGICNUMBER1234'
# Defaults for samba initscript
# sourced by /etc/init.d/samba
# installed at /etc/default/samba by the maintainer scripts
#

#
# This is a POSIX shell fragment
#

# How should Samba (smbd) run? Possible values are "daemons"
#	or "inetd".
RUN_MODE=""
EOFMAGICNUMBER1234
}

# --- Begin of FHS migration code ---

# Starting with Samba 2.2.3-4 the WINS database, the browse
#	database and other important run-time files are stored in
#	FHS-compliant directories. The following code takes care of
#	moving the files in the old directories (/var/samba/ and
#	/var/state/samba) to the new FHS-compliant directories.

if [ -d /var/samba/ ]; then
	mv /var/samba/* /var/lib/samba/ 2>/dev/null || true
	rmdir /var/samba/
fi

# Default for anything we don't know about (see next two 'for' loops)
#	is /var/lib/samba -- guaranteed not to accidentally tromp on any 
#	files the admin thought were safe.
if [ -d /var/state/samba ]; then
	mv /var/state/samba/* /var/lib/samba/ 2>/dev/null || true
	rmdir /var/state/samba/

	# It's not FHS, and it's probably our fault this is here,
	# so delete it if we can.
	rmdir /var/state/ 2> /dev/null || true
fi

# All these files are now placed in their respective FHS-compliant
#	directories.  Separate out the individual files accordingly.
for F in browse.dat printing.tdb winbindd_cache.tdb
do
	if [ -e /var/lib/samba/"$F" ]; then
		mv /var/lib/samba/"$F" /var/cache/samba/
	fi
done

for F in brlock.tdb connections.tdb locking.tdb messages.tdb nmbd.pid \
         sessionid.tdb smbd.pid unexpected.tdb 
do
	if [ -e /var/lib/samba/"$F" ]; then
		mv /var/lib/samba/"$F" /var/run/samba/
	fi
done

# Beginning with Samba 2.2.5-1, we also move the domain secrets file
# to a more suitable location, since no one really edits this by hand.
if [ -e /etc/samba/secrets.tdb -a ! -e /var/lib/samba/secrets.tdb ]
then
	mv /etc/samba/secrets.tdb /var/lib/samba/
fi

# If upgrading from a previous 2.999 snapshot, move the passdb.tdb
# database into /var/lib.

if [ -n "$2" ] && dpkg --compare-versions "$2" lt 2.999+3.0.alpha23-5 \
   && [ -e /etc/samba/passdb.tdb -a ! -e /var/lib/samba/passdb.tdb ]
then
	mv /etc/samba/passdb.tdb /var/lib/samba/
fi

# --- End of FHS migration code ---

# If upgrading from a previous 2.999 snapshot, clear the broken
# registry.tdb file.
if [ -n "$2" ] && dpkg --compare-versions "$2" gt 2.99.cvs.20020713-1 \
   && dpkg --compare-versions "$2" lt 2.999+3.0cvs20020805-1
then
	rm -f /var/lib/samba/registry.tdb
fi

# ------------------------- Debconf questions start ---------------------

# Run Samba as daemons or from inetd?
db_get samba/run_mode || true
RUN_MODE="${RET}"

TMPFILE=/etc/default/samba.dpkg-tmp
sed -e "s/^[[:space:]]*RUN_MODE[[:space:]]*=.*/RUN_MODE=\"${RUN_MODE}\"/" \
        < ${INITCONFFILE} >${TMPFILE}
chmod a+r ${TMPFILE}
mv -f ${TMPFILE} ${INITCONFFILE}

# Generate a smbpasswd file?
db_get samba/generate_smbpasswd || true
GENERATE_SMBPASSWD="${RET}"

db_get samba/tdbsam || true
PDB_MIGRATE="${RET}"

# Done with debconf now.
db_stop

umask 066

# FIXME: disable if ldapsam support is enabled?
# FIXME: we don't want to pass these through the smbpasswd backend,
# some of the faking can cause us problems!
if [ "${GENERATE_SMBPASSWD}" = "true" -a ! -e /var/lib/samba/passdb.tdb -a ! -e /etc/samba/smbpasswd ]; then
	getent passwd | /usr/sbin/mksmbpasswd > /etc/samba/smbpasswd
	pdbedit -i smbpasswd -e tdbsam
	rm /etc/samba/smbpasswd
fi

umask 022

if [ -n "$2" -a -e /etc/samba/smbpasswd \
     -a ! -e /var/lib/samba/passdb.tdb -a "$PDB_MIGRATE" = "true" ] \
   && dpkg --compare-versions "$2" lt 2.99.cvs.20020713-2
then
	umask 066
	pdbedit -i smbpasswd -e tdbsam
	rm /etc/samba/smbpasswd
	umask 022

	# The database has been moved, now make sure we can still find it.
	PASSDB=`sed -n -e"s/^[[:space:]]*\[global\]/\[global\]/i
			/^\[global\]/,/^[[:space:]]*\[/ \
				s/^[[:space:]]*passdb backend[[:space:]]*=[[:space:]]*//pi" \
			< /etc/samba/smb.conf \
	 | tail -1`
	if echo "$PASSDB" | egrep -q "(^|[[:space:]])smbpasswd"; then
		if ! echo "$PASSDB" | egrep -q "(^|[[:space:]])tdbsam"; then
			PASSDB=`echo $PASSDB | sed -e's/\(^\|[[:space:]]\)smbpasswd/\1tdbsam/'`
		fi
	fi
	if ! echo "$PASSDB" | egrep -q "(^|[[:space:]])tdbsam"; then
		PASSDB="tdbsam $PASSDB"
	fi
	TMPFILE=/etc/samba/smb.conf.dpkg-tmp
	sed -e "s/^\([[:space:]]*\)\[global\]/\1\[global\]/i
		/^[[:space:]]*\[global\]/,/^[[:space:]]*\[/ \
			s/^\([[:space:]]*\)passdb backend[[:space:]]*=.*/\1passdb backend = ${PASSDB}/i" \
		< /etc/samba/smb.conf >${TMPFILE}
	chmod a+r ${TMPFILE}
	mv -f ${TMPFILE} /etc/samba/smb.conf
fi

# ------------------------- Debconf questions end ---------------------

# Handle removal of nmbd from inetd.conf, which is no longer a supported
#	configuration.
if dpkg --compare-versions "$2" lt 2.999+3.0.alpha20-4; then
	update-inetd --remove netbios-ns
fi

# We always run /etc/init.d/samba, even if we run Samba from inetd.
#	The init.d script takes care of handling the conflict of running
#	from inetd or as daemons.
update-rc.d samba defaults 20 19 > /dev/null

# We want to add these entries to inetd.conf commented out. Otherwise
#	UDP traffic could make inetd to start nmbd or smbd right during
#	the configuration stage.
if [ -z "$2" ]; then
	update-inetd --add "#<off># netbios-ssn	stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/smbd"
fi

if [ "$RUN_MODE" = "daemons" ]; then
	update-inetd --disable netbios-ssn
else
	update-inetd --enable netbios-ssn
fi

# Start Samba: we don't want to call /etc/init.d/samba if we are
# running from inetd because a nasty help message would be printed out.

# Run the init script if this is a first-time install, or if it's an
# upgrade and Samba was running before, _and_ we're not running from inetd.
if [ -z "$2" -o ! -f /tmp/samba-was-not-running ]; then
	# Check the script is executable before running it.
	[ -x /etc/init.d/samba ] && /etc/init.d/samba start
fi

# This check is a safety net: the /etc/samba/smbpasswd file must have
#	permissions 600.
if [ -f /etc/samba/smbpasswd ]; then
	chmod 600 /etc/samba/smbpasswd
fi

# Do the same check for /var/backup/smbpasswd.bak, just in case.
if [ -f /var/backups/smbpasswd.bak ]; then
	chmod 600 /var/backups/smbpasswd.bak
fi

# Delete old /etc/samba/debian_config file, which is not used anymore
#	now that we are using debconf.
rm -f /etc/samba/debian_config

# Move old log files to the new location of Samba's log files
mv -f /var/log/nmb* /var/log/samba/ 2> /dev/null || true
mv -f /var/log/smb* /var/log/samba/ 2> /dev/null || true

# Do this last, so we don't accidentally start the daemons if something 
# else in the script fails above.
rm -f /tmp/samba-was-not-running

#DEBHELPER#

exit 0