#!/bin/bash
# 
# This script is used for Administration of RSBAC RC Type entries
#
# Author and (c) 1999-2006 Amon Ott
#
# Last changed on 13/Jan/2006
#
# Make sure we're really running bash.
#
[ -z "$BASH" ] && { echo "This menu requires bash" 1>&2; exit 1; }

#
# Cache function definitions, turn off posix compliance
#
set -h +o posix

ITEMS="type_fd_name type_dev_name type_user_name type_process_name \
       type_ipc_name type_group_name type_netdev_name type_nettemp_name \
       type_netobj_name type_fd_need_secdel"

# Set conf filename
RSBACCONF=/etc/rsbac.conf
# Read settings
if test -f $RSBACCONF
then . $RSBACCONF
fi
if test -f ~/.rsbacrc
then . ~/.rsbacrc
fi
if test -z "$RSBACMOD"
then RSBACMOD='GEN MAC FC SIM PM DAZ FF RC AUTH ACL CAP JAIL RES PAX'
fi
for i in $RSBACMOD
do
  export SHOW_${i}=yes
done

# The dir for tmp files
if test -z "$TMPDIR" ; then TMPDIR=/tmp ; fi

# This must be a unique temporary filename
if ! TMPFILE=`mktemp -q $TMPDIR/rsbac_dialog.XXXXXX`
then
  TMPFILE=$TMPDIR/rsbac_dialog.$$
  if test -e $TMPFILE
  then rm $TMPFILE
  fi
fi
if ! TMPFILETWO=`mktemp -q $TMPDIR/rsbac_dialog.XXXXXX`
then
  TMPFILETWO=$TMPDIR/rsbac_dialog.$$.2
  if test -e $TMPFILETWO
  then rm $TMPFILETWO
  fi
fi

# set this to rsbac bin dir, if not in path (trailing / is mandatory!)
#
#if test -z "$RSBACPATH" ; then RSBACPATH=./ ; fi

# set this to initial dir on script startup
LASTDIR='.'

# which dialog tool to use - dialog or kdialog or xdialog...
if test -z $DIALOG
then DIALOG=${RSBACPATH}dialog
fi
if ! $DIALOG --clear
then
  echo $DIALOG menu program required! >&2
  exit
fi
if ! $DIALOG --help 2>&1 | grep -q "help-button"
then
  echo "Newer dialog menu version >= 0.9a-20020309a with '--help-button' option" >&2
  echo "required, please use dialog from admin tools contrib dir or set" >&2
  echo "\$DIALOG to another dialog program, e.g. with rsbac_settings_menu!" >&2
  exit
fi

set_geometry ()
{
        BL=${1:-24}
        BC=${2:-80}
        [ $BL = 0 ] && BL=24
        [ $BC = 0 ] && BC=80
        export LINES=$BL
        export COLUMNS=$BC
        BL=$((BL-4))
        BC=$((BC-5))
        MAXLINES=$((LINES-10))
}

set_geometry `stty size 2>/dev/null`

gl ()
{
        if test $1 -gt $MAXLINES
        then echo $MAXLINES
        else echo $1
        fi
}

if test -z "$LINES" ; then declare -i LINES=25 ; fi
if test -z "$COLUMNS" ; then declare -i COLUMNS=80 ; fi
export LINES
export COLUMNS
declare -i BL=$LINES-4
declare -i BC=$COLUMNS-4
declare -i MAXLINES=$LINES-10

if test -z "$BACKTITLE"
then BACKTITLE="RSBAC Administration Tools 1.3.6"
fi
TITLE="`whoami`@`hostname`: RSBAC RC Type Administration"
HELPTITLE="$TITLE Help"
ERRTITLE="RSBAC RC Type Administration - ERROR"

show_help () {
 {
  echo "$1"
  echo ""
  case "$1" in
      FD)
        echo "Filesystem Objects."
        ;;
      FDSD)
        echo "Secure Delete setting for FILE objects."
        ;;
      DEV)
        echo "Device objects."
        ;;
      USER)
        echo "User objects."
        ;;
      PROCESS)
        echo "Process objects."
        ;;
      IPC)
        echo "Inter Process Communication objects: Shared Memory, Messages,"
        echo "Semaphores."
        ;;
      SCD)
        echo "System Control Data objects: system wide objects."
        ;;
      GROUP)
        echo "Linux group objects."
        ;;
      NETDEV)
        echo "Network device objects."
        ;;
      NETTEMP)
        echo "Network template objects."
        ;;
      NETOBJ)
        echo "Network objects."
        ;;
    Quit)
        echo "Quit this menu."
      ;;

    *)
        echo "No help for $1 available!"
  esac
 } > $TMPFILE
  $DIALOG --title "$HELPTITLE" \
          --backtitle "$BACKTITLE" \
          --textbox $TMPFILE $BL $BC
