#!/bin/bash
# 
# This script is used for Administration of RSBAC Network Template attributes
#
#
# 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

# not used
ATTRIBUTES="security_level mac_categories object_category data_type \
            pm_object_type pm_ipc_purpose pm_object_class rc_type rc_type_nt \
            log_array_low log_array_high"

# 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 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
  touch $TMPFILE
  chmod 600 $TMPFILE
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='/proc'

# 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 LINES=25 ; fi
if test -z "$COLUMNS" ; then 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 Network Object Administration"
HELPTITLE="$TITLE Help"
ERRTITLE="RSBAC Net Object Administration - ERROR"

## no changes below this line!

TYPE=NETTEMP

show_help () {
  case "$RSBACLANG" in
    DE)
      show_help_german "$1"
      ;;
    RU)
      show_help_russian "$1"
      ;;
    *)
      show_help_english "$1"
      ;;
  esac
}

show_help_english () {
 {
  echo "$1"
  echo ""
  case "$1" in
    Quit)
        echo "Quit this menu."
      ;;

    'NetTemp List:')
      echo "Choose Network Template from list."
      ;;

    "Template number:")
      echo "Enter Network Template number."
      ;;

    'Template Definition:')
      echo "Go to Definition of this Network Template."
      ;;

    'Network Templates:')
      echo "Go to Network Template Definition menu."
      ;;

    'MAC Security Level:')
        echo "Set the MAC model security level."
        echo ""
        $RSBACPATH""attr_get_net -A security_level
      ;;

    'MAC Categories:')
        echo "Set the MAC model categories."
        echo ""
        $RSBACPATH""attr_get_net -A mac_categories
      ;;

    'PM Object Type:')
        echo "Set object type for PM model."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_type
      ;;

    'PM IPC Purpose:')
        echo "Set IPC purpose for PM model."
        echo ""
        $RSBACPATH""attr_get_net -A pm_ipc_purpose
      ;;

    'PM Object Class:')
        echo "Select the PM model object class."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_class
      ;;

    'RC Type:')
        echo "Select the RC model NETOBJ type for this template. This value will be"
        echo "inherited to the network objects."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type
      ;;

    'RC Type NT:')
        echo "Select the RC model NETTEMP type. This value is used for accesses to"
        echo "the Network Template definition."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type_nt
      ;;

    'Log Array Low:' | 'Log Array High:')
        echo "Choose object based logging levels for this object."
        echo ""
        $RSBACPATH""attr_get_net -A log_array_low
      ;;

    'ACL Menu:')
        echo "Go to ACL menu."
      ;;

    'Reset Attributes:')
        echo "Call \'attr_set_net -m\' to get the attribute object for this object"
        echo "removed. As result, all attribute values will be reset to their"
        echo "default values. Use with care!"
      ;;

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

