summaryrefslogtreecommitdiffstats
path: root/debian/samba-common.postinst
blob: 26031e1820ba9cb0ef1abd42238a7a02d9b80d6c (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
#!/bin/sh
#
#

set -e

# Do debconf stuff here
. /usr/share/debconf/confmodule

TEMPDIR=/run/samba/upgrades
NEWFILE=$TEMPDIR/smb.conf
CONFIG=/etc/samba/smb.conf

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

configure_smb_conf() {
	local CONFIG
	CONFIG="$1"

	# Is the user configuring with debconf, or he/she prefers manual config?
	db_get samba-common/do_debconf || true
	if [ "${RET}" != "true" ]; then
		return 0
	fi

	# Get workgroup name
	db_get samba-common/workgroup || true
	WORKGROUP="${RET}"

	# Oh my GOD, this is ugly.  Why would anyone put these
	# characters in a workgroup name?  Why, Lord, why???
	WORKGROUP=`echo $WORKGROUP | \
	           sed -e's/\\\\/\\\\\\\\/g
	                  s#/#\\\\/#g
	                  s/&/\\\&/g
	                  s/\\\$/\\\\\\\$/g'`

	sed -i -e "s/^\([[:space:]]*\)\[global\]/\1\[global\]/i
		/^[[:space:]]*\[global\]/,/^[[:space:]]*\[/ \
			s/^\([[:space:]]*\)workgroup[[:space:]]*=.*/\1workgroup = ${WORKGROUP}/i" \
		"$CONFIG"

	# Install DHCP support
	db_get samba-common/dhcp
	if [ "$RET" = true ] && \
	   ! grep -q dhcp.conf "$CONFIG"
	then
		sed -i -e "s/^\([[:space:]]*\)\[global\]/\1\[global\]/i
			/^[[:space:]]*\[global\]/,/^[[:space:]]*\[/ {
				/wins server[[:space:]]*=/a \\
\\
# If we receive WINS server info from DHCP, override the options above. \\
   include = /var/lib/samba/dhcp.conf
}" "$CONFIG"
		# Ensure the file exists
		touch /var/lib/samba/dhcp.conf
	elif [ "$RET" != true ]; then
		sed -i -e '
		/^#[[:space:]]*If we receive WINS server info from DHCP, override the options above/d
		/^#*[[:space:]]*include[[:space:]]*=[[:space:]]*\/var\/lib\/samba\/dhcp.conf/,/[^[:space:]]/ {
			/^#*[[:space:]]*include[[:space:]]*=[[:space:]]*\/var\/lib\/samba\/dhcp.conf/d
			/^[[:space:]]*$/d
		}' "$CONFIG"
	fi

}

if [ "$1" = configure ]; then
    if dpkg --compare-versions "$2" lt-nl 2:4.8.0+dfsg-3~; then
        # Move dhcp.conf out of /etc (https://bugs.debian.org/695362)
        if [ -f /etc/samba/dhcp.conf ]; then
            mv /etc/samba/dhcp.conf /var/lib/samba/dhcp.conf
        fi
        sed -i -e 's/^\([#[:space:]]*include[[:space:]]*=[[:space:]]*\)\/etc\/samba\/dhcp.conf\([[:space:]]*\)$/\1\/var\/lib\/samba\/dhcp.conf\2/
        ' "$CONFIG"
    fi

    if ! dpkg-statoverride --list /var/log/samba >/dev/null; then
        # Set some reasonable default perms for the samba logdir
        # to hide sensitive information
        chmod 0750 /var/log/samba
        chown root:adm /var/log/samba
    fi
fi


if [ -e "$CONFIG" ]; then
	configure_smb_conf "$CONFIG"
fi

mkdir -p "$TEMPDIR"

cp /usr/share/samba/smb.conf "$NEWFILE"
configure_smb_conf "$NEWFILE"

if [ -e "$CONFIG" ]; then
	sed -e '1,/^[;#[:space:]]*\[print\$\]/ { d }
		1,/^[[:space:]]*\[/ { /^[^[]/d; /^$/d }
	' "$CONFIG" >> "$NEWFILE"
fi

ucf --three-way --debconf-ok "$NEWFILE" "$CONFIG"

if [ ! -e "$CONFIG" ]; then
	echo "Install/upgrade will fail. To recover, please try:"
	echo " sudo cp /usr/share/samba/smb.conf $CONFIG"
	echo " sudo dpkg --configure -a"
else
	ucfr samba-common "$CONFIG"
	chmod a+r "$CONFIG"
fi

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

db_stop

#DEBHELPER#