#!/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 "## 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