show_help_german () {
 {
  echo "$1"
  echo ""
  case "$1" in
    Quit)
        echo "Beende dieses Men."
      ;;

    'NetTemp List:')
      echo "Whle Netzwerk-Template aus einer Liste."
      ;;

    "Template number:")
      echo "Nummer des Netzwerk-Templates eingeben."
      ;;

    'Template Definition:')
      echo "Gehe zur Definition dieses Netzwerk-Templates."
      ;;

    'Network Templates:')
      echo "Gehe zum Netzwerk-Template-Definitions-Men."
      ;;

    'MAC Security Level:')
        echo "Setze den Sicherheitslevel fr das MAC-Modell."
        echo ""
        $RSBACPATH""attr_get_net -A security_level
      ;;

    'MAC Categories:')
        echo "Whle die Kategorien fr das MAC-Modell."
        echo ""
        $RSBACPATH""attr_get_net -A mac_categories
      ;;

    'PM Object Type:')
        echo "Setze den Objekttyp fr das PM-Modell."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_type
      ;;

    'PM IPC Purpose:')
        echo "Setze den IPC-Zweck fr das PM-Modell."
        echo ""
        $RSBACPATH""attr_get_net -A pm_ipc_purpose
      ;;

    'PM Object Class:')
        echo "Whle die Objekt-Klasse fr das PM-Modell."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_class
      ;;

    'RC Type:')
        echo "Whle den RC-NETOBJ-Typ fr dieses Template. Dieser Wert wird auf"
        echo "die Netzwerk-Objekte vererbt."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type
      ;;

    'RC Type NT:')
        echo "Whle den RC-NETTEMP-Typ fr dieses Template. Dieser Wert wird"
        echo "fr Zugriffe auf die Netzwerk-Template-Definition verwendet."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type_nt
      ;;

    'Log Array Low:' | 'Log Array High:')
        echo 'Whle objektabhngige Logging-Stufen fr dieses Objekt.'
        echo ""
        $RSBACPATH""attr_get_net -A log_array_low
      ;;

    'ACL Menu:')
        echo "Gehe zum ACL-Men."
      ;;

    'Reset Attributes:')
        echo "Rufe \'attr_set_net -m\' auf, um die Attribut-Objekte fr dieses"
        echo "Objekt zu entfernen. Als Ergebnis werden alle Attribute auf ihre"
        echo "Standardwerte zurckgesetzt. Mit Vorsicht verwenden!"
      ;;

    *)
        echo "Keine Hilfe fr $1 verfgbar!"
  esac
 } > $TMPFILE
  $DIALOG --title "$HELPTITLE" \
          --backtitle "$BACKTITLE" \
          --textbox $TMPFILE $BL $BC
#  sleep 1
}

show_help_russian () {
 {
  echo "$1"
  echo ""
  case "$1" in
    Quit)
        echo "Quit this menu."
      ;;

    'NetTemp List:')
      echo "Choose Network Template from list."
      ;;

    "Template number:")
      echo "Enter Network Template number."
      ;;

    'Template Definition:')
      echo "Go to Definition of this Network Template."
      ;;

    'Network Templates:')
      echo "Go to Network Template Definition menu."
      ;;

    'MAC Security Level:')
        echo "Set the MAC model security level."
        echo ""
        $RSBACPATH""attr_get_net -A security_level
      ;;

    'MAC Categories:')
        echo "Set the MAC model categories."
        echo ""
        $RSBACPATH""attr_get_net -A mac_categories
      ;;

    'PM Object Type:')
        echo "Set object type for PM model."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_type
      ;;

    'PM IPC Purpose:')
        echo "Set IPC purpose for PM model."
        echo ""
        $RSBACPATH""attr_get_net -A pm_ipc_purpose
      ;;

    'PM Object Class:')
        echo "Select the PM model object class."
        echo ""
        $RSBACPATH""attr_get_net -A pm_object_class
      ;;

    'RC Type:')
        echo "Select the RC model NETOBJ type for this template. This value will be"
        echo "inherited to the network objects."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type
      ;;

    'RC Type NT:')
        echo "Select the RC model NETTEMP type. This value is used for accesses to"
        echo "the Network Template definition."
        echo ""
        $RSBACPATH""attr_get_net -A rc_type_nt
      ;;

    'Log Array Low:' | 'Log Array High:')
        echo "Choose object based logging levels for this object."
        echo ""
        $RSBACPATH""attr_get_net -A log_array_low
      ;;

    'ACL Menu:')
        echo "Go to ACL menu."
      ;;

    'Reset Attributes:')
        echo "Call \'attr_set_net -m\' to get the attribute object for this object"
        echo "removed. As result, all attribute values will be reset to their"
        echo "default values. Use with care!"
      ;;

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

