#! /bin/sh

set -e

if [ "$1" = configure ] || [ "$1" = reconfigure ] ; then
    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
    update-alternatives --install /usr/bin/klog klog \
        /usr/bin/klog.afs 10 \
        --slave /usr/share/man/man1/klog.1.gz klog.1.gz \
        /usr/share/man/man1/klog.afs.1.gz

    test -d /afs || mkdir /afs

    . /usr/share/debconf/confmodule
    db_version 2.0

    db_get openafs-client/thiscell
    THISCELL="$RET"
    if [ -n "$THISCELL" ] ; then
        echo "$THISCELL" > /etc/openafs/ThisCell
    fi

    if [ ! -f /etc/openafs/CellServDB ] ; then
        cp /usr/share/openafs/CellServDB /etc/openafs
    fi

    # If ThisCell is not in CellServDB, we have 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.
    #
    # If the user is using afsdb for cell location, don't worry about
    # prompting them for cells for their local system.
    db_get openafs-client/afsdb
    afsdb="$RET"
    if grep -q -F "$THISCELL" /etc/openafs/CellServDB \
           && [ "x$THISCELL" != "x" ] ; then
        :
    elif [ x"$afsdb" != xtrue ] ; 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

    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
fi

#DEBHELPER#

exit 0