#  sleep 1
}

onoff () {
   if test "$1" = "$2"
     then echo on
   else echo off
   fi
}

onoffi () {
   if test $1 -eq $2
     then echo on
   else echo off
   fi
}

onoffb () {
   if test "$1" = "1"
     then echo on
   else echo off
   fi
}

gen_type_list () {
        case $1 in
           FD)
             ${RSBACPATH}rc_get_item list_fd_types
             ;;
           FDSD)
             for i in `${RSBACPATH}rc_get_item list_fd_type_nr`
             do
               echo -n $i ""
               onoffb `${RSBACPATH}rc_get_item TYPE $i type_fd_need_secdel`
             done
             ;;
           DEV)
             ${RSBACPATH}rc_get_item list_dev_types
             ;;
           USER)
             ${RSBACPATH}rc_get_item list_user_types
             ;;
           PROCESS)
             ${RSBACPATH}rc_get_item list_process_types
             ;;
           IPC)
             ${RSBACPATH}rc_get_item list_ipc_types
             ;;
           SCD)
             ${RSBACPATH}rc_get_item list_scd_types
             ;;
           GROUP)
             ${RSBACPATH}rc_get_item list_group_types
             ;;
           NETDEV)
             ${RSBACPATH}rc_get_item list_netdev_types
             ;;
           NETTEMP)
             ${RSBACPATH}rc_get_item list_nettemp_types
             ;;
           NETOBJ)
             ${RSBACPATH}rc_get_item list_netobj_types
             ;;
           *)
             ;;
        esac
}

get_target_name () {
  case $1 in
      FD)
        echo File/Dir type name
        ;;
      FDSD)
        echo File/Dir secure delete
        ;;
      DEV)
        echo Device type name
        ;;
      USER)
        echo User type name
        ;;
      PROCESS)
        echo Process type name
        ;;
      IPC)
        echo IPC type name
        ;;
      SCD)
        echo "SCD type name (read only)"
        ;;
      GROUP)
        echo Linux Group type name
        ;;
      NETDEV)
        echo NETDEV type name
        ;;
      NETTEMP)
        echo NETTEMP type name
        ;;
      NETOBJ)
        echo NETOBJ type name
        ;;
      *)
        echo " "
        ;;
  esac
}

item_name () {
  case $1 in
      FD)
        echo type_fd_name
        ;;
      FDSD)
        echo type_fd_need_secdel
        ;;
      DEV)
        echo type_dev_name
        ;;
      USER)
        echo type_user_name
        ;;
      PROCESS)
        echo type_process_name
        ;;
      IPC)
        echo type_ipc_name
        ;;
      SCD)
        echo type_scd_name
        ;;
      GROUP)
        echo type_group_name
        ;;
      NETDEV)
        echo type_netdev_name
        ;;
      NETTEMP)
        echo type_nettemp_name
        ;;
      NETOBJ)
        echo type_netobj_name
        ;;
      *)
        echo " "
        ;;
  esac
}

rm_item_name () {
  case $1 in
      FD)
        echo type_fd_remove
        ;;
      FDSD)
        echo type_fd_need_secdel
        ;;
      DEV)
        echo type_dev_remove
        ;;
      USER)
        echo type_user_remove
        ;;
      PROCESS)
        echo type_process_remove
        ;;
      IPC)
        echo type_ipc_remove
        ;;
      SCD)
        echo type_scd_remove
        ;;
      GROUP)
        echo type_group_remove
        ;;
      NETDEV)
        echo type_netdev_remove
        ;;
      NETTEMP)
        echo type_nettemp_remove
        ;;
      NETOBJ)
        echo type_netobj_remove
        ;;
      *)
        echo " "
        ;;
  esac
}