get_attributes () {
  if test "$OBJECT" != "" 
    then
         OBJNAME=`get_vname nettemp $OBJECT`
         if test "$SHOW_MAC" = "yes"
         then
           SECLEVEL=`$RSBACPATH""attr_get_net MAC $TYPE security_level $OBJECT`
           MACCAT=`$RSBACPATH""attr_get_net MAC $TYPE mac_categories $OBJECT`
         fi
         if test "$SHOW_PM" = "yes"
         then
           PMOBJTYPE=`$RSBACPATH""attr_get_net PM $TYPE pm_object_type $OBJECT`
           PMIPCP=`$RSBACPATH""attr_get_net PM $TYPE pm_ipc_purpose $OBJECT`
           PMCLASS=`$RSBACPATH""attr_get_net PM $TYPE pm_object_class $OBJECT`
         fi
         if test "$SHOW_RC" = "yes"
         then
           RCTYPE=`$RSBACPATH""attr_get_net RC $TYPE rc_type $OBJECT`
           RCTYPENT=`$RSBACPATH""attr_get_net RC $TYPE rc_type_nt $OBJECT`
         fi
         if test "$SHOW_GEN" = "yes"
         then
           LOGLOW=`$RSBACPATH""attr_get_net GEN $TYPE log_array_low $OBJECT`
           LOGHIGH=`$RSBACPATH""attr_get_net GEN $TYPE log_array_high $OBJECT`
         fi
  else
    OBJNAME=""
    SECLEVEL=""
    MACCAT=""
    OBJCAT=""
    DATATYPE=""
    PMOBJTYPE=""
    PMIPCP=""
    PMCLASS=""
    RCTYPE=""
    RCTYPENT=""
    LOGLOW=""
    LOGHIGH=""
  fi
}

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

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

type_name () {
  if test "$TYPE" = "NONE" -o -z "$1"
  then echo " "
  else if ! $RSBACPATH""rc_get_item TYPE $1 type_nettemp_name
       then echo "(unknown)"
       fi
  fi
}

get_vname () {
  if test "$TYPE" = "NONE"
    then echo " "
         return
  fi
  if test -z "$2"
    then echo "N/A"
         return
  fi

  case $1 in
    nettemp)
      case $2 in
        Error*) echo N/A
          ;;
        Use*) echo N/A
          ;;
        *) if ! $RSBACPATH""net_temp get_name $2 2>/dev/null
           then echo $2
           fi
          ;;
      esac 
      ;;
    seclevel)
      case $2 in
        0) echo unclassified
          ;;
        1) echo confidential
          ;;
        2) echo secret
          ;;
        3) echo top secret
          ;;
        252) echo max. level
          ;;
        254) echo inherit
          ;;
        *) echo N/A
          ;;
      esac 
      ;;
    objcat)
      case $2 in
        0) echo General
          ;;
        1) echo Security
          ;;
        2) echo System
          ;;
        *) echo N/A
          ;;
      esac 
      ;;
    datatype)
      case $2 in
        0) echo None
          ;;
        1) echo SI
          ;;
        *) echo N/A
          ;;
      esac 
      ;;
    pmobjtype)
      case $2 in
        0) echo None
          ;;
        1) echo TP
          ;;
        2) echo Personal Data
          ;;
        3) echo Non-Personal Data
          ;;
        4) echo IPC
          ;;
        5) echo Directory
          ;;
        *) echo N/A
          ;;
      esac 
      ;;
    rctype)
      case $2 in
        Error*) echo N/A
          ;;
        Use*) echo N/A
          ;;
        *) if ! $RSBACPATH""rc_get_item TYPE $2 type_netobj_name 2>/dev/null
           then echo $2
           fi
          ;;
      esac 
      ;;
    rctypent)
      case $2 in
        Error*) echo N/A
          ;;
        Use*) echo N/A
          ;;
        *) if ! $RSBACPATH""rc_get_item TYPE $2 type_nettemp_name 2>/dev/null
           then echo $2
           fi
          ;;
      esac 
      ;;
    loglevel)
      case $2 in
        0) echo None
          ;;
        1) echo Denied
          ;;
        2) echo Full
          ;;
        3) echo Request
          ;;
        *) echo N/A
          ;;
      esac 
      ;;
    *) echo ERROR!
      ;;
  esac
}

