#!/bin/sh

CONFDIR="/etc/osec"
CONFIG="$CONFDIR/dirs.conf"
STD='/bin /sbin /lib /lib64 /usr/bin /usr/sbin /usr/lib /usr/lib64 /usr/X11R6/bin /usr/X11R6/lib /usr/games /usr/libexec /usr/share'
BINS='/bin /sbin /usr/bin /usr/sbin'

. /etc/control.d/functions
new_summary "${SUMMARY:-OSEC directory list selector}"
new_help "std" "Standard set of dirs"
new_help "bins" "/bin /sbin /usr/bin /usr/sbin"

check_dirs()
{
    local ref="$1"; shift

    [ "$(grep '^/' "$CONFIG" | sort -u | tr '\n' ' ')"  = \
      "$(echo "$ref" | tr ' ' '\n' | sort -u | tr '\n' ' ')" ]
}

switch_dirs()
{
    local dirset="$1"; shift

    if [ ! -s "$CONFIG" ]; then
        echo "$dirset" | tr ' ' '\n' | sort -u >"$CONFIG"
    else
        sed -i -e "
1 { x; s/^.*\$/${dirset//\//\\/}/; x }
$(for d in $dirset; do
    d=${d//\//\\/};
    echo "/^[#[:space:]]*$d[#[:space:]]*\$/ {
              x;
              s/\\(^\\| \\)$d\\( \\|\$\\)/ /;
              x;
              s/^[#[:space:]]\\+//;
              b end
          }";
done)
/^#/ b end;
s/^.*\$/#&/;
:end \$ {
    x;
    s/[[:space:]]\\+/ /g;
    s/^[[:space:]]//;
    s/[[:space:]]\$//;
    s/^[[:space:]]*\$//;
    s/ /\\n/g;
    /[^[:space:]]/ { x; G; x };
    x
}
" \
        "$CONFIG"
    fi
}

## Main

REQUEST="$*"

case "$REQUEST" in
	help|'help '*)
		control_help "${REQUEST#help}"
		;;
	list)
		control_list
		;;
	summary)
		control_summary
		;;
	status)
        if check_dirs "$STD"; then
            echo 'std'
        elif check_dirs "$BINS"; then
            echo 'bins'
        else
            echo 'custom'
        fi
        ;;
	*)
        case "$REQUEST" in
            std)
                switch_dirs "$STD"
                ;;
            bins)
                switch_dirs "$BINS"
                ;;
            *)
                echo "ERROR: Unknown mode: $REQUEST" >&2
                exit 1
                ;;
        esac
		;;
esac
