home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / os / vms / 17947 < prev    next >
Encoding:
Internet Message Format  |  1992-11-14  |  14.6 KB

  1. Path: sparky!uunet!charon.amdahl.com!pacbell.com!decwrl!elroy.jpl.nasa.gov!usc!cs.utexas.edu!zaphod.mps.ohio-state.edu!pacific.mps.ohio-state.edu!linac!att!ucbvax!DCD00.FNAL.GOV!LAURI
  2. From: LAURI@DCD00.FNAL.GOV (Laurelin of Middle Earth, x2214)
  3. Newsgroups: comp.os.vms
  4. Subject: SETPQL  7/9
  5. Message-ID: <921113111557.20800159@fndcd.fnal.gov>
  6. Date: 13 Nov 92 17:15:57 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 406
  11.  
  12. -+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+
  13. X excnam = cc$rms_nam;
  14. X excnam.nam$l_rsa = &excfilename;
  15. X excnam.nam$b_rss = sizeof (excfilename) - 1;
  16. X excnam.nam$l_esa = &excfilenexp;
  17. X excnam.nam$b_ess = sizeof (excfilenexp) - 1;
  18. X
  19. X excrab = cc$rms_rab;`09`09`09`09`09/* and with the record access block */
  20. X excrab.rab$l_fab = &excfab;
  21. X excrab.rab$l_ubf = &exc_record;
  22. X excrab.rab$w_usz = sizeof exc_record;
  23. X
  24. X
  25. X sts = sys$open( &excfab );`09`09`09`09/* Open the file under the first defa
  26. Vult name. */
  27. X if ( sts == RMS$_FNF )`09`09`09`09`09/* If we couldn't find it, try again u
  28. Vnder the second default. */
  29. X `7B
  30. X    excfab.fab$l_dna = &DFLT_EXCLUDE_FILE2;`09`09/* set the default name fie
  31. Vld to our second guess */
  32. X    excfab.fab$b_dns = strlen(DFLT_EXCLUDE_FILE2);`09/* and set the length *
  33. V/
  34. X    sts = sys$open( &excfab );`09`09`09`09/* Try, try again. */
  35. X    if ( sts == RMS$_FNF )`09`09`09`09/* If we *still* didn't find it, signa
  36. Vl this but continue. */
  37. X    `7B
  38. X`09strcpy(fao_p1, exclude_file);`09`09`09/* Set up for signalling the messag
  39. Ve. */
  40. X`09fao_p1_d.dsc$w_length = strlen(exclude_file);
  41. X`09lib$signal(pql_excfnf, 1, &fao_p1_d);`09`09/* Signal this message. */
  42. X
  43. X`09exclude_file`5B0`5D = '\0';`09`09`09`09/* Clear the filename field if no
  44. V file was found. */
  45. X`09return(SS$_NORMAL);`09`09`09`09/* And return a normal status, continue pr
  46. Vocessing. */
  47. X    `7D
  48. X `7D
  49. X RMS_SIGNAL(excfab.fab$l_sts, excfab.fab$l_stv);
  50. X
  51. X sts = sys$connect( &excrab );`09`09`09`09/* Connect with our record stream
  52. V */
  53. X RMS_SIGNAL(excfab.fab$l_sts, excfab.fab$l_stv);
  54. X
  55. X if ( excnam.nam$b_esl != 0 )`09`09`09`09/* Get the actual name of the file
  56. V we opened. */
  57. X `7B
  58. X    excfilenexp`5Bexcnam.nam$b_esl`5D = '\0';
  59. X    strcpy(excfilename, excfilenexp);
  60. X `7D
  61. X else
  62. X    excfilename`5Bexcnam.nam$b_rsl`5D = '\0';
  63. X
  64. X strcpy(exclude_file, excfilename);`09`09`09/* Copy the actual file name int
  65. Vo our holding variable. */
  66. X#ifdef DEBUG
  67. X   printf("\n\nExcludeFile is now open under the name >%s<",exclude_file);
  68. X#endif
  69. X
  70. X /*
  71. X  * Now read the records in the exclude_file.
  72. X  * Strip off comments, strip trailing blanks, compress blanks,
  73. X  * and replace all blanks with commas.  Convert to uppercase.
  74. X  * Then go through this comma-delineated list and add each
  75. X  * element to our linked list of excluded usernames.
  76. X  * NOTE when we pull elements:  if the first character is "`5B",
  77. X  * then we need to get the NEXT element too, as this is a group code.
  78. X  */
  79. X
  80. X while( (sts = sys$get(&excrab)) != RMS$_EOF )`09`09/* Read until the end of
  81. V the file. */
  82. X `7B
  83. X`09RMS_SIGNAL(excfab.fab$l_sts, excfab.fab$l_stv);
  84. X`09exc_record`5Bexcrab.rab$w_rsz`5D = '\0';`09`09/* Set the null-terminator.
  85. V */
  86. X#`09ifdef DEBUG
  87. X`09  printf("\n  exclude_file record: >%s<",exc_record);
  88. X#`09endif
  89. X
  90. X`09comma_tize(strtrim(uncomment(exc_record)));`09/* Strip comments and trail
  91. Ving blanks, compress white space into commas*/
  92. X
  93. X`09exc_record_d.dsc$w_length = strlen(exc_record);`09/* Set up for pulling e
  94. Vlements from the list.  Needs descriptors. */
  95. X
  96. X`09for(  element = 0;
  97. X`09      ( (sts = STR$ELEMENT(&exc_element_d, &element, &comma_d, &exc_recor
  98. Vd_d)) == SS$_NORMAL );
  99. X`09`09element++ )
  100. X`09`7B
  101. X`09   exc_element`5Bexc_element_d.dsc$w_length`5D = '\0';
  102. X`09   strtrim(exc_element);
  103. X
  104. X`09   if ( exc_element`5B0`5D == bracket`5B0`5D )`09`09/* We must be careful
  105. V about UIC's, which themselves contain a comma!! */
  106. X`09   `7B`09`09`09`09`09`09/*  If we see a bracket "`5B", then assume that t
  107. Vhe next element is the */
  108. X`09`09element++;`09`09`09`09/*  second half of this UIC and append it here.
  109. V */
  110. X`09`09sts = STR$ELEMENT(&grp_element_d, &element, &comma_d, &exc_record_d);
  111. X`09`09grp_element`5Bgrp_element_d.dsc$w_length`5D = '\0';
  112. X`09`09strtrim(grp_element);
  113. X
  114. X`09`09sprintf(exc_element,"%s,%s",exc_element,grp_element);
  115. X`09   `7D
  116. X
  117. X#`09   ifdef DEBUG
  118. X`09     printf("\n\telement %d = %s",element,exc_element);
  119. X#`09   endif
  120. X
  121. X`09   link_into_list( &ExcludeUser_Root,`09`09/* And add this new excluded u
  122. Vsername or uic to the linked list. */
  123. X`09`09`09   &ExcludeUser_Cur,
  124. X`09`09`09   &ExcludeUser_Prev,
  125. X`09`09`09   upcase(exc_element), strlen(exc_element) );
  126. X`09`7D
  127. X `7D
  128. X
  129. X sts = sys$close( &excfab );`09`09`09`09/* Close the exclude_file. */
  130. X RMS_SIGNAL(excfab.fab$l_sts, excfab.fab$l_stv);
  131. X
  132. X return(TRUE);
  133. X`7D
  134. X`0C
  135. X
  136. X/*****************************************************************
  137. X * Determine whether or not this username should be              *
  138. X * included in our scan.  Algorithm: using wildcard              *
  139. X * pattern matching (STR$MATCH_WILD):                            *
  140. X * Is USERNAME on the EXCLUDE-USER list?  If so - EXCLUDE.       *
  141. X * Is numerical UIC on the EXCLUDE-USER list?  If so - EXCLUDE.  *
  142. X * Is Ascii UIC on the EXCLUDE-USER list?  If so - EXCLUDE.      *
  143. X * Is USERNAME on the INCLUDE-USER list?  If so - INCLUDE.       *
  144. X * Is numerical UIC on the INCLUDE-USER list?  If so - INCLUDE.  *
  145. X * Is Ascii UIC on the INCLUDE-USER list?  If so - INCLUDE.      *
  146. X * If none of the above, EXCLUDE.                                *
  147. X *****************************************************************/
  148. X
  149. Xshort include_this_user(char *Username, long Uic)
  150. X`7B
  151. X union UicUnion `7B`09`09`09`09`09/* we need to break the longword into it's
  152. V pieces. */
  153. X   struct `7B
  154. X`09short mem;`09`09`09`09`09/* the DECIMAL member number */
  155. X`09short grp;`09`09`09`09`09/* the DECIMAL group number */
  156. X        `7D word;
  157. X   struct `7B
  158. X`09long  both;
  159. X        `7D longword;
  160. X   `7D UicValue;
  161. X
  162. X  char uic_octal`5BNAM$C_MAXRSS + 1`5D;`09`09`09/* in SYSUAF, the numbers ar
  163. Ve presented in OCTAL.  This is what a */
  164. X`09`09`09`09`09`09`09/*  user would try to match!! */
  165. X
  166. X  char ascii_grp`5BNAM$C_MAXRSS + 1`5D;`09`09`09/* We also need to obtain th
  167. Ve ASCII names of these identifiers. */
  168. X  $DESCRIPTOR(ascii_grp_d, ascii_grp);`09`09`09/* For the system service $ID
  169. VTOASC */
  170. X  char uic_ascii`5BNAM$C_MAXRSS + 1`5D;`09`09`09/* And the textual form for
  171. V string matching. */
  172. X  long id_number;`09`09`09`09`09/* We need to convert `5Bgrp,mem`5D to a num
  173. Veric value first. */
  174. X  const long hex_10000 = 65536;`09`09`09`09/* Conversion factor. */
  175. X  const long hex_9999  = 65535;`09`09`09`09/* Also a conversion factor. */
  176. X  long status;
  177. X
  178. X
  179. X /*
  180. X  * Convert the uic longword to strings.  We want all forms that
  181. X  * the user may have entered for pattern matching, that is:
  182. X  * we want the `5B525,7`5D form AND the `5BG023_C,12`5D form.  Then we
  183. X  * can test with the user's list of INCLUDEs and EXCLUDEs.
  184. X  */
  185. X
  186. X  UicValue.longword.both = Uic;`09`09`09`09/* Convert the Uic longword to it
  187. V's octal string group/member numbers. */
  188. X  sprintf(uic_octal, "`5B%o,%o`5D", UicValue.word.grp, UicValue.word.mem);
  189. X
  190. X  id_number = hex_9999 + (hex_10000 * UicValue.word.grp);`09/* Convert to th
  191. Ve ASCII version of the GROUP number */
  192. X
  193. X  status = sys$idtoasc( id_number, 0, &ascii_grp_d, 0, 0, 0 );
  194. X  if ( status == SS$_NOSUCHID )`09`09`09`09`09/* Ooops, this account doesn't
  195. V really have a group code in ASCII. */
  196. X  `7B`09`09`09`09`09`09`09`09/* Use the ASCII equivalent of the user's ident
  197. Vifier.
  198. X      id_number = id_number - hex_9999 + UicValue.word.mem
  199. X      status = sys$idtoasc( id_number, 0, &ascii_grp_d, 0, 0, 0 );
  200. X      if ( status == SS$_NOSUCHID )`09`09`09`09/* Nothing here either?  Then
  201. V blank out the string. */
  202. X`09ascii_grp_d.dsc$w_length = 0;
  203. X  `7D
  204. X
  205. X  ascii_grp`5Bascii_grp_d.dsc$w_length`5D = '\0';
  206. X  strtrim(ascii_grp);
  207. X
  208. X  if ( strlen(ascii_grp) != 0 )
  209. X    sprintf(uic_ascii,"`5B%s,%o`5D",ascii_grp, UicValue.word.mem);`09/* Conv
  210. Vert to our string matching form. */
  211. X  else
  212. X    sprintf(uic_ascii,"`5B%s`5D",Username);`09`09`09`09/* Use the username i
  213. Vf it was empty. */
  214. X
  215. X
  216. X /*
  217. X  * Ok, NOW we are ready to begin deciding whether we should
  218. X  * INCLUDE or EXCLUDE this particular user.
  219. X  */
  220. X  if ( (in_linked_list(Username,  ExcludeUser_Root)) `7C`7C
  221. X       (in_linked_list(uic_octal, ExcludeUser_Root)) `7C`7C
  222. X       (in_linked_list(uic_ascii, ExcludeUser_Root)) )
  223. X  `7B
  224. X#     ifdef DEBUG
  225. X`09printf("\nSpecifically EXCLUDING username >%s<, uic = >%s<", Username, ui
  226. Vc_ascii);
  227. X#     endif
  228. X      return(FALSE);
  229. X  `7D
  230. X
  231. X
  232. X  if ( (in_linked_list(Username,  IncludeUser_Root)) `7C`7C
  233. X       (in_linked_list(uic_octal, IncludeUser_Root)) `7C`7C
  234. X       (in_linked_list(uic_ascii, IncludeUser_Root)) )
  235. X  `7B
  236. X#     ifdef DEBUG
  237. X`09printf("\nSpecifically INCLUDING username >%s<, uic = >%s<", Username, ui
  238. Vc_ascii);
  239. X#     endif
  240. X      return(TRUE);
  241. X  `7D
  242. X
  243. X# ifdef DEBUG
  244. X    printf("\nDefault EXCLUDING username >%s<, uic = >%s<", Username, uic_as
  245. Vcii);
  246. X# endif
  247. X
  248. X  return(FALSE);
  249. X`7D
  250. X
  251. $ CALL UNPACK [.SETPQL_V2_0]SETPQL.C;1 57948660
  252. $ create 'f'
  253. X1 SETPQL
  254. X! This file was created by L. Loebel, R/D Computing, Fermilab.
  255. X!
  256. X!****************************Copyright Notice*******************************
  257. V****
  258. X!*             Copyright `A91990 Universities Research Association, Inc.
  259. V         *
  260. X!*                         All Rights Reserved
  261. V                                 *
  262. X!***************************************************************************
  263. V****
  264. X!***********************Government Sponsorship Notice***********************
  265. V****
  266. X!* This material resulted from work developed under a Government Contract an
  267. Vd  *
  268. X!* is subject to the following license:  The Government retains a paid-up,
  269. V     *
  270. X!* nonexclusive, irrevocable worldwide license to reproduce, prepare derivat
  271. Vive*
  272. X!* works, perform publicly and display publicly by or for the Government,
  273. V      *
  274. X!* including the right to distribute to other Government contractors.  Neith
  275. Ver *
  276. X!* the United States nor the United States Department of Energy, nor any of
  277. V    *
  278. X!* their employees, makes any warrenty, express or implied, or assumes any
  279. V     *
  280. X!* legal liability or responsibility for the accuracy, completeness, or
  281. V        *
  282. X!* usefulness of any information, apparatus, product, or process disclosed,
  283. V or *
  284. X!* represents that its use would not infringe privately owned rights.
  285. V          *
  286. X!***************************************************************************
  287. V****
  288. X!
  289. X `20
  290. X Check and `5Boptionally`5D set process quota limits to specified minimum
  291. X values.
  292. X
  293. X The purpose of this utility is to make sure that over the years and
  294. X through the various software upgrades, the accounts which have been on
  295. X the system for a long long time are not lagging behind in required
  296. X minimum recommended quotas.  The entire SYSUAF database will be
  297. X scanned.  You may choose to generate only a list of which UAF records
  298. X need to be updated but not make any changes (see /MODIFY and
  299. X /NOMODIFY).  You may choose to scan all of the available process quota
  300. X limits (/ALL), or only a certain subset.  You may use the values
  301. X contained within the DEFAULT account UAF record, or you may specify a
  302. X new value for each process quota limit on the command line (e.g.,
  303. X /ASTLM=100).
  304. X
  305. X SETPQL will NEVER reduce a process quota limit for any account.  The
  306. X values in the SYSUAF file will only be raised to the specified or
  307. X implied value.
  308. X
  309. X Usage:
  310. X
  311. X        $ SETPQL :== dev:`5Bdir`5DSETPQL
  312. X        $ SETPQL `5B/qualifiers`5D  `5Buserlist`5D
  313. X
  314. X (at Fermilab, you may $ SETUP SETPQL to get the necessary SETPQL
  315. X symbol).
  316. X
  317. X2 Parameters
  318. X
  319. X username`5B,...`5D
  320. X
  321. X Specifies one or more usernames to be scanned.  If no usernames are
  322. X specified, all users listed in the SYSUAF file will be scanned.
  323. X
  324. X Wildcards are allowed.
  325. X
  326. X2 Qualifiers
  327. X
  328. X/EXCLUDE
  329. X /EXCLUDE=(`5BFILE`5B=exclude-file`5D,`5D`5BUSER=(userlist)`5D)
  330. X /NOEXCLUDE
  331. X
  332. X The /EXCLUDE qualifier allows you to exclude certain usernames from the
  333. X scan.  You may exclude users either by listing them in a file, or by
  334. X specifying their usernames directly on the command line, or both.
  335. X Wildcard specifications are allowed. `20
  336. X
  337. X The default value if you specify nothing is
  338. X
  339. X                /EXCLUDE=FILE=SETPQL_EXCLUDE
  340. X
  341. X where SETPQL_EXCLUDE is one of the following (in this order):
  342. X
  343. X                a) a logical name pointing to your exclude-file,
  344. X                b) the file SETPQL_EXCLUDE.DAT in your current default
  345. X                   directory,
  346. X                c) the file SETPQL_EXCLUDE.DAT in your SYS$LOGIN
  347. X                   directory.
  348. X
  349. X The SETPQL_EXCLUDE file may contain comments and/or wildcard
  350. X charcaters.  You may specify users by username or by UIC group/member
  351. X numbers.
  352. X
  353. X You may choose to list username on the command line itself, e.g.,
  354. X
  355. X        $ SETPQL/EXCLUDE=(USER=( *$SERVER, `5BNETWORK,*`5D, `5B1,*`5D )
  356. X
  357. X To use both a file and a list of usernames,
  358. X
  359. X        $ SETPQL/EXCLUDE=( FILE=SETPQL_EXCLUDE, USER=(SMITH,TOM) )
  360. X
  361. X/LOG
  362. X /LOG           (default)
  363. X /NOLOG
  364. X
  365. X Controls whether or not informational messages are output to the
  366. X screen.
  367. X
  368. X Default is /LOG.
  369. X
  370. X
  371. X/MODIFY
  372. X /MODIFY        (default)
  373. X /NOMODIFY
  374. X
  375. X Controls whether or not the SYSUAF records are modified and set to the
  376. X minimum values.  By default, the $SETPQL command will cause all
  377. X accounts on the system to be brought up to the specified or DEFAULT
  378. X minimum values.  Use /NOMODIFY if you merely want to generate a report
  379. X of what *would* have changed.
  380. X
  381. X
  382. X/ALL
  383. X /ALL
  384. X /NOALL         (default)
  385. X       `20
  386. X Controls whether all of the PQL values are scanned, or only a certain
  387. X subset.
  388. X
  389. X By default, the /NOALL qualifier is in effect and only those PQL values
  390. X specifically listed on the command line will be scanned and/or
  391. X modified.
  392. X
  393. X To scan and/or modify all of the process quota limits, use the /ALL
  394. X qualifier.  This will cause each of the PQL's to be checked against the
  395. X value specified on the command line, or against the DEFAULT account
  396. X values when not listed on the command line.
  397. X
  398. X For example:
  399. X
  400. X                $ SETPQL/ASTLM=100
  401. X
  402. X will set *ONLY* the ASTLM of all accounts to at least 100; other
  403. X process quota limits will not be modified.
  404. X
  405. X                $ SETPQL/ALL/ASTLM=100
  406. X
  407. X will set all of the PQL values to those specified in the DEFAULT
  408. X account; however, for ASTLM, the value of 100 will override the value
  409. X in the DEFAULT account.
  410. X
  411. X                $ SETPQL/ALL/ASTLM=100/NOCPU
  412. X
  413. X will set all PQL values to the minimum specified in the DEFAULT
  414. X account; an ASTLM of 100 will override the ASTLM specified in the
  415. X default account; and CPU will *NOT* be scanned or modified.
  416. +-+-+-+-+-+-+-+-  END  OF PART 7 +-+-+-+-+-+-+-+-
  417.  
  418.