gen_log_menu_items() {
  echo -n "" >${TMPFILE}.2
  for i in $REQUESTS
  do TMP=`$RSBACPATH""attr_get_net $TYPE log_array_low $i $OBJECT`
     echo $i `get_vname loglevel $TMP`>>${TMPFILE}.2
  done
}

log_menu () {
  if test -z "$REQUESTS"
    then REQUESTS=`$RSBACPATH""attr_get_net -n NET`
  fi
  gen_log_menu_items
  while true ; do \
    if ! \
    $DIALOG --title "$TITLE" \
           --backtitle "$BACKTITLE" \
           --default-item "$REQ" \
           --menu "$OBJECT / $OBJNAME: Log Levels for Requests" $BL $BC `gl 45` \
                `cat ${TMPFILE}.2` \
                "Quit" "" \
         2>$TMPFILE
     then rm ${TMPFILE}.2
          LOGLOW=`$RSBACPATH""attr_get_net $TYPE log_array_low $OBJECT`
          LOGHIGH=`$RSBACPATH""attr_get_net $TYPE log_array_high $OBJECT`
          return
    fi
    REQ=`cat $TMPFILE`
    case "$REQ" in
      Quit)
        rm ${TMPFILE}.2
        LOGLOW=`$RSBACPATH""attr_get_net $TYPE log_array_low $OBJECT`
        LOGHIGH=`$RSBACPATH""attr_get_net $TYPE log_array_high $OBJECT`
        return
        ;;
      *)
        VAL=`grep "^$REQ " ${TMPFILE}.2|cut -f 2 -d ' '`
        if $DIALOG --title "$TITLE" \
                   --backtitle "$BACKTITLE" \
                   --radiolist "Choose Log Level for $OBJECT / $REQ" $BL $BC 5 \
                          0 `get_vname loglevel 0` `onoff None $VAL` \
                          1 `get_vname loglevel 1` `onoff Denied $VAL` \
                          2 `get_vname loglevel 2` `onoff Full $VAL` \
                          3 `get_vname loglevel 3` `onoff Request $VAL` \
          2>$TMPFILE
        then TMP=`cat $TMPFILE`
             if $RSBACPATH""attr_set_net $TYPE log_array_low $REQ $TMP $OBJECT &>$TMPFILE
             then
               gen_log_menu_items
               if test -n "$RSBACLOGFILE"
               then
                 echo $RSBACPATH""attr_set_net $TYPE log_array_low $REQ $TMP $OBJECT >>"$RSBACLOGFILE"
               fi
             else \
               $DIALOG --title "$ERRTITLE" \
                       --backtitle "$BACKTITLE" \
                       --msgbox "`head -n 1 $TMPFILE`" $BL $BC
             fi
        fi
    esac
done
}

declare -i MAXCATLEN=$BC-38
cat_print () {
  if test $MAXCATLEN -ge 64
  then echo $1
  else echo "(too long)"
  fi
}

gen_cat_list () {
    for i in $*
    do
      TMP=`$RSBACPATH""attr_get_net $TYPE mac_categories CAT $i $OBJECT`
      echo $i `onoffb $TMP` `onoffb $TMP`
    done
}

