#!/bin/sh
# Begin /bin/hostname

print_usage() {
    echo "$0 - prints or sets the system hostname."
    echo ""
    echo "Arguments:"
    echo "    -h | --host | --hostname      prints (or sets) the system host name"
    echo "    -f | --fqdn                   prints (or sets) the fully qualified"
    echo "                                  domain name"
    echo "    -d | --domain | --domainname  prints (or sets) the system domain name"
    echo ""
    echo "" 
    echo "Example: $0 -f host.example.com"
}

check_extra_args() {
    if test $( echo "$1" | grep "^-" )
    then
        print_usage
        echo ""
        echo -n "Error:  incorrect argument:"
        echo " '$1'."
        echo ""
        exit 1
    fi

    if test "$2" != ""
    then
        print_usage
        echo ""
        echo -n "Error:  too many arugments:"
        shift 1
        echo " ${@}."
        echo ""
        exit 1
    fi
}

mod_hostname() {
    check_extra_args $@
    # See if we are dealing with an FQDN
    if test $( echo "$1" | grep '\.' )
    then
        mod_fqdn $1
    fi

    if test "$1" != ""
    then
        /sbin/sysctl -q -w kernel.hostname="$1"
    else
        /sbin/sysctl -n kernel.hostname
    fi
    exit 0
}

mod_fqdn() {
    check_extra_args $@
    
    if test "$1" != ""
    then
        if test ! $( echo "$1" | grep '\.' )
        then
            # This is not a dot separated name
            print_usage
            echo ""
            echo "Error:  You must provide a fully qulified name."
            echo ""
            exit 1
        fi
    
        HN=$(echo "$1" | sed 's/\./\n/' | grep -m1 .)
        DN=$(echo "$1" | sed "s/$HN\.//")
        /sbin/sysctl -q -w kernel.hostname="$HN"
        /sbin/sysctl -q -w kernel.domainname="$DN"
    else
        HN="$(/sbin/sysctl -n kernel.hostname)"
        DN="$(/sbin/sysctl -n kernel.domainname)"
        echo "$HN.$DN"
    fi
        # 
    exit 0
}

mod_domainname() {
    check_extra_args $@
    if test "$1" != ""
    then
        /sbin/sysctl -q -w kernel.domainname="$1"
    else
        /sbin/sysctl -n kernel.domainname
    fi
    exit 0
}

# Parse arguements
while test "$1" != ""
do
    case $1 in

        -help|--help|-\?)
            print_usage
            exit 0
        ;;

        -d|--domain|--domainname)
            shift 1
            mod_domainname $@
        ;;

        -f|--fqdn)
            shift 1
            mod_fqdn $@
        ;;

        -h|--host|--hostname)
            shift 1
            mod_hostname $@
        ;;

        -*)
            # This is an invalid arguemnt
            print_usage
            echo ""
            echo -n "Error:  incorrect argument:"
            echo " '$1'."
            echo ""
            exit 1
        ;;
            
        *)
            # Anything else could be a hostname
            # error checking is done in mod_hostname
            mod_hostname $@
        ;;

    esac

done

# If we got here, then no arugments were passed
mod_hostname $@
exit 0

# End /bin/hostname
