#! /bin/sh

set -e

# Load debconf.
. /usr/share/debconf/confmodule
db_version 2.0

# Create the standard AFS mount point if it doesn't exist.
test -d /afs || mkdir /afs

# Configure alternatives for pagsh and klog.
update-alternatives --install /usr/bin/pagsh pagsh \
    /usr/bin/pagsh.openafs 100  \
    --slave /usr/share/man/man1/pagsh.1.gz pagsh.1.gz \
    /usr/share/man/man1/pagsh.openafs.1.gz

# Set the local cell.  If ThisCell already exists, the config script will have
# set the debconf database parameter accordingly.
db_get openafs-client/thiscell
THISCELL="$RET"
if [ -n "$THISCELL" ] ; then
    echo "$THISCELL" > /etc/openafs/ThisCell
fi

# On initial installation, or when afsdb is not configured, ensure that we
# have a CellServDB file.
db_get openafs-client/afsdb
afsdb="$RET"
if [ "$afsdb" = 'false' ] || { [ "$1" = 'configure' ] && [ -z "$2" ] ; } ; then
    if [ ! -f /etc/openafs/CellServDB ] ; then
        cp /usr/share/openafs/CellServDB /etc/openafs
    fi
fi

# If ThisCell is not in CellServDB and the user is not using afsdb, we want to
# prompt the user for the VLDB servers.  Unfortunately, we can't do this in
# config because we need the CellServDB file, which is part of the package.
havecell=
if [ -n "$THISCELL" ] ; then
    if grep -qF "$THISCELL" /etc/openafs/CellServDB 2>/dev/null ; then
        havecell=true
    fi
fi
if [ "$afsdb" = 'false' ] && [ -z "$havecell" ] ; then
    db_input critical openafs-client/cell-info || true
    db_input high openafs-client/run-client || true
    db_go
    db_get openafs-client/cell-info
    if [ "x$RET" != "x" ] ; then
        echo ">$THISCELL" > /etc/openafs/CellServDB.new
        perl -MSocket -e 'foreach (@ARGV) {' \
            -e '@a=gethostbyname($_) and ' \
            -e 'printf("%s\t\t# %s\n",inet_ntoa($a[4]),$a[0]) }' $RET \
                >>/etc/openafs/CellServDB.new
        if [ `wc -l </etc/openafs/CellServDB.new` -eq 1 ] ; then
            echo 'None of the hostnames resolved to an address' 2>&1
            db_reset openafs-client/cell-info || true
            rm /etc/openafs/CellServDB.new
        else
            cat /etc/openafs/CellServDB.new /etc/openafs/CellServDB \
                > /etc/openafs/CellServDB.tmp
            mv /etc/openafs/CellServDB.tmp /etc/openafs/CellServDB
            rm /etc/openafs/CellServDB.new
        fi
    fi
fi
                    
# Our config script will have already taken care of extracting the cache size
# from the cacheinfo file and using it as the default for the debconf prompt,
# but the mount point and cache directory have no debconf prompts.  For those,
# we need to get the default from the file.
mountpoint=/afs
cachedir=/var/cache/openafs
if [ -r /etc/openafs/cacheinfo ] ; then
    IFS=: read mountpoint cachedir cachesize < /etc/openafs/cacheinfo
fi
db_get openafs-client/cachesize
echo "${mountpoint}:${cachedir}:${RET}" > /etc/openafs/cacheinfo

# Create the /etc/openafs/afs.conf.client configuration file, which stores
# most of the debconf results.
echo <<'EOF' > /etc/openafs/afs.conf.client
# This file is managed by debconf.  You may change the parameters set below,
# but any additional lines or comments will be lost when the package is
# upgraded or reconfigured.  Local modifications other than setting the
# following parameters should be made in /etc/openafs/afs.conf instead.

EOF
db_get openafs-client/run-client
echo AFS_CLIENT="$RET" > /etc/openafs/afs.conf.client
echo AFS_AFSDB="$afsdb" >> /etc/openafs/afs.conf.client
db_get openafs-client/crypt
echo AFS_CRYPT="$RET" >> /etc/openafs/afs.conf.client
db_get openafs-client/dynroot
echo AFS_DYNROOT="$RET" >> /etc/openafs/afs.conf.client
db_get openafs-client/fakestat
echo AFS_FAKESTAT="$RET" >> /etc/openafs/afs.conf.client

# Prepopulate the systemd EnvironmentFile
/usr/share/openafs/openafs-client-precheck

# Automatically added by dh_systemd_enable
# This will only remove masks created by d-s-h on package removal.
deb-systemd-helper unmask openafs-client.service >/dev/null || true

# was-enabled defaults to true, so new installations run enable.
if deb-systemd-helper --quiet was-enabled openafs-client.service; then
	# Enables the unit on first installation, creates new
	# symlinks on upgrades if the unit file has changed.
	deb-systemd-helper enable openafs-client.service >/dev/null || true
else
	# Update the statefile to add new symlinks (if any), which need to be
	# cleaned up on purge. Also remove old symlinks.
	deb-systemd-helper update-state openafs-client.service >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/openafs-client" ] || [ -e "/etc/init/openafs-client.conf" ]; then
	if [ ! -e "/etc/init/openafs-client.conf" ]; then
		update-rc.d openafs-client defaults >/dev/null
	fi
	invoke-rc.d openafs-client start || exit $?
fi
# End automatically added section


exit 0