unused_type () {
  case $1 in
      FD)
        ${RSBACPATH}rc_get_item list_unused_fd_type_nr
        ;;
      FDSD)
        ${RSBACPATH}rc_get_item list_unused_fd_type_nr
        ;;
      DEV)
        ${RSBACPATH}rc_get_item list_unused_dev_type_nr
        ;;
      USER)
        ${RSBACPATH}rc_get_item list_unused_user_type_nr
        ;;
      PROCESS)
        ${RSBACPATH}rc_get_item list_unused_process_type_nr
        ;;
      IPC)
        ${RSBACPATH}rc_get_item list_unused_ipc_type_nr
        ;;
      GROUP)
        ${RSBACPATH}rc_get_item list_unused_group_type_nr
        ;;
      NETDEV)
        ${RSBACPATH}rc_get_item list_unused_netdev_type_nr
        ;;
      NETTEMP)
        ${RSBACPATH}rc_get_item list_unused_nettemp_type_nr
        ;;
      NETOBJ)
        ${RSBACPATH}rc_get_item list_unused_netobj_type_nr
        ;;
      *)
        echo " "
        ;;
  esac
}

choose_target () {
    TARGETTMP=$TARGET
    while $DIALOG --title "$TITLE" \
              --backtitle "$BACKTITLE" \
              --help-button --default-item "$TARGETTMP" \
              --menu "$1" $BL $BC 11 \
              FD "`get_target_name FD`" \
              FDSD "`get_target_name FDSD`" \
              DEV "`get_target_name DEV`" \
              USER "`get_target_name USER`" \
              PROCESS "`get_target_name PROCESS`" \
              IPC "`get_target_name IPC`" \
              SCD "`get_target_name SCD`" \
              GROUP "`get_target_name GROUP`" \
              NETDEV "`get_target_name NETDEV`" \
              NETTEMP "`get_target_name NETTEMP`" \
              NETOBJ "`get_target_name NETOBJ`" \
           2>$TMPFILE
    do
      TARGETTMP=`cat $TMPFILE`
      case $TARGETTMP in
        HELP*)
            show_help "${TARGETTMP:5}"
            TARGETTMP="${TARGETTMP:5}"
          ;;
        *)
          return
      esac
    done
    rm $TMPFILE
}

if test -n "$RSBACLOGFILE"
then
  {
    echo ""
    echo "# $0 start `date`"
  } >>"$RSBACLOGFILE"
fi

case $1 in
    FD | FDSD | DEV | USER | PROCESS | IPC | SCD | GROUP | NETDEV | NETTEMP | NETOBJ)
      TARGET=$1
      ;;
    *)
      choose_target "Startup: Choose initial type target" ""
      if test -f $TMPFILE
      then TARGET=`cat $TMPFILE`
      fi
esac

