#!/bin/sh
set -e

ensure_file_owner_mode() {
  if [ ! -f "$DPKG_ROOT$1" ]; then
    : > "$DPKG_ROOT$1"
  fi
  chown "$2" "$DPKG_ROOT$1"
  chmod "$3" "$DPKG_ROOT$1"
}

install_local_dir() {
  if [ ! -d "$DPKG_ROOT$1" ]; then
    mkdir -p "$DPKG_ROOT$1"
  fi
  if [ -f "$DPKG_ROOT/etc/staff-group-for-usr-local" ]; then
    chown root:staff "$DPKG_ROOT$1" 2>/dev/null || true
    chmod 2775 "$DPKG_ROOT$1" 2> /dev/null || true
  fi
}

install_from_default() {
  if [ ! -f "$DPKG_ROOT$2" ]; then
    cp -p "$DPKG_ROOT/usr/share/base-files/$1" "$DPKG_ROOT$2"
  fi
}

install_directory() {
  if [ ! -d "$DPKG_ROOT/$1" ]; then
    mkdir "$DPKG_ROOT/$1"
    chown "root:$3" "$DPKG_ROOT/$1"
    chmod "$2" "$DPKG_ROOT/$1"
  fi
}

migrate_directory() {
  if [ ! -L "$DPKG_ROOT$1" ]; then
    rmdir "$DPKG_ROOT$1"
    ln -s "$2" "$DPKG_ROOT$1"
  fi
}

update_to_current_default() {
  if [ -f "$2" ]; then
    md5=$(md5sum "$2" | cut -f 1 -d " ")
    if grep -q "$md5" "/usr/share/base-files/$1.md5sums"; then
      if ! cmp -s "/usr/share/base-files/$1" "$2"; then
        cp -p "/usr/share/base-files/$1" "$2"
        echo Updating $2 to current default.
      fi
    fi
  fi
}

if [ ! -e "$DPKG_ROOT/etc/dpkg/origins/default" ]; then
  if [ -e "$DPKG_ROOT/etc/dpkg/origins/debian" ]; then
    ln -sf debian "$DPKG_ROOT/etc/dpkg/origins/default"
  fi
fi

if [ "$1" = "configure" ] && [ "$2" = "" ]; then
  install_from_default dot.profile   /root/.profile
  install_from_default dot.bashrc    /root/.bashrc
  install_from_default profile       /etc/profile
  install_from_default motd          /etc/motd
  install_directory mnt       755 root
  install_directory srv       755 root
  install_directory opt       755 root
  install_directory etc/opt   755 root
  install_directory var/opt   755 root
  install_directory media     755 root
  install_directory var/mail 2775 mail
  if [ ! -L "$DPKG_ROOT/var/spool/mail" ]; then
    ln -s ../mail "$DPKG_ROOT/var/spool/mail"
  fi
  install_directory run/lock 1777 root
  migrate_directory /var/run /run
  migrate_directory /var/lock /run/lock

  install_local_dir /usr/local
  install_local_dir /usr/local/share
  install_local_dir /usr/local/share/man
  install_local_dir /usr/local/bin
  install_local_dir /usr/local/games
  install_local_dir /usr/local/lib
  install_local_dir /usr/local/include
  install_local_dir /usr/local/sbin
  install_local_dir /usr/local/src
  install_local_dir /usr/local/etc
  ln -sf share/man "$DPKG_ROOT/usr/local/man"

  ensure_file_owner_mode /var/log/wtmp root:utmp 664
  ensure_file_owner_mode /var/log/btmp root:utmp 660
  ensure_file_owner_mode /var/log/lastlog root:utmp 664
fi

if [ -d "$DPKG_ROOT/usr/share/info" ] && [ ! -f "$DPKG_ROOT/usr/info/dir" ] && [ ! -f "$DPKG_ROOT/usr/share/info/dir" ]; then
  install_from_default info.dir /usr/share/info/dir
  chmod 644 $DPKG_ROOT/usr/share/info/dir
fi

if [ "$1" = "configure" ] && [ "$2" != "" ]; then
  update_to_current_default profile       /etc/profile
  update_to_current_default dot.profile   /root/.profile
  if dpkg --compare-versions "$2" lt-nl "7.7"; then
    install_directory mnt 755 root
  fi
fi
