summaryrefslogtreecommitdiff
path: root/packaging/Debian/debian/samba.postinst
blob: 5f42cf4b369b81a3e13cd8d9bacb31df8bb347bc (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
#!/bin/sh
#
# Post-installation script for the Samba package for Debian GNU/Linux
#
# Written by Eloy A. Paris <peloy@debian.org> for the Debian project.
#
# The prerm script (run before the postinst) disables Samba in /etc/inetd.conf
#	and stops both nmbd and smbd. So, when this script is run we
#	know that neither nmbd nor smbd can start.
#

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

# Take care of the /usr/doc/ to /usr/shar/doc/ migration.
if [ -d /usr/doc -a ! -e /usr/doc/samba -a -d /usr/share/doc/samba ]; then
	ln -sf ../share/doc/samba /usr/doc/samba
fi

# Starting with Samba 2.0.7-4 the location of the WINS database, the browse
#	database and other important run-time files are stored in
#	/var/state/samba/ rather than in /var/samba/. The following
#	code takes care of moving the files in the old directory to
#	the new directory.
if [ -d /var/samba/ ]; then
	mv /var/samba/* /var/state/samba/
	rmdir /var/samba/
fi

# Define some constants...
DEBIAN_CONFIG=/etc/samba/debian_config
CONFIG_VERSION=1

# Now some variables...
samba_configured=no


if [ -f $DEBIAN_CONFIG ]; then
	. $DEBIAN_CONFIG
    if [ "$config_version" -ge "$CONFIG_VERSION" ]; then
		samba_configured=yes
	fi
fi

# If Samba is configured we don't want to pester the user with
#	configuration questions, just tell him that he can reconfigure
#	Samba at any time by running /usr/sbin/sambaconfig.
if [ "$samba_configured" = "no" ]; then
	# Samba is not configured, go and ask the user the information needed
	#	to configure it, and configure it!

	# Create Debian specific configuration file
	echo "config_version=$CONFIG_VERSION" > $DEBIAN_CONFIG

	# We always run /etc/init.d/samba, even if we run Samba from inetd.
	#	This script file takes care of handling the conflict of running
	#	from inetd or as daemons.
	update-rc.d samba defaults >/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.
	update-inetd --add "#<off># netbios-ssn	stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/smbd"
	update-inetd --add "#<off># netbios-ns	dgram	udp	wait	root 	/usr/sbin/tcpd	/usr/sbin/nmbd -a"

	echo ""
	echo Samba Configuration
	echo -------------------
	echo "The Samba server may be run either as a daemon at startup, or it may be"
	echo "run from the inetd meta-daemon upon request. If run as a daemon, the"
	echo "server will always be ready, so starting sessions will be faster. If run"
	echo "from the inetd meta-daemon some memory will be saved and utilities such"
	echo "as the tcpd TCP-wrapper may be used for extra security. If you don't"
	echo "know what to do, running from inetd is a safe choice."
	echo ""
	echo "Run Samba as daemons or from inetd?"
	echo -n "Press 'D' to run as daemons or 'I' to run from inetd: [I] "

	read mode
	test -n "$mode" || mode="I"

	case "$mode" in
		[Dd]*)
			echo "Samba will run as daemons. Run sambaconfig to reconfigure"
			update-inetd --disable netbios-ssn
			update-inetd --disable netbios-ns
			echo "run_mode=as_daemons" >> $DEBIAN_CONFIG
		;;

		*)
			echo "Samba will run from inetd. Run sambaconfig to reconfigure"
			update-inetd --enable netbios-ssn
			update-inetd --enable netbios-ns
			echo "run_mode=from_inetd" >> $DEBIAN_CONFIG
		;;
	esac

	if [ ! -f /etc/samba/smbpasswd ]; then
		echo ""
		echo "If you are going to use encrypted passwords you need to have a"
		echo "separate password file for this (the format is different from "
		echo "/etc/passwd). Right now you don't have an /etc/samba/smbpasswd file."
		echo "Do you want to generate this new file from your existing"
		echo -n "/etc/passwd file? [y/N] "

		read yn
		test -n "$yn" || yn="N"

		if [ $yn = y -o $yn = Y ]; then
			cat /etc/passwd | /usr/sbin/mksmbpasswd > /etc/samba/smbpasswd
			chmod 600 /etc/samba/smbpasswd 
			echo ""
			echo "/etc/samba/smbpasswd now has the same user names as /etc/passwd. However,"
			echo "you need to run smbpasswd manually to set the password for each user."
			echo ""
			echo "smbpasswd_created=yes" >> $DEBIAN_CONFIG
		else
			echo "smbpasswd_created=no" >> $DEBIAN_CONFIG
		fi
	fi

	echo ""

	# Start Samba: nothing wrong will happen if Samba is running from inetd
	#	and /etc/init.d/samba is run. However, to simplify things, we
	#	do not run /etc/init.d/samba if we're running from inetd.

	if [ $mode = d -o $mode = D ]; then
		echo -n "Samba will run as daemons - start Samba now? [Y/n] "
		read yn
		test -n "$yn" || yn="Y"

		case "$yn" in
			[Nn]*)
				echo "Not started; to start later, do: /etc/init.d/samba start"
				echo -n "Press [ENTER] "
				read line
			;;

			*)
				/etc/init.d/samba start
			;;
		esac
	else
		echo "Since you are running Samba from inetd, the daemons will start"
		echo "automatically by inetd when there is traffic on the NetBIOS"
		echo "ports."
		echo -n "Press [ENTER] "
		read line
	fi
else	# if (samba_configured) ...
	# We are here because Samba was already configured...

	# At this point the NetBIOS daemons are disabled in /etc/inetd.conf.
	#	This is a consequence of what we did in the prerm. If Samba was
	#	configured to run from inetd we need to enable the entries in
	#	/etc/inetd.conf.

	# Read current Samba configuration
	. $DEBIAN_CONFIG

	if [ "$run_mode" = "from_inetd" ]; then
		update-inetd --enable netbios-ssn
		update-inetd --enable netbios-ns
	fi

	echo ""
	echo "Samba was already installed and configured so I skipped the "
	echo "configuration questions. You can run the script /usr/sbin/sambaconfig"
	echo "at any time to reconfigure Samba. See sambaconfig(8) for more"
	echo "details. I will not even ask you if you want to restart Samba,"
	echo "I will just do it!"
	echo "" 

	/etc/init.d/samba start
fi		# if (samba_configured) ...

if test "$1" = configure && dpkg --compare-versions "$2" lt 2.0.0final-2 && [ -f /etc/samba/smbpasswd ]; then

	cat << EOF

*** IMPORTANT ***

The format of the smbpasswd file (which is used only if you are using
encrypted passwords) is different in Samba 2.0.0 and above. I will
convert it to the new format.

EOF

	mv /etc/samba/smbpasswd /etc/samba/smbpasswd.old
	cat /etc/samba/smbpasswd.old | /usr/bin/convert_smbpasswd \
		> /etc/samba/smbpasswd 2> /dev/null
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

exit 0