while true ; do \
  if ! \
    $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --help-button --default-item "$TYPE" \
           --menu "Main Menu" $BL $BC $MAXLINES \
                  "Choose Type Target:" "$TARGET / `get_target_name $TARGET`" \
                  "New Type" ""\
                  "Delete Type" ""\
                  "Copy Complete Type" ""\
                  "Copy Rights to Type" ""\
                  "-------------------" ""\
                  `gen_type_list $TARGET` \
                  "-------------------" ""\
                  "Quit" "" \
         2>$TMPFILE
  then rm $TMPFILE ; exit
  fi

  TYPE="`cat $TMPFILE`"
  case "$TYPE" in
    HELP*)
      show_help "${TYPE:5}"
      TYPE="${TYPE:5}"
      ;;
    "Choose Type Target:")
      choose_target "Choose target" $TARGET
      if test -f $TMPFILE
      then TARGET=`cat $TMPFILE`
      fi
      ;;

    "New Type")
      if test -z "$TARGET"
      then  $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "New Type: target is invalid!" 5 $BC
            continue
      fi
      if test "$TARGET" = "FDSD"
      then TMPTGT=FD
      else TMPTGT=$TARGET
      fi
      if ! \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --inputbox "Enter type number to add" 8 $BC \
                  `unused_type $TARGET` \
            2>$TMPFILE
      then rm $TMPFILE ; continue
      fi
      TMP=`cat $TMPFILE`
      if test -n "`${RSBACPATH}rc_get_item TYPE $TMP \`item_name $TMPTGT\``"
      then continue
      fi
      if $RSBACPATH""rc_set_item TYPE $TMP `item_name $TMPTGT` "$TMP" &>$TMPFILE
      then
        if test -n "$RSBACLOGFILE"
        then
          echo $RSBACPATH""rc_set_item TYPE $TMP `item_name $TMPTGT` \"$TMP\" >>"$RSBACLOGFILE"
        fi
        TYPE=$TMP
      else
        $DIALOG --title "$ERRTITLE" \
               --backtitle "$BACKTITLE" \
               --msgbox "`head $TMPFILE`" $BL $BC
      fi
      ;;

    "Delete Type")
      if test -z "$TARGET"
      then  $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "Delete Type: target is invalid!" 5 $BC
            continue
      fi
      if test "$TARGET" = "FDSD"
      then TMPTGT=FD
      else TMPTGT=$TARGET
      fi
      TMP=$TYPE
      while \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --default-item "$TMP" \
           --menu "Choose type to delete" $BL $BC $MAXLINES \
                  `gen_type_list $TMPTGT` \
            2>$TMPFILE
      do
        TMP=`cat $TMPFILE`
        OLDNAME="`${RSBACPATH}rc_get_item TYPE $TMP \`item_name $TMPTGT\``"
        if test -n "$OLDNAME"
        then
          if ! $DIALOG --title "$TITLE" \
                       --backtitle "$BACKTITLE" --defaultno \
                       --yesno "Delete $TMPTGT type $TMP ($OLDNAME) with all rights to it?" $BL $BC \
                  2>/dev/null
          then continue
          fi

          if ${RSBACPATH}rc_set_item TYPE $TMP `rm_item_name $TMPTGT` &>$TMPFILE
          then
            if test -n "$RSBACLOGFILE"
            then
              echo $RSBACPATH""rc_set_item TYPE $TMP `rm_item_name $TMPTGT` >>"$RSBACLOGFILE"
            fi
            break
          else
            $DIALOG --title "$ERRTITLE" \
                    --backtitle "$BACKTITLE" \
                    --textbox $TMPFILE $BL $BC
          fi
        fi
      done
      ;;

    "Copy Complete Type")
      if test -z "$TARGET"
      then  $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "Copy Complete Type: target is invalid!" 5 $BC
            continue
      fi
      if test "$TARGET" = "FDSD"
      then TMPTGT=FD
      else TMPTGT=$TARGET
      fi
      if ! \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --default-item "$TYPE" \
           --menu "Choose type to copy from" $BL $BC $MAXLINES \
                  `gen_type_list $TMPTGT` \
            2>$TMPFILE
      then rm $TMPFILE ; continue
      fi
      TMP=`cat $TMPFILE`
      UNUSED="`rc_get_item list_unused_role_nr`"
      if ! \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --menu "Type $TMP: Choose type to copy to" $BL $BC $MAXLINES \
                  `gen_type_list $TMPTGT` \
	          "$UNUSED" "(unused)" \
                  "Enter" "(type-in)" \
            2>$TMPFILE
      then rm $TMPFILE ; continue
      fi
      TMP2=`cat $TMPFILE`
      if test "$TMP2" = "Enter"
      then
        if $DIALOG --title "$TITLE" \
                   --backtitle "$BACKTITLE" \
                   --inputbox "Enter type number as copy target" $BL $BC "$UNUSED" \
          2>$TMPFILE
        then TMP2=`cat $TMPFILE`
        else
          continue
        fi
      fi
      if $DIALOG --title "$TITLE" \
                --backtitle "$BACKTITLE" --defaultno \
                --yesno "Copy $TMPTGT type $TMP ($(${RSBACPATH}rc_get_item TYPE $TMP $(item_name $TMPTGT))) to $TMP2 ($(${RSBACPATH}rc_get_item TYPE $TMP2 $(item_name $TMPTGT)))?" $BL $BC \
         2>/dev/null
      then
        if $RSBACPATH""rc_copy_type $TMPTGT $TMP $TMP2 &>$TMPFILE
        then
          if test -n "$RSBACLOGFILE"
          then
            echo $RSBACPATH""rc_copy_type $TMPTGT $TMP $TMP2 >>"$RSBACLOGFILE"
          fi
        else
          $DIALOG --title "$ERRTITLE" \
                 --backtitle "$BACKTITLE" \
                 --textbox $TMPFILE $BL $BC
        fi
      fi
      ;;

    "Copy Rights to Type")
      if test -z "$TARGET"
      then  $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "Copy Rights to this Type: target is invalid!" 5 $BC
            continue
      fi
      if test "$TARGET" = "FDSD"
      then TMPTGT=FD
      else TMPTGT=$TARGET
      fi
      if ! \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --default-item "$TYPE" \
           --menu "Choose type to copy rights from" $BL $BC $MAXLINES \
                  `gen_type_list $TMPTGT` \
            2>$TMPFILE
      then rm $TMPFILE ; continue
      fi
      TMP=`cat $TMPFILE`
      if ! \
      $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --menu "Type $TMP: Choose type to copy rights to" $BL $BC $MAXLINES \
                  `gen_type_list $TMPTGT` \
            2>$TMPFILE
      then rm $TMPFILE ; continue
      fi
      TMP2=`cat $TMPFILE`
      if $DIALOG --title "$TITLE" \
                --backtitle "$BACKTITLE" --defaultno \
                --yesno "Copy rights to $TMPTGT type $TMP ($(${RSBACPATH}rc_get_item TYPE $TMP $(item_name $TMPTGT))) to $TMP2 ($(${RSBACPATH}rc_get_item TYPE $TMP2 $(item_name $TMPTGT)))?" $BL $BC \
         2>/dev/null
      then
        if $RSBACPATH""rc_set_item -c TYPE $TMP2 `item_name $TMPTGT` $TMP &>$TMPFILE
        then
          if test -n "$RSBACLOGFILE"
          then
            echo $RSBACPATH""rc_set_item -c TYPE $TMP2 `item_name $TMPTGT` $TMP >>"$RSBACLOGFILE"
          fi
        else
          $DIALOG --title "$ERRTITLE" \
                 --backtitle "$BACKTITLE" \
                 --textbox $TMPFILE $BL $BC
        fi
      fi
      ;;

    Quit)
      rm $TMPFILE ; exit
      ;;

    "---------------")
      $DIALOG --title "$ERRTITLE" \
             --backtitle "$BACKTITLE" \
             --msgbox "Main Menu: Selection Error!" 5 $BC
      ;;

    *)
        case $TARGET in
          FD)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for FD Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_fd_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_fd_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_fd_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          FDSD)
            if test "`${RSBACPATH}rc_get_item TYPE $TYPE type_fd_need_secdel`" = "1"
            then TMPVAL=0
            else TMPVAL=1
            fi
            if $RSBACPATH""rc_set_item TYPE $TYPE type_fd_need_secdel $TMPVAL &>$TMPFILE
            then
              if test -n "$RSBACLOGFILE"
              then
                echo $RSBACPATH""rc_set_item TYPE $TYPE type_fd_need_secdel $TMPVAL >>"$RSBACLOGFILE"
              fi
            else
              $DIALOG --title "$ERRTITLE" \
                     --backtitle "$BACKTITLE" \
                     --msgbox "`head -n 1 $TMPFILE`" $BL $BC
            fi
            ;;
          DEV)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for DEV Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_dev_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_dev_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_dev_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          USER)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for User Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_user_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_user_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_user_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          PROCESS)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for Process Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_process_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_process_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_process_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          IPC)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for IPC Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_ipc_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_ipc_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_ipc_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          GROUP)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for Linux Group Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_group_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_group_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_group_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          NETDEV)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for NETDEV Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_netdev_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_netdev_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_netdev_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          NETTEMP)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for NETTEMP Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_nettemp_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_nettemp_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_nettemp_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          NETOBJ)
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --max-input 15 \
                      --inputbox "Name for NETOBJ Type $TYPE (maxlen = 15)" $BL $BC \
                          "`${RSBACPATH}rc_get_item TYPE $TYPE type_netobj_name`" \
              2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""rc_set_item TYPE $TYPE type_netobj_name "$TMP" &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""rc_set_item TYPE $TYPE type_netobj_name \"$TMP\" >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head $TMPFILE`" $BL $BC
                 fi
            fi
            ;;
          SCD)
            $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "Main Menu: target SCD is read only!" 5 $BC
            ;;
          *)
            $DIALOG --title "$ERRTITLE" \
                   --backtitle "$BACKTITLE" \
                   --msgbox "Main Menu: target is invalid!" 5 $BC
            ;;
        esac
        ;;

  esac
# sleep 2
done