declare -i MAXNAMELEN=$BC-34
name_print () {
  if test ${#1} -gt $MAXNAMELEN
  then
    declare -i START=${#1}-$MAXNAMELEN
    echo "$1" | cut -c$START-${#1}
  else
    echo "$1"
  fi
}

###################### Menu #################

if test -n "$RSBACLOGFILE"
then
  {
    echo ""
    echo "# $0 start `date`"
  } >>"$RSBACLOGFILE"
fi
if test "$1" != ""
then OBJECT=$1
else
  if $DIALOG --title "$TITLE" \
             --backtitle "$BACKTITLE" \
             --menu "Network Template" $BL $BC $MAXLINES \
                    `$RSBACPATH""net_temp list_temp_names` \
    2>$TMPFILE
  then OBJECT=`cat $TMPFILE`
  fi
fi
get_attributes $OBJECT

  {
    echo 'nettemp_menu ()'
    echo '  {'    
    echo "    $DIALOG --title \"$TITLE\" \\"
    echo '       --backtitle "$BACKTITLE" \'
    echo '       --help-button --default-item "$CHOICE" \'
    echo '       --menu "Main NETTEMP Menu" $BL $BC `gl 21` \'
    echo '         "NetTemp List:" "Choose from listing of templates" \'
    echo '              "-------------------" " " \'
    echo '            "Template number:" "$OBJECT / $OBJNAME" \'
    echo '            "Template Definition:" "Go to Network Template Definition" \'
    echo '            "----------------" " " \'
    if test "$SHOW_MAC" = "yes"
    then
      echo '            "MAC Security Level:" "$SECLEVEL / `get_vname seclevel $SECLEVEL`" \'
      echo '            "MAC Categories:" "`cat_print $MACCAT`" \'
    fi
    if test "$SHOW_PM" = "yes"
    then
      echo '              "PM Object Class:" "$PMCLASS" \'
      echo '              "PM IPC Purpose:" "$PMIPCP" \'
      echo '              "PM Object Type:" "$PMOBJTYPE / `get_vname pmobjtype $PMOBJTYPE`" \'
    fi
    if test "$SHOW_RC" = "yes"
    then
      echo '              "RC Type:" "$RCTYPE / `get_vname rctype $RCTYPE`" \'
      echo '              "RC Type NT:" "$RCTYPENT / `get_vname rctypent $RCTYPENT`" \'
    fi
    if test "$SHOW_GEN" = "yes"
    then
      echo '              "Log Array Low:" "$LOGLOW" \'
      echo '              "Log Array High:" "$LOGHIGH" \'
    fi
    echo '            "----------------" " " \'
    if test "$SHOW_ACL" = "yes"
    then
      echo '            "ACL Menu:" "Go to ACL menu" \'
    fi
    echo '            "Network Templates:" "Go to Network Template Definition Menu" \'
    echo '            "Reset Attributes:" "Reset all values to default values" \'
    echo '            "Quit" ""'
    echo '  }'
  } > $TMPFILE

. $TMPFILE

#cp $TMPFILE /tmp/menu

while true
  do
    if ! nettemp_menu 2>$TMPFILE
     then rm $TMPFILE ; exit
    fi


  CHOICE=`cat $TMPFILE`
  case "$CHOICE" in
    HELP*)
        show_help "${CHOICE:5}"
        CHOICE="${CHOICE:5}"
      ;;
    'NetTemp List:')
        if $DIALOG --title "$TITLE" \
                   --backtitle "$BACKTITLE" \
                   --default-item "$OBJECT" \
                   --menu "Network Template" $BL $BC $MAXLINES \
                         `$RSBACPATH""net_temp list_temp_names` \
           2>$TMPFILE
        then OBJECT=`cat $TMPFILE`
             get_attributes
        fi
      ;;

    "Template number:")
        if $DIALOG --title "$TITLE" \
                  --backtitle "$BACKTITLE" \
                  --inputbox "Template Number:" $BL $BC $OBJECT \
           2>$TMPFILE
        then OBJECT=`cat $TMPFILE`
             get_attributes
        fi
      ;;

    'Template Definition:')
        $RSBACPATH""rsbac_nettemp_def_menu "$OBJECT"
      ;;

    'MAC Security Level:')
        if test "$TYPE" != "NONE"
        then \
          if $DIALOG --title "$TITLE" \
                    --backtitle "$BACKTITLE" \
                    --radiolist "Choose Security Level for $OBJECT / $OBJNAME (old value: $SECLEVEL)" $BL $BC 7 \
                                "Enter" "Numeric Value" off \
                                0 "`get_vname seclevel 0`" `onoff 0 $SECLEVEL` \
                                1 "`get_vname seclevel 1`" `onoff 1 $SECLEVEL` \
                                2 "`get_vname seclevel 2`" `onoff 2 $SECLEVEL` \
                                3 "`get_vname seclevel 3`" `onoff 3 $SECLEVEL` \
                                252 "`get_vname seclevel 252`" `onoff 252 $SECLEVEL` \
                                254 "`get_vname seclevel 254`" `onoff 254 $SECLEVEL` \
             2>$TMPFILE
          then TMP=`cat $TMPFILE`
               if test "$TMP" = "Enter"
               then
                 if $DIALOG --title "$TITLE" \
                           --backtitle "$BACKTITLE" \
                           --inputbox "MAC security level" $BL $BC "$SECLEVEL" \
                   2>$TMPFILE
                 then
                   TMP="`cat $TMPFILE`"
                   if test $TMP -gt 254
                   then
                     $DIALOG --title "$ERRTITLE" \
                            --backtitle "$BACKTITLE" \
                            --msgbox "Invalid security level value $TMP!" $BL $BC
                     TMP=""
                   fi
                 else
                   TMP=""
                 fi
               fi
               if test -n "$TMP"
               then
                 if $RSBACPATH""attr_set_net $TYPE security_level $TMP $OBJECT &>$TMPFILE
                 then
                   SECLEVEL=$TMP
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""attr_set_net $TYPE security_level $TMP $OBJECT >>"$RSBACLOGFILE"
                   fi
                 else \
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head -n 1 $TMPFILE`" $BL $BC
                 fi
               fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "Security Level: No object specified!" 5 $BC
        fi
      ;;

    'MAC Categories:')
        if test "$TYPE" != "NONE"
        then \
          ALLCATNR=`$RSBACPATH""attr_get_file_dir list_category_nr`
          if $DIALOG --title "MAC Categories for NetTemp $OBJECT / $OBJNAME" \
                    --backtitle "$BACKTITLE" \
                    --checklist "Bits: $MACCAT" $BL $BC $MAXLINES \
                    `gen_cat_list $ALLCATNR` \
             2>$TMPFILE
          then TMP=`cat $TMPFILE|tr -d '"'`
               for i in $ALLCATNR
               do
                 if $RSBACPATH""attr_set_net $TYPE mac_categories CAT $i 0 $OBJECT &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""attr_set_net $TYPE mac_categories CAT $i 0 $OBJECT >>"$RSBACLOGFILE"
                   fi
                 else 
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head -n 1 $TMPFILE`" $BL $BC
                   continue
                 fi
               done
               for i in $TMP
               do
                 if $RSBACPATH""attr_set_net $TYPE mac_categories CAT $i 1 $OBJECT &>$TMPFILE
                 then
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""attr_set_net $TYPE mac_categories CAT $i 1 $OBJECT >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head -n 1 $TMPFILE`" $BL $BC
                   continue
                 fi
               done
               MACCAT=`$RSBACPATH""attr_get_net $TYPE mac_categories $OBJECT`
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "MAC Categories: No user specified!" 5 $BC
        fi
      ;;

    'PM Object Type:')
        if test "$TYPE" != "NONE"
        then \
          if $DIALOG --title "$TITLE" \
                    --backtitle "$BACKTITLE" \
                    --radiolist "Choose PM Object Type for $OBJECT / $OBJNAME" $BL $BC 6 \
                                0 "`get_vname pmobjtype 0`" `onoff 0 $PMOBJTYPE` \
                                1 "`get_vname pmobjtype 1`" `onoff 1 $PMOBJTYPE` \
                                2 "`get_vname pmobjtype 2`" `onoff 2 $PMOBJTYPE` \
                                3 "`get_vname pmobjtype 3`" `onoff 3 $PMOBJTYPE` \
                                4 "`get_vname pmobjtype 4`" `onoff 4 $PMOBJTYPE` \
                                5 "`get_vname pmobjtype 5`" `onoff 5 $PMOBJTYPE` \
             2>$TMPFILE
          then TMP=`cat $TMPFILE`
               if $RSBACPATH""attr_set_net $TYPE pm_object_type $TMP $OBJECT &>$TMPFILE
               then
                 PMOBJTYPE=$TMP
                 if test -n "$RSBACLOGFILE"
                 then
                   echo $RSBACPATH""attr_set_net $TYPE pm_object_type $TMP $OBJECT >>"$RSBACLOGFILE"
                 fi
               else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "`head -n 1 $TMPFILE`" $BL $BC
               fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "PM Object Type: No object specified!" 5 $BC
        fi
      ;;

    'PM Object Class:')
        if test "$TYPE" != "NONE"
        then \
           if $DIALOG --title "$TITLE" \
                     --backtitle "$BACKTITLE" \
                     --inputbox "PM Object Class (long integer) for $OBJECT / $OBJNAME" \
                                $BL $BC "$PMCLASS" \
              2>$TMPFILE
          then TMP=`cat $TMPFILE`
               if $RSBACPATH""attr_set_net $TYPE pm_object_class $TMP $OBJECT &>$TMPFILE
               then
                 PMCLASS=$TMP
                 if test -n "$RSBACLOGFILE"
                 then
                   echo $RSBACPATH""attr_set_net $TYPE pm_object_class $TMP $OBJECT >>"$RSBACLOGFILE"
                 fi
               else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "`head -n 1 $TMPFILE`" $BL $BC
               fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "PM Object Class: No object specified!" 5 $BC
        fi
      ;;

    'PM IPC Purpose:')
        if test "$TYPE" != "NONE"
        then \
           if $DIALOG --title "$TITLE" \
                     --backtitle "$BACKTITLE" \
                     --inputbox "PM IPC Purpose (long integer) for $OBJECT / $OBJNAME" \
                                $BL $BC "$PMIPCP" \
              2>$TMPFILE
          then TMP=`cat $TMPFILE`
               if $RSBACPATH""attr_set_net $TYPE pm_ipc_purpose $TMP $OBJECT &>$TMPFILE
               then PMIPCP=$TMP
               if test -n "$RSBACLOGFILE"
               then
                 echo $RSBACPATH""attr_set_net $TYPE pm_ipc_purpose $TMP $OBJECT >>"$RSBACLOGFILE"
               fi
               else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "`head -n 1 $TMPFILE`" $BL $BC
               fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "PM Object Class: No object specified!" 5 $BC
        fi
      ;;

    'RC Type:')
        if test "$TYPE" != "NONE"
        then \
          if $RSBACPATH""rc_get_item list_netobj_types >$TMPFILE
          then \
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --default-item "$RCTYPE" \
                      --menu "Choose RC Type for $OBJECT / $OBJNAME" $BL $BC $MAXLINES \
                      `cat $TMPFILE` \
               2>$TMPFILE
            then TMP=`cat $TMPFILE`
              if $RSBACPATH""attr_set_net $TYPE rc_type $TMP $OBJECT &>$TMPFILE
              then
                RCTYPE=$TMP
                if test -n "$RSBACLOGFILE"
                then
                  echo $RSBACPATH""attr_set_net $TYPE rc_type $TMP $OBJECT >>"$RSBACLOGFILE"
                fi
              else
                $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "`head -n 1 $TMPFILE`" $BL $BC
              fi
            fi
          else \
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --inputbox "RC Type (integer) for $OBJECT / $OBJNAME" \
                                 $BL $BC "$RCTYPE" \
                2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""attr_set_net $TYPE rc_type $TMP $OBJECT &>$TMPFILE
                 then
                   RCTYPE=$TMP
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""attr_set_net $TYPE rc_type $TMP $OBJECT >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head -n 1 $TMPFILE`" $BL $BC
                 fi
            fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "RC Type: No object specified!" 5 $BC
        fi
      ;;

    'RC Type NT:')
        if test "$TYPE" != "NONE"
        then \
          if $RSBACPATH""rc_get_item list_nettemp_types >$TMPFILE
          then \
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --default-item "$RCTYPENT" \
                      --menu "Choose RC Type NetTemp for $OBJECT / $OBJNAME" $BL $BC $MAXLINES \
                      `cat $TMPFILE` \
               2>$TMPFILE
            then TMP=`cat $TMPFILE`
              if $RSBACPATH""attr_set_net $TYPE rc_type_nt $TMP $OBJECT &>$TMPFILE
              then
                RCTYPENT=$TMP
                if test -n "$RSBACLOGFILE"
                then
                  echo $RSBACPATH""attr_set_net $TYPE rc_type_nt $TMP $OBJECT >>"$RSBACLOGFILE"
                fi
              else
                $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "`head -n 1 $TMPFILE`" $BL $BC
              fi
            fi
          else \
            if $DIALOG --title "$TITLE" \
                      --backtitle "$BACKTITLE" \
                      --inputbox "RC Type NetTemp (integer) for $OBJECT / $OBJNAME" \
                                 $BL $BC "$RCTYPENT" \
                2>$TMPFILE
            then TMP=`cat $TMPFILE`
                 if $RSBACPATH""attr_set_net $TYPE rc_type_nt $TMP $OBJECT &>$TMPFILE
                 then
                   RCTYPENT=$TMP
                   if test -n "$RSBACLOGFILE"
                   then
                     echo $RSBACPATH""attr_set_net $TYPE rc_type_nt $TMP $OBJECT >>"$RSBACLOGFILE"
                   fi
                 else
                   $DIALOG --title "$ERRTITLE" \
                          --backtitle "$BACKTITLE" \
                          --msgbox "`head -n 1 $TMPFILE`" $BL $BC
                 fi
            fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "RC Type NT: No object specified!" 5 $BC
        fi
      ;;

    'Log Array Low:')
        if test "$TYPE" != "NONE"
        then \
          log_menu
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "Log Array Low: No object specified!" 5 $BC
        fi
      ;;

    'Log Array High:')
        if test "$TYPE" != "NONE"
        then \
          log_menu
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "Log Array High: No object specified!" 5 $BC
        fi
      ;;

    'ACL Menu:')
        $RSBACPATH""rsbac_acl_menu NETTEMP "$OBJECT"
      ;;

    'Network Templates:')
        $RSBACPATH""rsbac_nettemp_def_menu
      ;;

    'Reset Attributes:')
        if test "$TYPE" != "NONE"
        then \
          if $DIALOG --title "$TITLE" \
                    --backtitle "$BACKTITLE" \
                    --yesno "Reset all attributes to default values?" 5 $BC \
             2>/dev/null
          then
            if $RSBACPATH""attr_set_net -m NETTEMP $OBJECT &>$TMPFILE
            then get_attributes
              if test -n "$RSBACLOGFILE"
              then
                echo $RSBACPATH""attr_set_net -m NETTEMP $OBJECT >>"$RSBACLOGFILE"
              fi
            else
              $DIALOG --title "$ERRTITLE" \
                     --backtitle "$BACKTITLE" \
                     --msgbox "`head -n 1 $TMPFILE`" $BL $BC
            fi
          fi
        else
                 $DIALOG --title "$ERRTITLE" \
                        --backtitle "$BACKTITLE" \
                        --msgbox "Reset Attributes: No object specified!" 5 $BC
        fi
      ;;

    Quit)
        rm $TMPFILE ; exit
      ;;

    *)
        $DIALOG --title "$ERRTITLE" \
               --backtitle "$BACKTITLE" \
               --msgbox "Main Menu: Selection Error!" 5 $BC
  esac
# sleep 2
done
