home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nws / install / nwsclnt / misc_func < prev    next >
Text File  |  1998-08-19  |  6KB  |  326 lines

  1. # @(#)misc_func    1.3
  2. #
  3. # miscellaneous functions for the server set request scripts
  4. #
  5.  
  6. function ClearScreen
  7. {
  8. [ -n "$DEBUG" ] && set -x
  9.  
  10.     ccall altprintf "@string_t:"!\\\033[2J\\\033[H!""
  11.     return 0
  12. }
  13.  
  14. function GoodBye
  15. {
  16. [ -n "$DEBUG" ] && set -x
  17.  
  18.     if [ $SMART_START == "FALSE" ]
  19.     then
  20.         ClearScreen
  21.         call endwin
  22.     fi
  23.     exit $1
  24. }
  25.  
  26. #
  27. # This function sets the proper locale. It is called by all
  28. # packaging scripts except the nws set request script. 
  29. #
  30. # Related function: InitLocale
  31. #
  32. function SetLocale
  33. {
  34. [ -n "$DEBUG" ] && set -x
  35.  
  36.     # There is a prescribed list of LOCALE variables to check.
  37.     # If none are set coming in to this request script, then
  38.     # default to the C locale.
  39.     LOCALE=${LC_ALL:-${LC_MESSAGES:-${LANG:-C}}}
  40.  
  41.     # Set C locale environment variable for help and strings files.
  42.     C_LANGDEP_SCRIPTS=/etc/inst/locale/C/menus/nws
  43.  
  44.     # Set environment variable to find help (.hcf) and strings files
  45.     # in the proper locale.
  46.     if [ -s /etc/inst/locale/${LOCALE}/menus/nws/set_strings ]
  47.     then
  48.         LANGDEP_SCRIPTS=/etc/inst/locale/${LOCALE}/menus/nws
  49.     else
  50.         LANGDEP_SCRIPTS=${C_LANGDEP_SCRIPTS}
  51.     fi
  52. }
  53.  
  54. function ViewInfo
  55. {
  56. [ -n "$DEBUG" ] && set -x
  57.  
  58.     # This uglieness allows the helpwin function to be used 
  59.     # for viewing information outside of a "help" context.
  60.     # We need to change the footers so they don't reference
  61.     # the "help" context. When we're done, we set the footers
  62.     # back to their original values.
  63.  
  64.     TMP1=$FIRST_PAGE_FOOTER
  65.     TMP2=$LAST_PAGE_FOOTER
  66.     TMP3=$MIDDLE_PAGE_FOOTER
  67.     TMP4=$ONLY_PAGE_FOOTER
  68.  
  69.     FIRST_PAGE_FOOTER=$X_FIRST_PAGE_FOOTER
  70.     LAST_PAGE_FOOTER=$X_LAST_PAGE_FOOTER
  71.     MIDDLE_PAGE_FOOTER=$X_MIDDLE_PAGE_FOOTER
  72.     ONLY_PAGE_FOOTER=$X_ONLY_PAGE_FOOTER
  73.  
  74.     helpwin $1
  75.     input_handler
  76.  
  77.     FIRST_PAGE_FOOTER=$TMP1
  78.     LAST_PAGE_FOOTER=$TMP2
  79.     MIDDLE_PAGE_FOOTER=$TMP3
  80.     ONLY_PAGE_FOOTER=$TMP4
  81.  
  82.     return 0
  83. }
  84.  
  85.  
  86. function putfoot
  87. {
  88. [ -n "$DEBUG" ] && set -x
  89.     cdecl longp 'page=&pg'
  90.     cprint -v PAGE page
  91.  
  92.     #
  93.     # There seems to be a bug in setting PAGE
  94.     # correctly.
  95.     #
  96.     if (( $PAGE == 0 ))
  97.     then
  98.         let PAGE=PAGE+1
  99.     fi
  100.  
  101.     if (( $HELP_PAGES == 1 ))
  102.     then
  103.         footer "$ONLY_PAGE_FOOTER"
  104.     elif (( $PAGE == 1 ))
  105.     then
  106.         footer "$FIRST_PAGE_FOOTER"
  107.     elif (( $PAGE == $HELP_PAGES ))
  108.     then
  109.         footer "$LAST_PAGE_FOOTER"
  110.     else
  111.         footer "$MIDDLE_PAGE_FOOTER"
  112.     fi
  113. }
  114.  
  115. function helpwin
  116. {
  117. [ -n "$DEBUG" ] && set -x
  118.     typeset basefil=$1 fil=$LANGDEP_SCRIPTS/help/$1.hcf line a OIFS="$IFS" IFS="$IFS" page
  119.  
  120.     if [ ! -f "$fil" ]
  121.     then
  122.     #    print -u2 Cannot open $fil
  123.         return 1
  124.     fi
  125.     typeset IFS=
  126.     {
  127.         read title
  128.         read related
  129.         read line
  130.     } <$fil
  131.     typeset IFS="$OIFS"
  132.     set -- $line
  133.     HELP_PAGES=$1
  134.     set -- $related ${RELATED_HELPS}
  135.     open_help -help "wclose \$WCURRENT; helphelp $basefil $*" -page "putfoot" "$fil"
  136.     cdecl longp 'height=&Help_height' 'width=&Help_width'
  137.     cprint -v HELP_HEIGHT height
  138.     cprint -v HELP_WIDTH width
  139.     place_window -below 0 $HELP_WIDTH $HELP_HEIGHT -fg $HELP_FG -bg $HELP_BG -title "$title" -border_fg $HELP_FG -current 'msg; putfoot'
  140.     run_help "$fil"
  141. }
  142.  
  143. function helphelp
  144. {
  145. [ -n "$DEBUG" ] && set -x
  146.     typeset i titles
  147.     typeset basefil="$1"
  148.     shift
  149.     integer max=${#MOREHELP_TITLE} j=0
  150.     typeset args=
  151.     for i
  152.     do
  153.         case " $args " in
  154.         *" $i "*)
  155.             ;;
  156.         *)
  157.             args="$args $i"
  158.         esac
  159.     done
  160.     set -- $args
  161.     for i
  162.     do
  163.         {
  164.             read titles[j] 
  165.         } <$LANGDEP_SCRIPTS/help/$i.hcf
  166.         if (( max < ${#titles[j]} ))
  167.         then
  168.             max=${#titles[j]}
  169.         fi
  170.         j=j+1
  171.     done
  172.     place_window -left 0 $max+2 $# -fg $HELP_FG -bg $HELP_BG -border_fg $HELP_FG -title "$MOREHELP_TITLE" -current 'footer "$MOREHELP_FOOTER"'
  173.     typeset wid=$CURWIN
  174.     open_menu -exit 'wclose $wid; destroy_menu $mid'
  175.     typeset mid=$MID
  176.     typeset open=1
  177.     typeset use
  178.     j=0
  179.     for i
  180.     do
  181.         add_menu_item -select "wclose $wid; destroy_menu $mid; helpwin $i $basefil" "${titles[j]}"
  182.         j=j+1
  183.     done
  184.     run_menu $mid 0
  185. }
  186.  
  187. #
  188. # Create NetWare users and groups
  189. #
  190. function CreateUsersAndGroups
  191. {
  192. [ -n "$DEBUG" ] && set -x
  193.  
  194.     typeset -i gid found
  195.  
  196.     GREP="/usr/bin/fgrep"
  197.     AWK="/usr/bin/awk"
  198.     USERADD="/usr/sbin/useradd"
  199.     USERDEL="/usr/sbin/userdel"
  200.     GROUPDEL="/usr/sbin/groupdel"
  201.     GROUPADD="/usr/sbin/groupadd"
  202.     PASSWD="/usr/bin/passwd"
  203.  
  204.     #
  205.     # Create nwgroup
  206.     #    
  207.     ENTRY=`$GREP nwgroup /etc/group`
  208.     if [ -n "$ENTRY" ] 
  209.     then
  210.         # nwgroup was found but we need to make sure the gid is within range
  211.         gid=`echo $ENTRY | $AWK '{FS=":"} {print $3}'`
  212.         if [ $gid -lt 100 ]
  213.         then
  214.             # nwgroup has a gid less than 100. We don't need to do anything.
  215.             found=1
  216.         else
  217.             # The gid on nwgroup is too large. Delete nwgroup.
  218.             $GROUPDEL nwgroup 1>&2
  219.             found=0
  220.         fi
  221.     else
  222.         # nwgroup not found
  223.         found=0
  224.     fi
  225.  
  226.     if [ $found -eq 0 ]
  227.     then
  228.         # Find the first free gid starting at 50.
  229.         let gid=50
  230.         while :    # always true
  231.         do
  232.             if [ $gid -ge 100 ]
  233.             then
  234.                 # Too many iterations. Something is wrong.
  235.                 print -u2 "$CANNOT_CREATE_NWGROUP"
  236.                 break
  237.             fi
  238.  
  239.             $GREP ":$gid:" /etc/group > /dev/null 2>&1
  240.             if [ $? -eq 0 ]
  241.             then
  242.                 # This gid already in use, so skip.
  243.                 let gid=gid+1
  244.                 continue
  245.             fi
  246.         
  247.             $GROUPADD -g $gid nwgroup 1>&2
  248.             if [ $? -eq 0 ]
  249.             then
  250.                 # Group added successfully
  251.                 break
  252.             else
  253.                 # Some problem adding the group. Try next.
  254.                 let gid=gid+1
  255.                 continue
  256.             fi
  257.         done
  258.     fi
  259.  
  260.     AddUser "nwroot" $gid "50" "NetWare Administrator without a UnixWare Account"
  261.     AddUser "nwuser" $gid "51" "NetWare user without a UnixWare Account"
  262.     AddUser "nwprint" $gid "52" "NetWare Print User"
  263.  
  264.     return 0
  265. }
  266.  
  267. function AddUser
  268. {
  269. [ -n "$DEBUG" ] && set -x
  270.  
  271.     typeset -i uid
  272.  
  273.     user="$1"
  274.     gid="$2"
  275.     uid="$3"
  276.     name="$4"
  277.  
  278.     ENTRY=`$GREP $user /etc/passwd`
  279.     if [ -n "$ENTRY" ]
  280.     then
  281.         # user was found, but we need to see if it has the correct gid
  282.         user_gid=`echo $ENTRY | $AWK '{FS=":"} {print $4}`
  283.         if [ $user_gid -eq $gid ]
  284.         then
  285.             # found the correct gid. We don't need to do anything
  286.             found=1
  287.         else
  288.             # user does not have the correct gid
  289.             # delete old user and create a new one.
  290.             $USERDEL -n 0 $user 1>&2
  291.             found=0
  292.         fi
  293.     else
  294.         # nwprint not found
  295.         found=0
  296.     fi
  297.  
  298.     if [ $found -eq 0 ]
  299.     then
  300.         # Find the first free uid starting at $uid.
  301.         while :    # always true
  302.         do
  303.             if [ $uid -ge 100 ]
  304.             then
  305.                 # Too many iterations. Something is wrong.
  306.                 print -u2 "$CANNOT_CREATE_USER"
  307.                 break
  308.             fi
  309.  
  310.             $USERADD -u $uid -g $gid -c "$name" "$user" 1>&2
  311.             if [ $? -eq 0 ]
  312.             then
  313.                 # user added successfully.
  314.                 break
  315.             else
  316.                 # Some problem adding the user. UID probably already taken. Try next.
  317.                 let uid=uid+1
  318.                 continue
  319.             fi
  320.         done
  321.     fi
  322.  
  323.     return 0
  324.  
  325. }
  326.