home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2418 < prev    next >
Internet Message Format  |  1990-12-28  |  40KB

  1. From: pjc@pcbox.UUCP (Paul J. Condie)
  2. Newsgroups: alt.sources
  3. Subject: menu(1) part 13 of 14
  4. Message-ID: <447@pcbox.UUCP>
  5. Date: 26 Dec 90 20:16:44 GMT
  6.  
  7.  
  8. #!/bin/sh
  9. # this is part 13 of a multipart archive
  10. # do not concatenate these parts, unpack them in order with /bin/sh
  11. # file utilities.d/m.d/adduser continued
  12. #
  13. CurArch=13
  14. if test ! -r s2_seq_.tmp
  15. then echo "Please unpack part 1 first!"
  16.      exit 1; fi
  17. ( read Scheck
  18.   if test "$Scheck" != $CurArch
  19.   then echo "Please unpack part $Scheck next!"
  20.        exit 1;
  21.   else exit 0; fi
  22. ) < s2_seq_.tmp || exit 1
  23. echo "x - Continuing file utilities.d/m.d/adduser"
  24. sed 's/^X//' << 'SHAR_EOF' >> utilities.d/m.d/adduser
  25. X
  26. X
  27. X
  28. X###    Add entry to password file
  29. X###     $PWDFILE must be writable.
  30. XMenuMsg `tput lines` 0 "Adding entry to $PWDFILE"
  31. Xif [ ! -w "$PWDFILE" ]
  32. X   then echo "$PWDFILE is not writable."
  33. X    exit 1
  34. Xfi
  35. X
  36. X###  Next line is for standard SYSV
  37. Xecho "$LOGNAME:$PASSWD:$UID:$GID:$NAME:$HOMEDIR:$LOGSHELL" >> $PWDFILE
  38. Xrcde=$?
  39. X
  40. X###  Next Line is for the SUN
  41. X#$ECHO "/^+/i\\" > /tmp/adduser.script
  42. X#$ECHO "$LOGNAME:$PASSWD:$UID:$GID:$NAME:$HOMEDIR:$LOGSHELL" >> /tmp/adduser.script
  43. X#sed -f /tmp/adduser.script $PWDFILE > /tmp/newpasswd
  44. X#cp /tmp/newpasswd $PWDFILE
  45. X#rm -f /tmp/adduser.script
  46. X#rm -f /tmp/newpasswd
  47. X
  48. Xif [ $rcde -ne 0 ]
  49. X   then echo "[$rcde]  Unable to add entry to $PWDFILE"
  50. X    exit 1
  51. Xfi
  52. X###    Now that the entry has been added to the password file
  53. X###    we can chown the home directory
  54. Xchown $LOGNAME $HOMEDIR        
  55. Xchgrp $GROUP $HOMEDIR
  56. Xchmod 755 $HOMEDIR
  57. X
  58. X
  59. X
  60. X###
  61. X### Create .profile
  62. X###
  63. X
  64. Xif [ -n "$DPROFILE" ]
  65. X   then    MenuMsg `tput lines` 0 "Setting up the .profile."
  66. Xfi
  67. XNEWPROFILE=yes
  68. Xif [ -f $HOMEDIR/.profile ]
  69. X   then    reply=`MenuPrompt \`tput lines\` 0 "A .profile already exists in $HOMEDIR.  Okay to use it. (y/n) ?  "`
  70. X    if [ "$reply" = "y" ]
  71. X          then NEWPROFILE=no
  72. X        MenuMsg `tput lines` 0 "Using existing .profile."
  73. X       else rm -f "$HOMEDIR/.profile"
  74. X    fi
  75. Xfi
  76. X
  77. Xif [ "$NEWPROFILE" = "yes" -a -n "$DPROFILE" ]
  78. X   then    MenuMsg `tput lines` 0 "Creating new .profile."
  79. X    ###  set default printer LPDEST
  80. X    if [ -n "$PRINTER" ]
  81. X       then    sed "s/^LPDEST=local/LPDEST=$PRINTER/" $DPROFILE > $HOMEDIR/.profile
  82. X       else    cp $DPROFILE $HOMEDIR/.profile
  83. X    fi
  84. X    chown $LOGNAME $HOMEDIR/.profile
  85. X    chgrp $GROUP $HOMEDIR/.profile
  86. X    chmod 755 $HOMEDIR/.profile
  87. X    chown $LOGNAME $HOMEDIR/.profile
  88. X       MenuMsg `tput lines` 0 ".profile added for $LOGNAME."
  89. Xfi
  90. X
  91. X
  92. X
  93. X
  94. X###
  95. X### Create bin in HOMEDIR
  96. X###
  97. X
  98. XMenuMsg `tput lines` 0 "Setting up the bin directory."
  99. Xif [ -d $HOMEDIR/bin ]
  100. X   then MenuMsg `tput lines` 0 "A bin directory already exists."
  101. X   else MenuMsg `tput lines` 0 "Making direcotry $HOMEDIR/bin."
  102. X    mkdir $HOMEDIR/bin
  103. X    chown $LOGNAME $HOMEDIR/bin
  104. X    chgrp $GROUP $HOMEDIR/bin
  105. X    chmod 755 $HOMEDIR/bin
  106. X    chown $LOGNAME $HOMEDIR/bin
  107. X       MenuMsg `tput lines` 0 "Bin directory added for $LOGNAME."
  108. Xfi
  109. X
  110. X
  111. X
  112. X###
  113. X###  Grant Database Permissions
  114. X###
  115. X
  116. X#DBPATH=/prod/date.d; export DBPATH
  117. X#/usr/informix/bin/isql - - <<END
  118. X#database dateme;
  119. X#grant select on techs to $LOGNAME;
  120. X#grant insert on techs to $LOGNAME;
  121. X#grant update on techs to $LOGNAME;
  122. X#grant delete on techs to $LOGNAME;
  123. X#grant connect to $LOGNAME;
  124. X#END
  125. X
  126. Xecho "$LOGNAME added."
  127. Xexit 1
  128. SHAR_EOF
  129. echo "File utilities.d/m.d/adduser is complete"
  130. chmod 6755 utilities.d/m.d/adduser || echo "restore of utilities.d/m.d/adduser fails"
  131. echo "x - extracting utilities.d/m.d/adduser.old (Text)"
  132. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/adduser.old &&
  133. X#! /bin/ksh
  134. X# %W%   DeltaDate %G%   ExtrDate %H%
  135. X
  136. X###  adduser
  137. X###    Add a new user login to the system.
  138. X###    This script is designed to be run from the menu(1) program.
  139. X###    Menu script file is sadmin.m
  140. X###    This script needs to be run with a set uid to root program.  You
  141. X###    pick the one you want to use.
  142. X###
  143. X###  Arguments:
  144. X###    $1 = login ID
  145. X###    $2 = encrypted password
  146. X###    $3 = numerical user ID
  147. X###    $4 = numerical group ID
  148. X###    $5 = Text (Users Read Name)
  149. X###    $6 = directory to create users home directory in
  150. X###    $7 = program to use as Shell
  151. X###    $8 = default .profile for user
  152. X###    $9 = default printer
  153. X###
  154. X###  Note:
  155. X###      In order to get chgrp to work you need to chown to $LOGNAME first.
  156. X###      The setuid does not work for chgrp ????
  157. X###
  158. X
  159. X###    Validate argument count
  160. Xif [ $# -ne 9 ]
  161. X   then    exit 1
  162. Xfi
  163. X
  164. XLOGNAME=$1
  165. XPASSWD=$2
  166. XUID=$3
  167. XGID=$4
  168. XNAME=$5
  169. XHOMEDIR=$6/$LOGNAME
  170. XLOGSHELL=$7
  171. XDPROFILE=$8
  172. XPRINTER=$9
  173. X
  174. XPWDFILE=/etc/passwd
  175. XGROUPFILE=/etc/group
  176. XECHO=/bin/echo
  177. X
  178. X#stty sane erase '^h' echoe isig
  179. X
  180. Xtrap "$ECHO 'Adduser aborted.\nPress [ Return ] to continue...\c'; read reply; exit" 2 3 15
  181. X
  182. X$ECHO "\n"
  183. X
  184. Xif grep '^'$LOGNAME: $PWDFILE > /dev/null 2>&1
  185. X   then $ECHO "Logname $LOGNAME is already in use."
  186. X    $ECHO "Please try another."
  187. X    $ECHO "Press [ Return ] to continue...\c"
  188. X    read reply
  189. X    exit 0
  190. Xfi
  191. X
  192. XGROUP=`awk 'BEGIN{FS=":"} {if($3 == g) print $1}' g=$GID $GROUPFILE`
  193. X
  194. X
  195. X
  196. X$ECHO "Logname:         $LOGNAME"
  197. X$ECHO "Default Passwd:  $PASSWD"
  198. X$ECHO "Real name:       $NAME"
  199. X$ECHO "User id:         $UID"
  200. X$ECHO "Group:           $GROUP"
  201. X$ECHO "Group number:    $GID"
  202. X$ECHO "Home directory:  $HOMEDIR"
  203. X$ECHO "Default Printer: $PRINTER"
  204. X    
  205. X#$ECHO "\nDatabase Permissions:"
  206. X#$ECHO "\tService Rep: $rep"
  207. X    
  208. X$ECHO "\nOkay to add (y/n)? \c"
  209. Xread reply
  210. X
  211. X$ECHO "\n"
  212. Xif [ "$reply" = "y" ]
  213. X   then trap "$ECHO 'Too late to abort adduser!'" 2 3 15
  214. X    $ECHO "Adding entry to $PWDFILE"
  215. X    ###  Next line is for standard SYSV
  216. X    $ECHO "$LOGNAME:$PASSWD:$UID:$GID:$NAME:$HOMEDIR:$LOGSHELL" >> $PWDFILE
  217. X    if [ $? -ne 0 ]
  218. X       then    $ECHO "Unable to add entry to $PWDFILE"
  219. X        $ECHO "Aborting add new user."
  220. X        $ECHO "Press [ Return ] to continue...\c"
  221. X        read reply
  222. X        exit 0
  223. X    fi
  224. X    ###  Next Line is for the SUN
  225. X#    $ECHO "/^+/i\\" > /tmp/adduser.script
  226. X#    $ECHO "$LOGNAME:$PASSWD:$UID:$GID:$NAME:$HOMEDIR:$LOGSHELL" >> /tmp/adduser.script
  227. X#    sed -f /tmp/adduser.script $PWDFILE > /tmp/newpasswd
  228. X#    cp /tmp/newpasswd $PWDFILE
  229. X#    rm -f /tmp/adduser.script
  230. X#    rm -f /tmp/newpasswd
  231. X   else
  232. X    $ECHO "$LOGNAME not added."
  233. X    exit
  234. Xfi
  235. X
  236. X
  237. X###    Make home directory
  238. XMAKEDIR=yes
  239. Xif [ -s $HOMEDIR ]
  240. X   then $ECHO "Warning: $HOMEDIR exists. Okay to use it (y/n)? \c"
  241. X    read reply
  242. X    if [ "$reply" = "y" ]
  243. X       then MAKEDIR=no
  244. X    fi
  245. Xfi
  246. Xif [ "$MAKEDIR" = "yes" ]
  247. X   then    mkdir $HOMEDIR
  248. X    if [ $? -ne 0 ]
  249. X       then $ECHO "Could not create $HOMEDIR."
  250. X        $ECHO "Aborting adduser."
  251. X        $ECHO "Removing entry in $PWDFILE"
  252. X        sed -e "/^$LOGNAME:/D" $PWDFILE > /tmp/passwd
  253. X          if [ $? -ne 0 ]
  254. X                   then    $ECHO "Unable to delete entry from password file."
  255. X              exit
  256. X           else chmod 744 $PWDFILE
  257. X              cp /tmp/passwd $PWDFILE
  258. X            rm -f /tmp/passwd
  259. X        fi
  260. X        $ECHO "Press [ Return ] to continue...\c"
  261. X        read reply
  262. X        exit
  263. X    fi
  264. Xfi
  265. X# Correct mode of HOMEDIR
  266. Xchown $LOGNAME $HOMEDIR
  267. X/bin/chgrp $GROUP $HOMEDIR
  268. X/bin/chmod 754 $HOMEDIR
  269. Xchown $LOGNAME $HOMEDIR
  270. X
  271. X
  272. X
  273. X###
  274. X###  If there is no .profile in HOMEDIR
  275. X###     then  Copy default .profile to HOMEDIR
  276. X###
  277. X
  278. Xif [ -f $HOMEDIR/.profile ]
  279. X   then    $ECHO "A .profile already exists in $HOMEDIR."
  280. X   else
  281. X    if [ -f $DPROFILE ]
  282. X       then    $ECHO "Placing a .profile in $HOMEDIR"
  283. X        ###  Next line is used to set default printer LPDEST
  284. X        if [ "$PRINTER" != "NULL" ]
  285. X            # fix this
  286. X           then    sed "s/^LPDEST=local/LPDEST=$PRINTER/" $DPROFILE > $HOMEDIR/.profile
  287. X           else    cp $DPROFILE $HOMEDIR/.profile
  288. X        fi
  289. X        chown $LOGNAME $HOMEDIR/.profile
  290. X        /bin/chgrp $GROUP $HOMEDIR/.profile
  291. X        /bin/chmod 754 $HOMEDIR/.profile
  292. X        chown $LOGNAME $HOMEDIR/.profile
  293. X        $ECHO "Default .profile added for $LOGNAME."
  294. X       else    $ECHO "The default .profile ($DPROFILE) was not found."
  295. X    fi
  296. Xfi
  297. X
  298. X
  299. X
  300. X###
  301. X### Create bin in HOMEDIR
  302. X###
  303. X
  304. Xif [ -d $HOMEDIR/bin ]
  305. X   then    $ECHO "A bin directory already exists."
  306. X   else 
  307. X    $ECHO "Making directory $HOMEDIR/bin"
  308. X    mkdir $HOMEDIR/bin
  309. X    chown $LOGNAME $HOMEDIR/bin
  310. X    /bin/chgrp $GROUP $HOMEDIR/bin
  311. X    /bin/chmod 755 $HOMEDIR/bin
  312. X    chown $LOGNAME $HOMEDIR/bin
  313. X    $ECHO "Bin directory added for $LOGNAME."
  314. Xfi
  315. X
  316. X
  317. X
  318. X###
  319. X###  Grant Database Permissions
  320. X###
  321. X
  322. X#DBPATH=/prod/date.d; export DBPATH
  323. X#/usr/informix/bin/isql - - <<END
  324. X#database dateme;
  325. X#grant select on techs to $LOGNAME;
  326. X#grant insert on techs to $LOGNAME;
  327. X#grant update on techs to $LOGNAME;
  328. X#grant delete on techs to $LOGNAME;
  329. X#grant connect to $LOGNAME;
  330. X#END
  331. X
  332. X$ECHO "$LOGNAME added."
  333. X$ECHO "Press [ Return ] to continue...\c"
  334. Xread reply
  335. SHAR_EOF
  336. chmod 6755 utilities.d/m.d/adduser.old || echo "restore of utilities.d/m.d/adduser.old fails"
  337. echo "x - extracting utilities.d/m.d/deluser (Text)"
  338. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/deluser &&
  339. X#! /usr/lbin/ksh
  340. X# @(#)deluser.sh    1.1   DeltaDate 12/31/87   ExtrDate 12/31/87
  341. X###
  342. X###  You need to chown all files in the home directory you want to delete
  343. X###  to $LOGNAME before you can remove the home directory.
  344. X###
  345. X
  346. XLOGNAME=$1
  347. XECHO=echo
  348. XUIDBASE=2000
  349. X
  350. Xtrap "$ECHO 'Deluser aborted.'; exit 1" 2 3 15
  351. X
  352. Xtput clear
  353. X#stty sane erase '^h' echoe isig
  354. X
  355. X
  356. X
  357. Xcase $LOGNAME in
  358. X   dateme|pjc|root|nobody|daemon|sys|bin|uucp|nuucp|news|informix|telic|cadsys)
  359. X    $ECHO "Sorry, You don't have permission to delete that one."
  360. X    continue
  361. X    ;;
  362. Xesac
  363. X
  364. X###
  365. X### Check for validity - listed in password file.
  366. X###
  367. Xif grep '^'$LOGNAME: /etc/passwd > /dev/null 2>&1
  368. X   then
  369. X    ### Extract data for this user and display.
  370. X           setthem=`sed -n "s/^$LOGNAME:\(.*\):\(.*\):\(.*\):\(.*\):\(.*\):\(.*\)/passwd=\1;uid=\2;gid=\3;realname='\4';homedir=\5;shell=\6/p" /etc/passwd`
  371. X           eval $setthem
  372. X           group=`awk 'BEGIN{FS=":"} {if($3 == g) print $1}' g=$gid /etc/group`
  373. X
  374. X    ###
  375. X    ###  uid must be >= UIDBASE
  376. X    ###
  377. X    if [ "$uid" -lt $UIDBASE ]
  378. X          then    $ECHO "Sorry, You don't have permission to delete that one."
  379. X           continue
  380. X    fi
  381. X
  382. X    $ECHO "\nLogname:           $LOGNAME"
  383. X    $ECHO "Real name:         $realname"
  384. X           $ECHO "User id:           $uid"
  385. X           $ECHO "Group:             $group"
  386. X           $ECHO "Group number:      $gid"
  387. X           $ECHO "Home directory:    $homedir"
  388. X    $ECHO "\n\n"
  389. X           break
  390. X   else
  391. X    $ECHO "$LOGNAME is not listed in the password file. Try again."
  392. X    read reply
  393. Xfi
  394. X
  395. X
  396. X
  397. Xwhile true
  398. Xdo
  399. X    $ECHO "Do you wish to delete this user from the system  (y/n):  \c"
  400. X       read reply
  401. X
  402. X       case $reply in
  403. X       n|N)    break ;;
  404. X            y|Y)
  405. X        if [ "$homedir" != "/prod/date.d/cadsys.d" ]
  406. X              then
  407. X            ###  Not a Service Rep
  408. X            ###  Service Reps never had permission here
  409. X            DBPATH=/prod/date.d
  410. X            export DBPATH
  411. X/usr/informix/bin/isql - - <<END
  412. Xdatabase dateme;
  413. Xrevoke all on techs from $LOGNAME;
  414. Xrevoke all on turfs from $LOGNAME;
  415. Xrevoke all on techtime from $LOGNAME;
  416. Xrevoke all on factors from $LOGNAME;
  417. Xrevoke all on turfs from $LOGNAME;
  418. XEND
  419. X        fi
  420. X        DBPATH=/prod/date.d/cadsys.d
  421. X        export DBPATH
  422. X/usr/informix/bin/isql - - <<END
  423. Xdatabase cadsys;
  424. Xrevoke all on appt from $LOGNAME;
  425. Xrevoke all on grid from $LOGNAME;
  426. Xrevoke all on syserror from $LOGNAME;
  427. Xrevoke all on appt_time from $LOGNAME;
  428. Xrevoke all on sorder from $LOGNAME;
  429. Xrevoke all on sysdeflt from $LOGNAME;
  430. Xrevoke connect from $LOGNAME;
  431. XEND
  432. X            sed -e "/^$LOGNAME:/D" /etc/passwd > /tmp/passwd
  433. X              if [ $? -ne 0 ]
  434. X                       then    $ECHO "Unable to delete from password file."
  435. X                  exit
  436. X              fi
  437. X              chmod 744 /etc/passwd
  438. X              cp /tmp/passwd /etc/passwd
  439. X
  440. X            ###
  441. X            ###  CUSTOMIZE
  442. X            ###  if this is a service rep we don't want to remove homedir
  443. X            ###
  444. X            if [ "$homedir" != "/prod/date.d/cadsys.d" ]
  445. X                  then
  446. X                  find $homedir -exec /etc/chown $LOGNAME {} \;
  447. X                  rm -r $homedir
  448. X            fi
  449. X              $ECHO "\nUser removed from system."
  450. X              break;
  451. X              ;;
  452. X                   *)    $ECHO "Invalid reply."
  453. X                  continue ;;
  454. X           esac
  455. SHAR_EOF
  456. chmod 0777 utilities.d/m.d/deluser || echo "restore of utilities.d/m.d/deluser fails"
  457. echo "x - extracting utilities.d/m.d/junk (Text)"
  458. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/junk &&
  459. X            sed -e "/^$LOGNAME:/D" /etc/passwd > /tmp/passwd
  460. SHAR_EOF
  461. chmod 0644 utilities.d/m.d/junk || echo "restore of utilities.d/m.d/junk fails"
  462. echo "x - extracting utilities.d/m.d/junk.m (Text)"
  463. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/junk.m &&
  464. X###
  465. X###       .POPMENU
  466. X###    Printer Selection Menu
  467. X###
  468. X
  469. X.TITLE
  470. XPrinter Menu
  471. X
  472. X.TEXT 23 0
  473. XSelect A Printer.
  474. X
  475. X.SETENV BELL LPDEST=srv4e_700ps  Printer (srv4e_700ps) selected.
  476. Xsrv4e_700ps
  477. X
  478. X.SETENV BELL LPDEST=srv4e_700dm  Printer (srv4e_700dm) selected.
  479. Xsrv4e_700dm
  480. X
  481. X.SETENV BELL LPDEST=srv4e_811a  Printer (srv4e_811a) selected.
  482. Xsrv4e_811a
  483. X
  484. X.SETENV BELL LPDEST=srv4e_760c  Printer (srv4e_760c) selected.
  485. Xsrv4e_760c
  486. SHAR_EOF
  487. chmod 0644 utilities.d/m.d/junk.m || echo "restore of utilities.d/m.d/junk.m fails"
  488. echo "x - extracting utilities.d/m.d/passwdsrn.m (Text)"
  489. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/passwdsrn.m &&
  490. X.DEFINE_SCREEN passwdsrn
  491. X    window_title = "Password Screen"
  492. X    window_rows = 5
  493. X    window_cols = 26
  494. X    exit_last_field
  495. X
  496. X    field_name = $PASSWD
  497. X    field_label = Password
  498. X    field_row = 2
  499. X    field_col = 12
  500. X    field_length = 8
  501. X    field_edits = PROTECT
  502. X    field_prompt = "Enter password."
  503. XENDSCREEN
  504. SHAR_EOF
  505. chmod 0644 utilities.d/m.d/passwdsrn.m || echo "restore of utilities.d/m.d/passwdsrn.m fails"
  506. echo "x - extracting utilities.d/m.d/printer2.sh (Text)"
  507. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/printer2.sh &&
  508. XFrom uucp Tue Nov 28 16:07 PST 1989
  509. X>From uucp Tue Nov 28 15:56 PST 1989 remote from pacbell
  510. X>From srv.PacBell.COM!pjcondie  Tue Nov 28 14:35:31 1989 remote from mother
  511. XReceived: from pbuddy.srv.PacBell.COM (pbuddy-gw) by srv.PacBell.COM (4.0/SMI-4.0)
  512. X    id AA17298; Tue, 28 Nov 89 14:35:31 PST
  513. XReceived: from lacm2.srv.PacBell.COM by pbuddy.srv.PacBell.COM (4.0/SMI-4.0)
  514. X    id AA02251; Tue, 28 Nov 89 14:37:38 PST
  515. XDate: Tue, 28 Nov 89 14:37:38 PST
  516. XFrom: pjcondie@srv.PacBell.COM (Paul J. Condie)
  517. XMessage-Id: <8911282237.AA02251@pbuddy.srv.PacBell.COM>
  518. XTo: pcbox!pjc
  519. XSubject: Re:  printers.sh
  520. XStatus: R
  521. X
  522. X
  523. X----- Begin Included Message -----
  524. X
  525. X>From pbear2!ssl Tue Nov 28 14:31:29 1989
  526. XSubject: printers.sh
  527. XTo: pjc (Paul J. Condie(baer))
  528. XX-Mailer: ELM [version 2.2 PL0]
  529. X
  530. X###
  531. X###       Build lpoptions.m from lpoptions.menu
  532. X###    Printer Selection Menu
  533. X###
  534. X
  535. XDUMMY="zzzzzzzz"            # end-of-list marker
  536. X
  537. Xsetprinters() {                # make a function
  538. Xlpstat -a | grep accept | cut -d' ' -f1 | ( sort ; echo $DUMMY ) |
  539. Xfor i in `cat`
  540. Xdo
  541. X    if [ $i = $DUMMY ]        # hit last one?
  542. X    then
  543. X        echo $PRINTERS
  544. X    fi
  545. X    PRINTERS=$PRINTERS","$i        # concat
  546. Xdone ; }
  547. X
  548. XPRINTERS=$LPDEST`setprinters`        # now build it
  549. Xsed -e s/\$PRINTERS/$PRINTERS/ $BVPS/misc/lpoptions.menu > lpoptions.m
  550. X
  551. X
  552. X----- End Included Message -----
  553. X
  554. X
  555. X
  556. SHAR_EOF
  557. chmod 0644 utilities.d/m.d/printer2.sh || echo "restore of utilities.d/m.d/printer2.sh fails"
  558. echo "x - extracting utilities.d/m.d/printers.m (Text)"
  559. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/printers.m &&
  560. X###
  561. X###       .POPMENU
  562. X###    Printer Selection Menu
  563. X###
  564. X
  565. X.TITLE
  566. XPrinter Menu
  567. X
  568. X.TEXT 23 0
  569. XSelect A Printer.
  570. X
  571. X.SETENV BELL LPDEST=srv4e_700ps  Printer (srv4e_700ps) selected.
  572. Xsrv4e_700ps
  573. X
  574. X.SETENV BELL LPDEST=srv4e_700dm  Printer (srv4e_700dm) selected.
  575. Xsrv4e_700dm
  576. X
  577. X.SETENV BELL LPDEST=srv4e_811a  Printer (srv4e_811a) selected.
  578. Xsrv4e_811a
  579. X
  580. X.SETENV BELL LPDEST=srv4e_760c  Printer (srv4e_760c) selected.
  581. Xsrv4e_760c
  582. X
  583. X.POPMENU printers.m
  584. XPOP
  585. SHAR_EOF
  586. chmod 0644 utilities.d/m.d/printers.m || echo "restore of utilities.d/m.d/printers.m fails"
  587. echo "x - extracting utilities.d/m.d/printers.sh (Text)"
  588. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/printers.sh &&
  589. X###
  590. X###       Build a .POPMENU
  591. X###    Printer Selection Menu
  592. X###
  593. X
  594. Xecho ".TITLE" > printers.m
  595. Xecho "Printer Menu" >> printers.m
  596. X
  597. Xecho ".TEXT 23 0" >> printers.m
  598. Xecho "Select A Printer." >> printers.m
  599. X
  600. Xlpstat -p | awk '{ print $2 }' |
  601. Xfor i in `cat`
  602. Xdo
  603. X    echo ".SETENV BELL LPDEST=$i  Printer ($i) selected." >> printers.m
  604. X    echo "$i" >> printers.m
  605. Xdone
  606. SHAR_EOF
  607. chmod 0755 utilities.d/m.d/printers.sh || echo "restore of utilities.d/m.d/printers.sh fails"
  608. echo "x - extracting utilities.d/m.d/reportsrn.m (Text)"
  609. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/reportsrn.m &&
  610. X###    Screen to prompt user for report options.
  611. X###    Fields:
  612. X###        $FDATE    - From date.
  613. X###        $TDATE    - To date.
  614. X###        $PRIORITY - Priority
  615. X###        $LPDEST   - Printer Destination
  616. X###        $TARGET   - Print to terminal or printer.
  617. X
  618. X.DEFINE_SCREEN reportsrn
  619. X    window_title = "REPORT OPTIONS"
  620. X    window_rows = 10
  621. X    window_cols = 28
  622. X
  623. X    ###    $FDATE - From date.
  624. X
  625. X    field_name = $FDATE
  626. X    field_label = From
  627. X    field_row = 2
  628. X    field_col = 13
  629. X    field_length = 6
  630. X    field_type = DATE
  631. X    field_mask = "MM/DD/YY"
  632. X    field_mustenter
  633. X    field_prompt = "Enter starting date."
  634. X
  635. X    ###    $TDATE - To date.
  636. X
  637. X    field_name = $TDATE
  638. X    field_label = To
  639. X    field_row = 3
  640. X    field_col = 13
  641. X    field_length = 6
  642. X    field_type = DATE
  643. X    field_mask = "MM/DD/YY"
  644. X    field_mustenter
  645. X    field_prompt = "Enter starting date."
  646. X
  647. X    field_name = $PRIORITY
  648. X    field_label = Priority
  649. X    field_row = 5
  650. X    field_col = 13
  651. X    field_length = 6
  652. X    field_type = MENU
  653. X    field_range = "LOW,MEDIUM,HIGH"
  654. X    field_prompt = "Select priority level."
  655. X
  656. X    field_name = $LPDEST
  657. X    field_label = Printer
  658. X    field_row = 6
  659. X    field_col = 13
  660. X    field_length = 11
  661. X    field_type = SET
  662. X    field_range = "srv4e_700ps,srv4e_811a"
  663. X    field_prompt = "Select printer."
  664. X
  665. X    field_name = $TARGET
  666. X    field_label = "Print To"
  667. X    field_row = 7
  668. X    field_col = 13
  669. X    field_length = 8
  670. X    field_type = SET
  671. X    field_range = "TERMINAL,PRINTER,BOTH"
  672. X    field_prompt = "Print to terminal or printer."
  673. XENDSCREEN
  674. SHAR_EOF
  675. chmod 0644 utilities.d/m.d/reportsrn.m || echo "restore of utilities.d/m.d/reportsrn.m fails"
  676. echo "x - extracting utilities.d/m.d/sadmin.m (Text)"
  677. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/sadmin.m &&
  678. X###    sadmin.m
  679. X###    System administration menu(1) script file.
  680. X###
  681. X###  Contains:
  682. X###    Add New User To System.
  683. X###    Remove User From System.
  684. X
  685. XGROUP=users                # default group for new users
  686. XHOMEDIRS=/tmp                # where to make home dir for new users
  687. XPRINTER=""                # default printer destination
  688. XDPROFILE=                # skeleton .profile for new users
  689. XLOGSHELL=/bin/ksh            # default login shell for new users
  690. XPASSWDAGE=",O/"                # password entry for new users
  691. XUIDBASE=1000                # new users uid start from here
  692. X
  693. XPWDFILE=/etc/passwd            # password file
  694. XGROUPFILE=/etc/group
  695. X
  696. X.TITLE
  697. X$LOGNAME ...System Administration...$DATE
  698. X.TITLE
  699. X...Menu...$TIME
  700. X.LINE
  701. X
  702. X.GETINPUT adduser
  703. XAdd New User To System.
  704. X
  705. X.GETINPUT deluser
  706. XRemove User From System.
  707. X
  708. X.GETINPUT dbapermissions
  709. XSet Database Permissions.
  710. X
  711. X
  712. X
  713. X###    Screen Definitions
  714. X
  715. X.DEFINE_SCREEN adduser
  716. X    exit_on_cancel
  717. X    after_screen = "adduser \"$logname\" \"$PASSWDAGE\" \"$UID\" \"$GID\" \
  718. X                \"$realname\" \"$HOMEDIR\" \"$LOGSHELL\" \
  719. X                \"$DPROFILE\" \"$PRINTER\" \"$PWDFILE\" \
  720. X                \"$GROUPFILE\"
  721. X            exit $?"
  722. X
  723. X    field_name = $logname
  724. X    field_label = "Login Name"
  725. X    field_row = 2, field_col = 19
  726. X    field_length = 8
  727. X    field_type = ALPHANUM, field_mask = "A       "
  728. X    field_min = 3
  729. X    field_mustenter
  730. X    ### make sure logname is unique and tag on logname to homedirs
  731. X    after_field = "grep $logname $PWDFILE >/dev/null 2>/dev/null
  732. X            if [ $? -eq 0 ]
  733. X               then echo \"Login already exists.\"
  734. X                exit 1
  735. X               else echo \"\$HOMEDIR=$HOMEDIRS/$logname\"
  736. X                exit 0
  737. X            fi"
  738. X
  739. X    field_name = $realname
  740. X    field_label = "Real Name"
  741. X    field_row = 3, field_col = 19
  742. X    field_length = 25
  743. X    field_type = ALPHANUM
  744. X    field_mustenter
  745. X
  746. X    field_name = $UID
  747. X    field_label = "User ID"
  748. X    field_row = 4, field_col = 19
  749. X    field_length = 5
  750. X    field_noinput
  751. X    field_terminator = "  "
  752. X
  753. X    field_name = $GROUP
  754. X    field_label = "Group"
  755. X    field_row = 5, field_col = 19
  756. X    field_length = 10
  757. X    field_noinput
  758. X    field_terminator = "  "
  759. X
  760. X    field_name = $GID
  761. X    field_label = "Group ID"
  762. X    field_row = 6, field_col = 19
  763. X    field_length = 5
  764. X    field_noinput
  765. X    field_terminator = "  "
  766. X
  767. X    field_name = $HOMEDIR
  768. X    field_label = "Home Directory"
  769. X    field_row = 7, field_col = 19
  770. X    field_length = 25
  771. X    field_noinput
  772. X    field_terminator = "  "
  773. X
  774. X    field_name = $PRINTER
  775. X    field_label = "Default Printer"
  776. X    field_row = 8, field_col = 19
  777. X    field_type = MENU
  778. X    ### build field_range based on available printers
  779. X    field_range = "`lpstat -p | awk '{ print $2 }' |
  780. X            for printer in `cat`
  781. X            do
  782. X                if [ \"$printer\" = \"unknown\" ]
  783. X                   then continue
  784. X                fi
  785. X                if [ -z \"$RANGEVALUES\" ]
  786. X                         then RANGEVALUES=$printer
  787. X                         else RANGEVALUES=\"$RANGEVALUES,$printer\"
  788. X                fi
  789. X                echo $RANGEVALUES > /tmp/menu.tmpfile
  790. X            done
  791. X            cat /tmp/menu.tmpfile`"
  792. X
  793. X    ### get next unused uid greater than UIDBASE from password file
  794. X    ### get gid from group file using GROUP
  795. X    field_defaults = "UID=`awk 'BEGIN{ FS=\":\" } { x[$3] = 1 } END \
  796. X        { i = UIDBASE; while (x[i] == 1) { ++i }; print i }' \
  797. X            UIDBASE=$UIDBASE $PWDFILE`
  798. X        GID=`awk 'BEGIN{FS=\":\"} {if($1 == g) print $3}' g=$GROUP \
  799. X            $GROUPFILE`
  800. X        echo \\"\\" \\"\\" $UID $GROUP $GID $HOMEDIRS \\"$PRINTER\\""
  801. XENDSCREEN
  802. X
  803. X
  804. X
  805. X.DEFINE_SCREEN deluser
  806. X    exit_on_cancel
  807. X    after_screen = "deluser \"$logname\" \"$PWDFILE\"
  808. X            exit $?"
  809. X
  810. X    field_name = $logname
  811. X    field_label = "Login Name"
  812. X    field_row = 2, field_col = 19
  813. X    field_length = 8
  814. X    field_type = ALPHANUM, field_mask = "A       "
  815. X    field_min = 3
  816. X    field_mustenter
  817. X    ### make sure logname exists and set other fields
  818. X    after_field = "grep $logname $PWDFILE >/dev/null 2>/dev/null
  819. X        if [ $? -ne 0 ]
  820. X              then    echo \"Login not found.\"
  821. X            exit 1
  822. X        fi
  823. X               setthem=`sed -n \"s/^$logname:\(.*\):\(.*\):\(.*\):\(.*\):\(.*\):\(.*\)/passwd=\1;uid=\2;gid=\3;realname='\4';homedir=\5;shell=\6/p\" /etc/passwd`
  824. X           eval $setthem
  825. X           group=`awk 'BEGIN{FS=\":\"} {if($3 == g) print $1}' g=$gid /etc/group`
  826. X    if [ \"$uid\" -lt $UIDBASE ]
  827. X          then    echo \"Sorry, You don't have permission to delete that one.\"
  828. X           exit 1
  829. X    fi
  830. X    echo \"$logname\" \"$realname\" \"$uid\" \"$group\" \"$gid\" \"$homedir\"
  831. X    exit 0"
  832. X
  833. X    field_name = $realname
  834. X    field_label = "Real Name"
  835. X    field_row = 3, field_col = 19
  836. X    field_length = 25
  837. X    field_type = ALPHANUM
  838. X    field_noinput
  839. X    field_terminator = "  "
  840. X
  841. X    field_name = $UID
  842. X    field_label = "User ID"
  843. X    field_row = 4, field_col = 19
  844. X    field_length = 5
  845. X    field_noinput
  846. X    field_terminator = "  "
  847. X
  848. X    field_name = $GROUP
  849. X    field_label = "Group"
  850. X    field_row = 5, field_col = 19
  851. X    field_length = 10
  852. X    field_noinput
  853. X    field_terminator = "  "
  854. X
  855. X    field_name = $GID
  856. X    field_label = "Group ID"
  857. X    field_row = 6, field_col = 19
  858. X    field_length = 5
  859. X    field_noinput
  860. X    field_terminator = "  "
  861. X
  862. X    field_name = $HOMEDIR
  863. X    field_label = "Home Directory"
  864. X    field_row = 7, field_col = 19
  865. X    field_length = 25
  866. X    field_noinput
  867. X    field_terminator = "  "
  868. X
  869. X    field_name = $DELETE
  870. X    field_label = "Delete"
  871. X    field_row = 9, field_col = 19
  872. X    field_range = "YES,NO"
  873. X    field_edits = SET
  874. X
  875. X
  876. X    field_defaults = "echo \\"\\" \\"\\" \\"\\" \\"\\" \\"\\""
  877. XENDSCREEN
  878. X
  879. X
  880. X.DEFINE_SCREEN dbapermissions
  881. X    after_screen = "setdbaperm hits he"
  882. X
  883. X    ### Column Headings
  884. X    text = 2 3 "\UUsers\N"
  885. X    text = 2 16 "\USelect\N"
  886. X    text = 2 23 "\UUpdate\N"
  887. X    text = 2 30 "\UInsert\N"
  888. X    text = 2 37 "\UDelete\N"
  889. X    text = 2 44 "\UIndex\N"
  890. X    text = 2 51 "\UAlter\N"
  891. X
  892. X    ### Retrieve current database permissions
  893. X    ### Save for latter comparison on what logins got changed.
  894. X    ### Set variables with current permissions
  895. X    field_defaults = "LINECNT=0
  896. X            DATA=\"\"
  897. X            isql hits - <<-END 2> /dev/null | tee -a /tmp/tmpfile2 |
  898. X                info tables access for he;
  899. XEND
  900. X            for i in `cat`
  901. X            do
  902. X                LINECNT=`expr $LINECNT + 1`
  903. X                [ $LINECNT -le 7 ] && continue
  904. X                DATA=\"$DATA $i\"
  905. X                echo $DATA > /tmp/menu.tmpfile
  906. X            done
  907. X            cat /tmp/menu.tmpfile"
  908. X
  909. X    field_name = $USER[0]
  910. X    field_row = 3, field_col = 3
  911. X    field_length = 10
  912. X    field_edits = ALPHANUM
  913. X    after_field = "[ \"${USER[0]}\" = \"public\" ] && exit 0
  914. X        [ \"${USER[0]}\" = \"\" ] && exit 0
  915. X        grep \"${USER[0]}\" $PWDFILE >/dev/null 2>/dev/null
  916. X        if [ $? -ne 0 ]
  917. X              then    echo \"Login not found.\"
  918. X            exit 1
  919. X           else exit 0
  920. X        fi"
  921. X
  922. X    field_name = $SELECT[0]
  923. X    field_row = 3, field_col = 17
  924. X    field_edits = SET
  925. X    field_range = ",All,No"
  926. X
  927. X    field_name = $UPDATE[0]
  928. X    field_row = 3, field_col = 24
  929. X    field_edits = SET
  930. X    field_range = ",All,No"
  931. X
  932. X    field_name = $INSERT[0]
  933. X    field_row = 3, field_col = 31
  934. X    field_edits = SET
  935. X    field_range = ",Yes,No"
  936. X
  937. X    field_name = $DELETE[0]
  938. X    field_row = 3, field_col = 38
  939. X    field_edits = SET
  940. X    field_range = ",Yes,No"
  941. X
  942. X    field_name = $INDEX[0]
  943. X    field_row = 3, field_col = 45
  944. X    field_edits = SET
  945. X    field_range = ",Yes,No"
  946. X
  947. X    field_name = $ALTER[0]
  948. X    field_row = 3, field_col = 52
  949. X    field_edits = SET
  950. X    field_range = ",Yes,No"
  951. X
  952. X    field_name = $USER[1]
  953. X    field_row = 4, field_col = 3
  954. X    field_length = 10
  955. X    field_edits = ALPHANUM
  956. X    ### accept public login
  957. X    after_field = "[ \"${USER[1]}\" = \"public\" ] && exit 0
  958. X        [ \"${USER[1]}\" = \"\" ] && exit 0
  959. X        grep \"${USER[1]}\" $PWDFILE >/dev/null 2>/dev/null
  960. X        if [ $? -ne 0 ]
  961. X              then    echo \"Login not found.\"
  962. X            exit 1
  963. X           else [ \"${SELECT[1]}\" = \"\" ] && echo \"\$SELECT[1]=All \$UPDATE[1]=No \$INSERT[1]=No \$DELETE[1]=No \$INDEX[1]=No \$ALTER[1]=No\"
  964. X            exit 0
  965. X        fi"
  966. X
  967. X    field_name = $SELECT[1]
  968. X    field_row = 4, field_col = 17
  969. X    field_edits = SET
  970. X    field_range = ",All,No"
  971. X
  972. X    field_name = $UPDATE[1]
  973. X    field_row = 4, field_col = 24
  974. X    field_edits = SET
  975. X    field_range = ",All,No"
  976. X
  977. X    field_name = $INSERT[1]
  978. X    field_row = 4, field_col = 31
  979. X    field_edits = SET
  980. X    field_range = ",Yes,No"
  981. X
  982. X    field_name = $DELETE[1]
  983. X    field_row = 4, field_col = 38
  984. X    field_edits = SET
  985. X    field_range = ",Yes,No"
  986. X
  987. X    field_name = $INDEX[1]
  988. X    field_row = 4, field_col = 45
  989. X    field_edits = SET
  990. X    field_range = ",Yes,No"
  991. X
  992. X    field_name = $ALTER[1]
  993. X    field_row = 4, field_col = 52
  994. X    field_edits = SET
  995. X    field_range = ",Yes,No"
  996. XENDSCREEN
  997. SHAR_EOF
  998. chmod 0644 utilities.d/m.d/sadmin.m || echo "restore of utilities.d/m.d/sadmin.m fails"
  999. echo "x - extracting utilities.d/m.d/sample.m (Text)"
  1000. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/sample.m &&
  1001. X###     Sample.Menu
  1002. X###    A sample menu script file.
  1003. X
  1004. X.TITLE
  1005. X$LOGNAME ...SAMPLE...$DATE
  1006. X.TITLE
  1007. X$MAIL...MENU...$TIME
  1008. X.LINE
  1009. X
  1010. X.GNAME sample sample.m
  1011. X
  1012. X.INCLUDE reportsrn.m
  1013. X.INCLUDE passwdsrn.m
  1014. X
  1015. X.TEXT 22 61
  1016. X"?" for help :
  1017. X
  1018. X.SYSTEM echo "Press [ ^d ] to return to menu ..."; ksh
  1019. XUnix System.
  1020. X
  1021. X.SYSTEM who; \
  1022. X    echo "Press [ Return ] to continue ..."; \
  1023. X    read reply
  1024. XShow Who Is On The System.
  1025. X
  1026. X.SYSTEM more sample.m; echo "Press [ Return ] to continue ...\c"; read reply
  1027. XDisplay sample.m script file.
  1028. X
  1029. X.POPMENU printers.m
  1030. XSelect Printer Menu ($LPDEST).
  1031. X
  1032. X.GETINPUT reportsrn
  1033. XA Sample GETINPUT Screen.
  1034. X
  1035. X.GETINPUT passwdsrn
  1036. XA Sample Password Screen.
  1037. X
  1038. X.SPACE
  1039. X
  1040. X.EXIT
  1041. XExit Menu Program.
  1042. SHAR_EOF
  1043. chmod 0644 utilities.d/m.d/sample.m || echo "restore of utilities.d/m.d/sample.m fails"
  1044. echo "x - extracting utilities.d/m.d/setdbaperm (Text)"
  1045. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/setdbaperm &&
  1046. X#!/bin/ksh
  1047. X
  1048. X###    $1    - database
  1049. X###    $2    - table name
  1050. X
  1051. X[ $# -ne 2 ] && exit 1            # validate argument count
  1052. X
  1053. XDATABASE=$1
  1054. XTABLE=$2
  1055. XTMPFILE=/tmp/menutmp
  1056. X
  1057. X
  1058. X#  Get current settings
  1059. Xisql "$DATABASE" - <<-END 2> /dev/null > $TMPFILE
  1060. X    info tables access for $TABLE;
  1061. XEND
  1062. X
  1063. X
  1064. X#  Loop through each user
  1065. Xlet i=0
  1066. Xfor dummy in "${USER[@]}"
  1067. Xdo
  1068. X    GC=""                        # Grant Commands
  1069. X    grep "^${USER[i]}" $TMPFILE | read line
  1070. X    if [ $? -ne 0 ]
  1071. X       then    # "No match "${USER[i]}" - add new login's permissions."
  1072. X        GC="${GC}grant connect to ${USER[i]};\n"
  1073. X        [ "${SELECT[i]}" = "All" ] && 
  1074. X            GC="${GC}grant select on $TABLE to ${USER[i]};\n"
  1075. X        [ "${UPDATE[i]}" = "All" ] && 
  1076. X            GC="${GC}grant update on $TABLE to ${USER[i]};\n"
  1077. X        [ "${INSERT[i]}" = "Yes" ] && 
  1078. X            GC="${GC}grant insert on $TABLE to ${USER[i]};\n"
  1079. X        [ "${DELETE[i]}" = "Yes" ] && 
  1080. X            GC="${GC}grant delete on $TABLE to ${USER[i]};\n"
  1081. X        [ "${INDEX[i]}" = "Yes" ] && 
  1082. X            GC="${GC}grant index on $TABLE to ${USER[i]};\n"
  1083. X        [ "${ALTER[i]}" = "Yes" ] && 
  1084. X            GC="${GC}grant alter on $TABLE to ${USER[i]};\n"
  1085. X       else    # "Match "${USER[i]}" - check if permissions have changed."
  1086. X        set $line
  1087. X        PUSER=$1; PSELECT=$2; PUPDATE=$3; PINSERT=$4; 
  1088. X        PDELETE=$5; PINDEX=$6; PALTER=$7
  1089. X        if [ "${SELECT[i]}" != "$PSELECT" ]
  1090. X           then # "Select changed. $PSELECT-${SELECT[i]}"
  1091. X            [ "${SELECT[i]}" = "All" ] && 
  1092. X                GC="${GC}grant select on $TABLE from ${USER[i]};\n"
  1093. X            [ "${SELECT[i]}" = "No" ] && 
  1094. X                GC="${GC}revoke select on $TABLE from ${USER[i]};\n"
  1095. X        fi
  1096. X        if [ "${UPDATE[i]}" != "$PUPDATE" ]
  1097. X           then # "Select changed. $PUPDATE-${UPDATE[i]}"
  1098. X            [ "${UPDATE[i]}" = "All" ] && 
  1099. X                GC="${GC}grant update on $TABLE from ${USER[i]};\n"
  1100. X            [ "${UPDATE[i]}" = "No" ] && 
  1101. X                GC="${GC}revoke update on $TABLE from ${USER[i]};\n"
  1102. X        fi
  1103. X        if [ "${INSERT[i]}" != "$PINSERT" ]
  1104. X           then # "Select changed. $PINSERT-${INSERT[i]}"
  1105. X            [ "${INSERT[i]}" = "Yes" ] && 
  1106. X                GC="${GC}grant insert on $TABLE from ${USER[i]};\n"
  1107. X            [ "${INSERT[i]}" = "No" ] && 
  1108. X                GC="${GC}revoke insert on $TABLE from ${USER[i]};\n"
  1109. X        fi
  1110. X        if [ "${DELETE[i]}" != "$PDELETE" ]
  1111. X           then # "Select changed. $PDELETE-${DELETE[i]}"
  1112. X            [ "${DELETE[i]}" = "Yes" ] && 
  1113. X                GC="${GC}grant delete on $TABLE from ${USER[i]};\n"
  1114. X            [ "${DELETE[i]}" = "No" ] && 
  1115. X                GC="${GC}revoke delete on $TABLE from ${USER[i]};\n"
  1116. X        fi
  1117. X        if [ "${INDEX[i]}" != "$PINDEX" ]
  1118. X           then # "Select changed. $PINDEX-${INDEX[i]}"
  1119. X            [ "${INDEX[i]}" = "Yes" ] && 
  1120. X                GC="${GC}grant index on $TABLE from ${USER[i]};\n"
  1121. X            [ "${INDEX[i]}" = "No" ] && 
  1122. X                GC="${GC}revoke index on $TABLE from ${USER[i]};\n"
  1123. X        fi
  1124. X        if [ "${ALTER[i]}" != "$PALTER" ]
  1125. X           then # "Select changed. $PALTER-${ALTER[i]}"
  1126. X            [ "${ALTER[i]}" = "Yes" ] && 
  1127. X                GC="${GC}grant alter on $TABLE from ${USER[i]};\n"
  1128. X            [ "${ALTER[i]}" = "No" ] && 
  1129. X                GC="${GC}revoke alter on $TABLE from ${USER[i]};\n"
  1130. X        fi
  1131. X    fi
  1132. X    echo "$GC\n" >> /tmp/grantstuff
  1133. X    let i=i+1                # increment index
  1134. Xdone
  1135. SHAR_EOF
  1136. chmod 0755 utilities.d/m.d/setdbaperm || echo "restore of utilities.d/m.d/setdbaperm fails"
  1137. echo "x - extracting utilities.d/m.d/suid_exec.c (Text)"
  1138. sed 's/^X//' << 'SHAR_EOF' > utilities.d/m.d/suid_exec.c &&
  1139. X#include    <stdio.h>
  1140. X#include    <fcntl.h>
  1141. X#include    <sys/stat.h>
  1142. X
  1143. X#define    ROOT    0
  1144. X
  1145. Xmain (argc, argv)
  1146. X    int    argc;
  1147. X    char    *argv[];
  1148. X{
  1149. X    int        fd;
  1150. X    struct stat    sbuf;
  1151. X    char        command[200];
  1152. X    int        i;
  1153. X
  1154. X
  1155. X    if (argc < 2)
  1156. X        exit (1);
  1157. X
  1158. X    if ((fd = open (argv[1], O_RDONLY)) <= 0)
  1159. X        exit (1);                /* can't open */
  1160. X
  1161. X    /* Get file status information */
  1162. X       if (fstat (fd, &sbuf) < 0)
  1163. X        exit (1);
  1164. X
  1165. X    /* Is this a regular file */
  1166. X    if ((sbuf.st_mode & S_IFREG) != S_IFREG)
  1167. X        exit (1);
  1168. X
  1169. X    /* does root own this file */
  1170. X    if (sbuf.st_uid != ROOT)
  1171. X        exit (1);
  1172. X
  1173. X    /* Is file executable by owner(root) */
  1174. X    if ((sbuf.st_mode & S_IEXEC) != S_IEXEC)
  1175. X        exit (1);
  1176. X
  1177. X    /* Is set uid bit on */
  1178. X    if ((sbuf.st_mode & S_ISUID) != S_ISUID)
  1179. X        exit (1);
  1180. X
  1181. X    setuid (ROOT);
  1182. X
  1183. X    strcpy (command, argv[1]);            /* program name */
  1184. X    for (i = 2; i < argc; i++)
  1185. X    {
  1186. X        strcat (command, " ");
  1187. X        strcat (command, "\"");
  1188. X        strcat (command, argv[i]);        /* program arguments */
  1189. X        strcat (command, "\"");
  1190. X    }
  1191. X
  1192. X    system (command);
  1193. X}
  1194. X/* Paul J. Condie  2-89 */
  1195. SHAR_EOF
  1196. chmod 0644 utilities.d/m.d/suid_exec.c || echo "restore of utilities.d/m.d/suid_exec.c fails"
  1197. echo "x - extracting utilities.d/msgbox.d/displaytxt.c (Text)"
  1198. sed 's/^X//' << 'SHAR_EOF' > utilities.d/msgbox.d/displaytxt.c &&
  1199. Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
  1200. X
  1201. X/*  FUNCTION:    displaytext()
  1202. X**        Displays a string to the screen with atributes.
  1203. X**  ARGS:    
  1204. X**        win    curses window to display to
  1205. X**        row    screen row
  1206. X**        col    screen col
  1207. X**        s    the string
  1208. X**  RETURNS:    none
  1209. X*/
  1210. X
  1211. X#include    <curses.h>
  1212. X
  1213. Xdisplaytext (win, row, col, s)
  1214. X    WINDOW    *win;
  1215. X    int    row, col;
  1216. X    char    s[];
  1217. X{
  1218. X    int    i;
  1219. X
  1220. X    wmove (win, row, col);
  1221. X
  1222. X/*
  1223. X**    Now display looking for terminal attributes.
  1224. X*/
  1225. X      for (i = 0; s[i] != '\0'; i++)
  1226. X      {
  1227. X         if (s[i] == '\\')
  1228. X     {
  1229. X#ifdef BSD
  1230. X        if (s[i+1] != 'N') s[i+1] = 'S';   /* Berk only supports standout */
  1231. X#endif
  1232. X            switch (s[++i])
  1233. X            {
  1234. X           case 'n':    /* newline */
  1235. X            wmove (win, ++row, col);
  1236. X            break;
  1237. X
  1238. X           case 'S':
  1239. X#ifdef BSD
  1240. X            wstandout (win);
  1241. X#else
  1242. X               wattrset (win, win->_attrs|A_STANDOUT);
  1243. X#endif
  1244. X            break;
  1245. X           case 'B':
  1246. X#ifdef SYS5
  1247. X            wattrset (win, win->_attrs|A_BOLD);
  1248. X#endif
  1249. X            break;
  1250. X           case 'U':
  1251. X#ifdef SYS5
  1252. X            wattrset (win, win->_attrs|A_UNDERLINE);
  1253. X#endif
  1254. X            break;
  1255. X           case 'D':
  1256. X#ifdef SYS5
  1257. X            wattrset (win, win->_attrs|A_DIM);
  1258. X#endif
  1259. X            break;
  1260. X           case 'R':
  1261. X#ifdef SYS5
  1262. X            wattrset (win, win->_attrs|A_REVERSE);
  1263. X#endif
  1264. X            break;
  1265. X           case 'L':
  1266. X#ifdef SYS5
  1267. X            wattrset (win, win->_attrs|A_BLINK);
  1268. X#endif
  1269. X            break;
  1270. X           case 'N': 
  1271. X#ifdef BSD
  1272. X            wstandend (win);
  1273. X#else
  1274. X            wattrset (win, A_NORMAL);
  1275. X#endif
  1276. X            break;
  1277. X        }
  1278. X     }
  1279. X         else
  1280. X            waddch (win, s[i]);
  1281. X      }
  1282. X}
  1283. SHAR_EOF
  1284. chmod 0644 utilities.d/msgbox.d/displaytxt.c || echo "restore of utilities.d/msgbox.d/displaytxt.c fails"
  1285. echo "x - extracting utilities.d/msgbox.d/makefile (Text)"
  1286. sed 's/^X//' << 'SHAR_EOF' > utilities.d/msgbox.d/makefile &&
  1287. X###    Special function targets begin with a dot.
  1288. X###    Target name that begin with a dot are never used as the starting 
  1289. X###    target, unless specifically requested as an argument on the command
  1290. X###    line.
  1291. X
  1292. X#.SILENT:    # inhibit the display of command lines (@)
  1293. X#.IGNORE:    # ignore exit codes from command lines (-)
  1294. X
  1295. XPGM        = msgbox
  1296. XINSTALLDIR     = 
  1297. XTARGET_ARCH    = sys5
  1298. X
  1299. XLIBS    = ../../libgeti.a -lcurses
  1300. X
  1301. X###    Flags
  1302. XINCDIR        = ../libgeti.d
  1303. XCPPFLAGS    =
  1304. XCFLAGS        = -O -I$(INCDIR)
  1305. XLDFLAGS        =
  1306. XLINTFLAGS    =
  1307. X
  1308. X###    Source Files
  1309. XPERFILES     = 
  1310. XACEFILES    =
  1311. XCFILES        = msgbox.c
  1312. XC+FILES        =
  1313. XECFILES        =
  1314. XHFILES        =
  1315. X
  1316. XOBJECTS = $(CFILES:.c=.o)
  1317. XLINTFILES = $(SOURCES:.c=.ln)
  1318. X
  1319. X#all:    $(PGM) install
  1320. X
  1321. X###    Conditional Macro Definitions
  1322. X#debug := CFLAGS= -g
  1323. X#profile := CFLAGS= -pg -O
  1324. X
  1325. X###    Targets and Dependencies
  1326. X###    target [target ...]: [dependency ...]
  1327. X###        [command]            # target rule
  1328. X###        ...
  1329. X###    * If there is no rule for a target entry, make looks for an implicit 
  1330. X###      rule to use.
  1331. X###    * Line breaks within a rule are significant in that each command line
  1332. X###      is performed by a separate process or shell.
  1333. X###    * Make invokes a shell to process a command line if that line contains
  1334. X###      any shell metacharacters, (;,<,>,>>,|,...).
  1335. X###  The $@ = target name
  1336. X###    @command - inhibit the display of a given command line
  1337. X###    -command - continue processing regardless of command's exit code.
  1338. X###    -@command - works
  1339. X
  1340. X$(PGM):    $(OBJECTS)
  1341. X    $(CC) $(CFLAGS) $(OBJECTS) $(LIBS) -o $@
  1342. X    @echo 
  1343. X    size $@
  1344. X
  1345. Xclean:
  1346. Xcpio:
  1347. X
  1348. Xinstall:
  1349. X    mv *.frm $(INSTALLDIR)
  1350. X
  1351. Xlint:    $(LINTFILES)
  1352. X    $(LINT.c) $(LINTFILES)
  1353. X
  1354. Xprint:
  1355. Xshar:
  1356. X
  1357. X
  1358. X###    Implicit Rules
  1359. X###    Suffixes should be ordered from target to dependency
  1360. X###    Make scans the SUFFIXES from left to right until it finds a match.
  1361. X###    The .SUFFIXES: on a line by itself puts yours at the head of the list.
  1362. X###    ex: .o .c .c~
  1363. X###    Dynamic Macros:
  1364. X###        $@  Current target
  1365. X###        $?  List of dependencies newer than the target.
  1366. X###        $<  Name of the dependency file.
  1367. X###        $*  Basename of the current target(stripped of suffix).
  1368. X###        $%  For libraries, member being processed.
  1369. X###    Dynamic Macro Modifiers:
  1370. X###        F   Filename part  ex. $(@F)
  1371. X###        D   Directory part
  1372. X.SUFFIXES:
  1373. X.SUFFIXES: .o .ec .ec~ .c .c~ .h .h~
  1374. X
  1375. X.c~.c:
  1376. X    $(GET) $<
  1377. X.h~.h:
  1378. X    $(GET) $<
  1379. X.c.o:
  1380. X    $(CC) -c $(CFLAGS) $*.c
  1381. X.c~.o:
  1382. X    $(GET) -p $<> $*.c
  1383. X    $(CC) -c $(CFLAGS) $*.c
  1384. X    rm $*.c
  1385. X.ec.o:
  1386. X    esql $(CFLAGS) -c $<
  1387. X    rm -f $*.c
  1388. X.ec~.o:
  1389. X    $(GET) -p $<> $*.ec
  1390. X    esql $(CFLAGS) -c $<
  1391. X    rm $*.ec
  1392. X    rm $*.c
  1393. SHAR_EOF
  1394. chmod 0666 utilities.d/msgbox.d/makefile || echo "restore of utilities.d/msgbox.d/makefile fails"
  1395. echo "x - extracting utilities.d/msgbox.d/msgbox.1 (Text)"
  1396. sed 's/^X//' << 'SHAR_EOF' > utilities.d/msgbox.d/msgbox.1 &&
  1397. X. \ %W% DeltaDate %G% ExtrDate %H% 
  1398. X.po 6
  1399. X.TH MSGBOX 1 "" "Menu Utility"
  1400. X
  1401. X.SH \s9NAME\s0
  1402. Xmsgbox \- place a message in a STANDOUT bordered box; center box horizontally
  1403. X
  1404. X.SH SYNOPSIS
  1405. Xmsgbox msg [TopRow]
  1406. X
  1407. X.SH DESCRIPTION
  1408. X.I Msgbox 
  1409. Xplaces \fBmsg\fP, a message of 1 - 78 characters in a curses window bordered
  1410. Xby STANDOUT attributes.  The window, called "box" from here on, is 5 rows
  1411. Xhigh:  Row 1 - STANDOUT border; Row 2 - blank; Row 3 - \fBmsg\fP; Row 4 - blank;
  1412. XRow 5 - STANDOUT border.
  1413. X.P
  1414. XThe optional argument, \fBTopRow\fP, determines which screen row on which to
  1415. Xstart the box.  (0, 0 are assumed to be the home coordinates of the screen.)
  1416. XIf \fBTopRow\fP is omitted, non-numeric, or out of the range 0 - 19, the box
  1417. Xwill be started on row 0.
  1418. X
  1419. X.SH FILES
  1420. X/eng/lib/libgeti.a, the \fBGetInput(3X)\fP library containing drawbox()
  1421. X
  1422. X.SH AUTHOR
  1423. XR. Stephen Price
  1424. X
  1425. X.SH DIAGNOSTICS
  1426. X\fImsgbox\fP returns exit code zero if it was successful, 1 if the arg count is 
  1427. Xbad, and 2 if \fBmsg\fP length is less than 1 or greater than 78.
  1428. X
  1429. X.SH BUGS
  1430. XSTANDOUT attribute is not produced using the curses provided on Convergent
  1431. XTechnologies Mighty Frame.  The curses taken from a Convergent Technologies 
  1432. XMega Frame must be used on a Convergent Technologies Mighty Frame or S320.
  1433. SHAR_EOF
  1434. chmod 0644 utilities.d/msgbox.d/msgbox.1 || echo "restore of utilities.d/msgbox.d/msgbox.1 fails"
  1435. echo "x - extracting utilities.d/msgbox.d/msgbox.c (Text)"
  1436. sed 's/^X//' << 'SHAR_EOF' > utilities.d/msgbox.d/msgbox.c &&
  1437. X
  1438. Xstatic char Sccsid[] = "%W%    DeltaDate %G%    ExtrDate %H%";
  1439. X
  1440. X/* msgbox.c -- Displaying a user message in a STANDOUT box (window).
  1441. X *
  1442. X *             Draw and center a curses window and place a message in the box.
  1443. X *             Center the box horizontally, making the box 2 characters
  1444. X *             wider than the message contained in argv[1].
  1445. X *             Place the top row of the box on the line indicated by argv[2]. 
  1446. X *
  1447. X *           The box will be 5 rows in height: 
  1448. X *            border (STANDOUT)
  1449. X *            blank row
  1450. X *            message
  1451. X *            blank row
  1452. X *            border (STANDOUT)
  1453. X *
  1454. X *
  1455. X * files:      /eng/lib/libgeti.a, the GetInput library containing drawbox()
  1456. X *
  1457. X * input:      msg: argv[1] holds a message -- a string of 1 - 78 chars.
  1458. X *                 (quotation mark delimited, if there is embedded whitespace)
  1459. X *             BoxTop: argv[2] holds the screen line on which to 
  1460. X *               start the message box.  
  1461. X *                 [This is optional.  If not given or if atoi(argv[2]) is
  1462. X *                  out of range (0-19), 0 is used.]
  1463. X *
  1464. X * output:     The MsgWind will appear with the msg on the terminal.
  1465. X *           There will ALWAYS be a MsgWind, even if there are parameter
  1466. X *           errors. See "exit value" below.
  1467. X *
  1468. X * exit value: Exit codes indicate execution status:
  1469. X *           NO_ERR -- Gut, alles in ordnung!
  1470. X *             ARG_COUNT_ERR -- Failure: improper arg count (should be 2 or 3)
  1471. X *           MSG_LEN_ERROR -- strlen(argv[2]) < 1 or > 78
  1472. X *        
  1473. X *           The legal range of rows is 0 - 19 to fit box on screen;
  1474. X *           If the legal range of rows is violated, 0 will be
  1475. X *           used for BoxTop. NO_ERR exit code will be used.
  1476. X *
  1477. X *             If error, a USAGE message is displayed in the msgbox and the
  1478. X *           appropriate non zero exit code is used.  Also a 5 second 
  1479. X *             sleep is used to preserve the USAGE msg on the terminal before
  1480. X *           program termination.
  1481. X *
  1482. X *           If no errors are found the user's message will appear as 
  1483. X *           requesed and NO_ERR will be the exit value.
  1484. X *
  1485. X * note:       Will clear stdscr, since initscr() is used.
  1486. X *
  1487. X * author:     Steve Price (pacbell!pbhyf!rsp)
  1488. X *
  1489. X * bugs:       The curses on Convergent Technologies Mighty Frame does not
  1490. X *           handle the STANDOUT attribute properly.  Use the curses from
  1491. X *             a Convergent Technologies Mega Frame, in that case.
  1492. X */
  1493. X
  1494. X
  1495. X
  1496. X
  1497. X#include <signal.h>
  1498. X#include <curses.h>
  1499. X#include "GetInput.h"
  1500. X
  1501. X
  1502. X#define MAX_ROW 19    /* last row at which a box can be started & still fit */
  1503. X#define BOX_ROWS 5    /* total height of message box */
  1504. X#define NO_ERR 0    /* it's cool, dude! */
  1505. SHAR_EOF
  1506. echo "End of part 13"
  1507. echo "File utilities.d/msgbox.d/msgbox.c is continued in part 14"
  1508. echo "14" > s2_seq_.tmp
  1509. exit 0
  1510.