#!/bin/bash
#
# chkconfig: 356 96 4
# description: prepare udpconfd

### BEGIN INIT INFO
# Provides: udpconfd
# Required-Start: $network $local_fs $remote_fs omgsetup
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop udpconfd
# Description: prepare udpconfd
### END INIT INFO

lockfile=/var/lock/subsys/udpconfd

echo "$0 start: $(date)" >> /tmp/sequence

# color => new RH6.0 bootup
# verbose => old-style bootup
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
# column to start "[  OK  ]" label in 
RES_COL=60
# terminal sequence to move to that column. You could change this
# to something like "tput hpa ${RES_COL}" if your terminal supports it
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
# terminal sequence to set color to a 'success' color (currently: green)
SETCOLOR_SUCCESS="echo -en \\033[0;32m"
# terminal sequence to set color to a 'failure' color (currently: red)
SETCOLOR_FAILURE="echo -en \\033[0;31m"
# terminal sequence to set color to a 'warning' color (currently: yellow)
SETCOLOR_WARNING="echo -en \\033[0;33m"
# terminal sequence to reset to the default color.
SETCOLOR_NORMAL="echo -en \\033[0;39m"

echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"  OK  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 0
}
echo_failure() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo -n $"FAILED"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

echo_info() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $" INFO "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

echo_warning() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
  echo -n $" WARN "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 1
}

touser () {
    echo "$@"
}
touserOk (){
    echo -n "$@"
        echo_success
        echo
}
touserFail (){
    echo -n "$@"
        echo_failure
        echo
}
touserWarn (){
    echo -n "$@"
        echo_warning
        echo
}
touserInfo (){
    echo -n "$@"
        echo_info
        echo
}


startUdpconfd() {
#
# some functions
#
    export TERM=linux

    . /tmp/cmdline


#start udpconfd as soon as possible
    touserOk "OMG: Start udpconfd"
    mkdir -p /tmp/udpconfd
    DOMAIN="ferrari-electronic.de"
    if [ ! -e /tmp/udpconfd/key.key ]; then 
        cat >/tmp/udpconfd/cert.cnf <<EOL
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
countryName                 = Germany
countryName_default         = de
stateOrProvinceName         = State
stateOrProvinceName_default = Brandenburg
localityName                = City
localityName_default        = Teltow
commonName                  = Common Name
commonName_default          = *.$DOMAIN
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
DNS.2 = *.$DOMAIN
EOL
        openssl genrsa -out /tmp/udpconfd/key.key 4096
        openssl req -new -key /tmp/udpconfd/key.key -out /tmp/udpconfd/cert.csr -config /tmp/udpconfd/cert.cnf -batch
        openssl x509 -req -days 3650 -in /tmp/udpconfd/cert.csr -signkey /tmp/udpconfd/key.key -out /tmp/udpconfd/cert.crt -extensions v3_req -extfile /tmp/udpconfd/cert.cnf
        #openssl req -new -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -in /tmp/udpconfd/cert.csr -out /tmp/udpconfd/cert.crt -keyout /tmp/udpconfd/key.key
    fi    
    udpconfd -c /tmp/udpconfd/cert.crt -k /tmp/udpconfd/key.key -u root eth0 2>&1 | logger -t udpconfd -p local5.notice &

    touserOk "OMG: Started udpconfd"
}


start ()
{
    startUdpconfd
    touch $lockfile
}

stop () {
    killall udpconfd 2>/dev/null >/dev/null
    rm -f $lockfile
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $prog
        ;;
    restart|force-reload)
        stop
        start
        ;;
    try-restart|condrestart)
        if status $prog > /dev/null; then
            stop
            start
        fi
        ;;
    reload)
        exit 3
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
        exit 2
esac
echo "$0 stop: $(date)" >> /tmp/sequence
