COMPILATION LISTING OF SEGMENT lg_ctl_ Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 02/27/89 1052.0 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-05-13,GJohnson), approve(86-05-13,MCR7387), 14* audit(86-05-13,Martinson), install(86-05-14,MR12.0-1055): 15* Correct error message documentation. 16* 2) change(86-08-03,Swenson), approve(86-08-13,MCR7512), 17* audit(86-08-13,EJSharpe), install(86-09-08,MR12.0-1150): 18* Modified to check for RW access on channel ACS segments upon login. 19* (Actual change date was 85-08-03) 20* 3) change(86-08-03,Swenson), approve(86-08-13,MCR7512), 21* audit(86-08-13,EJSharpe), install(86-09-08,MR12.0-1150): 22* Modified to correctly check authorizations for anonymous users. 23* (Actual change date was 85-08-03) 24* 4) change(87-02-19,Farley), approve(87-07-06,MCR7691), 25* audit(87-03-11,Fawcett), install(87-08-04,MR12.1-1055): 26* Changed DETERMINE_AUTHORIZATIONS to use convert_access_class_$(minimum and 27* maximum) instead of aim_check_$greater to find the minimum range of 28* authorizations between the SAT, PDT and PNT. 29* 5) change(87-03-05,Farley), approve(87-07-06,MCR7691), 30* audit(87-03-11,Fawcett), install(87-08-04,MR12.1-1055): 31* Corrected to properly enforce password expiration interval. 32* 6) change(87-03-20,Beattie), approve(87-04-06,MCR7656), 33* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 34* Add support for hasp operator subchannels to be login service. 35* 7) change(87-04-07,GDixon), approve(87-07-06,MCR7741), 36* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 37* A) Correct coding standard violations. 38* B) Changed to not reference whotab entry if none is associated with the 39* ute. 40* C) Changed to call asu_$blast_user instead of astty_$force_write when 41* warning user of another login. 42* D) Clear out the message buffer used to hold messages produced by 43* act_ctl_ and load_ctl_. 44* E) Eliminate lg_ctl_$reset entrypoint. Either user_table_mgr_$allocate 45* or $reset should be used instead. (dsa 206, dsa 214) 46* F) Eliminate use of ute.logged_in flag, in favor of ute.active = 47* NOW_LOGGED_IN. 48* G) Remove code which prevents whotab.process_authorization from being 49* set. 50* H) Avoid referencing whotab entry if process does not appear in whotab. 51* I) Upgraded for change to answer_table.incl.pl1 and 52* user_table_entry.incl.pl1. 53* 8) change(87-05-12,GDixon), approve(87-07-06,MCR7741), 54* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 55* A) Don't send warning of other login to disconnected or UFT processes. 56* Neither could receive the warning or acted upon invalid logins. 57* 9) change(87-05-14,GDixon), approve(87-07-06,MCR7741), 58* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 59* A) Avoid null_pointer fault when notifying MNA user of another login. 60* 10) change(87-06-22,GDixon), approve(87-07-06,MCR7741), 61* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 62* A) Print login info when -brief is given (or defaults) and 63* ute.active = NOW_LOGGED_IN. Because it is being set to that 64* prior to the test. 65* 11) change(87-06-22,GDixon), approve(87-06-30,MCR7656), 66* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 67* A) Set outer module properly for hasp operator console logins. 68* B) Avoid null_pointer fault when notifying MCS user of already-logged in 69* DSA user. 70* 12) change(87-06-23,GDixon), approve(87-07-06,MCR7741), 71* audit(87-07-21,Brunelle), install(87-08-04,MR12.1-1055): 72* A) Move auditing of all logins involving process creation into 73* as_access_audit_. Continue to audit operator login/logout and 74* connect loop logouts here. 75* 13) change(87-08-07,GDixon), approve(87-08-07,MCR7741), 76* audit(87-08-07,Brunelle), install(87-08-10,MR12.1-1076): 77* A) Call ASSERT_LOGGED_IN_STATE when "login Person -connect" was given 78* and that person.project has no disconnected processes. 79* 14) change(87-10-04,Beattie), approve(87-10-26,MCR7785), 80* audit(87-12-04,Parisek), install(87-12-07,MR12.2-1008): 81* Accomodate changes in format of date_time strings. 82* 15) change(87-11-20,Parisek), approve(88-02-11,MCR7849), 83* audit(88-02-23,Lippard), install(88-07-13,MR12.2-1047): 84* Set the new answer_table element ute.lowest_ring to the highest of PDTs 85* low ring value and SATs low ring value. SCP6367 86* 16) change(88-05-02,GDixon), approve(88-08-15,MCR7969), 87* audit(88-08-03,Lippard), install(88-08-29,MR12.2-1093): 88* A) Changed to expand project alias -change_default_project is used to 89* modify pnte.default_project. 90* 17) change(89-01-17,TLNguyen), approve(89-01-17,MCR8054), 91* audit(89-02-06,Parisek), install(89-02-27,MR12.3-1015): 92* Supply the correct number of arguments relative to the control codes 93* specified in a ioa_ control string for a call to sys_log_ to 94* log the disconnected count for a user. 95* END HISTORY COMMENTS */ 96 97 /* format: style4 */ 98 99 lg_ctl_: procedure (); 100 101 /* LOGIN_CONTROL - User Control procedure to determine whether, and how, 102* a given user who identified himself with a name/password/project 103* combination should be logged into the system. It also contains the 104* procedure to log a user out, and manages the system "whotab" which 105* publishes who's logged in. */ 106 107 /* 108* Initially coded by Michael J. Spier, September 18, 1969 109* Revised and recoded in PL/1 by Michael J. Spier, 12.22.69 110* mod 8/14/70 to allow unregistered responders & correct for bumping oldest, THVV 111* changed for absentee feb 71 EDS 112* variable attributes & load ctl, THVV 12/71 113* dynamic changing of password, J. Phillipps 7/72 114* Modified 740821 by PG for authorizations, misc. bug fixes, etc. 115* Modified 750313 by T. Casey to pass pnt size to up_pnt_$make_hash. 116* Modified 750604 by T. Casey to move setting of load control group (ate.group) to load_ctl_ 117* . (it got too complicated, with the coming of the priority scheduler) 118* Modified 750805 by THVV for cdte 119* Modified 751024 by T. Casey to process name of prelinked subsystem, from login line or from pdt. 120* Modified 751110 by PG to change handling of -gpw errors 121* Modified April 1976 by T. Casey to move check for correct typing of generated password to dialup_, and 122* . to initialize ate.recent_fatal_error_(time count). 123* Modified 760804 by THVV for sending mail and telling long info as answer 124* Modified July 1976 by T. Casey to make "initproc,direct" work right. 125* Modified 760819 by Roy Planalp to pass error msg up to dialup_/ftp_dialup_, 126* . to send mail for bad pw, to obey -brief ctl arg, and not allow login if illegal ctl args are used. 127* Modified October 1976 by T. Casey to fix bad password counting. 128* Modified January, 1977, by D. M. Wells, to include line types in PDT user structure 129* Modified April, 1977, by D. M. Wells, to fix bug introduced last time that caused 130* . term types to be wrong for the first login with AS 9.2 131* Modified June, 1977, by Robert Coren to use TTT-style terminal types 132* Modified September 1977 by T. Casey to prevent hanging up after login refusal in cases 133* . where successful login might be possible with differnt args. 134* Modified May 1978 by T. Casey to put min of project and user pdir quota figures into user table entry, 135* . and to log instances of init_ring, max_ring, or pdir_quota in PDTE exceeding limits in SATE. 136* Modified June 1978 by T. Casey to use hash tables to search SAT and PDTs. 137* Modified Fall 1978 by Larry Johnson for ring-0 demultiplexing. 138* Modified November 1978 by T. Casey for MR7.0 absentee enhancements. 139* Modified April 1979 by T. Casey for MR7.0a to fix bugs in foreground absentee implementation. 140* Modified July 1979 by B. Margulies to remove the v_outer_module attribute. 141* Modified July 1979 by T. Casey for MR8.0 to support process preservation across hangups. 142* Modified July 1979 by C. Hornig for new MSF PNT. 143* Modified January 1980 by T. Casey to fix bugs in process preservation. 144* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures. (UNCA) 145* Modified September 1980 by C. Hornig to send login denial messages at user's default authorization 146* Modified 1980*12*31 B. Margulies for reconnection outer module switch. 147* Modified April 13 1981 by E. N. Kittlitz to honour -bf with disconnected procs 148* Modified June 1981 by E. N. Kittlitz for UNCA rate structures 149* Modified June 1981 by T. Casey for MR9.0 to improve absentee load control efficiency, 150* . by returning load_ctl_'s detailed reason for deferral to AUM. 151* Modified September 1981 by E. N. Kittlitz to assume 'create' for FTP logins. 152* Modified November 1981, E. N. Kittlitz. user_table_entry conversion. 153* Modified December 1981, E. N. Kittlitz. whotab header extension. 154* Modified April 1982, E. N. Kittlitz. New AS initialization. 155* Modified June 1982, E. N. Kittlitz. Force pdt disconnected count if it disagrees with answer_table. 156* Modified September 1982, E. N. Kittlitz. dial/slave -user support. default login ring. 157* Modified February 1983, E. N. Kittlitz. sort_disc_list fix per Schiller identified problem. 158* Modified February 1983, J. Schiller to allow multiple connection loops for a user, and to fix bug so that max_ring is enforced (once again). 159* Modified May 1983, E. N. Kittlitz. stop cross-AIM creates if AIM required on channel. 160* Modified July 1983, B. Margolin, to update the Mail Table when the user changes his default project. 161* Modified 84-04-02 BIM for AIM ranges on communications channels. 162* Modified 84-07-12 BIM for login AIM ranges. 163* Modified 84-08-28 by E. Swenson for Version 2 PNT calling sequences. 164* Modified 10/02/84 by R. Michael Tague: Changed the directory containing 165* the ACS segments for the device channels from as_data_$acsdir to 166* as_data_$rcpdir. 167* Modified 84-10-03 by E. Swenson to incorporate Jim Falksen's changes 168* for date_time_$format. 169* Modified 84-10-26 by E. Swenson to not respect the "brief" flag for 170* security-relevant messages and to disregard the project-id in 171* deciding whether to notify of additional logins. 172* Modified 84-11-14 by E. A. Ranzenbach for whotab.session... 173* Modified 84-12-17 by EJ Sharpe to use merge_access_audit_flags_ 174* Modified 1985-01-10, BIM: MC access control. 175* Modified 85-01-10 by E. Swenson restructured for new AS auditing. 176* Modified 85-01-15 by Keith Loepere for pdir_dir_quota. 177* Modified 1985-01-23 by E. Swenson for binary audit messages. 178* Modified 1985-02-12 by E. Swenson to fix multip checking. 179* Modified 1985-03-04 by E. Swenson for password restrictions. 180* Modified 1985-04-17 by E. Swenson to check for damaged PDTs. 181* Modified 1985-04-19 by E. Swenson to initialize anstbl.session to 182* "special" for special session rather than "init". 183* Modified 1985-04-24 by E. Swenson to set projectid before notifying of 184* bad passwords. 185**/ 186 187 /* pictures */ 188 189 dcl four_digits picture "9999"; 190 191 /* builtins */ 192 193 dcl (addr, addrel, clock, index, length, max, min, mod, null, 194 reverse, rtrim, string, substr, unspec, verify) builtin; 195 196 /* entries */ 197 198 dcl act_ctl_$check entry (ptr, ptr, char (8) aligned, char (*) varying, fixed bin (35)); 199 dcl aim_check_$equal entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned); 200 dcl aim_check_$greater_or_equal entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned); 201 dcl aim_check_$in_range entry (bit (72) aligned, (2) bit (72) aligned) returns (bit (1) aligned); 202 dcl astty_$tty_force entry (ptr, ptr, fixed bin, fixed bin (35)); 203 dcl as_access_audit_$login entry (ptr, char(*)); 204 dcl as_access_audit_$logout entry (ptr, char(*)); 205 dcl asu_$blast_user entry (ptr, char (*), char (*), fixed bin (35)); 206 dcl asu_$format_ftp_msg entry (char (200) aligned, fixed bin, fixed bin, fixed bin) returns (char (200) aligned); 207 dcl asu_$write_message entry (ptr, fixed bin (35), char (8) aligned, fixed bin (35)); 208 dcl display_access_class_ entry (bit (72) aligned) returns (character (32) aligned); 209 dcl display_access_class_$range entry ((2) bit (72) aligned) returns (character (32) aligned); 210 dcl convert_access_class_$maximum entry ((*) bit (72) aligned, fixed bin, bit (72) aligned); 211 dcl convert_access_class_$minimum entry ((*) bit (72) aligned, fixed bin, bit (72) aligned); 212 dcl convert_access_class_$to_string_short entry (bit (72) aligned, char (*), fixed bin (35)); 213 dcl convert_access_class_$to_string_range_short entry ((2) bit (72) aligned, character (*), 214 fixed binary (35)); 215 dcl convert_status_code_ entry (fixed bin (35), char (8) aligned, char (100) aligned); 216 dcl date_time_$format entry (char (*), fixed bin (71), char (*), char (*)) returns (char (250) var); 217 dcl hash_$search entry (ptr, char (*), fixed bin, fixed bin (35)); 218 dcl hcs_$get_user_access_modes entry (char (*), char (*), char (*), fixed bin, bit (36) aligned, bit (36) aligned, 219 fixed bin (35)); 220 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, fixed bin (35)); 221 dcl ioa_$rs entry options (variable); 222 dcl ioa_$rsnnl entry options (variable); 223 dcl load_ctl_ entry (ptr, ptr, ptr, ptr, fixed bin, char (8) aligned, char (*) varying, fixed bin (35)); 224 dcl load_ctl_$unload entry (ptr, fixed bin); 225 dcl mail_table_initializer_$set_dft_proj entry (char (*) var, char (*), fixed bin (35)); 226 dcl mc_check_access_$log_in_as_daemon entry (char (*), char (*), fixed bin (35)); 227 dcl merge_access_audit_flags_ entry (bit (36) aligned, bit (36) aligned) returns (bit (36) aligned); 228 dcl pnt_manager_$admin_get_entry entry (char (*), ptr, fixed bin (35)); 229 dcl pnt_manager_$login_get_entry entry (char (*), char (*), ptr, fixed bin (35)); 230 dcl pnt_manager_$update_entry entry (ptr, bit (1), bit (1), fixed bin (35)); 231 dcl scramble_ entry (char (8) aligned) returns (char (8) aligned); 232 dcl send_mail_$access_class entry (char (*), char (*), ptr, bit (72) aligned, fixed bin (35)); 233 dcl sub_err_ entry () options (variable); 234 dcl sys_log_ entry options (variable); 235 dcl sys_log_$error_log entry options (variable); 236 dcl ttt_info_$decode_type entry (fixed bin, char (*), fixed bin (35)); 237 dcl ttt_info_$encode_type entry (char (*), fixed bin, fixed bin (35)); 238 dcl up_sat_$make_sat_hash entry (ptr, fixed bin, ptr, char (*), fixed bin (35)); 239 240 /* external static */ 241 242 dcl as_error_table_$already_in_msg fixed bin (35) ext; 243 dcl as_error_table_$already_in_notify_msg fixed bin (35) ext; 244 dcl as_error_table_$already_in_warn_msg fixed bin (35) ext; 245 dcl as_error_table_$bad_anon_pw fixed bin (35) ext; 246 dcl as_error_table_$bad_password fixed bin (35) ext; 247 dcl as_error_table_$bad_personid fixed bin (35) ext; 248 dcl as_error_table_$bad_project fixed bin (35) ext; 249 dcl as_error_table_$breach fixed bin (35) external; 250 dcl as_error_table_$cant_give_dft_auth fixed bin (35) external; 251 dcl as_error_table_$cant_give_that_authorization fixed bin (35) external; 252 dcl as_error_table_$dft_auth_changed fixed bin (35) external; 253 dcl as_error_table_$dft_proj_changed fixed bin (35) ext; 254 dcl as_error_table_$dialup_error fixed bin (35) ext; 255 dcl as_error_table_$illegal_hd_arg fixed bin (35) ext; 256 dcl as_error_table_$illegal_ip_arg fixed bin (35) ext; 257 dcl as_error_table_$illegal_om_arg fixed bin (35) ext; 258 dcl as_error_table_$illegal_save_arg fixed bin (35) ext; 259 dcl as_error_table_$illegal_ss_arg fixed bin (35) ext; 260 dcl as_error_table_$last_login_msg fixed bin (35) ext; 261 dcl as_error_table_$login_anon_msg fixed bin (35) ext; 262 dcl as_error_table_$login_msg fixed bin (35) ext; 263 dcl as_error_table_$long_ip_arg fixed bin (35) external; 264 dcl as_error_table_$long_ss_arg fixed bin (35) external; 265 dcl as_error_table_$multiple_login_msg fixed bin (35) external; 266 dcl as_error_table_$must_change fixed bin (35) external; 267 dcl as_error_table_$must_use_generate_pw fixed bin (35) external; 268 dcl as_error_table_$n_disconnected_procs_msg fixed bin (35) ext; 269 dcl as_error_table_$no_change fixed bin (35) ext; 270 dcl as_error_table_$no_daemon_bit fixed bin (35) ext; 271 dcl as_error_table_$no_disconnected_procs fixed bin (35) ext; 272 dcl as_error_table_$no_line_permission fixed bin (35) ext; 273 dcl as_error_table_$no_name fixed bin (35) ext; 274 dcl as_error_table_$no_primary fixed bin (35) ext; 275 dcl as_error_table_$not_in_pdt fixed bin (35) ext; 276 dcl as_error_table_$password_changed fixed bin (35) ext; 277 dcl as_error_table_$password_expired fixed bin (35) external; 278 dcl as_error_table_$password_expired_msg fixed bin (35) external; 279 dcl as_error_table_$password_locked fixed bin (35) ext; 280 dcl as_error_table_$password_probe1_mail_msg fixed bin (35) ext; 281 dcl as_error_table_$password_probe1_msg fixed bin (35) ext; 282 dcl as_error_table_$password_probe_mail_msg fixed bin (35) ext; 283 dcl as_error_table_$password_probe_msg fixed bin (35) ext; 284 dcl as_error_table_$password_unused_too_long_msg fixed bin (35) external; 285 dcl as_error_table_$pdt_missing fixed bin (35) ext; 286 dcl as_error_table_$ring_too_low fixed bin (35) ext; 287 dcl as_error_table_$ring_too_high fixed bin (35) ext; 288 dcl as_error_table_$special_sess_msg fixed bin (35) ext; 289 dcl as_error_table_$user_fg_cpu_limit fixed bin (35) ext; 290 dcl as_error_table_$user_max_bg fixed bin (35) ext; 291 dcl as_error_table_$user_max_fg fixed bin (35) ext; 292 dcl error_table_$bad_password fixed bin (35) external static; 293 dcl error_table_$checksum_failure fixed bin (35) external static; 294 dcl error_table_$id_not_found fixed bin (35) external; 295 dcl error_table_$messages_off fixed bin (35) external; 296 dcl error_table_$out_of_sequence fixed bin (35) ext static; 297 dcl error_table_$smallarg fixed bin (35) external; 298 dcl error_table_$wakeup_denied fixed bin (35) external; 299 300 /* Internal Static */ 301 302 dcl (pdt_htp) ptr int static init (null); 303 dcl tracing bit (1) aligned int static init ("0"b); /* trace switch */ 304 305 /* Constants */ 306 307 dcl DISC_STATE (0:5) char (12) internal static options (constant) initial 308 ( 309 "connect loop", /* no command */ 310 "connect loop", /* list */ 311 "create", /* create */ 312 "connect", /* connect */ 313 "new_proc", /* new_proc */ 314 "destroy" /* destroy */ 315 ); 316 317 dcl ME char (7) initial ("lg_ctl_") internal static options (constant); 318 dcl NL char (1) int static options (constant) init (" 319 "); 320 dcl PT_DIAL_SLAVE initial (-1) fixed bin internal static options (constant); 321 dcl USECS_PER_DAY fixed bin (71) initial (86400000000) internal static options (constant); 322 323 dcl SUCCESS bit (1) aligned initial ("1"b) internal static options (constant); 324 325 /* Automatic */ 326 327 dcl ans char (64); 328 dcl answer char (200) aligned; /* message buffer */ 329 dcl authorization (3) bit (72) aligned; 330 dcl authorization_string char (200); 331 dcl bstemp bit (36) aligned; 332 dcl char64 char (64); /* temporary */ 333 dcl code fixed bin (35); 334 dcl coded_type fixed bin; /* numeric form of terminal type */ 335 dcl debg char (8) aligned init (""); /* Short message from as_error_table_ */ 336 dcl errmsg char (168) varying; 337 dcl first_pass bit (1) aligned; /* whether this is the first pass or not */ 338 dcl flonginfo char (100) aligned; /* this is used to get long messages out of as_error_table_ */ 339 dcl i fixed bin; 340 dcl id_code char (4) aligned; /* idcode */ 341 dcl l fixed bin; 342 dcl last_term_type char (32); /* used when printing previous login info */ 343 dcl login_state char (12); /* what the user is doing */ 344 dcl logout_reason char (12); /* reason for the logout */ 345 dcl mcode fixed bin (35) init (0); /* Error code, which is reason for no login. */ 346 dcl octal_auth_string char (32) aligned; 347 dcl p ptr; 348 dcl password_changed_flag bit (1) initial ("0"b); /* Indicates we changed the password */ 349 dcl pdt_name char (32); 350 dcl pdtep ptr; 351 dcl pdtp ptr; 352 dcl process_type fixed bin (17); /* -1 => dial/slave validation, 1 = interactive, 2 = absentee, 3 = daemon */ 353 dcl process_types (-1:3) char (3) initial ( 354 "int", 355 "???", 356 "int", 357 "abs", 358 "dmn"); 359 dcl rewrite_pnte bit aligned; 360 dcl satep ptr; 361 dcl scan_reason fixed bin; /* why should we scan the answer table: 0 = don't; 2 = find current login instance, warn it, and explain refusal; 3 = notify current login instances of the new login instance. */ 362 dcl tcdtep ptr; 363 dcl temp_coded_type fixed bin; /* temporary version of same */ 364 dcl temp_person_name char (28); /* for searching PDT */ 365 dcl temp_term_type char (32); /* sometimes holds random device type */ 366 dcl tty_term_type char (32) aligned; /* current device type */ 367 dcl user_limit bit (1) aligned init (""b); /* 1 if login rejected because of fg or bg limit */ 368 dcl userx fixed bin; 369 dcl vlonginfo char (100) varying; 370 dcl w_date char (80) aligned; 371 dcl xdebg char (8) aligned; /* .. same when is to be thrown away */ 372 dcl xlonginfo char (100) varying; /* these are used to hold message control formats */ 373 dcl xpw char (8); 374 375 dcl 1 old_pnte aligned like pnt_entry; 376 dcl 1 pnte aligned like pnt_entry; 377 378 /* Parameters */ 379 380 dcl P_cdtep ptr parameter; /* pointer to cdt entry for logout */ 381 dcl P_code fixed bin (35) parameter; /* error code for caller */ 382 dcl P_password char (8) aligned parameter; /* password to check */ 383 dcl P_reason char (*) parameter; /* reason for a no-process logout */ 384 dcl P_startflag bit (1) aligned parameter; /* session type */ 385 dcl P_status char (*) parameter; /* text message for caller */ 386 dcl P_text char (168) varying parameter; /* text message for caller */ 387 dcl P_utep pointer parameter; /* user_table_entry pointer */ 388 389 /* Conditions */ 390 391 dcl seg_fault_error condition; /* for checking for PDT damage */ 392 393 /* Program */ 394 395 MAIN_RETURN: /* main return point */ 396 return; 397 398 init: entry (P_startflag); 399 400 if ^sc_stat_$Multics_typed | sc_stat_$Go_typed then 401 call sub_err_ (error_table_$out_of_sequence, "lg_ctl_$init", "s"); 402 ansp = as_data_$ansp; 403 404 if ^P_startflag then do; /* Starting special session? */ 405 anstbl.session, whotab.session = "special"; /* indicate system is in special session */ 406 four_digits = mod (clock (), 10000); /* Generate a number between 000 and 9999 */ 407 anstbl.login_word = four_digits; /* and use it as login word */ 408 call sys_log_ (SL_LOG, "lg_ctl_: login word is ""^a""", anstbl.login_word); 409 call ioa_$rs (convert_message (as_error_table_$special_sess_msg), anstbl.special_message, i, ""); 410 anstbl.message_lng = i; 411 anstbl.message_update_time = clock (); 412 end; 413 else do; /* Normal startup. */ 414 anstbl.session, whotab.session = "normal"; /* Set session type. */ 415 anstbl.login_word = "login "; /* Set standard login word. */ 416 end; 417 418 /* now reset all project entries in the system administrator's table */ 419 420 do i = 1 to sat.current_size; /* Do all SAT entries. */ 421 satep = addr (sat.project (i)); /* Get ptr to project entry. */ 422 project.pdt_ptr = null; /* reset project's PDT pointer */ 423 end; 424 425 return; /* Done. */ 426 427 abs_in: entry (P_utep, P_status, P_code); 428 429 /**** This entry is called when attempting to log an absentee user in. */ 430 431 /**** The path being followed here to validate absentee process 432* logins needs to be kept in sync with path followed by interactive 433* process logins in the login entrypoint. This is important to 434* maintain equivalent functional testing for both kinds of processes. 435* If any changes are made within this entrypoint make sure 436* lg_ctl_$login is updated as needed. */ 437 438 P_status = ""; 439 440 call SETUP (PT_ABSENTEE); /* copy parameters, set initial values */ 441 call VALIDATE_PERSON (); 442 call LOOKUP_PROJECT (); 443 call PROCESS_ATTRIBUTES (); 444 call DETERMINE_AUTHORIZATIONS (); 445 call CHECK_PROCESS_LIMITS (); 446 call SET_UP_FOR_PROCESS_CREATION (); 447 goto login_returns; 448 449 daemon_in: entry (P_utep, P_status, P_code); 450 451 /**** This entry is called to validate an attempted daemon login */ 452 453 P_status = ""; 454 455 call SETUP (PT_DAEMON); 456 call VALIDATE_PERSON (); 457 call PROCESS_CHANGE_ARGUMENTS (); 458 call PROCESS_AUTH_ARGUMENT (); 459 call LOOKUP_PROJECT (); 460 461 if ute.anonymous = 1 then do; 462 mcode = as_error_table_$not_in_pdt; 463 goto login_incorrect; 464 end; 465 466 call check_daemon_source_acs (mcode); 467 if mcode ^= 0 then 468 go to login_abort_1; 469 470 call PROCESS_ATTRIBUTES (); 471 472 /**** Ensure this user has the "daemon" attribute. If not, do not allow 473* the login. This prevents operator mistakes and ensures operators 474* don't log in just anyone. */ 475 476 if ^ute.at.daemon then do; 477 mcode = as_error_table_$no_daemon_bit; 478 go to login_incorrect; 479 end; 480 481 call DETERMINE_AUTHORIZATIONS (); 482 call CHECK_PROCESS_LIMITS (); 483 call SET_UP_FOR_PROCESS_CREATION (); 484 goto login_returns; 485 486 validate: entry (P_utep, P_password, P_text, P_code); 487 488 /**** Special entry for validating the use of "dial" / "slave" preaccess 489* commands. */ 490 491 call SETUP (PT_DIAL_SLAVE); 492 call VALIDATE_PERSON (); 493 call PERFORM_PASSWORD_CHECKS (); 494 call CHECK_FOR_SECURITY_BREACH (); 495 call PROCESS_CHANGE_ARGUMENTS (); 496 call PROCESS_AUTH_ARGUMENT (); 497 call LOOKUP_PROJECT (); 498 499 if ute.anonymous = 1 then 500 if user.password ^= "" then /* If anonymous user has password, check it. */ 501 if scramble_ (user.password) ^= P_password then do; 502 mcode = as_error_table_$bad_anon_pw; 503 go to login_incorrect; /* anonymous user's password is incorrect */ 504 end; 505 506 if cdte.flags.access_control.slave_dial then 507 if ^check_channel_acs () then do; 508 mcode = as_error_table_$no_line_permission; 509 go to login_abort_1; 510 end; 511 512 call PROCESS_ATTRIBUTES (); 513 call DETERMINE_AUTHORIZATIONS (); 514 call CHECK_CHANNEL_ACCESS_CLASS (); 515 516 /* for dial and slave, allows server to learn name given on -user control argument. */ 517 cdte.user_name.project = substr (ute.project, 1, length (cdte.user_name.project)); 518 cdte.user_name.person = substr (ute.person, 1, length (cdte.user_name.person)); 519 ute.login_result = 0; 520 mcode = 0; 521 go to login_returns; 522 523 login: entry (P_utep, P_password, P_text, P_code); 524 525 /**** Come here to validate an interactive login */ 526 527 /**** The path being followed here to validate interactive process 528* logins needs to be kept in sync with path followed by absentee 529* process logins in the abs_in entrypoint. This is important to 530* maintain equivalent functional testing for both kinds of processes. 531* If any changes are made within this entrypoint make sure 532* lg_ctl_$abs_in is updated as needed. */ 533 534 call SETUP (PT_INTERACTIVE); 535 536 first_pass = ute.active < NOW_LOGGED_IN; /* remember this if the first pass */ 537 538 call VALIDATE_PERSON (); 539 540 /**** Here, we test for a fairly unusual condition, namely, that the user 541* has logged in successfully, and we have already checked his password, 542* and may have even changed it, and we've notified him of any bad 543* passwords, and printed all the messages connected with a successful 544* login. But he had one or more disconnected processes and didn't give 545* one of the connect arguments on the login line, so we returned to 546* dialup_ to ask him what to do. And he said to create a new process. 547* So now we're back here, to see if he can have another process, and 548* if so, to set up the parameters for it. But we have to skip over the 549* password checking and message printing that we already did. 550* 551* ute.active >= NOW_LOGGED_IN tells us that we're in this situation. */ 552 553 if ute.active < NOW_LOGGED_IN then do; /* skip these checks, done already */ 554 call PERFORM_PASSWORD_CHECKS (); 555 call CHECK_FOR_SECURITY_BREACH (); 556 call PROCESS_CHANGE_ARGUMENTS (); 557 end; 558 559 call PROCESS_AUTH_ARGUMENT (); 560 call LOOKUP_PROJECT (); 561 562 if ute.anonymous = 1 then 563 if user.password ^= "" then /* If anonymous user has password, check it. */ 564 if scramble_ (user.password) ^= P_password then do; 565 mcode = as_error_table_$bad_anon_pw; 566 go to login_incorrect; /* anonymous user's password is incorrect */ 567 end; 568 569 570 if cdte.flags.access_control.login then 571 if ^check_channel_acs () then do; 572 mcode = as_error_table_$no_line_permission; 573 goto login_abort_1; 574 end; 575 576 call PROCESS_ATTRIBUTES (); 577 578 if ute.active < NOW_LOGGED_IN then /* first trip through lg_ctl_ */ 579 call SET_OUTER_MODULE (); 580 581 call DETERMINE_AUTHORIZATIONS (); 582 call CHECK_CHANNEL_ACCESS_CLASS (); 583 call CHECK_PROCESS_LIMITS (); 584 585 /**** If this is not an anonymous login, we must check for such things 586* as already logged in and ^multip, or for the existence of 587* disconnected processes. */ 588 589 if ute.anonymous ^= 1 then 590 call CHECK_FOR_MULTIPLE_LOGINS (); 591 592 call SET_UP_FOR_PROCESS_CREATION (); 593 goto login_returns; 594 595 login_returns: 596 if process_type ^= PT_DIAL_SLAVE & ute.uprojp ^= null then do; 597 /* If project is empty, */ 598 satep = ute.uprojp; /* .. try to clean up our KST */ 599 if project.n_users <= 0 then 600 if project.project_id ^= "SysDaemon" then do; 601 602 /* See comment at label logout_returns. */ 603 604 if project.n_users < 0 605 | ute.login_result = 0 then /* if n_users has illegal value, log it */ 606 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: project.n_users = ^d for ^a (login ^a)", 607 project.n_users, project.project_id, ute.person); 608 609 /* * call hcs_$terminate_noname (project.pdt_ptr, code); /* */ 610 /* * project.pdt_ptr = null; /* If needed again we re-initiate. */ 611 end; 612 end; 613 614 if ute.login_result ^= 0 then do; 615 P_code = mcode; /* return detailed reason to caller */ 616 if ute.failure_reason = 1 /* if lg_ctl_ said no */ 617 then do; /* expand mcode into short and long messages */ 618 call convert_status_code_ (mcode, debg, flonginfo); 619 i = length (flonginfo) + 1 - verify (reverse (flonginfo), " "); 620 if process_type = PT_INTERACTIVE | process_type = PT_DIAL_SLAVE 621 /* interactive/validate, return long message */ 622 then do; 623 if i = length (flonginfo) + 1 /* if expanded message was all blanks */ 624 then P_text = ""; /* return a null string */ 625 else P_text = substr (flonginfo, 1, i) || NL; /* else return message with NL appended */ 626 end; 627 else if process_type = PT_ABSENTEE /* if absentee, return message to AUM in P_status */ 628 then do; 629 P_status = flonginfo; 630 end; 631 else P_status, flonginfo = debg; /* for daemons, return short form, and replace long one with it, 632* for use below */ 633 end; 634 else do; /* but if act_ctl_ or load_ctl_ said no, they returned errmsg */ 635 if process_type = PT_INTERACTIVE 636 then P_text = errmsg; /* return it in P_text for interactive */ 637 else if process_type = PT_ABSENTEE 638 then P_status = errmsg; /* or in P_status for absentee */ 639 else P_status = debg; /* but just return the short form, for daemons */ 640 641 if process_type ^= PT_DAEMON /* if not daemon */ 642 then flonginfo = errmsg; /* put returned long message in flonginfo, 643* where lg_ctl_'s message would have been */ 644 else flonginfo = debg; /* but if daemon, put the short message there */ 645 end; 646 end; 647 648 lrt2: /* come here if reason is "already logged in" */ 649 650 if ute.login_result = 0 then /* successful login */ 651 if first_pass then /* only do this the first time through */ 652 call AUDIT_LOGIN (SUCCESS); 653 else ; /* don't log anything if we've already done it */ 654 655 /**** Avoid logging 2nd and subsequent instances of absentee refused by load 656* control. */ 657 658 else do; 659 if ^(ute.login_result = 2 & ute.uflags.deferral_logged) then 660 661 call AUDIT_LOGIN (^SUCCESS); 662 663 if ute.login_result = 2 then /* if normal deferral */ 664 ute.uflags.deferral_logged = "1"b; /* remember not to log deferral of this job again */ 665 end; 666 667 if process_type ^= PT_INTERACTIVE & process_type ^= PT_DIAL_SLAVE then 668 P_status = flonginfo; /* Tell daemon or abs about failure */ 669 else P_password = ""; /* .. blank password of interactive. */ 670 return; /* Done. */ 671 672 login_incorrect: 673 if rewrite_pnte then 674 call maybe_write_pnte; 675 login_abort_2: 676 ute.login_result = 2; /* allow guy to try once more */ 677 if process_type = PT_ABSENTEE & ^user_limit then 678 ute.login_result = 1; /* abs can only retry if user limit was reason */ 679 ute.failure_reason = 1; /* lg_ctl_ proper threw him out */ 680 go to login_returns; 681 682 login_abort_1: 683 ute.login_result = 1; /* it's hopeless, hang him up right away */ 684 ute.failure_reason = 1; /* lg_ctl_ proper threw him out */ 685 go to login_returns; 686 687 abs_out: entry (P_utep); 688 689 /**** This entry is called when an absentee process logs out */ 690 691 if as_data_$ansp = null then return; /* procedure not initialized */ 692 ansp = as_data_$ansp; 693 if as_procid ^= anstbl.as_procid then return; /* privileged entry point */ 694 695 process_type = PT_ABSENTEE; /* Absentee. */ 696 utep = P_utep; /* copy ptr to AUT entry */ 697 698 if ute.queue > 0 then /* if not foreground absentee */ 699 whotab.abs_users = whotab.abs_users - 1; /* decrease count of absentee users */ 700 else whotab.fg_abs_users = whotab.fg_abs_users - 1; /* else decrease foreground user count */ 701 go to logout_returns; 702 703 daemon_out: entry (P_utep); 704 705 if as_data_$ansp = null then return; /* procedure not initialized */ 706 ansp = as_data_$ansp; 707 if as_procid ^= anstbl.as_procid then return; /* privileged entry pint */ 708 709 process_type = PT_DAEMON; /* daemon */ 710 utep = P_utep; /* copy ptr */ 711 712 whotab.n_daemons = whotab.n_daemons - 1; /* count down */ 713 go to logout_returns; 714 715 logout: entry (P_utep); 716 717 if as_data_$ansp = null then return; /* procedure not initialized */ 718 ansp = as_data_$ansp; 719 if as_procid ^= anstbl.as_procid then return; /* privileged entry point */ 720 721 process_type = PT_INTERACTIVE; /* normal user */ 722 utep = P_utep; /* copy ptr */ 723 724 if ^(ute.active = NOW_LOGGED_IN & ute.proc_create_ok) then do; /* check if ute has a real, logged in user */ 725 call sys_log_ (SL_LOG_SILENT, "lg_ctl_$logout: called with active=^d,^[^;^^^]proc_create_ok for ^a.^a ^a ute ^p", 726 ute.active, ute.proc_create_ok, ute.person, ute.project, ute.tty_name, utep); 727 return; /* don't decrement counters twice */ 728 end; 729 730 logout_returns: 731 call load_ctl_$unload (utep, process_type); /* May promote somebody. */ 732 if ute.uprojp ^= null then do; /* If project is empty, */ 733 satep = ute.uprojp; /* .. try to clean up our KST */ 734 if project.n_users <= 0 then 735 if project.project_id ^= "SysDaemon" then do; 736 737 /* There is a bug in the pdt reference counting, that causes the reference count to go to zero 738* while there are still users logged in on the project. To avoid the repercussions arising 739* from terminating a pdt while there are still pointers to it in other 740* user table entries, the code to terminate the pdt is being commented out, and replaced 741* by a statement to log the instance of the ref count going to zero, to help 742* find the cause of the bug that is making it go to zero too soon. This will 743* result in higher segment numbers being used in the initializer process, but there are 4095 744* segment numbers available, and the bug that caused the lot to overflow when high segment numbers 745* were used has been fixed in MR8.0 */ 746 747 if project.n_users < 0 then /* log only if illegal value */ 748 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: project.n_users = ^d for ^a (logout ^a)", 749 project.n_users, project.project_id, ute.person); 750 751 /* * call hcs_$terminate_noname (project.pdt_ptr, code); /* */ 752 /* * project.pdt_ptr = null; /* If needed again we re-initiate. */ 753 /* * ute.pdtep = null; /* this ptr is now invalid; simfault if we try to use it */ 754 end; 755 end; 756 757 ute.active = NOW_DIALED; /* indicate user no longer logged-in */ 758 759 whotab.n_users = whotab.n_users - 1; /* count users down. */ 760 whotab.n_units = whotab.n_units - ute.user_weight; 761 userx = ute.whotabx; /* locate whotab entry */ 762 if userx ^= 0 then do; /* If user had entry, free it. */ 763 whotab.e (userx).active = NOW_FREE; /* mark idle */ 764 whotab.e (userx).person, whotab.e (userx).project = ""; 765 whotab.e (userx).chain = whotab.freep; /* chain free entries together. */ 766 whotab.freep = userx; /* put on top of chain */ 767 ute.whotabx = 0; /* unhook from anstbl */ 768 end; 769 770 call AUDIT_LOGOUT (""); /* perform auditing */ 771 return; 772 773 logout_no_process: 774 entry (P_utep, P_reason); 775 776 /**** This entry is used by programs which effectively logout an 777* anthenticated user, when no process is associated with the 778* specified utep */ 779 780 if as_data_$ansp = null then return; 781 ansp = as_data_$ansp; 782 if as_procid ^= anstbl.as_procid then return; 783 784 utep = P_utep; 785 786 /**** This entry is only used for interactive logins */ 787 788 process_type = PT_INTERACTIVE; 789 790 call AUDIT_LOGOUT (P_reason); 791 return; 792 793 logout_channel: 794 entry (P_cdtep, P_reason); 795 796 /**** This entry is used by programs which effectively logout an authenticated 797* user/channel when a process is not affected by the logout. */ 798 799 if as_data_$ansp = null then return; 800 ansp = as_data_$ansp; 801 if as_procid ^= anstbl.as_procid then return; 802 803 cdtep = P_cdtep; /* get pointer to the cdte */ 804 805 call sys_log_ (SL_LOG, "LOGOUT^20t^a.^a int ^a (^a)", 806 cdte.user_name.person, cdte.user_name.project, cdte.name, 807 P_reason); 808 809 cdte.user_name.person = ""; /* reset these values */ 810 cdte.user_name.project = ""; 811 return; 812 813 login_operator: 814 entry (P_sc_subsystem_info_ptr, P_success_sw, P_operator_name, P_reason); 815 816 /**** This entry is called by sc_requests_ to log operator logins. 817* Currently the password checking is done within sc_requests_, 818* but this should be moved here for consistency. */ 819 820 dcl P_sc_subsystem_info_ptr ptr parameter; /* pointer to relevant info */ 821 dcl P_success_sw bit (1) aligned parameter; /* whether this is successful or not */ 822 dcl P_operator_name char (*) parameter; /* name of operator logging in */ 823 824 sc_subsystem_info_ptr = P_sc_subsystem_info_ptr; 825 826 call sys_log_ (SL_LOG, "LOGIN^[^; DENIED^]^20t^a.Operator opr ^a (^a)", 827 P_success_sw, P_operator_name, sc_subsystem_info.source_name, 828 P_reason); 829 return; 830 831 logout_operator: 832 entry (P_sc_subsystem_info_ptr, P_operator_name, P_reason); 833 834 /**** This entry is called by sc_requests_ to log operator logouts. */ 835 836 sc_subsystem_info_ptr = P_sc_subsystem_info_ptr; 837 838 call sys_log_ (SL_LOG, "LOGOUT^20t^a.Operator opr ^a (^a)", 839 P_operator_name, sc_subsystem_info.source_name, P_reason); 840 return; 841 842 trace_on: 843 entry (); 844 845 tracing = "1"b; 846 call sys_log_ (SL_LOG, "lg_ctl_: tracing turned on."); 847 return; 848 849 850 trace_off: 851 entry (); 852 853 tracing = "0"b; 854 call sys_log_ (SL_LOG, "lg_ctl_: tracing turned off."); 855 return; 856 857 convert_message: 858 procedure (p_status_code) returns (char (100) varying); 859 860 declare p_status_code fixed binary (35) parameter; 861 declare long character (100) aligned automatic; 862 863 /* A side effect of invoking this function is that the short form of the 864* message is available in the global variable xdebg */ 865 866 call convert_status_code_ (p_status_code, xdebg, long); 867 868 return (rtrim (long, " ")); 869 870 end convert_message; 871 872 maybe_write_pnte: 873 procedure (); 874 875 call pnt_manager_$update_entry (addr (pnte), 876 password_changed_flag, /* Are we changing the password? */ 877 "0"b, /* lg_ctl_ doesn't use the network password */ 878 code); 879 rewrite_pnte = "0"b; 880 if code ^= 0 then do; 881 call sys_log_$error_log (SL_LOG_BEEP, code, "lg_ctl_", "Error updating PNT entry of ^a.", ute.person); 882 mcode = as_error_table_$dialup_error; 883 goto login_abort_2; 884 end; 885 end maybe_write_pnte; 886 887 check_channel_acs: 888 procedure () returns (bit (1) aligned); 889 890 dcl group_id char (32); 891 dcl mode bit (36) aligned; 892 dcl ok bit (1) aligned; 893 dcl type char (8); 894 dcl user_id char (32); 895 896 if ute.login_flags.dial_pw then type = "dial"; 897 else if ute.login_flags.slave_pw then type = "slave"; 898 else type = "login"; 899 if ute.person = "" then mode = ""b; 900 else do; 901 user_id = rtrim (ute.person) || "." || rtrim (ute.project); 902 group_id = rtrim (user_id) || "." || "a"; 903 call hcs_$get_user_access_modes (as_data_$rcpdir, rtrim (cdte.name) || ".acs", group_id, 0, mode, ""b, code); 904 if code ^= 0 then do; 905 call sys_log_$error_log (SL_LOG, code, "lg_ctl_", "Unable to check access for channel ^a.", cdte.name); 906 mode = ""b; 907 end; 908 end; 909 910 ok = (mode & RW_ACCESS) = RW_ACCESS; 911 912 if ^ok then 913 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: ^a access to channel ^a by ^a denied by ACS.", 914 type, cdte.name, user_id); 915 return (ok); 916 end check_channel_acs; 917 918 check_daemon_source_acs: 919 procedure (code); 920 921 dcl group_id char (32); 922 dcl code fixed bin (35); 923 924 call ioa_$rsnnl ("^a.^a.z", group_id, (0), ute.person, ute.project); 925 call mc_check_access_$log_in_as_daemon (group_id, ute.tty_name, code); /* This logs its decision */ 926 return; 927 928 end check_daemon_source_acs; 929 930 BAD_PASSWORD: 931 procedure (); 932 933 /**** This procedure is called for interactive users when the password 934* supplied is invalid. This code was moved from the inline code 935* for clarity. */ 936 937 pnte.n_bad_pw = pnte.n_bad_pw + 1; 938 pnte.n_bad_pw_since_good = pnte.n_bad_pw_since_good + 1; 939 pnte.time_last_bad_pw = anstbl.current_time; 940 pnte.last_bad_pw_reported = "0"b; 941 pnte.bad_pw_term_id = cdte.tty_id_code; 942 pnte.bad_pw_term_type = cdte.current_terminal_type; 943 pnte.bad_pw_line_type = cdte.cur_line_type; 944 rewrite_pnte = "1"b; 945 if pnte.n_bad_pw_since_good = 1 946 then vlonginfo = convert_message (as_error_table_$password_probe1_mail_msg); 947 else vlonginfo = convert_message (as_error_table_$password_probe_mail_msg); 948 949 if vlonginfo ^= "" 950 then do; 951 unspec (send_mail_info) = "0"b; /* prepare to tell the user */ 952 send_mail_info.version = 1; 953 send_mail_info.wakeup = "1"b; 954 send_mail_info.always_add = "1"b; 955 send_mail_info.sent_from = "login"; 956 957 if pnte.n_bad_pw_since_good = 1 then 958 call ioa_$rs (vlonginfo, answer, i, ute.person, tty_term_type, cdte.tty_id_code); 959 else call ioa_$rs (vlonginfo, answer, i, ute.person, pnte.n_bad_pw_since_good, tty_term_type, cdte.tty_id_code); 960 961 call ioa_$rsnnl ("^a.^a", pdt_name, (0), ute.person, ute.project); 962 call send_mail_$access_class (pdt_name, substr (answer, 1, i), addr (send_mail_info), pnte.default_person_authorization, code); 963 if (code ^= 0) & (code ^= error_table_$wakeup_denied) & (code ^= error_table_$messages_off) 964 then do; 965 call ioa_$rsnnl ("^a.^a", pdt_name, (0), ute.person, pnte.default_project); 966 call send_mail_$access_class (pdt_name, substr (answer, 1, i), addr (send_mail_info), pnte.default_person_authorization, code); 967 968 /* if that fails, we save the info to print later */ 969 970 if (code = 0) | (code = error_table_$wakeup_denied) | (code = error_table_$messages_off) 971 then pnte.flags.last_bad_pw_reported = "1"b; 972 end; 973 else pnte.flags.last_bad_pw_reported = "1"b; 974 end; 975 if mod (pnte.n_bad_pw_since_good, installation_parms.login_tries - 1) = 0 then 976 977 /* Somebody is hacking. Tell operator */ 978 979 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: too many bad passwords for ^a.^a from ^a (^a terminal ""^a"").", 980 ute.person, ute.project, ute.tty_name, tty_term_type, id_code); 981 return; 982 end BAD_PASSWORD; 983 984 CHECK_FOR_MULTIPLE_LOGINS: 985 procedure (); 986 987 /**** This procedure is called for interactive, non-anonymous logins to 988* check for the existence of other interactive processes. If the 989* user does not have the multip attribute and there are other interactive 990* processes, the login is rejected. Other cases are handled as well. */ 991 992 cdte.n_disconnected_procs = 0; /* be sure there's no garbage in these */ 993 cdte.disconnected_ate_index = 0; 994 if user.n_disconnected = 0 then do; /* if user has no disconnected processes */ 995 if cdte.disconnected_proc_command = 0 /* and user didn't give one of the special args */ 996 | cdte.disconnected_proc_command = 2 then do; /* or said -create, see if we can create a process for him */ 997 998 if ute.at.multip then /* user has interactive processes, but it's ok */ 999 scan_reason = 3; /* but notify the current login instances of the new one */ 1000 else scan_reason = 2; /* he doesn't have multip; warn current one and say no to him */ 1001 end; 1002 1003 else do; 1004 call asu_$write_message (utep, as_error_table_$no_disconnected_procs, debg, code); 1005 /* say "You have no disconnected processes" */ 1006 call ASSERT_LOGGED_IN_STATE (); 1007 call ASSERT_INTERACTIVE_LOGIN (); /* record we are logged in */ 1008 login_state = "connect loop"; 1009 goto login_returns; 1010 end; 1011 end; /* end user has no disconnected processes */ 1012 1013 else do; /* user does have disconnected processes */ 1014 if ute.active < NOW_LOGGED_IN then do; /* if we didn't already do this */ 1015 vlonginfo = convert_message (as_error_table_$n_disconnected_procs_msg); 1016 if (vlonginfo ^= "") & (^ute.at.brief | cdte.disconnected_proc_command = 0) 1017 then do; /* if site hasn't turned off the message, say 1018* You have N disconnected processes. */ 1019 call ioa_$rs (vlonginfo, answer, l, user.n_disconnected, (user.n_disconnected > 1)); 1020 call astty_$tty_force (cdtep, addr (answer), l, (0)); 1021 end; 1022 end; 1023 1024 if cdte.disconnected_proc_command = 2 then do; /* create */ 1025 if ute.at.multip then /* if its ok */ 1026 scan_reason = 3; /* tell current instances about the new one */ 1027 else scan_reason = 2; /* warn current instance about the attempt */ 1028 end; 1029 else if cdte.service_type ^= FTP_SERVICE then do; /* we'll do something with the disconnected processes */ 1030 call ASSERT_LOGGED_IN_STATE (); 1031 call BUILD_DISCONNECTED_LIST (); 1032 call ASSERT_INTERACTIVE_LOGIN (); /* record we are logged in */ 1033 login_state = DISC_STATE (cdte.disconnected_proc_command); 1034 goto login_returns; 1035 end; 1036 end; /* end there are disconnected processes */ 1037 1038 if scan_reason ^= 0 then 1039 call SCAN_ANSWER_TABLE (scan_reason); 1040 return; 1041 end CHECK_FOR_MULTIPLE_LOGINS; 1042 1043 SCAN_ANSWER_TABLE: 1044 procedure (P_reason); 1045 1046 /**** This procedure is called to scan the answer table for the existence 1047* of other interactive processes. The reason for the scan is specified 1048* as P_reason. 2 specifies that we are to find any other 1049* instances warn them of the attempted login and refuse the login. 1050* 3 specifies that we are to find any other instances and warn them 1051* of the new instance. */ 1052 1053 dcl P_reason fixed bin (17) parameter; /* The reason why we are scanning */ 1054 dcl found_identical_userid bit (1) aligned; /* whether exact match found */ 1055 dcl n_processes fixed bin (17); /* number of other processes */ 1056 dcl saved_utep ptr; /* ptr to ute of other login instance for ^multip */ 1057 dcl try_message bit (1) aligned; /* whether to attempt a message */ 1058 1059 1060 try_message = "1"b; /* initially we will */ 1061 found_identical_userid = "0"b; /* not yet */ 1062 n_processes = 0; 1063 1064 do i = 1 to anstbl.current_size; /* Scan through answer table. */ 1065 p = addr (anstbl.entry (i)); /* get pointer to answer table entry */ 1066 if p -> ute.active > NOW_LOGGED_IN /* if this is a logged-in user with a process */ 1067 & p ^= utep /* (and not the temporary ate used by this dialup) */ 1068 & p -> ute.person = ute.person /* if the name is the same */ 1069 & p -> ute.anonymous = 0 /* check only authenticated users */ 1070 then do; 1071 1072 n_processes = n_processes + 1; /* count user's processes as we find them */ 1073 if p -> ute.project = ute.project /* identical match */ 1074 & P_reason = 2 /* and we're we don't have multip */ 1075 then do; 1076 found_identical_userid = "1"b; 1077 saved_utep = p; 1078 end; 1079 if p -> ute.tag ^= TAG_UFT /* if not a file transfer process */ 1080 & ^p -> ute.disconnected then /* and not a disconnected process */ 1081 1082 call WARN_OF_ANOTHER_LOGIN (P_reason, try_message, found_identical_userid); 1083 end; /* end ate belongs to another instance of user logging in */ 1084 end; /* end scan of answer table */ 1085 1086 if P_reason = 2 & found_identical_userid then do; /* deny login */ 1087 mcode = as_error_table_$already_in_msg; /* Too bad. */ 1088 1089 if saved_utep -> ute.disconnected then /* if logged in proc is disconnected, don't try to use the cdte */ 1090 temp_term_type = "DISCONNECTED"; /* make up a reasonable terminal type */ 1091 else temp_term_type = saved_utep -> ute.terminal_type; 1092 1093 call ioa_$rs (convert_message (mcode), P_text, l, 1094 saved_utep -> ute.person, saved_utep -> ute.project, 1095 temp_term_type, 1096 saved_utep -> ute.tty_id_code); 1097 ute.login_result = 2; /* Login is denied, but don't hang up on the user */ 1098 debg = xdebg; /* log reason for denial */ 1099 ute.failure_reason = 1; 1100 go to lrt2; /* take special return */ 1101 end; /* end reason = 2 */ 1102 1103 else if n_processes > 0 /* he has other processes */ 1104 then do; /* print "This is your Nth interactive login instance." */ 1105 n_processes = n_processes + 1; /* add in this new process, too. */ 1106 xlonginfo = convert_message (as_error_table_$multiple_login_msg); 1107 if (n_processes > 9) & (n_processes < 20) 1108 then xdebg = as_data_$teens_suffix (n_processes); 1109 else xdebg = as_data_$suffix (mod (n_processes, 10)); 1110 1111 call ioa_$rs (xlonginfo, answer, i, n_processes, xdebg); 1112 /* "This is your 3rd interactive login instance." */ 1113 call astty_$tty_force (cdtep, addr (answer), i, code); 1114 end; 1115 end SCAN_ANSWER_TABLE; 1116 1117 BUILD_DISCONNECTED_LIST: 1118 procedure (); 1119 1120 /**** This procedure builds a list of all disconnected processes belonging 1121* to this user. */ 1122 1123 dcl back_thread fixed bin (17); /* index of last disconnected process found */ 1124 dcl i fixed bin (17); /* temporary index of ute entries */ 1125 dcl n_processes fixed bin (17); /* number of other processes found */ 1126 dcl p ptr; /* temporary pointer to ute entries */ 1127 1128 n_processes = 0; /* no processes found yet */ 1129 back_thread = 0; /* no entries yet */ 1130 do i = 1 to anstbl.current_size; /* scan through the answer table */ 1131 p = addr (anstbl.entry (i)); /* get pointer to ute */ 1132 if p -> ute.active > NOW_LOGGED_IN /* if associated with a process */ 1133 & p ^= utep /* and not the temporary ute for this dialup */ 1134 & p -> ute.anonymous = 0 /* and not a anonymous user */ 1135 & p -> ute.person = ute.person /* and the same personid */ 1136 & p -> ute.project = ute.project /* and the same project */ 1137 then do; 1138 n_processes = n_processes + 1; /* increment number found */ 1139 if p -> ute.disconnected then do; /* found a disconnected one */ 1140 if back_thread = 0 then /* list is empty */ 1141 cdte.disconnected_ate_index = i; /* thread this ute onto the list header */ 1142 else addr (anstbl.entry (back_thread)) -> ute.next_disconnected_ate_index = i; /* else thread this ute onto the end of the list */ 1143 back_thread = i; /* remember where the end of the list is */ 1144 cdte.n_disconnected_procs = cdte.n_disconnected_procs + 1; /* count the number of entries on the list */ 1145 end; /* end found a disconnected one */ 1146 end; /* end found an appropriate process */ 1147 end; /* end scan of answer table */ 1148 1149 if cdte.n_disconnected_procs ^= user.n_disconnected then do; /* these got out of sync somehow */ 1150 call sys_log_ (SL_LOG, "^a: disconnected count for ^a.^a is ^d in cdte, ^d in pdte, n_processes = ^d.", ME, ute.person, ute.project, cdte.n_disconnected_procs, user.n_disconnected, n_processes); 1151 user.n_disconnected = cdte.n_disconnected_procs; /* reset */ 1152 end; 1153 if cdte.n_disconnected_procs > 1 then /* we have some */ 1154 call SORT_DISC_LIST (); /* sort the list */ 1155 1156 return; 1157 end BUILD_DISCONNECTED_LIST; 1158 1159 SORT_DISC_LIST: 1160 procedure (); 1161 1162 dcl (lp1, lp2, lpp) ptr; 1163 dcl (li, ll, lx1, lx2) fixed bin; 1164 dcl sorted bit (1) aligned; 1165 1166 /* Interchange sort */ 1167 1168 sorted = ""b; /* get the outer loop started */ 1169 1170 do ll = cdte.n_disconnected_procs to 2 by -1 /* each pass is 1 shorter than previous one */ 1171 while (^sorted); /* quit early if we find them in order */ 1172 1173 sorted = "1"b; /* assume they're in order; this is turned off if we do an interchange */ 1174 lpp = null; /* no previous entry */ 1175 lx1 = cdte.disconnected_ate_index; /* index of first entry */ 1176 1177 do li = 1 to ll - 1; /* make one pass thru unsorted part of list */ 1178 1179 /* Get indices and pointers to the next pair of entries to be compared. 1180* The list is singly-threaded. A -> B, B -> C, and C -> D. We are going to compare B and C, 1181* and interchange them if they are out of order. A might be the head of the list, and 1182* D might not exist. If we interchange, we will want to end up with: 1183* A -> C, C -> B, B -> D. lpp is ptr to A. lx1, lp1 point to B, lx2, lp2 point to C, 1184* and lp2 -> ate.next_disconnected_ate_index points to D. */ 1185 1186 lp1 = addr (anstbl.entry (lx1)); /* pointer to first item */ 1187 lx2 = lp1 -> ute.next_disconnected_ate_index; /* index of second one of this pair */ 1188 lp2 = addr (anstbl.entry (lx2)); /* ptr to it */ 1189 1190 /* Compare login times. Interchange if first is younger than second. We want oldest process first in list */ 1191 1192 if lp1 -> ute.login_time > lp2 -> ute.login_time then do; 1193 /* if time1 is greater, proc1 is younger */ 1194 if li = 1 then /* if A is head of list */ 1195 cdte.disconnected_ate_index = lx2; /* make head be C */ 1196 else lpp -> ute.next_disconnected_ate_index = lx2; /* else make previous entry point at C */ 1197 lp1 -> ute.next_disconnected_ate_index = lp2 -> ute.next_disconnected_ate_index; /* make B point at D */ 1198 lp2 -> ute.next_disconnected_ate_index = lx1; /* make C point at B */ 1199 lpp = lp2; /* C is now preceding */ 1200 /* lx1 for compare with new next */ 1201 sorted = ""b; /* remember that we did an interchange */ 1202 end; /* end interchange */ 1203 else do; /* no swap, just advance */ 1204 lpp = lp1; /* now we're the previous item */ 1205 lx1 = lx2; /* make second of previous pair the first of next pair */ 1206 end; 1207 1208 end; /* end one pass thru list */ 1209 1210 end; /* end outer loop */ 1211 1212 return; 1213 1214 end SORT_DISC_LIST; 1215 1216 WARN_OF_ANOTHER_LOGIN: 1217 procedure (P_reason, P_message_flag, P_identical_userid); 1218 1219 dcl P_reason fixed bin (17) parameter; 1220 dcl P_message_flag bit (1) aligned parameter; 1221 dcl P_identical_userid bit (1) aligned parameter; 1222 dcl try_blasting bit (1) aligned; /* whether to try blasting or not */ 1223 1224 try_blasting = "0"b; /* not unless the we can't send the message */ 1225 if P_reason = 2 & P_identical_userid 1226 then mcode = as_error_table_$already_in_warn_msg; 1227 else mcode = as_error_table_$already_in_notify_msg; 1228 1229 vlonginfo = convert_message (mcode); 1230 if vlonginfo ^= "" then do; /* unless site has disabled this */ 1231 call ioa_$rs (vlonginfo, answer, l, ute.person, ute.person, 1232 ute.project, tty_term_type, id_code); 1233 1234 if P_message_flag then do; /* if we're to attempt a message */ 1235 unspec (send_mail_info) = "0"b; 1236 send_mail_info.version = 1; 1237 send_mail_info.wakeup = "1"b; 1238 send_mail_info.always_add = "1"b; 1239 send_mail_info.sent_from = "answering service"; 1240 call ioa_$rsnnl ("^a.^a", pdt_name, (0), p -> ute.person, p -> ute.project); 1241 call send_mail_$access_class (pdt_name, substr (answer, 1, l), addr (send_mail_info), 1242 p -> ute.process_authorization, code); 1243 1244 if (code = 0 /* if we succeeded in sending the message */ 1245 | code = error_table_$wakeup_denied/* or if it got into the mbx ok, but */ 1246 | code = error_table_$messages_off) then /* the user won't see it until he prints messages */ 1247 P_message_flag = "0"b; /* remember not to do it again */ 1248 else try_blasting = "1"b; 1249 end; 1250 1251 /**** If we did not succeed in sending the message, try to blast this 1252* instance of the user. If we can't a message, we will blast all 1253* instances of this user. */ 1254 1255 if try_blasting then do; 1256 if ^p -> ute.disconnected /* else if it isn't a disconnected process */ 1257 & ^p -> ute.at.no_warning /* and it didn't log in -no_warning */ 1258 then do; /* then blast the warning on its terminal */ 1259 tcdtep = p -> ute.channel; 1260 if tcdtep ^= null then /* not MNA user */ 1261 if tcdtep -> cdte.service_type = FTP_SERVICE 1262 then answer = asu_$format_ftp_msg (answer, l, l, 050); 1263 call asu_$blast_user (utep, (answer), "", 0); 1264 end; /* end not disconnected */ 1265 end; /* end blast code */ 1266 end; /* end of site selectable code */ 1267 1268 end WARN_OF_ANOTHER_LOGIN; 1269 1270 NOTIFY_USER_OF_LOGIN: 1271 procedure (); 1272 1273 /**** This procedure is invoked when we have successfully "logged in". 1274* We notify the user of this (if we haven't already and if we wants 1275* to know. */ 1276 1277 if ^ute.at.brief & ute.active < NOW_HAS_PROCESS then do; 1278 /* Do we print logged-in message? */ 1279 w_date = date_time_$format ("date_time", anstbl.current_time, "", ""); /* get login time in ASCII */ 1280 if ute.anonymous = 0 then xlonginfo = convert_message (as_error_table_$login_msg); 1281 else xlonginfo = convert_message (as_error_table_$login_anon_msg); 1282 call ioa_$rs (xlonginfo, answer, i, /* Use error explanation as control string. */ 1283 ute.person, ute.project, w_date, tty_term_type, id_code); 1284 call astty_$tty_force (cdtep, addr (answer), i, code); 1285 1286 if ute.anonymous = 0 then do; /* Compose last-login message */ 1287 if user.last_login_time ^= 0 then do; /* If ever logged in before. */ 1288 w_date = date_time_$format ("date_time", user.last_login_time, "", ""); 1289 xlonginfo = convert_message (as_error_table_$last_login_msg); 1290 if xlonginfo ^= "" then do; /* If installation wants this. */ 1291 /* Due to an error on my part in the conversion */ 1292 /* from AS 9.1a to AS 9.2, the old term_type */ 1293 /* field is the new line_type field, thus */ 1294 /* the strangeness in the next few lines. - dmw */ 1295 if (user.last_login_type = 0) /* there is no term type 0 */ 1296 then temp_coded_type = user.last_login_line_type; /* thus old form */ 1297 else temp_coded_type = user.last_login_type; 1298 call ttt_info_$decode_type (temp_coded_type, temp_term_type, code); 1299 if code ^= 0 then temp_term_type = ""; 1300 if user.last_login_line_type >= LINE_UNKNOWN 1301 | user.last_login_type = 0 /* old form, no line type */ 1302 then last_term_type = temp_term_type; 1303 else call ioa_$rsnnl ("^a ^a", last_term_type, (0), 1304 line_types (user.last_login_line_type), 1305 temp_term_type); 1306 call ioa_$rs (xlonginfo, answer, i, w_date, 1307 last_term_type, user.last_login_unit); 1308 call astty_$tty_force (cdtep, addr (answer), i, code); 1309 end; 1310 end; 1311 end; 1312 end; 1313 return; 1314 end NOTIFY_USER_OF_LOGIN; 1315 1316 VALIDATE_PERSON: 1317 procedure (); 1318 1319 /**** This procedure validates the value of ute.person. It checks 1320* the password for interactive logins and authenticated dial/slave 1321* use. */ 1322 1323 login_state = ute.login_code; 1324 1325 rewrite_pnte = "0"b; 1326 if ute.person = "" then do; /* It's hopeless. He didn't say who he was */ 1327 mcode = as_error_table_$no_name; /* Tell him we need to know */ 1328 go to login_abort_2; /* Give another chance. */ 1329 end; 1330 if ute.anonymous = 1 then do; /* Anonymous user? */ 1331 if ute.project = "" then 1332 ute.project = substr(ute.person,1,length(ute.project)); 1333 /* Can't have default project here */ 1334 return; /* No PNT processing for anonymous users */ 1335 end; 1336 1337 if ute.login_flags.cpw 1338 then xpw = ute.old_password; 1339 else xpw = P_password; 1340 1341 /**** We only check passwords for interactive users, not daemons or 1342* absentees. However, if we've already checked the password as 1343* in the case of connecting to a disconnected process, we don't 1344* check it again. This latter condition is signaled by the 1345* ute.active >= NOW_LOGGED_IN. In either case, we need the 1346* pnte entry for the specified user. 1347* 1348* Note that pnt_manager_$login_get_entry checks the supplied password 1349* while pnt_manager_$admin_get_entry does not. */ 1350 1351 if (process_type = PT_INTERACTIVE & ute.active < NOW_LOGGED_IN) 1352 | process_type = PT_DIAL_SLAVE then 1353 call pnt_manager_$login_get_entry ((ute.person), xpw, addr (pnte), code); 1354 else call pnt_manager_$admin_get_entry ((ute.person), addr (pnte), code); 1355 1356 if code ^= 0 then do; 1357 if code = error_table_$id_not_found /* Invalid user-id */ 1358 then do; 1359 mcode = as_error_table_$bad_personid; 1360 goto login_incorrect; 1361 end; 1362 else if code = error_table_$checksum_failure /* Damaged PNT entry */ 1363 then do; 1364 call sys_log_$error_log (SL_LOG_BEEP, code, ME, "Checksum failure reading PNT entry of ^a.", ute.person); 1365 mcode = as_error_table_$dialup_error; 1366 goto login_abort_1; 1367 end; 1368 else if code = error_table_$bad_password /* Only for interactive users */ 1369 then do; 1370 ute.person = substr (pnte.user_id, 1, length (ute.person)); /* In case alias was used */ 1371 if ute.project = "" then 1372 ute.project = substr(pnte.default_project,1,length(ute.project)); 1373 call BAD_PASSWORD (); 1374 mcode = as_error_table_$bad_password; 1375 goto login_incorrect; 1376 end; 1377 else do; /* Some other error we don't know how to handle */ 1378 call sys_log_$error_log (SL_LOG_BEEP, code, ME, "Error reading PNT entry of ^a.", ute.person); 1379 mcode = as_error_table_$dialup_error; 1380 goto login_abort_1; 1381 end; 1382 end; 1383 1384 old_pnte = pnte; /* Save copy of pnt entry since we're about to modify it */ 1385 1386 ute.person = substr (pnte.user_id, 1, length (ute.person)); /* Found in PNT. Put real name in case alias. */ 1387 if ute.project = "" then do; 1388 ute.project = substr(pnte.default_project,1,length(ute.project)); 1389 end; 1390 end VALIDATE_PERSON; 1391 1392 PROCESS_CHANGE_ARGUMENTS: 1393 procedure (); 1394 1395 /**** This procedure process the -change_default_project, and 1396* -change_default_authorization control arguments to the login command */ 1397 1398 if ute.anonymous = 1 then /* anonymous users aren't allowed */ 1399 return; 1400 1401 if ute.login_flags.cdp then /* Default project change requested? */ 1402 if ^pnte.flags.nochange then do; /* Ok to do this? */ 1403 call hash_$search (sat_htp, ute.project, i, code); 1404 if code = 0 then do; /* If project alias used, expand it. */ 1405 satep = addr(sat.project(i)); 1406 if ute.project ^= project.project_id then 1407 if ute.project = project.alias then 1408 ute.project = project.project_id; 1409 end; 1410 pnte.default_project = ute.project; /* Set new value. */ 1411 rewrite_pnte = "1"b; 1412 if ^ute.at.brief 1413 then call asu_$write_message (utep, as_error_table_$dft_proj_changed, debg, code); 1414 end; 1415 else do; 1416 mcode = as_error_table_$no_change; 1417 go to login_incorrect; 1418 end; 1419 1420 if ute.login_flags.cda /* Default authorization change requested? */ 1421 then if ^pnte.flags.nochange /* OK? */ 1422 then do; 1423 pnte.default_person_authorization = ute.process_authorization; 1424 rewrite_pnte = "1"b; 1425 if ^ute.at.brief 1426 then call asu_$write_message (utep, as_error_table_$dft_auth_changed, debg, code); 1427 end; 1428 else do; /* Not allowed to change things. */ 1429 mcode = as_error_table_$no_change; 1430 goto login_incorrect; 1431 end; 1432 1433 if ute.login_flags.cdp & rewrite_pnte then do; 1434 call mail_table_initializer_$set_dft_proj (rtrim (pnte.user_id), rtrim (pnte.default_project), code); 1435 if code ^= 0 then 1436 call sys_log_$error_log (SL_LOG_BEEP, code, "lg_ctl_", "Changing Mail Table default project for ^a to ^a", 1437 pnte.user_id, pnte.default_project); 1438 end; 1439 if rewrite_pnte then call maybe_write_pnte; 1440 return; 1441 1442 end PROCESS_CHANGE_ARGUMENTS; 1443 1444 PERFORM_PASSWORD_CHECKS: 1445 procedure (); 1446 1447 /**** This procedure performs various checks on the password flags stored 1448* in the PNT and on the password options specified on the command line. */ 1449 1450 1451 if ute.anonymous = 1 then 1452 return; /* we do not perform these checks for anonymous users */ 1453 1454 if ute.login_flags.cpw & ^ute.login_flags.generate_pw & pnte.flags.generate_pw then do; 1455 mcode = as_error_table_$must_use_generate_pw; 1456 goto login_incorrect; 1457 end; 1458 1459 if ^ute.login_flags.cpw then /* if he didn't ask to change */ 1460 do; 1461 if pnte.flags.must_change then 1462 do; 1463 if ^pnte.flags.generate_pw then 1464 mcode = as_error_table_$must_change; 1465 else mcode = as_error_table_$must_use_generate_pw; 1466 goto login_incorrect; 1467 end; 1468 if installation_parms.password_change_interval ^= 0 then 1469 /* and the site has an enforced interval */ 1470 if (anstbl.current_time - pnte.time_pw_changed) > 1471 (installation_parms.password_change_interval * 1472 USECS_PER_DAY) then 1473 do; 1474 vlonginfo = convert_message ( 1475 as_error_table_$password_expired_msg); 1476 call ioa_$rs (vlonginfo, answer, i, 1477 installation_parms.password_change_interval); 1478 call astty_$tty_force (cdtep, addr (answer), i, (0)); 1479 if ^pnte.flags.generate_pw then 1480 mcode = as_error_table_$must_change; 1481 else mcode = as_error_table_$must_use_generate_pw; 1482 goto login_incorrect; 1483 end; 1484 else ; 1485 end; 1486 1487 if installation_parms.password_expiration_interval ^= 0 then 1488 /* and the site has an enforced interval */ 1489 /**** Check to see if last good password given longer ago than the limit */ 1490 if ((anstbl.current_time - pnte.time_last_good_pw) > 1491 (installation_parms.password_expiration_interval * 1492 USECS_PER_DAY)) & 1493 /**** Check to see that an administrator has not yet re-validated the userid */ 1494 ((anstbl.current_time - pnte.user_validated_time) > 1495 (installation_parms.password_expiration_interval * 1496 USECS_PER_DAY)) then 1497 do; 1498 vlonginfo = convert_message ( 1499 as_error_table_$password_unused_too_long_msg); 1500 call ioa_$rs (vlonginfo, answer, i, 1501 installation_parms.password_expiration_interval); 1502 call astty_$tty_force (cdtep, addr (answer), i, (0)); 1503 mcode = as_error_table_$password_expired; 1504 goto login_incorrect; 1505 end; 1506 else ; 1507 1508 pnte.n_good_pw = pnte.n_good_pw + 1; 1509 pnte.time_last_good_pw = anstbl.current_time; 1510 rewrite_pnte = "1"b; 1511 1512 /**** We used to check pnte.flags.last_bad_pw_reported here to decide 1513* whether to print the message "Your password was ..." on the terminal 1514* upon login. Since it is possible (and likely) that the user logging 1515* in will have never seen the mail sent telling him that his password 1516* was used incorrectly, we remove that check and force the message 1517* on his terminal. The theory is that if there really is someone trying 1518* to guess a password, and he does manage to succeed and get in, he 1519* will most likely delete any mail telling the REAL user that someone 1520* was hacking. */ 1521 1522 if pnte.n_bad_pw_since_good > 0 then do; /* Security here */ 1523 w_date = date_time_$format ("date_time", pnte.time_last_bad_pw, "", ""); 1524 if pnte.n_bad_pw_since_good = 1 1525 then vlonginfo = convert_message (as_error_table_$password_probe1_msg); /* Get singular-plural correct */ 1526 else vlonginfo = convert_message (as_error_table_$password_probe_msg); /* Tell user he has been tried. */ 1527 if vlonginfo ^= "" then do; /* .. if installation wants this feature */ 1528 temp_term_type = pnte.bad_pw_term_type; 1529 if pnte.bad_pw_line_type >= LINE_UNKNOWN 1530 then ; 1531 else call ioa_$rsnnl ("^a ^a", temp_term_type, (0), line_types (pnte.bad_pw_line_type), 1532 temp_term_type); 1533 1534 if pnte.n_bad_pw_since_good = 1 1535 then call ioa_$rs (vlonginfo, answer, i, w_date, 1536 temp_term_type, pnte.bad_pw_term_id); 1537 else call ioa_$rs (vlonginfo, answer, i, pnte.n_bad_pw_since_good, w_date, 1538 temp_term_type, pnte.bad_pw_term_id); 1539 call astty_$tty_force (cdtep, addr (answer), i, code); 1540 end; 1541 pnte.last_bad_pw_reported = "1"b; 1542 rewrite_pnte = "1"b; 1543 end; 1544 1545 if pnte.last_bad_pw_reported 1546 then pnte.n_bad_pw_since_good = 0; 1547 1548 if pnte.flags.trap then /* Are we watching this guy? */ 1549 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: password used ^a.^a ^a ^a ^a", 1550 ute.person, ute.project, ute.tty_name, tty_term_type, id_code); 1551 1552 if (pnte.flags.pw_time_lock & anstbl.current_time < pnte.password_timelock) 1553 | pnte.flags.lock then do; /* is password locked? */ 1554 mcode = as_error_table_$password_locked; /* Yes. No login for you. */ 1555 go to login_incorrect; /* (but we won't tell you we caught you) */ 1556 end; 1557 1558 if ute.login_flags.cpw 1559 then if pnte.flags.nochange 1560 then do; 1561 mcode = as_error_table_$no_change; 1562 goto login_incorrect; 1563 end; 1564 else do; 1565 pnte.password = P_password; 1566 password_changed_flag = "1"b; 1567 pnte.time_pw_changed = anstbl.current_time; 1568 pnte.flags.must_change = "0"b; 1569 rewrite_pnte = "1"b; 1570 if ^ute.at.brief 1571 then call asu_$write_message (utep, as_error_table_$password_changed, debg, code); 1572 end; 1573 1574 return; 1575 end PERFORM_PASSWORD_CHECKS; 1576 1577 PROCESS_AUTH_ARGUMENT: 1578 procedure (); 1579 1580 /**** If the user did not specify an authorization on the login line, then 1581* if anonymous, default to system_low, otherwise, use PNT default 1582* authorization */ 1583 1584 if ^ute.login_flags.auth_given then /* If -auth not specified, use default */ 1585 if ute.anonymous = 1 then do; 1586 ute.process_authorization = ""b; 1587 end; 1588 else do; 1589 ute.process_authorization = pnte.default_person_authorization; 1590 end; 1591 return; 1592 end PROCESS_AUTH_ARGUMENT; 1593 1594 LOOKUP_PROJECT: 1595 procedure (); 1596 1597 lookup_loop: 1598 call hash_$search (sat_htp, ute.project, i, code); 1599 if code ^= 0 then do; 1600 proj_not_there: mcode = as_error_table_$bad_project; /* Unknown project. */ 1601 go to login_incorrect; /* Again, you lose. */ 1602 end; 1603 satep = addr (sat.project (i)); /* get pointer to SAT entry that project hashes to */ 1604 if ute.project ^= project.project_id then /* it better be the right project */ 1605 if ute.project ^= project.alias then do; /* otherwise the hash table has been clobbered */ 1606 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: sat.ht has ""^a"", SAT has ""^a"" at ^p", 1607 ute.project, project.project_id, satep); 1608 call up_sat_$make_sat_hash (satp, sat.n_projects, sat_htp, ans, code); 1609 if code ^= 0 then do; 1610 call sys_log_$error_log (SL_LOG_BEEP, "lg_ctl_", "unable to rehash sat.ht: ^a", ans); 1611 mcode = as_error_table_$dialup_error; 1612 goto login_abort_1; 1613 end; 1614 else goto lookup_loop; /* go try the lookup again */ 1615 end; 1616 1617 if project.state ^= 1 then do; 1618 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: project ^a, state ^d, still in sat.ht", project.project_id, project.state); 1619 goto proj_not_there; 1620 end; 1621 1622 1623 ute.project = project.project_id; /* in case alias was used */ 1624 if project.pdt_ptr ^= null then pdtp = project.pdt_ptr; /* May have found PDT already. */ 1625 else do; /* initiate project's PDT */ 1626 pdt_name = rtrim (project.project_id) || ".pdt"; /* Stick on suffix */ 1627 call hcs_$initiate (pdtdir, pdt_name, "", 0, 0, pdtp, code); 1628 if pdtp = null then do; /* If pdt is missing, */ 1629 call sys_log_$error_log (SL_LOG_BEEP, code, "lg_ctl_", "^a>^a", pdtdir, project.project_id); 1630 mcode = as_error_table_$pdt_missing; /* Not able to log him in if no pdt */ 1631 go to login_abort_2; /* but user might have another project to try */ 1632 end; 1633 project.pdt_ptr = pdtp; /* save ptr in SAT for next time */ 1634 end; 1635 if project.rs_number < 0 | project.rs_number > whotab.n_rate_structures then do; 1636 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: project ^a has invalid rate_structure number ^d. Using rate_structure 0.", 1637 project.project_id, project.rs_number); 1638 ute.rs_number = 0; 1639 end; 1640 else ute.rs_number = project.rs_number; /* plug in the rate_structure */ 1641 1642 /* now search project's PDT to locate person's user profile */ 1643 1644 temp_person_name = ute.person; /* name we are searching for */ 1645 1646 if ute.anonymous ^= 0 then /* if user logging in is anonymous */ 1647 if ^project.at.anonymous then /* but the project is not permitted anonymous users */ 1648 goto not_in_pdt; /* don't waste time searching */ 1649 else temp_person_name = "*"; /* search for "*" in pdt */ 1650 1651 pdtep = null (); /* flag that we haven't found it yet */ 1652 1653 /**** Here we test for a PDT with its damage switched turned on. If the 1654* PDT is damaged, we refuse the login with our canned message and 1655* refuse the login. */ 1656 1657 on condition (seg_fault_error) 1658 begin; 1659 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: PDT for project ^a has its damage switch set. Login for user ^a refused.", ute.project, ute.person); 1660 mcode = as_error_table_$dialup_error; 1661 goto login_abort_1; 1662 end; 1663 1664 i = pdt.ht_relp; /* check for seg_fault_error */ 1665 1666 revert seg_fault_error; 1667 1668 if pdt.ht_relp > 0 then do; /* if hash table there, use it */ 1669 pdt_htp = addrel (pdtp, pdt.ht_relp); 1670 if pdt_htp -> htable.id ^= "ht01" & pdt_htp -> htable.id ^= "ht02" then do; /* we gotta check at least a little bit */ 1671 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: no hash table at ^o of ^a.pdt", pdt.ht_relp, project.project_id); 1672 end; 1673 else do; 1674 call hash_$search (pdt_htp, temp_person_name, i, code); 1675 if code ^= 0 then goto not_in_pdt; 1676 pdtep = addr (pdt.user (i)); 1677 if user.state ^= 1 then do; 1678 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: user ^a, state ^d, still in hash table of ^a.pdt", 1679 temp_person_name, user.state, project.project_id); 1680 goto not_in_pdt; 1681 end; 1682 1683 if user.person_id ^= temp_person_name then do; 1684 call sys_log_ (SL_LOG_BEEP, "lg_ctl_: hash table of ^a.pdt has ^a, pdt has ^a, at ^p", 1685 project.project_id, temp_person_name, user.person_id, pdtep); 1686 pdtep = null (); 1687 end; 1688 end; 1689 end; 1690 1691 if pdtep = null then /* not found in hash table or bad hash table */ 1692 do i = 1 to pdt.current_size while (pdtep = null ()); /* Scan PDT entries. */ 1693 pdtep = addr (pdt.user (i)); /* Get ptr to entry. */ 1694 if user.state = 1 then do; /* if this is an active PDT entry */ 1695 if user.person_id ^= temp_person_name then /* if user name matches */ 1696 pdtep = null (); 1697 end; 1698 else pdtep = null (); 1699 end; 1700 1701 if pdtep = null () then 1702 not_in_pdt: do; 1703 mcode = as_error_table_$not_in_pdt; /* Failed to find (regular/anonymous) entry. */ 1704 go to login_incorrect; 1705 end; 1706 ute.pdtep = pdtep; /* save ptr to PDT entry, where accounting stuff is */ 1707 ute.uprojp = satep; /* ... and ptr to SAT entry too */ 1708 return; 1709 end LOOKUP_PROJECT; 1710 1711 PROCESS_ATTRIBUTES: 1712 procedure (); 1713 1714 /* now, on with more mundane affairs */ 1715 1716 string (ute.ur_at) = string (ute.ur_at) & 1717 ((string (user.at) & string (project.at)) | 1718 USER_ATTRIBUTES_always_allowed); /* Don't let user clear bits he's not allowed to alter */ 1719 string (ute.at) = string (ute.at) | ^ 1720 USER_ATTRIBUTES_settable_by_user; /* Turn on those user cannot turn off */ 1721 string (ute.at) = string (ute.at) | 1722 (string (user.at) & USER_ATTRIBUTES_default_in_pdt & 1723 ^string (ute.ur_at)); /* turn on defaults if user didn't specify */ 1724 string (ute.at) = string (ute.at) & 1725 ((string (user.at) & string (project.at)) | 1726 USER_ATTRIBUTES_always_allowed); /* Turn off any user is not allowed to have */ 1727 bstemp = string (ute.at) & 1728 (string (ute.ur_at) | USER_ATTRIBUTES_settable_by_user); 1729 /* remember those that user set */ 1730 string (ute.at) = string (ute.at) & 1731 ^USER_ATTRIBUTES_settable_by_user; /* turn off any bits that user is allowed to control. */ 1732 string (ute.at) = string (ute.at) | bstemp; /* turn on those that user or default turned on */ 1733 1734 if ute.at.guaranteed_login then ute.at.nobump = "1"b; 1735 1736 /* The process-saving attributes, disconnect_ok and save_on_disconnect, need special handling. 1737* After the above logic, each is on in ate.at only if it was on in both sate and pdte. 1738* First we force both on if both were on in sate. */ 1739 1740 if project.at.save_on_disconnect /* if on in sate, force it on for all users on project */ 1741 & project.at.disconnect_ok then /* (if project also has disconnect_ok), avoiding the need to */ 1742 ute.at.save_on_disconnect, ute.at.disconnect_ok = "1"b; /* install pdt to turn on saving for whole proj */ 1743 1744 /* Then we turn on save_on_disconnect if it was on in the pdte, even if it wasn't on in the sate. */ 1745 if user.at.save_on_disconnect then ute.at.save_on_disconnect = "1"b; 1746 1747 if ute.anonymous = 1 then /* if user is anonymous */ 1748 ute.at.save_on_disconnect, ute.at.disconnect_ok = ""b; /* we can't save his process */ 1749 1750 1751 /* Now, we look at the resulting attributes, together with the login arguments, and decide what to do. */ 1752 1753 if process_type = PT_INTERACTIVE then do; /* only for an interactive process */ 1754 if ^cdte.nosave_arg then /* user can always say -nosave, and this needs no permission */ 1755 /* but if he didn't say it */ 1756 if ute.at.disconnect_ok then /* and he has permission to save disconnected processes */ 1757 if ute.at.save_on_disconnect /* and he wants them to be saved by default */ 1758 | cdte.save_arg then /* or he asked for saving via the login argument */ 1759 ute.uflags.save_if_disconnected = "1"b; /* then save this one if it becomes disconnected */ 1760 1761 /* Finally, we abort with an error message if user gave -save argument but lacks permission. */ 1762 1763 if cdte.save_arg & ^ute.at.disconnect_ok then do; 1764 mcode = as_error_table_$illegal_save_arg; 1765 goto login_incorrect; 1766 end; 1767 end; 1768 return; 1769 1770 end PROCESS_ATTRIBUTES; 1771 1772 DETERMINE_AUTHORIZATIONS: 1773 procedure (); 1774 1775 /**** Here we determine the user process authorization and maximum 1776* authorization. We also set the audit flags. */ 1777 1778 /* Currently, we only allow anonymous users to log in at system_low 1779* authorization. To lift this restriction, all that is necessary 1780* is to delete the following statement. */ 1781 1782 if ute.anonymous = 1 then 1783 ute.process_authorization = ""b; 1784 1785 ute.process_authorization_range (*) = ""b; 1786 1787 /**** Set the process minimum authorization to the maximum of the following */ 1788 1789 authorization (1) = user.user_authorization (1); 1790 authorization (2) = project.project_authorization (1); 1791 if ute.anonymous = 1 then /* anonymous have no pnte */ 1792 authorization (3) = project.project_authorization (1); 1793 else authorization (3) = pnte.person_authorization (1); 1794 1795 call convert_access_class_$maximum (authorization, 3, ute.process_authorization_range (1)); 1796 1797 /**** Set the process maximum authorization to the minimum of the following */ 1798 1799 authorization (1) = user.user_authorization (2); 1800 authorization (2) = project.project_authorization (2); 1801 if ute.anonymous = 1 then /* anonymous have no pnte */ 1802 authorization (3) = project.project_authorization (2); 1803 else authorization (3) = pnte.person_authorization (2); 1804 1805 call convert_access_class_$minimum (authorization, 3, ute.process_authorization_range (2)); 1806 1807 /**** Merge the audit flags from the SAT and the PNT. If the user is 1808* anonymous, there is no PNT entry and we've already set the ute.audit 1809* flags to the value in the SAT. */ 1810 1811 if ute.anonymous ^= 1 /* user is not anonymous */ 1812 then ute.audit = merge_access_audit_flags_ (project.audit, pnte.audit); 1813 else ute.audit = project.audit; /* anonymous users have no PNT entry */ 1814 1815 /* Compare the requested or default authorization with the computed 1816* authorization range and reject the login if this authorization is 1817* outside the allowed range. */ 1818 1819 if ^aim_check_$in_range (ute.process_authorization /* requested | default */, ute.process_authorization_range) 1820 then do; 1821 if ute.login_flags.auth_given | process_type = PT_ABSENTEE 1822 then mcode = as_error_table_$cant_give_that_authorization; 1823 else mcode = as_error_table_$cant_give_dft_auth; /* Cannot login at dft authorization */ 1824 go to login_incorrect; 1825 end; 1826 return; 1827 1828 end DETERMINE_AUTHORIZATIONS; 1829 1830 CHECK_PROCESS_LIMITS: 1831 procedure (); 1832 1833 /* Now, check user's limit on foreground or background processes (whichever this is), 1834* and the user's max cpu time limit on foreground absentee jobs, if this is one. */ 1835 1836 scan_reason = 0; /* no need to scan answer table yet */ 1837 if ute.queue <= 0 then do; /* foreground process */ 1838 1839 if process_type = PT_ABSENTEE then do; /* foreground absentee job; check cpu time limit */ 1840 i = project.abs_foreground_cpu_limit; /* pick up project limit */ 1841 if i = 0 then i = user.abs_foreground_cpu_limit; /* zero means no project limit, so pick up user limit */ 1842 else if user.abs_foreground_cpu_limit > 0 then /* nonzero project limit; if user limit nonzero, */ 1843 i = min (i, user.abs_foreground_cpu_limit); /* get the smaller of the two */ 1844 if i > 0 then /* if there is a limit */ 1845 if ute.max_cpu_time > i then do; /* if limit too high, job is in error */ 1846 mcode = as_error_table_$user_fg_cpu_limit; /* so reject it */ 1847 goto login_abort_1; /* 1 means fatal error, don't allow a retry */ 1848 end; 1849 if ^ute.at.pm_ok & ^ute.uflags.foreground_secondary_ok then do; /* fg job from no_primary user */ 1850 mcode = as_error_table_$no_primary;/* explain why */ 1851 goto login_abort_1; /* and reject the job */ 1852 end; 1853 end; 1854 1855 i = project.max_foreground; /* pick up project limit */ 1856 if i = 0 then i = user.max_foreground; /* zero means no project limit, so pick up user limit */ 1857 else if user.max_foreground > 0 then /* nonzero project limit; if user limit nonzero, */ 1858 i = min (i, user.max_foreground); /* get the smaller of the two */ 1859 if i > 0 then /* if there is a limit */ 1860 if user.n_foreground ^< i then do; /* if user is at limit, refuse the login */ 1861 1862 /* At this point, we must distinguish between a number of cases: 1863* 1) user has one or more disconnected interactive processes, and doesn't want another one: 1864* - in this case, we want to go build a list of the disconnected processes and return it to dialup_; 1865* 2) user wants another interactive process, but has one and doesn't have multip: 1866* - in this case, we go print an "already logged in from..." message, and warn 1867* - the existing process about the attempt; 1868* 3) user wants another foreground process but is at his foreground limit: 1869* - in this case, we return the foreground limit error code. 1870**/ 1871 1872 if process_type = PT_INTERACTIVE then do; 1873 /* interactive */ 1874 if user.n_disconnected > 0 & cdte.disconnected_proc_command ^= 2 & 1875 cdte.service_type ^= FTP_SERVICE then do; /* case 1 */ 1876 if ute.active < NOW_LOGGED_IN then do; 1877 /* if we didn't already do this */ 1878 vlonginfo = convert_message (as_error_table_$n_disconnected_procs_msg); 1879 if (vlonginfo ^= "") & (^ute.at.brief | cdte.disconnected_proc_command = 0) 1880 then do; /* if site hasn't turned off the message, say 1881* You have N disconnected processes. */ 1882 call ioa_$rs (vlonginfo, answer, l, user.n_disconnected, (user.n_disconnected > 1)); 1883 call astty_$tty_force (cdtep, addr (answer), l, (0)); 1884 end; 1885 end; 1886 call ASSERT_LOGGED_IN_STATE (); 1887 call BUILD_DISCONNECTED_LIST (); /* build list of disconnected processes */ 1888 call ASSERT_INTERACTIVE_LOGIN (); /* record wherever appropriate that we are logged in */ 1889 login_state = DISC_STATE (cdte.disconnected_proc_command); 1890 goto login_returns; 1891 end; 1892 1893 if ^ute.at.multip & user.n_interactive > 0 then do; /* case 2 */ 1894 scan_reason = 2; /* find the current process, warn it, and say no to this login */ 1895 call SCAN_ANSWER_TABLE (scan_reason); 1896 end; 1897 end; /* end interactive */ 1898 else do; /* foreground absentee, case 3 */ 1899 mcode = as_error_table_$user_max_fg; 1900 user_limit = "1"b; /* remember to allow deferral and retry, if absentee */ 1901 goto login_abort_2; /* 2 means nonfatal error, allow retry */ 1902 end; /* end foreground absentee, case 3 */ 1903 end; 1904 end; 1905 1906 else if ^ute.abs_run then do; /* background absentee, and not abs run command */ 1907 i = project.max_background; /* pick up project limit */ 1908 if i = 0 then i = user.max_background; /* zero means no project limit, so pick up user limit */ 1909 else if user.max_background > 0 then /* nonzero project limit; if user limit nonzero, */ 1910 i = min (i, user.max_background); /* get the smaller of the two */ 1911 if i > 0 then /* if both were zero, there is no limit at all */ 1912 if user.n_background ^< i then do; /* if user is at limit, refuse the login */ 1913 mcode = as_error_table_$user_max_bg; 1914 user_limit = "1"b; /* remember to allow deferral and retry, if absentee */ 1915 goto login_abort_2; /* 2 means nonfatal error, allow retry */ 1916 end; 1917 end; 1918 1919 return; 1920 end CHECK_PROCESS_LIMITS; 1921 1922 SET_UP_FOR_PROCESS_CREATION: 1923 procedure (); 1924 1925 login_state = "create"; /* we're going to attempt to create a process */ 1926 call act_ctl_$check (utep, satep, debg, errmsg, mcode); /* check for account's validity */ 1927 if mcode ^= 0 then do; 1928 if process_type ^= PT_ABSENTEE then /* if not absentee */ 1929 ute.login_result = 2; /* act_ctl_ threw him out; let user try different project */ 1930 else ute.login_result = 1; /* but absentee can't try different project */ 1931 ute.failure_reason = 2; /* record this fact here */ 1932 go to login_returns; 1933 end; 1934 1935 /**** Set up the initial procedure (initproc) and the subsystem (for 1936* prelinking) */ 1937 1938 call SETUP_INITIAL_PROCEDURE (); 1939 call SETUP_SUBSYSTEM (); 1940 1941 call SETUP_LOGIN_RING (); 1942 1943 if project.pdir_quota > 0 /* there is a limit */ 1944 then do; 1945 if user.pdir_quota > project.pdir_quota then 1946 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: reduced pdir quota for ^a.^a from ^d (in PDTE) to ^d (in SATE)", 1947 ute.person, ute.project, user.pdir_quota, project.pdir_quota); 1948 ute.pdir_quota = min (project.pdir_quota, user.pdir_quota); /* constrain */ 1949 end; 1950 else ute.pdir_quota = user.pdir_quota; /* no limit, PA can ask for the ceiling! */ 1951 1952 ute.lot_size = user.lot_size; /* Set up size of process tables */ 1953 ute.kst_size = user.kst_size; /* ... */ 1954 ute.cls_size = user.cls_size; /* ... */ 1955 1956 /* Determine user's load control weight. */ 1957 1958 ute.user_weight = -1; /* flags not set yet */ 1959 1960 do i = 1 to sat.uwt_size while (ute.user_weight = -1); /* scan User Weight Table to determine user's weight */ 1961 if ute.init_proc = sat.uwt (i).initproc then 1962 ute.user_weight = sat.uwt (i).units; /* Found initproc. Extract weight. */ 1963 end; 1964 1965 if ute.user_weight = -1 then 1966 ute.user_weight = as_data_$default_weight; /* Unknown initproc. Assign default weight. */ 1967 1968 /* Locate user's home directory, using default homedir and possible -hd login argument */ 1969 1970 if ute.home_dir ^= "" then /* Specifying home dir. */ 1971 if ^ute.at.vhomedir then do; /* he is not allowed */ 1972 mcode = as_error_table_$illegal_hd_arg; 1973 go to login_incorrect; 1974 end; 1975 else ; /* if he is allowed to set it, then nothing to do */ 1976 else ute.home_dir = user.home_dir; /* use PDT default */ 1977 1978 /* User is legal for login. Check if he will overload system. */ 1979 1980 call load_ctl_ (utep, satep, pdtep, pntep, process_type, debg, errmsg, mcode); 1981 if mcode ^= 0 then 1982 go to login_returns; /* load_ctl_ said no go */ 1983 call ASSERT_LOGGED_IN_STATE (); 1984 1985 call PUBLISH_LOGIN (); 1986 1987 ute.uflags.proc_create_ok = "1"b; /* tell dialup_ that we've set the process creation variables */ 1988 1989 return; 1990 end SET_UP_FOR_PROCESS_CREATION; 1991 1992 PUBLISH_LOGIN: 1993 procedure (); 1994 1995 /* Now inform everybody else he's on */ 1996 1997 whotab.n_users = whotab.n_users + 1; /* Increase user count in public database */ 1998 whotab.n_units = whotab.n_units + ute.user_weight;/* And total weight. */ 1999 2000 if ute.at.nolist then ute.whotabx = 0; /* Is this user an "unlisted" user? */ 2001 else do; 2002 if whotab.freep = 0 then do; /* Listed user. Find slot in "whotab" */ 2003 whotab.laste = whotab.laste + 1; /* Grow whotab a little. */ 2004 2005 /* The conversion from version 0 to version 1 of whotab requires that we fib about 2006* laste. There are actually laste - laste_adjust entries. See as_init_. */ 2007 2008 userx = whotab.laste - whotab.laste_adjust; /* no free slots. increase table size */ 2009 end; 2010 else do; /* have a free slot */ 2011 userx = whotab.freep; /* Take off chain (LIFO) */ 2012 whotab.freep = whotab.e (userx).chain; /* .. */ 2013 end; 2014 ute.whotabx = userx; /* Fill in answer_table slot so's we can delete */ 2015 2016 if ute.anonymous = 1 then /* Fill in "whotab" entry. */ 2017 whotab.e (userx).person = "anonymous"; /* Anonymous users get no name. (might be obscene) */ 2018 else whotab.e (userx).person = ute.person; /* Name of registered user */ 2019 whotab.e (userx).project = ute.project; /* Publish project. */ 2020 whotab.e (userx).units = ute.user_weight; /* Weight. */ 2021 whotab.e (userx).timeon = anstbl.current_time; /* Time of login. */ 2022 whotab.e (userx).anon = ute.anonymous; /* Anonymous switch. */ 2023 whotab.e (userx).stby = ute.standby_line; /* will be dummy for absentee */ 2024 whotab.e (userx).active = NOW_LOGGED_IN; /* state. */ 2025 whotab.e (userx).idcode = id_code; /* Set up terminal ID */ 2026 whotab.e (userx).group = ute.group; /* Load group. */ 2027 2028 whotab.e (userx).cant_bump_until = ute.cant_bump_until; 2029 whotab.e (userx).proc_type = process_type; /* 1 = interactive, 2 = absentee, 3 = daemon */ 2030 2031 whotab.e (userx).process_authorization = ute.process_authorization; 2032 whotab.e (userx).fg_abs, whotab.e (userx).disconnected, whotab.e (userx).suspended = ""b; 2033 end; 2034 2035 if process_type = PT_DAEMON then /* Daemon? */ 2036 whotab.n_daemons = whotab.n_daemons + 1; /* yup, count him */ 2037 else if process_type = PT_ABSENTEE then do; /* for absentee process */ 2038 if ute.queue > 0 then do; /* if not foreground absentee */ 2039 whotab.abs_users = whotab.abs_users + 1;/* increment count of absentee users */ 2040 if ute.whotabx > 0 then 2041 whotab.e (userx).fg_abs = ""b; /* and be sure foreground flag is cleared */ 2042 end; 2043 else do; /* but if foreground */ 2044 whotab.fg_abs_users = whotab.fg_abs_users + 1; /* increment count of foreground abs users */ 2045 if ute.whotabx > 0 then 2046 whotab.e (userx).fg_abs = "1"b; /* and set foreground flag for this user */ 2047 end; 2048 end; 2049 else 2050 call ASSERT_INTERACTIVE_LOGIN (); 2051 return; 2052 2053 end PUBLISH_LOGIN; 2054 2055 ASSERT_LOGGED_IN_STATE: 2056 procedure (); 2057 2058 ute.active = NOW_LOGGED_IN; /* indicate user is logged in */ 2059 ute.login_time = anstbl.current_time; /* Record time of login too */ 2060 ute.login_result = 0; /* Set "login succeeded" flag */ 2061 return; 2062 2063 end ASSERT_LOGGED_IN_STATE; 2064 2065 CHECK_CHANNEL_ACCESS_CLASS: 2066 procedure (); 2067 2068 /**** If we haven't learned an access class from config or from 2069* hardcore, and the user has given us a password, then we 2070* can make the multi-class to single-class mapping be using 2071* the process authorization, which is already known to be 2072* in the range. Since this procedure is only called in cases 2073* where we have a name and a password, we can establish the 2074* access class here. */ 2075 2076 if ^cdte.current_access_class_valid 2077 then do; /* we are going to use USER auth as channel acc. */ 2078 if ^aim_check_$in_range (ute.process_authorization, 2079 cdte.access_class) then go to MAKE_AIM_CODE; /* we should log this, as well */ 2080 cdte.current_access_class (*) = ute.process_authorization; 2081 cdte.current_access_class_valid = "1"b; 2082 end; 2083 2084 else 2085 if ^aim_check_$equal (cdte.current_access_class (1), ute.process_authorization) 2086 then 2087 MAKE_AIM_CODE: 2088 do; 2089 if ute.login_flags.auth_given | process_type = PT_ABSENTEE 2090 then mcode = as_error_table_$cant_give_that_authorization; 2091 else mcode = as_error_table_$cant_give_dft_auth; /* Cannot login at dft authorization */ 2092 go to login_incorrect; 2093 end; 2094 return; 2095 2096 end CHECK_CHANNEL_ACCESS_CLASS; 2097 2098 SET_OUTER_MODULE: 2099 procedure (); 2100 2101 if ute.outer_module ^= " " 2102 then do; /* Tried to specify DIM? */ 2103 if ^ute.at.vinitproc then do; /* Yes. this may or may not be ok */ 2104 mcode = as_error_table_$illegal_om_arg; 2105 go to login_incorrect; 2106 end; 2107 end; 2108 2109 /**** If the user legally gave -om we have the om in the ute. Otherwise 2110* the ute.outer_module is null. Now figure out what to do for 2111* defaults. First try for something useful in the pdte. If the pdte 2112* just says "tty_" we calculate the default based on the line type anyway. 2113* Pdte (user).outer_module is pretty useless as it can't be cased for 2114* circumstances */ 2115 2116 if ute.outer_module = "" then do; /* we need a default */ 2117 ute.outer_module = user.outer_module; /* PDT value */ 2118 if ute.outer_module = "" 2119 | ute.outer_module = as_data_$tty_dim then do; 2120 ute.outer_module = as_data_$tty_dim; /* default */ 2121 2122 if cdte.line_type = LINE_MC 2123 then ute.outer_module = as_data_$mrd_dim; 2124 else if cdte.line_type = LINE_G115 2125 then ute.outer_module = as_data_$g115_dim; 2126 else if cdte.line_type = LINE_BSC 2127 then ute.outer_module = "tty_"; 2128 if cdte.line_type = LINE_HASP_OPR 2129 then ute.outer_module = "hasp_stream_"; 2130 end; /* the calculation of om */ 2131 end; /* we need a default */ 2132 return; 2133 2134 end SET_OUTER_MODULE; 2135 2136 SETUP: 2137 procedure (P_process_type); 2138 2139 dcl P_process_type fixed bin (17) parameter; 2140 2141 if as_data_$ansp = null then 2142 goto MAIN_RETURN; 2143 ansp = as_data_$ansp; 2144 if as_procid ^= anstbl.as_procid then 2145 goto MAIN_RETURN; 2146 utep = P_utep; 2147 P_code = 0; 2148 process_type = P_process_type; 2149 if process_type = PT_INTERACTIVE | process_type = PT_DIAL_SLAVE then 2150 cdtep = ute.channel; 2151 else cdtep = null (); 2152 2153 /**** Set the values of tty_term_type and id_code which are used in 2154* status and log messages */ 2155 2156 if process_type = PT_ABSENTEE then do; 2157 tty_term_type = "Absentee"; 2158 id_code = ""; 2159 end; 2160 else if process_type = PT_DAEMON then do; 2161 tty_term_type = "Daemon"; 2162 id_code = ute.tty_id_code; 2163 end; 2164 else do; /* Interactive login or dial/slave */ 2165 if cdte.cur_line_type >= LINE_UNKNOWN /* check if we should mention line type name */ 2166 then tty_term_type = cdte.current_terminal_type; /* for pretty error message */ 2167 else call ioa_$rsnnl ("^a ^a", tty_term_type, (0), line_types (cdte.cur_line_type), 2168 cdte.current_terminal_type); 2169 2170 call ttt_info_$encode_type (cdte.current_terminal_type, coded_type, code); 2171 if code ^= 0 then 2172 coded_type = 0; 2173 id_code = cdte.tty_id_code; 2174 end; 2175 2176 first_pass = "1"b; /* if this is not, we'll reset later */ 2177 2178 /**** anstbl.session_uid_counter is a counter, incremented each time we 2179* attempt to identify and authenticate a user. It is used to tie 2180* together various events which pertain to an authenticated "session". */ 2181 2182 anstbl.session_uid_counter = anstbl.session_uid_counter + 1; 2183 ute.session_uid = anstbl.session_uid_counter; 2184 2185 /**** Clear out the message buffer used to hold messages produced by 2186* act_ctl_ and load_ctl_. */ 2187 2188 as_data_$ls_message_buffer_cur_lth = 0; 2189 2190 return; 2191 2192 end SETUP; 2193 2194 CHECK_FOR_SECURITY_BREACH: 2195 procedure (); 2196 2197 /* Check for possible breach of physical security. This is when a user 2198* somehow gets access to a terminal whose access class is 2199* higher than his own authorization. (A person at level_1 should not 2200* normally have access to terminals used at level_2). 2201* This is only enabled for those communications lines whose access class 2202* range reflects a physical security policy. Note that we only check 2203* a user's maximum authorization against the terminal's minimum 2204* access class. For anonymous users, who have no PNT entry, we assume 2205* the access authorization of system_low */ 2206 2207 dcl max_auth bit (72) aligned; /* user's maximum authorization */ 2208 2209 if cdte.flags.audit_access_error then do; /* If we should check */ 2210 if ute.anonymous = 1 then 2211 max_auth = ""b; /* system_low */ 2212 else max_auth = pnte.person_authorization (2); /* PNT max */ 2213 2214 if ^aim_check_$greater_or_equal (max_auth, cdte.access_class (1)) 2215 then do; 2216 call SECURITY_BREACH (); 2217 mcode = as_error_table_$breach; 2218 go to login_incorrect; 2219 end; 2220 end; 2221 return; 2222 2223 SECURITY_BREACH: 2224 procedure (); 2225 2226 /**** This procedure handles a physical security breach. This is when 2227* a person has managed to gain access to a terminal of higher 2228* access_class than his/her maximum authorization. E.g. someone 2229* with a SECRET clearance gaining access to a terminal in a TOP 2230* SECRET area. */ 2231 2232 call sys_log_ (SL_LOG_BEEP, 2233 "lg_ctl_: breach of physical security by ^a.^a from ^a (^a terminal ""^a"").", 2234 ute.person, ute.project, ute.tty_name, tty_term_type, id_code); 2235 octal_auth_string = display_access_class_ (max_auth); 2236 call convert_access_class_$to_string_short (max_auth, authorization_string, code); 2237 if code ^= 0 2238 then if code = error_table_$smallarg 2239 then code = 0; 2240 else authorization_string = ""; 2241 2242 call sys_log_ (SL_LOG, "lg_ctl_: person authorization is ^a (^a)", octal_auth_string, authorization_string); 2243 octal_auth_string = display_access_class_$range (cdte.access_class); 2244 call convert_access_class_$to_string_range_short (cdte.access_class, authorization_string, code); 2245 if code ^= 0 2246 then if code = error_table_$smallarg /* ignore this one */ 2247 then code = 0; 2248 else authorization_string = ""; /* punt */ 2249 2250 call sys_log_ (SL_LOG, "lg_ctl_: terminal access class is ^a (^a)", octal_auth_string, authorization_string); 2251 return; 2252 end SECURITY_BREACH; 2253 2254 end CHECK_FOR_SECURITY_BREACH; 2255 2256 SETUP_INITIAL_PROCEDURE: 2257 procedure (); 2258 2259 /* User may have given initproc (-po) and/or subsystem (-ss) on login line. 2260* Project administrator may have specified default values for those variables in the pdt. 2261* In both cases, the initproc and subsystem names are packed together in a single 2262* char (64) variable, formerly reserved for initproc alone (because of space problems in the tables). 2263* Further, user must have the vinitproc attribute in order to give either argument on the login line. 2264* Finally, if user has given one, and the other is in the pdt, we may discover that they will not 2265* both fit into a 64 character string, and we have to reject the one from the login line. 2266* 2267* While processing the initproc string, we also replace a trailing ",direct" by a switch setting. 2268* 2269**/ 2270 2271 if ute.uflags.ss_given then /* if user gave subsystem on login line, copy it, to avoid */ 2272 char64 = substr (ute.init_proc, ute.ip_len + 1, ute.ss_len); /* clobbering it while setting initproc */ 2273 2274 /* Process initproc */ 2275 2276 if ute.uflags.ip_given then do; /* if user gave initproc on login line */ 2277 if ^ute.at.vinitproc then do; /* if he is not allowed to do so */ 2278 mcode = as_error_table_$illegal_ip_arg; 2279 go to login_incorrect; /* login refused */ 2280 end; 2281 end; 2282 2283 else do; 2284 if user.uflags.ip_given then /* if new style pdt */ 2285 i = user.ip_len; /* length of initproc string is stored in it */ 2286 else do; /* but of old style, we have to compute it */ 2287 i = -1 + index (user.initial_procedure, " "); /* scan for trailing blank */ 2288 if i = -1 then i = 64; /* if none, it is 64 chars long */ 2289 end; 2290 2291 substr (ute.init_proc, 1, i) = substr (user.initial_procedure, 1, i); 2292 ute.ip_len = i; 2293 ute.uflags.dont_call_init_admin = user.uflags.dont_call_init_admin; /* copy the ",direct" switch */ 2294 end; 2295 2296 /* If the initproc string ends in ",direct", strip off the ",direct" and turn on the switch */ 2297 2298 if ute.ip_len >= 8 then /* if there is room for it */ 2299 if substr (ute.init_proc, ute.ip_len - 6, 7) = ",direct" then do; /* and its there */ 2300 ute.uflags.dont_call_init_admin = "1"b; 2301 ute.ip_len = ute.ip_len - 7; 2302 end; 2303 2304 return; 2305 end SETUP_INITIAL_PROCEDURE; 2306 2307 SETUP_SUBSYSTEM: 2308 procedure (); 2309 2310 /**** Process the subsystem argument, used for prelinking */ 2311 2312 if ute.uflags.ss_given then do; 2313 if ^ute.at.vinitproc then do; /* if user not allowed to vary initproc OR subsystem */ 2314 mcode = as_error_table_$illegal_ss_arg; 2315 go to login_incorrect; 2316 end; 2317 i = ute.ss_len; 2318 end; 2319 else 2320 if user.uflags.ss_given then do; 2321 i = user.ss_len; 2322 char64 = substr (user.initial_procedure, user.ip_len + 1, user.ss_len); 2323 end; 2324 else i = -1; 2325 2326 if i ^= -1 then do; /* if there is a subsystem from anywhere */ 2327 if i + ute.ip_len > 64 then do; /* if sum of lengths toolong, refuse login */ 2328 if ute.uflags.ip_given then do; /* initproc was from login line */ 2329 mcode = as_error_table_$long_ip_arg; 2330 go to login_incorrect; 2331 end; /* then fall back thru here, guaranteed to succeed */ 2332 else do; /* subsystem was from login line */ 2333 mcode = as_error_table_$long_ss_arg; 2334 goto login_incorrect; 2335 end; 2336 end; 2337 2338 else do; 2339 substr (ute.init_proc, ute.ip_len + 1, i) = substr (char64, 1, i); 2340 ute.ss_len = i; 2341 ute.uflags.ss_given = "1"b; 2342 end; 2343 end; 2344 return; 2345 end SETUP_SUBSYSTEM; 2346 2347 SETUP_LOGIN_RING: 2348 procedure (); 2349 2350 /**** Set up the initial, minimum, and maximum ring information */ 2351 2352 /* determine user initial ring */ 2353 2354 if user.low_ring < project.min_ring then 2355 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: raised initial ring for ^a.^a from ^d (in PDTE) to ^d (in SATE)", 2356 ute.person, ute.project, user.low_ring, project.min_ring); 2357 2358 if ute.initial_ring ^= -1 then do; /* user specified -ring */ 2359 i = ute.initial_ring; /* so use that */ 2360 end; 2361 else i = user.default_ring; /* default: -1, 0 or # */ 2362 2363 i = max (project.min_ring, /* SAT: -1 or # */ 2364 user.low_ring, /* PDT: 0 or # */ 2365 i); /* -ring or default */ 2366 2367 if i <= 0 2368 then i = as_data_$dft_user_ring; /* apply defaults */ 2369 2370 if ute.initial_ring ^= -1 /* if -ring was specified */ 2371 then if ute.initial_ring < i /* and can't go that low */ 2372 then do; 2373 mcode = as_error_table_$ring_too_low; 2374 go to login_incorrect; 2375 end; 2376 2377 if i > as_data_$max_user_ring then i = as_data_$max_user_ring; 2378 ute.initial_ring = i; /* Project may raise */ 2379 2380 /* determine user max ring */ 2381 2382 if user.high_ring > project.max_ring then 2383 call sys_log_ (SL_LOG_SILENT, "lg_ctl_: lowered max ring for ^a.^a from ^d (in PDTE) to ^d (in SATE)", 2384 ute.person, ute.project, user.high_ring, project.max_ring); 2385 2386 if project.max_ring <= 0 2387 then userx = as_data_$dft_user_ring + 1; 2388 else userx = project.max_ring; 2389 2390 userx = min (userx, /* SAT: 0 or # */ 2391 user.high_ring, /* PDT: # */ 2392 as_data_$max_user_ring); /* # */ 2393 2394 if userx < ute.initial_ring /* initial must be less than max */ 2395 then do; 2396 mcode = as_error_table_$ring_too_high; 2397 go to login_incorrect; 2398 end; 2399 2400 ute.highest_ring = userx; /* Put into answer table. */ 2401 ute.lowest_ring = max (project.min_ring, 2402 user.low_ring); /* Put into answer table also. */ 2403 return; 2404 end SETUP_LOGIN_RING; 2405 2406 UPDATE_LOGGED_IN_INFO: 2407 procedure (); 2408 2409 if ute.anonymous = 0 then do; /* Anonymous users don't keep this info */ 2410 user.last_login_time = anstbl.current_time; /* Update last login stuff. */ 2411 user.last_login_unit = cdte.tty_id_code; /* .. */ 2412 user.last_login_type = coded_type; /* .. */ 2413 user.last_login_line_type = cdte.cur_line_type; 2414 end; 2415 return; 2416 2417 end UPDATE_LOGGED_IN_INFO; 2418 2419 ASSERT_INTERACTIVE_LOGIN: 2420 procedure (); 2421 2422 call NOTIFY_USER_OF_LOGIN (); 2423 call UPDATE_LOGGED_IN_INFO (); 2424 return; 2425 end ASSERT_INTERACTIVE_LOGIN; 2426 2427 AUDIT_LOGIN: 2428 procedure (P_success_flag); 2429 2430 dcl P_success_flag bit (1) aligned parameter; 2431 2432 if ^P_success_flag then 2433 login_state = debg; 2434 call as_access_audit_$login (utep, login_state); 2435 return; 2436 end AUDIT_LOGIN; 2437 2438 AUDIT_LOGOUT: 2439 procedure (P_reason); 2440 2441 dcl P_reason char (*) parameter; /* reason for logout */ 2442 2443 if P_reason ^= "" then 2444 logout_reason = P_reason; 2445 else 2446 logout_reason = ute.logout_type; /* kind of logout */ 2447 if logout_reason < "" then 2448 logout_reason = "hangup"; 2449 else if logout_reason = "alar" then 2450 logout_reason = "autologout"; 2451 2452 call as_access_audit_$logout (utep, logout_reason); 2453 2454 return; 2455 end AUDIT_LOGOUT; 2456 2457 /* format: off */ 2458 /* BEGIN INCLUDE FILE ... absentee_user_table.incl.pl1 */ 1 2 1 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 4 /* */ 1 5 /* The absentee user table is the control data base for the absentee */ 1 6 /* facility. It has a header, with scheduling parameters, then one user */ 1 7 /* table entry for each logged-in absentee job. */ 1 8 /* */ 1 9 /* Programs which use this table must also include */ 1 10 /* user_table_header.incl.pl1 and user_table_entry.incl.pl1. */ 1 11 /* */ 1 12 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 13 1 14 1 15 /****^ HISTORY COMMENTS: 1 16* 1) change(81-09-10,Kittlitz), approve(), audit(), install(): 1 17* Replace abs_user_tab.incl.pl1. 1 18* 2) change(87-04-26,GDixon), approve(87-07-13,MCR7741), 1 19* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 1 20* Use ut_header common to all user control tables. 1 21* END HISTORY COMMENTS */ 1 22 1 23 1 24 dcl AUTBL_version_4 fixed bin int static options (constant) init (4); 1 25 1 26 dcl autp ptr automatic init (null); 1 27 1 28 dcl 1 autbl based (autp) aligned, /* a per system table to store info on absentee processes */ 1 29 2 header like ut_header, /* Header common to all user tables. */ 1 30 1 31 /* Counter elements */ 1 32 2 n_abs_run fixed bin, /* actual number of absentee processes current */ 1 33 2 max_abs_users fixed bin, /* max number of background absentee processes permitted */ 1 34 2 n_background_abs fixed bin, /* number of absentee processes not from foreground queue */ 1 35 2 n_sec_fg fixed bin, /* number of secondary foreground absentee jobs */ 1 36 2 idle_units fixed bin, /* used in adjusting abs_maxu dynamically */ 1 37 2 abs_units fixed bin, /* part of anstbl.n_units used by background absentees */ 1 38 2 n_abs (4) fixed bin, /* number of processes from each background queue */ 1 39 2 qres (4) fixed bin, /* number of slots reserved for each background queue */ 1 40 2 rsc_waiting (-1:4) fixed bin, /* number of requests waiting for resources, from each queue */ 1 41 2 qerr (-1:4) fixed bin, /* number of consecutive errors for q (dropped if > QERR_MAX) */ 1 42 2 cpu_limit (4) fixed bin (35), /* current per-queue cpu time limits */ 1 43 1 44 /* absentee user manager values. */ 1 45 2 defer_channel fixed bin (71), /* IPC for time-defered queue entries */ 1 46 2 absentee_rq_chn fixed bin (71), /* IPC channel for absentee requests */ 1 47 2 last_queue_searched fixed bin, /* highest queue looked at by scheduler */ 1 48 2 debugging fixed bin, /* take asdumps at strategic places */ 1 49 2 control, /* see also whotab.incl.pl1 */ 1 50 3 mnbz bit (1) unal, /* must not be zero */ 1 51 3 abs_maxu_auto bit (1) unal, /* 1 if abs maxu has not been set by operator command */ 1 52 3 abs_maxq_auto bit (1) unal, /* 1 if abs maxq has not been set by operator command */ 1 53 3 abs_qres_auto bit (1) unal, /* 1 if abs qres has not been set by operator command */ 1 54 3 abs_cpu_limit_auto bit (1) unal, /* 1 if abs cpu_limit has not been set by operator command */ 1 55 3 queue_dropped (-1:4) bit (1) unal, /* 1 if queue has been dropped because of errors */ 1 56 3 abs_up bit (1) unal, /* 1 if absentee facility is running */ 1 57 3 abs_stopped bit (1) unal, /* 1 if abs stop command was issued */ 1 58 /* both 1 if we're waiting for the last jobs to log out */ 1 59 3 aum_ctl bit (1) unal, /* for AUM to tell AU to start a new sequence */ 1 60 3 lc_list bit (1) unal, /* for AU to tell AUM that the lc list is non-empty */ 1 61 /* comments in AU and AUM explain aum_ctl and lc_list */ 1 62 3 control_pad (21) bit (1) unal, /* fill out rest of word */ 1 63 2 aum_pad fixed bin, 1 64 1 65 2 entry_pad (80) fixed bin, /* pad table header to 128 words */ 1 66 2 entry (0 refer (autbl.current_size)) like ute; 1 67 1 68 dcl AUTBL_CONTROL_NAMES (15) char(20) varying int static options(constant) init( 1 69 "mnbz", 1 70 "abs_maxu_auto", 1 71 "abs_maxq_auto", 1 72 "abs_qres_auto", 1 73 "abs_cpu_limit_auto", 1 74 "queue_dropped(-1)", 1 75 "queue_dropped( 0)", 1 76 "queue_dropped( 1)", 1 77 "queue_dropped( 2)", 1 78 "queue_dropped( 3)", 1 79 "queue_dropped( 4)", 1 80 "abs_up", 1 81 "abs_stopped", 1 82 "aum_ctl", 1 83 "lc_list"); 1 84 1 85 /* END INCLUDE FILE ... absentee_user_table.incl.pl1 */ 2458 2459 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 2 2* 2 3* Values for the "access mode" argument so often used in hardcore 2 4* James R. Davis 26 Jan 81 MCR 4844 2 5* Added constants for SM access 4/28/82 Jay Pattin 2 6* Added text strings 03/19/85 Chris Jones 2 7**/ 2 8 2 9 2 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 2 11 dcl ( 2 12 N_ACCESS init ("000"b), 2 13 R_ACCESS init ("100"b), 2 14 E_ACCESS init ("010"b), 2 15 W_ACCESS init ("001"b), 2 16 RE_ACCESS init ("110"b), 2 17 REW_ACCESS init ("111"b), 2 18 RW_ACCESS init ("101"b), 2 19 S_ACCESS init ("100"b), 2 20 M_ACCESS init ("010"b), 2 21 A_ACCESS init ("001"b), 2 22 SA_ACCESS init ("101"b), 2 23 SM_ACCESS init ("110"b), 2 24 SMA_ACCESS init ("111"b) 2 25 ) bit (3) internal static options (constant); 2 26 2 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 2 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 2 29 2 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 2 31 static options (constant); 2 32 2 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 2 34 static options (constant); 2 35 2 36 dcl ( 2 37 N_ACCESS_BIN init (00000b), 2 38 R_ACCESS_BIN init (01000b), 2 39 E_ACCESS_BIN init (00100b), 2 40 W_ACCESS_BIN init (00010b), 2 41 RW_ACCESS_BIN init (01010b), 2 42 RE_ACCESS_BIN init (01100b), 2 43 REW_ACCESS_BIN init (01110b), 2 44 S_ACCESS_BIN init (01000b), 2 45 M_ACCESS_BIN init (00010b), 2 46 A_ACCESS_BIN init (00001b), 2 47 SA_ACCESS_BIN init (01001b), 2 48 SM_ACCESS_BIN init (01010b), 2 49 SMA_ACCESS_BIN init (01011b) 2 50 ) fixed bin (5) internal static options (constant); 2 51 2 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 2459 2460 /* BEGIN INCLUDE FILE ... answer_table.incl.pl1 */ 3 2 3 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 3 4 /* */ 3 5 /* The answer table has one entry per "login instance" whether completed or */ 3 6 /* not. It is connected to the Channel Definition Table by the pointer */ 3 7 /* "channel". The header is used mostly by dialup_. */ 3 8 /* */ 3 9 /* Programs which use this file must also include user_table_header.incl.pl1 */ 3 10 /* */ 3 11 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 3 12 3 13 /****^ HISTORY COMMENTS: 3 14* 1) change(81-09-10,Kittlitz), approve(), audit(), install(): 3 15* Replace anstbl.incl.pl1. 3 16* 2) change(85-01-15,Swenson), approve(), audit(), install(): 3 17* Add anstbl.session_uid_counter. 3 18* 3) change(85-08-21,Coren), approve(), audit(), install(): 3 19* Add anstbl.message_update_time and named constants for values of 3 20* anstbl.session, and to make all padding explicit. 3 21* 4) change(85-08-23,Coren), approve(), audit(), install(): 3 22* Change "entry" to a placeholder so as not to require 3 23* user_table_entry.incl.pl1. 3 24* 5) change(86-06-29,Swenson), approve(87-07-13,MCR7741), 3 25* audit(87-04-14,GDixon), install(87-08-04,MR12.1-1056): 3 26* Added the flag login_server_present which indicates whether a login 3 27* server request has been received. This is used to determine whether 3 28* dial_ctl_ should call uc_cleanup_network_dials_ (and thus 3 29* hpriv_connection_list_, which only exists with the MNA RPQ software). 3 30* 6) change(87-04-14,GDixon), approve(87-07-13,MCR7741), 3 31* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 3 32* A) Moved constants for ute.pw_flags.mask_ctl into 3 33* user_table_entry.incl.pl1. 3 34* B) Added common table header to all user tables. 3 35* END HISTORY COMMENTS */ 3 36 3 37 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 3 38 /* */ 3 39 /* The anstbl structure below is divided into sections. Each section begins */ 3 40 /* with a comment describing the elements in the section. Elements are */ 3 41 /* placed within a section, based upon their function or the programs that */ 3 42 /* use them. Each section begins on a double word and is an even number of */ 3 43 /* words long. */ 3 44 /* */ 3 45 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 3 46 3 47 3 48 3 49 /* format: style4 */ 3 50 3 51 dcl ANSTBL_version_4 static options (constant) init (4); /* version of this declaration */ 3 52 3 53 dcl ansp ptr automatic init (null); 3 54 3 55 dcl 1 anstbl based (ansp) aligned, /* Structure of answer table */ 3 56 2 header like ut_header, /* Header common to all user tables. */ 3 57 3 58 /* Counter elements. */ 3 59 2 nlin fixed bin, /* number of active lines */ 3 60 2 mxlin fixed bin, /* maximum number of active lines */ 3 61 2 n_users fixed bin, /* number of logged-in users */ 3 62 2 max_users fixed bin, /* maximum number of users allowed */ 3 63 2 n_units fixed bin, /* number of logged in units */ 3 64 2 max_units fixed bin, /* maximum number of units */ 3 65 2 n_sessions fixed bin, /* number of Multics sessions */ 3 66 2 n_pad fixed bin, 3 67 3 68 /* Name elements. */ 3 69 2 sysdir char (64) unal, /* name of main system control directory */ 3 70 2 as_tty char (8) unal, /* name of main answering service device. */ 3 71 3 72 /* Login elements. */ 3 73 2 login_word char (8) unal, /* login word if special_session=1 */ 3 74 2 session char (8) unal, /* session indicator */ 3 75 2 special_message char (128) unal, /* message to be printed for special session */ 3 76 2 message_update_time fixed bin (71), /* time at which special_message was last updated */ 3 77 2 message_lng fixed bin, /* length of special message */ 3 78 2 login_pad fixed bin, 3 79 3 80 /* Table update elements. */ 3 81 2 lock_count fixed bin, /* global lock for all system control tables */ 3 82 2 update_pending bit (1) aligned, /* flag indicating that update is required */ 3 83 2 update_channel fixed binary (71), /* event channel of update procedure */ 3 84 2 acct_update_chn fixed bin (71) aligned, /* Timer IPC channel */ 3 85 2 acct_last_update_time fixed bin (71) aligned, /* Time of last accounting update */ 3 86 2 acct_alarm_fail fixed bin, /* non-zero if alarm has failed */ 3 87 2 update_pad fixed bin, 3 88 3 89 /* dialup_ data values. */ 3 90 2 current_time fixed bin (71), /* Time of last transaction */ 3 91 2 processid_index fixed bin (18), /* unique index for process id generation */ 3 92 2 session_uid_counter fixed bin (35), /* current session_uid */ 3 93 3 94 /* load_ctl_ elements. */ 3 95 2 shift fixed bin, /* Shift, set by act_ctl_ */ 3 96 2 auto_maxu fixed bin, /* 0 = manual, 1 = config, 2 = load-level */ 3 97 2 extra_units fixed bin, /* Total daemon and abs units. */ 3 98 /* load_ctl_ load leveling desired response range: */ 3 99 2 response_high fixed bin, /* bad if user response time slower than this */ 3 100 2 response_low fixed bin, /* bad if user response time faster than this */ 3 101 2 load_ctl_pad fixed bin, 3 102 3 103 /* Login server request server data. */ 3 104 2 ls_request_server_event_channel fixed bin (71), /* channel for login server requests */ 3 105 2 ls_request_server_process_id bit (36) aligned, /* process serving login server requests */ 3 106 2 login_server_present bit (1) aligned, /* On IFF a login server request has been processed */ 3 107 3 108 2 entry_pad (28) fixed bin, /* pad to 128 words */ 3 109 2 entry (0 refer (anstbl.current_size)), /* user entries */ 3 110 3 contents (UTE_SIZE) fixed bin; 3 111 3 112 /* constants */ 3 113 3 114 /* values for anstbl.session */ 3 115 3 116 dcl (AT_NORMAL init ("normal "), 3 117 AT_SPECIAL init ("special "), 3 118 AT_SHUTDOWN init ("shutdown")) char (8) internal static options (constant); 3 119 3 120 dcl UTE_SIZE fixed bin internal static initial (300); 3 121 3 122 /* END INCLUDE FILE ... answer_table.incl.pl1 */ 2460 2461 /* BEGIN INCLUDE FILE ... as_data_.incl.pl1 ... */ 4 2 4 3 /* format: style4 */ 4 4 4 5 /* This file must be kept in sync with as_data_.alm */ 4 6 4 7 /****^ HISTORY COMMENTS: 4 8* 1) change(86-09-21,Beattie), approve(86-09-22,MCR7542), 4 9* audit(86-10-31,Brunelle), install(86-11-12,MR12.0-1211): 4 10* Remove references to the 963 and 029 preaccess commands and remove support 4 11* for ARDS, 202_ETX, 2741 and 1050 in system interfaces. 4 12* 2) change(86-09-25,Swenson), approve(87-07-20,MCR7737), 4 13* audit(87-07-20,GDixon), install(87-08-04,MR12.1-1056): 4 14* Add references to as_data_ entrypoints added for Login Server. 4 15* 3) change(87-03-03,Brunelle), approve(87-07-20,MCR7697), 4 16* audit(87-07-20,GDixon), install(87-08-04,MR12.1-1056): 4 17* Added new user signal field of inacrcvd (14) to handle inactivity response 4 18* from user. 4 19* END HISTORY COMMENTS */ 4 20 4 21 dcl as_data_$BS char (1) aligned ext static; /* BACKSPACE character */ 4 22 dcl as_data_$CR char (1) aligned ext static; /* CARRIAGE RETURN character */ 4 23 dcl as_data_$abs_dim char (32) ext static; /* absentee DIM */ 4 24 dcl as_data_$acct_update_priority fixed bin ext static; /* accounting update IPC priority */ 4 25 dcl as_data_$acsdir char (168) ext static; /* Access Control Segment directory */ 4 26 dcl as_data_$ansp ptr ext static; /* answer_table */ 4 27 dcl as_data_$as_procid bit (36) aligned ext static; /* Answering Service process id */ 4 28 dcl as_data_$as_ring fixed bin (3) ext static; /* AS operating ring */ 4 29 dcl as_data_$as_tty char (6); /* AS master tty channel */ 4 30 dcl as_data_$asmtp ptr ext static; /* AS meter table */ 4 31 dcl as_data_$autp ptr ext static; /* absentee_user_table */ 4 32 dcl as_data_$buzzardp ptr ext static; /* dpg_ list of buteo processes */ 4 33 dcl as_data_$cdtp ptr ext static; /* CDT */ 4 34 dcl as_data_$default_weight fixed bin (35) ext; /* default user process load control weight */ 4 35 dcl as_data_$devtabp ptr ext static; /* device_table */ 4 36 dcl as_data_$dft_user_ring fixed bin (3) ext static; /* default user ring */ 4 37 dcl as_data_$dutp ptr ext static; /* daemon_user_table */ 4 38 dcl as_data_$g115_dim char (32) ext static; 4 39 dcl as_data_$lct_initialized bit (1) aligned ext static; /* LCT allocated in ring 0 */ 4 40 dcl as_data_$lct_size fixed bin ext static; /* CDT tty channels + spares */ 4 41 dcl as_data_$max_user_ring fixed bin (3) ext static; /* maximum user ring */ 4 42 dcl as_data_$mgtp ptr ext static; /* master group table */ 4 43 dcl as_data_$mrd_dim char (32) ext static; /* daemon's message routing DIM */ 4 44 dcl as_data_$ntty_dim char (32) ext static; /* network connection DIM */ 4 45 dcl as_data_$pdtdir char (168) ext static; /* PDT directory */ 4 46 dcl as_data_$pit_ptr ptr ext static; /* pit_temp_ */ 4 47 dcl as_data_$rcpdir char (168) ext static; /* RCP directory */ 4 48 dcl as_data_$request_priority fixed bin ext static; 4 49 dcl as_data_$rs_ptrs (0:9) ptr ext static; /* rate_structures */ 4 50 dcl as_data_$rtdtp ptr ext static; /* RTDT */ 4 51 dcl as_data_$sat_htp ptr ext static; /* SAT hash table */ 4 52 dcl as_data_$satp ptr ext static; /* SAT */ 4 53 dcl as_data_$suffix (0:9) char (2) unaligned ext static; 4 54 dcl as_data_$sysdir char (168) ext static; /* system control directory */ 4 55 dcl as_data_$teens_suffix (10:19) char (2) unaligned ext static; 4 56 dcl as_data_$terminet_tabs_string char (144) varying ext static; 4 57 dcl as_data_$tty_dim char (32) ext static; /* standard interactive DIM */ 4 58 dcl as_data_$update_priority fixed bin ext static; /* ??? */ 4 59 dcl as_data_$version char (8) ext static; /* AS version */ 4 60 dcl as_data_$whoptr ptr ext static; /* whotab */ 4 61 4 62 dcl 1 as_data_$login_args aligned ext static, /* control arguments for login */ 4 63 2 n_login_args fixed bin, 4 64 2 pad fixed bin, 4 65 2 login_args (55 /* as_data_$login_args.n_login_args */) char (24) unaligned; 4 66 4 67 dcl 1 as_data_$signal_types ext static aligned, /* IPC process control signals */ 4 68 2 n_signals fixed bin, 4 69 2 pad fixed bin, 4 70 2 signals (14 /* as_data_$signal_types.n_signals */) char (8) unaligned; 4 71 4 72 dcl 1 as_data_$system_signal_types ext static aligned, /* IPC process control signals */ 4 73 2 n_system_signals fixed bin, 4 74 2 pad fixed bin, 4 75 2 system_signals (10 /* as_data_$system_signal_types.n_system_signals */) char (8) unaligned; 4 76 4 77 dcl as_data_$login_words fixed bin ext static aligned, 4 78 /* interactive login words */ 4 79 1 as_data_login_words aligned based (addr (as_data_$login_words)), 4 80 2 n_words fixed bin, 4 81 2 pad fixed bin, 4 82 2 words (0 refer (as_data_login_words.n_words)) char (16) unaligned; 4 83 4 84 dcl as_data_$debug_flag bit (1) aligned external static; 4 85 dcl as_data_$ls_request_server_info_ptr ptr external static; 4 86 dcl as_data_$ls_message_buffer_cur_lth fixed bin (18) external static; 4 87 dcl as_data_$ls_message_buffer_max_lth fixed bin (18) external static; 4 88 dcl as_data_$ls_message_buffer_ptr ptr external static; 4 89 4 90 /* END INCLUDE FILE ... as_data_.incl.pl1 ... */ 2461 2462 /* BEGIN INCLUDE FILE ... as_data_definitions_.incl.pl1 ... */ 5 2 5 3 5 4 /****^ HISTORY COMMENTS: 5 5* 1) change(87-04-26,GDixon), approve(87-07-13,MCR7741), 5 6* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 5 7* Removed ansp, autp and dutp from this include file, adding them to 5 8* answer_table.incl.pl1, absentee_user_table.incl.pl1 and 5 9* daemon_user_table.incl.pl1. 5 10* END HISTORY COMMENTS */ 5 11 5 12 5 13 /* This include file requires as_data_.incl.pl1 */ 5 14 5 15 /* format: style4 */ 5 16 5 17 dcl as_procid bit (36) aligned defined (as_data_$as_procid); 5 18 dcl as_tty char (6) based (addr (as_data_$as_tty)); 5 19 dcl asmtp ptr defined (as_data_$asmtp); 5 20 dcl devtabp ptr defined (as_data_$devtabp); 5 21 dcl ip ptr defined (as_data_$rs_ptrs (0)); 5 22 dcl mgtp ptr defined (as_data_$mgtp); 5 23 dcl pdtdir char (168) based (addr (as_data_$pdtdir)); 5 24 dcl rs_ptrs (0:9) ptr based (addr (as_data_$rs_ptrs (0))); 5 25 dcl sat_htp ptr defined (as_data_$sat_htp); 5 26 dcl satp ptr defined (as_data_$satp); 5 27 dcl scdtp ptr defined (as_data_$cdtp); 5 28 dcl sysdir char (168) defined (as_data_$sysdir); 5 29 dcl whoptr ptr defined (as_data_$whoptr); 5 30 5 31 /* END INCLUDE FILE ... as_data_definitions_.incl.pl1 ... */ 2462 2463 /* BEGIN INCLUDE FILE ... author_dcl.incl.pl1 */ 6 2 6 3 /* This include file declares the "author" substructure 6 4* in a form suitable for using the PL/I "like" attribute. 6 5* 6 6* Written 750304 by PG 6 7**/ 6 8 6 9 dcl 1 author_dcl aligned based, 7 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 7 2 7 3 /* the "author" items must always be the first ones in the table. The 7 4* module which moves the converted table to the System Control process 7 5* fills in these data items and assumes them to be at the head of the segment 7 6* regardless of the specific table's actual declaration. The variables 7 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 7 8* respectively. For tables installed in multiple processes, these 7 9* are to be used to lock out multiple installations. */ 7 10 7 11 /* Lock should be used as a modification lock. Since, in general, 7 12* entries may not be moved in system tables, even by installations, 7 13* it is sufficient for only installers and programs that change threads 7 14* to set or respect the lock. Simply updating data in an entry 7 15* requires no such protection. 7 16* 7 17* Last_install_time is used by readers of system tables to detect 7 18* installations or other serious modifications. By checking it before 7 19* and after copying a block of data, they can be protected against 7 20* modifications. 7 21* 7 22* Modules that set the lock should save proc_group_id, and then 7 23* put their group id there for the time they hold the lock. 7 24* if they do not actually install the, they should restore the group id. 7 25**/ 7 26 7 27 2 author aligned, /* validation data about table's author */ 7 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 7 29 3 lock bit (36), /* installation lock */ 7 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 7 31 3 update_authorization bit (1) unal, /* update only authorizations */ 7 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 7 33 3 pad bit (33) unaligned, 7 34 3 last_install_time fixed bin (71), 7 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 7 36 3 w_dir char (64), /* author's working directory */ 7 37 7 38 /* END INCLUDE FILE author.incl.pl1 */ 6 10 6 11 2 pad; 6 12 6 13 /* END INCLUDE FILE ... author_dcl.incl.pl1 */ 2463 2464 /* BEGIN INCLUDE FILE ... cdt.incl.pl1 */ 8 2 8 3 /* format: style3,idind25,indcomtxt */ 8 4 8 5 /* Channel Definition Table. 8 6* This table lists all of the hardware channels (ports) connected 8 7* to the system, and maintains the attributes of each one. 8 8* 8 9* PG 741230 8 10* Modified by Mike Grady 5/6/76 to add FNP info. 8 11* Modified by Tom Casey 7/29/76 to add more FNP info and a few other things. 8 12* Modified by Robert Coren 6/13/77 to make terminal types be character strings. 8 13* Modified July 1979 by T. Casey to add several variables for MR8.0 process preservation facility. 8 14* Modified December 1980 by E. N. Kittlitz to eliminate cdte.phone_no. 8 15* Modified March 1981 by Robert Coren to add "listening" flag for multiplexers and to add TANDD_SERVICE service_type. 8 16* Modified April 1981 by E. N. Kittlitz to add cdte.dial_ev_chn, cdte.recent_wakeup_time, cdte.recent_wakeup_count. 8 17* Modified July 1981 by T. Casey for MR9.0 to add dialup_flags.detach_after_hangup 8 18* Modified December 1981 by E. N. Kittlitz for cdte.leave_edited, cdte.hold_arg, 8 19* Modified September 1981 by Benson I. Margulies for cdt_mgr_'s tree of multiplexer's. 8 20* Modified August 1982 by E. N. Kittlitz for check_acs. 8 21* Modified January 1983 by Keith Loepere for generic_destination. 8 22* Modified August 1983 by Robert Coren to add mpxe.check and mpxe.retry_load. 8 23* Modified 831216 by E. N. Kittlitz for required_access_class. 8 24* Modified 84-04-01 by BIM to finish communications AIM: 8 25* access class ranges, 8 26* access_control flags. 8 27**/ 8 28 8 29 8 30 /****^ HISTORY COMMENTS: 8 31* 1) change(87-03-17,Beattie), approve(87-04-06,MCR7656), 8 32* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 8 33* Add support for answering service to use IOCBs when tty_ cannot be 8 34* used to service login channels. 8 35* END HISTORY COMMENTS */ 8 36 8 37 8 38 dcl CDT_version_5 fixed bin internal static initial (5) options (constant); 8 39 dcl CDT_version fixed bin internal static initial (6) options (constant); 8 40 8 41 dcl (cdtp, cdtep, fnpep, mpxep) 8 42 ptr; 8 43 8 44 dcl 1 cdt based (cdtp) aligned, /* all of the system channels */ 8 45 2 author like author_dcl.author, /* standard header */ 8 46 2 max_size fixed bin, /* maximum number of cdte's in 255K */ 8 47 2 current_size fixed bin, /* number of last cdte. */ 8 48 2 version fixed bin, 8 49 2 freep fixed bin, /* chain of free cdte's */ 8 50 2 n_cdtes fixed bin, /* number of used cdte's */ 8 51 2 meters_last_reset fixed bin (71), /* clock time dialup meters were reset */ 8 52 2 realtime_in_dialup fixed bin (71), /* Dialup meter */ 8 53 2 cpu_in_dialup fixed bin (71), /* .. */ 8 54 2 pf_in_dialup fixed bin, /* .. */ 8 55 2 pp_in_dialup fixed bin, /* .. */ 8 56 2 entries_to_dialup fixed bin, /* .. */ 8 57 2 flags, 8 58 3 go bit (1) unal, /* ans. serv. said "go ahead and answer the phones" */ 8 59 3 cdt_is_live bit (1) unal, /* cdt is active */ 8 60 3 mux_mgr_system_init 8 61 bit (1) unal, /* mux mgr has loaded top-levels */ 8 62 3 pad1 bit (33) unal, 8 63 2 acceptable_fnp_tbf fixed bin, /* acceptable minutes between FNP crashes */ 8 64 2 spare_channel_count fixed bin, /* number of extra channels to leave room for in ring0 */ 8 65 2 threads aligned like channel_threads, 8 66 /* root of non-fnp-top-level-multiplexers */ 8 67 2 pad2 (31) bit (36) aligned, /* pad header to 80 words */ 8 68 2 fnp_entry dim (8) like fnpe, /* max of 8 FNPs for now */ 8 69 2 cdt_entry dim (2500) like cdte; /* # of cdte's in 255K */ 8 70 8 71 8 72 dcl 1 cdte based (cdtep) aligned, /* a channel */ 8 73 2 in_use fixed bin, /* see dialup_values. 0=NOW_FREE */ 8 74 /**** * These variables are filled in when the CDTE is created by cv_cmf. They are not dynamic. */ 8 75 2 pad1 bit (36) aligned, 8 76 2 name char (32), /* ASCII name of channel */ 8 77 2 access_class (2) bit (72) aligned, /* access class range */ 8 78 2 comment char (48), /* printable message about channel */ 8 79 2 charge_type fixed bin (17) unal, /* billing group */ 8 80 2 service_type fixed bin (17) unal, /* service group (AS, ftp, mc) */ 8 81 2 line_type fixed bin (17) unal, /* tty line type (protocol) */ 8 82 2 baud_rate fixed bin (17) unal, /* 110, 133, 150, etc. */ 8 83 2 modem_type fixed bin (17) unal, /* type of modem on this channel */ 8 84 2 pad2 bit (18) unaligned, 8 85 2 answerback char (8), /* answerback string expected */ 8 86 2 initial_terminal_type 8 87 char (32) unal, /* as specified in the CMF */ 8 88 2 mpx_data unal, /* data used only for multiplexed channels */ 8 89 3 mpx_type fixed bin (17), /* type of multiplexing used */ 8 90 3 mpx_service fixed bin (17), /* service type, active or inactive */ 8 91 2 flags, 8 92 ( 3 attributes, 8 93 4 ck_answerback bit (1), /* ON means that ansbk must equal our records */ 8 94 4 audit_access_error 8 95 bit (1), /* ON means ck that person auth is inside access class range */ 8 96 /* this implies that the access_class describes a range of 8 97* legitimate user auths. */ 8 98 4 hardwired bit (1), /* ON means it is */ 8 99 4 set_modes bit (1), /* ON means to set initial modes at dialup */ 8 100 4 dont_read_answerback 8 101 bit (1), /* ON means don't try to read answerback */ 8 102 4 pada bit (4), 8 103 3 access_control unaligned, /* As below */ 8 104 4 dial_out bit (1), /* dialing user must be on ACS */ 8 105 4 priv_attach bit (1), /* PA_ user must be on ACS */ 8 106 4 dial_server bit (1), /* accept_dials process must be on acs */ 8 107 4 login bit (1), /* logging in user must be on acs */ 8 108 4 slave_dial bit (1), /* dialing user must give -user and be on acs */ 8 109 4 pado bit (3), 8 110 3 options, 8 111 4 execute_initial_command 8 112 bit (1), /* ON means to do it */ 8 113 4 attached_by_operator 8 114 bit (1), /* ON means temporary attachment. */ 8 115 4 private_line bit (1), /* ON means private_line sync modem in use */ 8 116 4 bsc_ebcdic bit (1), /* ON means bsc would like to use ebcdic code set */ 8 117 4 bsc_transparent bit (1), /* ON means bsc is in transparent mode */ 8 118 4 vip_pollselect bit (1), /* ON means VIP line is multidrop */ 8 119 4 autobaud bit (1), /* ON means auto baud detection this channel */ 8 120 4 generic_destination_present 8 121 bit (1), /* ON means that the initial_command field contains 8 122* a generic destination to match on dial_out or priv attach */ 8 123 4 use_iocb bit (1), /* ON means to use IOCB operations to support channel */ 8 124 4 pado bit (9) 8 125 ) unaligned, 8 126 2 initial_command char (64), /* pseudo first input line */ 8 127 /**** The following variables represent dynamic control info, and 8 128* are used mostly by dialup_ and asu_ */ 8 129 2 event fixed bin (71), /* event call channel for channel events */ 8 130 2 current_service_type fixed bin (17) unal, /* Current usage of line. */ 8 131 2 tra_vec fixed bin (17) unal, /* which section of dialup_ to do next */ 8 132 2 count fixed bin (17) unal, /* How many login tries he's had. */ 8 133 2 dialup_flags unal, /* flag bits for dialup to maintain */ 8 134 3 ppm bit (1) unal, /* print preaccess message for IBM terminals */ 8 135 3 cpo bit (1) unal, /* conditional printer-off (depends on answerback */ 8 136 3 wakeup_handler bit (1) unal, /* says who is wakeup handler for this channel */ 8 137 /* 0 = dialup_, 1 = mc_tty_ */ 8 138 3 save_arg bit (1) unal, /* -save login arg given */ 8 139 3 nosave_arg bit (1) unal, /* -nosave login arg given */ 8 140 3 detach_after_hangup 8 141 bit (1) unal, /* remember WAIT_DETACH when setting WAIT_BEFORE_HANGUP */ 8 142 3 leave_edited bit (1) unal, /* user control of edited mode */ 8 143 3 hold_arg bit (1) unal, /* -hold arg given */ 8 144 3 no_hold_arg bit (1) unal, /* -no_hold arg given */ 8 145 3 immediate_arg bit (1) unal, /* -immediate arg given */ 8 146 3 current_access_class_valid 8 147 bit (1) unal, /* dialup_ or lg_ctl_ has determined the current_access_class */ 8 148 3 pad bit (7) unal, 8 149 2 twx fixed bin, /* channel device index */ 8 150 2 state fixed bin, /* channel state */ 8 151 2 tty_id_code char (4), /* channel id (answerback) */ 8 152 2 current_terminal_type 8 153 char (32) unal, /* most recently-set terminal type */ 8 154 2 process ptr unal, /* ptr to ATE owning this channel */ 8 155 2 dialed_to_procid bit (36), /* Dialed channels remember owner's proc id */ 8 156 2 next_channel fixed bin (17) unal, /* cdte index of next channel for this process */ 8 157 2 cur_line_type fixed bin (17) unal, /* line type of currently dialed terminal */ 8 158 2 current_access_class (2) bit (72) aligned, /* This is a range, but at this time it must be a null range. 8 159* We do not yet define multi-class connections, but we will someday. */ 8 160 2 disconnected_ate_index 8 161 fixed bin (17) unal, /* index of ate of disconnected process */ 8 162 2 dial_ctl_ring fixed bin (3) unsigned unaligned, 8 163 /* used by dial_ctl_ to record ring of priv_attach or dial_out attachments */ 8 164 2 dial_rq_privileged bit (1) unaligned, /* used by dial ctl to record comm priv from priv_attach or dial_out request */ 8 165 2 pad3 bit (14) unaligned, 8 166 /**** The following variables are kept for metering purposes. */ 8 167 2 n_dialups fixed bin, /* number of times channel has been dialed up */ 8 168 2 n_logins fixed bin, /* number of login sessions on this channel */ 8 169 2 dialed_up_time fixed bin (35), /* total time channel was dialed up (seconds) */ 8 170 2 dialup_time fixed bin (71), /* time of present dialup */ 8 171 2 disconnected_proc_command 8 172 fixed bin (12) unsigned unal, 8 173 /* 1 to 5 for -list,-create,-connect,-new_proc,-destroy */ 8 174 2 disconnected_proc_number 8 175 fixed bin (12) unsigned unal, 8 176 /* {N} in -connect {N}, -new_proc {N}, -destroy {N} */ 8 177 2 n_disconnected_procs fixed bin (12) unsigned unal, 8 178 /* number of disconnected processes that user has */ 8 179 2 recent_wakeup_count fixed bin, /* counter to detect channel wakeup loop */ 8 180 2 recent_wakeup_time fixed bin (71), /* time of first wakeup in suspected channel wakeup loop */ 8 181 2 dial_ev_chn fixed bin (71), /* Dialed channels remember master's IPC channel */ 8 182 /**** cdt_mgr_ uses these to maintain the tree of channels. They ****/ 8 183 /**** really belong in the mpxe, but it is full up, and the cdte ****/ 8 184 /**** had the space. */ 8 185 2 threads aligned like channel_threads, 8 186 /**** The use name is that of the user who gave the dial or slave ****/ 8 187 /**** preaccess request. ****/ 8 188 2 user_name unaligned, 8 189 3 person char (20) unaligned, 8 190 3 project char (9) unaligned, 8 191 3 pad char (3) unaligned, /* no tag */ 8 192 2 iocbp ptr unaligned; /* 104 words */ 8 193 8 194 8 195 dcl generic_destination based char (32); /* used to match destinations on dial_out and priv_attach, 8 196* overlays initial_command field for slave and autocall lines */ 8 197 8 198 8 199 8 200 dcl 1 fnpe based (fnpep) aligned, /* an FNP */ 8 201 /* These variables are filled in from the CMF */ 8 202 2 type fixed bin, /* type of this FNP, DN355, DN6670, etc. */ 8 203 2 memory fixed bin, /* amount of memory on this FNP */ 8 204 2 nlslas fixed bin, /* number of lslas on this FNP */ 8 205 2 nhslas fixed bin, /* number of hslas on this FNP */ 8 206 2 service_type fixed bin, /* service type */ 8 207 2 mpx_type fixed bin, /* type of multiplexer on this fnp */ 8 208 2 coreimage char (168), /* pathname of image, maybe in >sl1 */ 8 209 /**** The following are used during system operation to remember the state of the FNP */ 8 210 2 boot_segp ptr, /* ptr to seg used for bootload */ 8 211 2 boot_ev_chan fixed bin (71), /* for ring0 to report crashes and bootload complete */ 8 212 2 mpxe like mpxe, /* standard multiplexer data */ 8 213 2 threads aligned like channel_threads, 8 214 /* same mpx threads as channel */ 8 215 2 pad3 (25) fixed bin; /* pad to 96 words per entry */ 8 216 8 217 /* This structure describes the data necessary to control a multiplexer. 8 218* For FNP's., a copy appears in the fnpe. For communications lines, it 8 219* overlays the initial_command field in the cdte. */ 8 220 8 221 dcl 1 mpxe based (mpxep) aligned, 8 222 2 state fixed bin, /* current state, up, down, loading */ 8 223 2 current_service_type fixed bin, /* usually = service type, unless cdt installation changes it */ 8 224 2 current_mpx_type fixed bin, /* type of multiplexer currently running */ 8 225 2 n_bootloads fixed bin, /* count of load attempts */ 8 226 2 time_initial_load fixed bin (71), /* time this MPX first completed a load */ 8 227 2 time_last_load fixed bin (71), /* time MPX last completed a bootload */ 8 228 2 time_last_crash fixed bin (71), /* time MPX last crashed */ 8 229 2 time_load_start fixed bin (71), /* time current load started */ 8 230 2 last_tbf fixed bin, /* number of minutes this MPX was up last bootload */ 8 231 2 flags unal, 8 232 3 go bit (1), /* start MPX after it loads */ 8 233 3 listening bit (1), /* listen has been done on subchannels */ 8 234 3 check bit (1), /* loaded with check option */ 8 235 3 retry_load bit (1), /* reload if load fails */ 8 236 3 pad1 bit (32), 8 237 2 pad2 (2) fixed bin; /* pad to 16 words */ 8 238 8 239 /* These threads define the tree of multiplexers in the cdt. */ 8 240 /* next_sister and prev_sister link nodes at the same level, ordered */ 8 241 /* by alpha sort order of the channel name. Daughter points to the */ 8 242 /* first child of this node, if any. Daughter count is the number */ 8 243 /* of children, as a consistency check. Mother is a back pointer to */ 8 244 /* the parent, present in all the children, not just the first. */ 8 245 /* threads are cdt indexes. If positive, they index the cdt_entry array */ 8 246 /* in cdt, if negative, they are the negative of an index into the fnp_entry */ 8 247 /* array. If zero, they refer to the top of the non-fnp mpx tree. */ 8 248 8 249 dcl 1 channel_threads aligned based, 8 250 2 next_sister fixed bin unaligned, 8 251 2 prev_sister fixed bin unaligned, 8 252 2 daughter fixed bin unaligned, 8 253 2 mother fixed bin unaligned, /* negative is a fnpx, positive a cdtx */ 8 254 2 pad bit (18) unaligned, 8 255 2 daughter_count fixed bin unaligned; 8 256 8 257 /* Values for cdte.service_type field */ 8 258 8 259 dcl ( 8 260 ANS_SERVICE init (1), /* login or dial */ 8 261 FTP_SERVICE init (2), /* file transfer service */ 8 262 MC_SERVICE init (3), /* message coordinator */ 8 263 SLAVE_SERVICE init (4), /* special channel */ 8 264 DIAL_SERVICE init (5), /* transient state */ 8 265 DIAL_OUT_SERVICE init (6), /* auto call line */ 8 266 MPX_SERVICE init (8), /* ring0 demultiplexed line */ 8 267 TANDD_SERVICE init (9) /* transient state, attached for T & D */ 8 268 ) fixed bin internal static options (constant); 8 269 8 270 /* Values for service type in both cdte and fnpe */ 8 271 8 272 dcl ( 8 273 INACTIVE init (7), /* not to be used, even though configured */ 8 274 ACTIVE init (1) 8 275 ) /* for FNP only, configured and to be used */ 8 276 fixed bin internal static options (constant); 8 277 8 278 /* Value for both cdte.in_use and fnpe.state */ 8 279 8 280 dcl NOT_CONFIGURED fixed bin int static init (-1) options (constant); 8 281 /* was not configured at Multics bootload time */ 8 282 8 283 /* NOTE: an INACTIVE channel can be made active by operator command or CDT installation, 8 284* but a NOT_CONFIGURED channel can not be used until its multiplexer is reloaded */ 8 285 8 286 /* Value for cdte.in_use */ 8 287 8 288 dcl CHANNEL_DELETED fixed bin int static init (-2); 8 289 /* channel deleted by CDT installation */ 8 290 8 291 /* NOTE: a configured channel being deleted by a CDT installation is set to CHANNEL_DELETED. 8 292* multiplexer_mgr_ sets cdte.in_use to NOW_FREE at the next reload of its multiplexer. 8 293* A NOT_CONFIGURED channel is set to NOW_FREE immediately when deleted by a CDT installation. */ 8 294 8 295 8 296 /* Values for mpxe.state field */ 8 297 8 298 dcl ( 8 299 FNP_FREE init (0), /* this fnpe is not used */ 8 300 FNP_UNKNOWN init (1), /* FNP is in some unknown state */ 8 301 FNP_DOWN init (2), /* FNP crashed, not yet reloaded */ 8 302 FNP_BOOT init (3), /* FNP has been booted, but no response yet */ 8 303 FNP_UP init (4) /* FNP is up and running fine */ 8 304 ) fixed bin internal static options (constant); 8 305 8 306 dcl ( 8 307 MPX_FREE init (0), /* this mpxe is not used */ 8 308 MPX_UNKNOWN init (1), /* MPX is in some unknown state */ 8 309 MPX_DOWN init (2), /* MPX crashed, not yet reloaded */ 8 310 MPX_BOOT init (3), /* MPX has been booted, but no response yet */ 8 311 MPX_UP init (4) /* MPX is up and running fine */ 8 312 ) fixed bin internal static options (constant); 8 313 9 1 /* BEGIN INCLUDE FILE ... fnp_types.incl.pl1 */ 9 2 9 3 9 4 9 5 /****^ HISTORY COMMENTS: 9 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 9 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 9 8* Add data needed for the uncp multiplexer (DSA gateway) interface 9 9* implementation. 9 10* END HISTORY COMMENTS */ 9 11 9 12 9 13 /* Values for fnpe.type field */ 9 14 /* 9 15* Created 79 May 14 by Art Beattie by splitting information out from cdt.incl.pl1 9 16* Added in March 1982 - DN7100.fd. 9 17**/ 9 18 9 19 dcl (DN355 init (1), /* a DataNet 355 FNP */ 9 20 DN6600 init (2), /* a DataNet 6600 FNP */ 9 21 DN6670 init (3), /* a Honeywell Bull Network Processor (18x) */ 9 22 DN7100 init (4) /* The DSA Datanet architecture (DN7) */ 9 23 ) fixed bin internal static options (constant); 9 24 9 25 dcl fnp_types (4) char (8) int static options (constant) 9 26 init ("DN355", "DN6600", "DN6670", "DN7100"); 9 27 9 28 dcl fnp_models (4) fixed bin (17) int static options (constant) 9 29 init (355, 6600, 6670, 7100); 9 30 9 31 dcl supported_fnp (4) bit (1) int static options (constant) 9 32 init ("0"b, "0"b, "1"b, "1"b); 9 33 9 34 9 35 /* END INCLUDE FILE ... fnp_types.incl.pl1 */ 8 314 8 315 8 316 /* END INCLUDE FILE ... cdt.incl.pl1 */ 2464 2465 /* BEGIN INCLUDE FILE ... dialup_values.incl.pl1 */ 10 2 10 3 /* format: style4 */ 10 4 10 5 /* Values for "cdte.tra_vec" used by dialup_ and others. */ 10 6 10 7 /* Modified by T. Casey April 1976 to add WAIT_NEW_PASSWORD 10 8* - in 1977 and 1978 to add WAIT_(GREETING_MSG DELETE_CHANNEL) 10 9* - and in October 1979 to add WAIT_CONNECT_REQUEST 10 10* Modified by Robert Coren in May 1981 to add TANDD_ATTACH values and 10 11* WAIT_DISCARD_WAKEUP 10 12* Modified by T. Casey, July 1981, for MR9.0, to add WAIT_BEFORE_HANGUP. 10 13* Modified by E. N. Kittlitz, July 1982, to add TTY_MASKED. 10 14**/ 10 15 10 16 /****^ HISTORY COMMENTS: 10 17* 1) change(87-04-20,GDixon), approve(87-07-13,MCR7741), 10 18* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 10 19* Add constant arrays naming cdte.state, cdte.tra_vec and ute.active values. 10 20* 2) change(87-05-11,GDixon), approve(87-07-13,MCR7741), 10 21* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 10 22* Add named constants for instance tags. 10 23* END HISTORY COMMENTS */ 10 24 10 25 dcl (WAIT_DIALUP init (1), /* Channel waiting for dialup. */ 10 26 WAIT_ANSWERBACK initial (2), /* WRU sent, waiting for reply */ 10 27 WAIT_LOGIN_LINE init (3), /* Greeting typed, wait for login command. */ 10 28 WAIT_LOGIN_ARGS init (4), /* Want rest of login line */ 10 29 WAIT_OLD_PASSWORD init (5), /* "-cpw" was specified. Wait for old password. */ 10 30 WAIT_PASSWORD init (6), /* Waiting for password. (If "-cpw", repeat of new one.) */ 10 31 WAIT_NEW_PASSWORD init (7), /* "-cpw" was specified. Wait for new password */ 10 32 WAIT_LOGOUT_SIG init (8), /* Channel is hooked up. Wait for logout. */ 10 33 WAIT_LOGOUT init (9), /* A logout has been requested. Wait for process to die */ 10 34 WAIT_LOGOUT_HOLD init (10), /* As above but don't hang up when it dies. */ 10 35 WAIT_DETACH init (11), /* As above but ignore channel afterwards. */ 10 36 WAIT_NEW_PROC init (12), /* As above but make new process and continue. */ 10 37 WAIT_REMOVE init (13), /* As above but completely expunge channel. */ 10 38 WAIT_FIN_PRIV_ATTACH init (14), /* When channel dials up, connect it to user */ 10 39 WAIT_DIAL_RELEASE init (15), /* Waiting for master process to release. */ 10 40 WAIT_DIAL_OUT init (16), /* Waiting for auto call to complete */ 10 41 WAIT_HANGUP init (17), /* Wait for the hangup event to occur for a channel */ 10 42 WAIT_SLAVE_REQUEST init (18), /* Ignore line until someone asks */ 10 43 WAIT_GREETING_MSG init (19), /* Print greeting message and wait for login line */ 10 44 WAIT_DELETE_CHANNEL init (20), /* Channel deleted - mark cdte after process is destroyed */ 10 45 WAIT_CONNECT_REQUEST init (21), /* logged in; awaiting request re disconnected processes */ 10 46 WAIT_TANDD_HANGUP init (22), /* when channel hangs up, proceed with t & d attachment */ 10 47 WAIT_FIN_TANDD_ATTACH init (23), /* when channel dials up, finish t & d attachment */ 10 48 WAIT_DISCARD_WAKEUPS init (24), /* disregard all wakeups on channel */ 10 49 WAIT_BEFORE_HANGUP init (25), /* allow output to print before hanging up */ 10 50 WAIT_DESTROY_REQUEST init (26), /* waiting to continue with destroy request after process has destroyed itself */ 10 51 WAIT_NEW_PROC_REQUEST init (27) /* waiting to continue with new_proc request after process has destroyed itself */ 10 52 ) fixed bin internal static options (constant); 10 53 10 54 dcl TRA_VEC_VALUES (0:13) char (32) aligned int static options (constant) init 10 55 /* names of ute.destroy_flag values */ 10 56 ("", "wait dialup", "wait answerback", "wait login line", /* 0-3 */ 10 57 "wait login args", "wait old password", "wait password", /* 4-6 */ 10 58 "wait new password", "wait logout signal", "wait logout", /* 7-9 */ 10 59 "wait logout hold", "wait detach", "wait new proc", /* 10-12 */ 10 60 "wait remove"); /* -13 */ 10 61 10 62 /* Values for "cdte.state", typewriter state. */ 10 63 10 64 dcl (TTY_MASKED init (-1), /* Terminal channel is there, but masked by MCS */ 10 65 TTY_HUNG init (1), /* Terminal channel is there, but dead. */ 10 66 TTY_KNOWN init (2), /* Channel being "listened" to, awaiting dialup. */ 10 67 TTY_DIALED init (5) /* Channel is dialed up. This is normal state. */ 10 68 ) fixed bin internal static options (constant); 10 69 10 70 dcl STATE_VALUES (-1:5) char (15) aligned int static options (constant) init 10 71 /* names of cdte.state values */ 10 72 ("masked", "dead", "hung up", "listening", "", "", "dialed up"); 10 73 10 74 /* Values for "cdte.in_use" and "ate.active" */ 10 75 10 76 dcl (NOW_FREE init (0), /* Entry is empty. */ 10 77 NOW_HUNG_UP init (1), /* Entry is usable but tty is hung up. */ 10 78 NOW_LISTENING init (2), /* Entry is waiting for phone call. */ 10 79 NOW_DIALED init (3), /* Entry is connected but login not complete. */ 10 80 NOW_LOGGED_IN init (4), /* Entry is logged in but no process. */ 10 81 NOW_HAS_PROCESS init (5), /* Entry has a valid process. */ 10 82 NOW_DIALING init (6), /* Entry (auto_call line) is dialing */ 10 83 NOW_DIALED_OUT init (7) /* Entry (auto_call line) is in use */ 10 84 ) fixed bin internal static options (constant); 10 85 10 86 dcl ACTIVE_VALUES (0:5) char (18) aligned int static options (constant) init 10 87 /* names of ute.active values */ 10 88 ("free", "hung-up", "listening", "dialed", "logged in, no proc", "logged in & proc"); 10 89 10 90 10 91 /**** Values for ute.tag */ 10 92 10 93 dcl (TAG_INTERACTIVE init("a"), 10 94 TAG_UFT init("f"), 10 95 TAG_ABSENTEE init("m"), 10 96 TAG_PROXY init("p"), 10 97 TAG_DAEMON init("z") 10 98 ) char(1) int static options(constant); 10 99 10 100 10 101 /**** Following are constants used to indicate to the process termination 10 102* handler the reason for the process termination. They are used by 10 103* uc_proc_term_handler_, as well as uc_ls_new_proc_request_ and 10 104* uc_ls_destroy_request_. */ 10 105 10 106 dcl ( 10 107 PT_FPE initial (1), 10 108 PT_LOGOUT initial (4), 10 109 PT_NEW_PROC_AUTH initial (13), 10 110 PT_HANGUP initial (20), 10 111 PT_SHUTDOWN initial (21), 10 112 PT_BUMP initial (22), 10 113 PT_ALARM initial (23), 10 114 PT_DETACH initial (24), 10 115 PT_UNBUMP initial (25), 10 116 PT_OPERATOR_TERMINATE initial (27), 10 117 PT_DESTROY_REQUEST initial (30), 10 118 PT_NEW_PROC_REQUEST initial (31) 10 119 ) fixed bin (17) internal static options (constant); 10 120 10 121 /**** Values for ute.preempted: 10 122* -1 user unbumped after term signal sent 10 123* 0 user unbumped; ignore alarm___ 10 124* 1 value internally used in load_ctl_ 10 125* 2 user bumped; when alarm___ comes in, send term signal 10 126* 3 term signal sent; destroy process if termsgnl, alarm___, or cpulimit 10 127* signals come in 10 128* 4 user bumped; process sick, so destroy without sending term signal 10 129* 5 trm_ signal sent, termsgnl received; (if still 3, we never got the 10 130* termsgnl). */ 10 131 10 132 dcl ( 10 133 PREEMPT_UNBUMP initial (-1), 10 134 PREEMPT_UNBUMP_IGNORE_ALARM initial (0), 10 135 PREEMPT_LOAD_CTL initial (1), 10 136 PREEMPT_BUMPED initial (2), 10 137 PREEMPT_TERM_SENT initial (3), 10 138 PREEMPT_BUMPED_NO_TERM initial (4), 10 139 PREEMPT_TERMSGNL_RECEIVED initial (5) 10 140 ) fixed bin (17) internal static options(constant); 10 141 10 142 dcl PREEMPT_VALUES (-1:5) char(28) varying int static options(constant) init( 10 143 "unbumped", 10 144 "not bumped, ignore alarm___", 10 145 "load_ctl_", 10 146 "bumped", 10 147 "bumped, trm_ sent", 10 148 "bumped without trm_", 10 149 "bumped, termsgnl received"); 10 150 10 151 /* END INCLUDE FILE ... dialup_values.incl.pl1 */ 2465 2466 /* BEGIN INCLUDE FILE ... hashst.incl.pl1 */ 11 2 /* format: style4 */ 11 3 11 4 /* General Utility hash table */ 11 5 11 6 dcl 1 htable based (htp) aligned, /* hash table entries of level 2 are statistical info */ 11 7 2 nb fixed bin, /* number of buckets in hash table */ 11 8 2 ni fixed bin, /* number of entries used */ 11 9 2 np fixed bin, /* number of times hash_ called referincing this table */ 11 10 2 tnt fixed bin, /* total # of tries to find, enter, or delete an entry */ 11 11 2 id char (4), /* ht01 version 1 of hash_ */ 11 12 2 gnt fixed bin, /* greatest number of tries for search etc. */ 11 13 2 loht fixed bin (18) unsigned, /* length of hash table in words */ 11 14 2 pad bit (36) aligned, /* padding */ 11 15 2 buckets (1:hash_table_size_ refer (htable.nb)), /* 26111=((1024*255)/10 words per entry)-1 (8-word header) */ 11 16 3 name char (32) unaligned, /* identifier of entry */ 11 17 3 value bit (36) aligned, /* value corresponding to name */ 11 18 3 flags aligned, 11 19 4 ds bit (1) unal, /* deleted switch="1"b if deleted */ 11 20 4 empty bit (1) unal, 11 21 4 pad bit (34) unal, /* empty switch="1"b if empty */ 11 22 2 end_of_table bit (0) aligned; /* to get address */ 11 23 11 24 declare MAX_HT_BUCKETS_IN_SEG fixed bin init (26111) int static options (constant); 11 25 declare hash_table_size_ fixed bin; 11 26 11 27 /* END INCLUDE FILE ... hashst.incl.pl1 */ 2466 2467 dcl htp ptr automatic init(null); /* hastst needs */ 2468 /* BEGIN INCLUDE FILE ... installation_parms.incl.pl1 */ 12 2 12 3 /* Modified 740723 by PG to add short AIM access names */ 12 4 /* Modified Fall 1977 by T. Casey to add fatal loop and trm_ signal parameters */ 12 5 /* Modified 04/03/78 by CDT to add rcp_init_flags structure */ 12 6 /* Modified May 1978 by T. Casey to add resource timer and resource price list parameters */ 12 7 /* Modified November 1978 by T. Casey for MR7.0, to add absentee control parameters */ 12 8 /* Modified 17 September 1980 by G. Palter to add default absentee queue */ 12 9 /* Modified April 1981 by E. N. Kittlitz for chn_wakeup_error_loop, chn_wakeup_error_count */ 12 10 /* Modified June 1981 by E. N. Kittlitz for nrates/rate_structures UNCA rate_structure support. 12 11* Version, expand foregound_cpu_default_limit and abs_cpu_max_limit to fixed bin (35) fields. 12 12* nrscp & resource array moved from offset 2064 (octal) to 2400 (octal). */ 12 13 /* Modified 1984-06-19 BIM to remove obsolete fields, and add 12 14* strict_trusted_path. */ 12 15 /* Modified 1984-10-24 BIM for default_pdir_quota. */ 12 16 /* Modified 1984-12-05 BIM for require_operator_login. */ 12 17 /* Modified 1985-03-01 by E. Swenson for password flags. */ 12 18 12 19 12 20 /****^ HISTORY COMMENTS: 12 21* 1) change(86-01-27,MSharpe), approve(87-05-25,MCR7690), 12 22* audit(87-03-29,GDixon), install(87-08-04,MR12.1-1056): 12 23* added vchn_requires_accept parameter. 12 24* 2) change(87-02-17,GDixon), approve(87-05-25,MCR7680), 12 25* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 12 26* Correct formatting problems. 12 27* END HISTORY COMMENTS */ 12 28 12 29 12 30 /* NOTE: rate_structure.incl.pl1 uses these declarations */ 12 31 12 32 12 33 dcl 1 installation_parms based (ip) aligned, /* describes installation parameters */ 12 34 2 part_1 like installation_parms_part_1 aligned, 12 35 2 resource (0 refer (installation_parms.nrscp)) like installation_parms_resource_array_part aligned; 12 36 12 37 dcl installation_parms_version_1 fixed bin init (1) static internal options (constant); 12 38 dcl installation_parms_version_2 fixed bin init (2) static internal options (constant); 12 39 12 40 dcl 1 installation_parms_part_1 based aligned, /* Used only by installation_parms and rate_structure */ 12 41 2 installation_id char (32), /* Name printed at dialup and in who */ 12 42 2 company char (64), /* company name */ 12 43 2 department char (64), /* department */ 12 44 2 companyds char (120), /* company, double spaced */ 12 45 2 departmentds char (120), /* dpeartment double spaced */ 12 46 2 shifttab (336) bit (3) unal, /* half-hrs from 0000 Mon, value is shift no */ 12 47 2 cpu_price (0: 7) float bin, /* price for cpu hour, by shift */ 12 48 2 log_base_price (0: 7) float bin, /* price for log hour, by shift */ 12 49 2 io_ops_price (0: 7) float bin, /* price per 1000 terminal io ops */ 12 50 2 core_price (0: 7) float bin, /* price for core page-hour, by shift */ 12 51 2 ndevices fixed bin, /* number of devices to charge */ 12 52 2 devtab (16), /* Maximum 16 */ 12 53 3 device_id char (8), /* Name of device */ 12 54 3 device_price (0: 7) float bin, /* Price by shift */ 12 55 2 inactive_time fixed bin, /* seconds of inactivity permitted */ 12 56 2 warning_time fixed bin, /* seconds from warning to logout */ 12 57 2 login_time fixed bin, /* seconds in which to complete login */ 12 58 2 acct_update fixed bin, /* seconds between acct update */ 12 59 2 login_tries fixed bin, /* number of login tries allowed */ 12 60 2 disk_price float bin, /* disk rate, in $/page-sec */ 12 61 2 registration_price float bin, /* fee per month per user */ 12 62 2 dolsign char (1), /* "dollar sign" */ 12 63 2 abs_cpu_price (4) float bin, /* price for absentee cpu by queue */ 12 64 2 abs_mem_price (4) float bin, /* Absentee memory charge */ 12 65 2 iod_rec_price (4) float bin, /* price for io daemon lines, per K, by queue */ 12 66 2 abs_timax (4) fixed bin (35), /* Absentee TIMAX parameter */ 12 67 2 abs_cpu_default_limit (4) fixed bin (35), /* default absentee cpu limit in seconds (changed from usec.) */ 12 68 2 syserr_log_copy_threshold fixed bin (9), /* Threshold (in PAGES) at which the 12 69* Initializer will copy the syserr_log */ 12 70 2 default_pdir_seg_quota fixed bin (17) unaligned, /* if system and project say 0 */ 12 71 2 default_pdir_dir_quota fixed bin (17) unaligned, /* Always used */ 12 72 2 fatal_error_loop_count fixed bin (17) unaligned, 12 73 2 fatal_error_loop_seconds fixed bin (17) unaligned, 12 74 2 term_real_time_seconds fixed bin (17) unaligned, 12 75 2 term_cpu_time_seconds fixed bin (17) unaligned, 12 76 2 rcp_init_flags like rcp_init_flags aligned, /* one word long */ 12 77 2 rsc_timer_seconds fixed bin (17) unaligned, /* time interval at which to check for resource availability */ 12 78 2 pad_old_fg_cpu_default_limit bit (18) unaligned, 12 79 2 foreground_queue_position fixed bin (17) unal, /* queue that foreground queue comes after */ 12 80 2 idle_time_constant_seconds fixed bin (17) unal, /* how far back to maintain moving average of load */ 12 81 2 sus_cpu_time_seconds fixed bin (17) unal, /* allow suspended process this much cpu time */ 12 82 2 sus_real_time_seconds fixed bin (17) unal, /* and this much real time, before bumping it */ 12 83 2 foreground_cpu_default_limit fixed bin (35), /* default cpu time limit (sec) for foreground absentee jobs */ 12 84 2 access_authorization_ceiling bit (72), /* "System high" access authorization. */ 12 85 2 level_names (0:7) char (32), /* Names for security levels. */ 12 86 2 category_names (18) char (32), /* Names for security categories. */ 12 87 2 short_level_names (0:7) char (8), /* Abbreviated level names. */ 12 88 2 short_category_names (18) char (8), /* Abbreviated category names. */ 12 89 2 ncon fixed bin, /* Number of config elements. */ 12 90 2 cona (51), /* each entry is 5 words long */ 12 91 3 cpu fixed bin (5) unal, /* Number of CPU's */ 12 92 3 shift fixed bin (5) unal, /* Shift number */ 12 93 3 x1 fixed bin (23) unal, 12 94 3 kmem fixed bin (17) unal, /* Memory size */ 12 95 3 kbulk fixed bin (17) unal, /* Bulk store size */ 12 96 3 x2 fixed bin (17) unal, 12 97 3 maxa fixed bin (11) unal, /* Max abs users */ 12 98 3 maxq fixed bin (5) unal, /* Max abs q */ 12 99 3 maxu_base fixed bin (17) unal, 12 100 3 response_high fixed bin (17) unal, 12 101 3 response_low fixed bin (17) unal, 12 102 3 x3 fixed bin (17) unal, 12 103 12 104 /* Absentee control parameters. New for MR7.0 */ 12 105 12 106 2 max_abs (0:7) fixed bin (17) unal, /* per-shift upper limit on abs_maxu */ 12 107 2 min_abs (0:7) fixed bin (17) unal, /* per-shift lower limit on abs_maxu */ 12 108 2 pct_abs (0:7) fixed bin (17) unal, /* abs_maxu is this pct (per-shift) of idle units */ 12 109 12 110 2 max_qres (0:7, 4) fixed bin (17) unal, /* per-shift-and-queue upper limit on reserved slots */ 12 111 2 min_qres (0:7, 4) fixed bin (17) unal, /* per-shift-and-queue lower limit on reserved slots */ 12 112 2 pct_qres (0:7, 4) fixed bin (17) unal, /* reserved slots are these pcts of abs_maxu */ 12 113 12 114 2 abs_cpu_max_limit (0:7, 4) fixed bin (35), /* per-shift-and-queue upper limit (sec) on jobs' cpu times */ 12 115 12 116 2 default_absentee_queue fixed binary (17) unaligned, /* default absentee queue for ear, etc. */ 12 117 12 118 2 chn_wakeup_error_loop_count fixed bin (17) unaligned, /* maximum number of channel wakeups in following interval */ 12 119 2 chn_wakeup_error_loop_seconds fixed bin (17) unaligned, /* works like fatal_error_loop_count/seconds */ 12 120 2 rate_structure_number fixed bin (17) unaligned, /* rate_structure number of this RS */ 12 121 2 version fixed bin (35), /* must be 2 */ 12 122 2 nrates fixed bin, /* number of rate structures */ 12 123 2 rate_structures (0:9) char (32), /* names of rate_structures */ 12 124 2 trusted_path_login bit (1) aligned, /* forbid logout -hold and new_proc -auth */ 12 125 2 require_operator_login bit (1) aligned, /* just what it says */ 12 126 2 operator_inactive_time fixed bin, /* seconds between commands --> not logged in. */ 12 127 2 validate_daemon_commands bit (1) aligned, /* force existence and adequate access to 12 128* mcacs segments for operators */ 12 129 2 password_min_length fixed bin, /* minimum length of passwords */ 12 130 2 password_gpw_length fixed bin, /* length of generated passwords */ 12 131 2 password_change_interval fixed bin, /* number of days until must change */ 12 132 2 password_expiration_interval fixed bin, /* number of days that a password may remain unused */ 12 133 2 vchn_requires_accept bit (1) aligned, /* "login personid -op -vchn foo" must be 12 134* "accepted" by operator if personid is not 12 135* signed on system console */ 12 136 2 end_pad (219) bit (36) aligned, /* leave plenty of pad before the variable length price list */ 12 137 2 nrscp fixed bin; /* length of resource price array; must have offset 2400 (octal), 12 138* or someone miscounted when using part of pad2 */ 12 139 12 140 12 141 /* Entries in the following array may be accessed via system_info_$resource_price. 12 142* This array should not be accessed directly, since its format will change in subsequent releases of Multics. */ 12 143 12 144 dcl 1 installation_parms_resource_array_part (0 refer (installation_parms.nrscp)) based, 12 145 2 name char (32), 12 146 2 price float bin; 12 147 13 1 /* BEGIN INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 13 2 13 3 /* Created on 04/24/78 by Michael R. Jordan */ 13 4 /* Modified 04/10/79 by C. D. Tavares */ 13 5 13 6 dcl rifp ptr; 13 7 13 8 dcl 1 rcp_init_flags based (rifp), 13 9 2 unload_on_detach bit (1) unaligned, /* ON => tape volumes are unloaded after detaching */ 13 10 2 pad1 bit (2) unaligned, /* obsolete */ 13 11 2 resource_mgmt_enabled bit (1) unaligned, /* ON => resource management has been enabled */ 13 12 2 auto_registration bit (1) unaligned, /* ON => auto registration allowed */ 13 13 2 pad2 bit (2) unaligned, /* future expansion, possibly of authentication_level */ 13 14 2 authentication_level fixed bin (2) unaligned unsigned; /* see below for values */ 13 15 13 16 dcl (No_authentication initial (0), 13 17 Nominal_authentication initial (1), 13 18 Automatic_authentication initial (2), 13 19 Manual_authentication initial (3)) fixed bin internal static options (constant); 13 20 13 21 dcl authentication_level_names (0:3) char (12) internal static options (constant) initial 13 22 ("none", "nominal", "automatic", "manual"); 13 23 13 24 /* END INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 12 148 12 149 12 150 /* END INCLUDE FILE ... installation_parms.incl.pl1 */ 2468 2469 /* BEGIN INCLUDE FILE ... line_types.incl.pl1 */ 14 2 14 3 /* Written November 10 1975 by Paul Green */ 14 4 /* Modified October 1978 by Larry Johnson to include line_type_names */ 14 5 /* Modified 12/19/78 by J. Stern to add POLLED_VIP line type */ 14 6 /* Modified 9/27/79 by J. Stern to add X25LAP line type */ 14 7 /* Modified Spring 1981 by Charles Hornig to add HDLC line type */ 14 8 /* Modified May 1981 by Robert Coren to add COLTS line type */ 14 9 /* Modified September 1984 by Robert Coren to correctly count VIP as a synchronous line type */ 14 10 14 11 14 12 /****^ HISTORY COMMENTS: 14 13* 1) change(86-02-25,Negaret), approve(87-07-13,MCR7679), 14 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 14 15* Add a DSA line type. 14 16* 2) change(87-03-17,Beattie), approve(87-07-13,MCR7656), 14 17* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 14 18* Add HASP_OPR to identify HASP workstation consoles with login service. 14 19* END HISTORY COMMENTS */ 14 20 14 21 14 22 declare (LINE_MC initial (-2), 14 23 LINE_TELNET initial (-1), 14 24 LINE_UNKNOWN initial (0), 14 25 LINE_ASCII initial (1), 14 26 LINE_1050 initial (2), 14 27 LINE_2741 initial (3), 14 28 LINE_ARDS initial (4), 14 29 LINE_SYNCH initial (5), 14 30 LINE_G115 initial (6), 14 31 LINE_BSC initial (7), 14 32 LINE_ETX initial (8), 14 33 LINE_VIP initial (9), 14 34 LINE_ASYNC1 initial (10), 14 35 LINE_ASYNC2 initial (11), 14 36 LINE_ASYNC3 initial (12), 14 37 LINE_SYNC1 initial (13), 14 38 LINE_SYNC2 initial (14), 14 39 LINE_SYNC3 initial (15), 14 40 LINE_POLLED_VIP initial (16), 14 41 LINE_X25LAP initial (17), 14 42 LINE_HDLC initial (18), 14 43 LINE_COLTS initial (19), 14 44 LINE_DSA initial (20), 14 45 LINE_HASP_OPR initial (21) 14 46 ) fixed bin internal static options (constant); 14 47 14 48 dcl max_line_type fixed bin int static options (constant) init (21); 14 49 14 50 declare n_sync_line_types fixed bin int static options (constant) init (10); 14 51 14 52 declare sync_line_type (10) fixed bin int static options (constant) init (5, 6, 7, 9, 13, 14, 15, 16, 17, 18); 14 53 14 54 dcl line_types (-2:21) char (16) int static options (constant) init ( 14 55 "MC", /* -2 */ 14 56 "TELNET", /* -1 */ 14 57 "none", /* 0 */ 14 58 "ASCII", /* 1 */ 14 59 "1050", /* 2 */ 14 60 "2741", /* 3 */ 14 61 "ARDS", /* 4 */ 14 62 "Sync", /* 5 */ 14 63 "G115", /* 6 */ 14 64 "BSC", /* 7 */ 14 65 "202ETX", /* 8 */ 14 66 "VIP", /* 9 */ 14 67 "ASYNC1", /* 10 */ 14 68 "ASYNC2", /* 11 */ 14 69 "ASYNC3", /* 12 */ 14 70 "SYNC1", /* 13 */ 14 71 "SYNC2", /* 14 */ 14 72 "SYNC3", /* 15 */ 14 73 "POLLED_VIP", /* 16 */ 14 74 "X25LAP", /* 17 */ 14 75 "HDLC", /* 18 */ 14 76 "COLTS", /* 19 */ 14 77 "DSA", /* 20 */ 14 78 "HASP_OPR"); /* 21 */ 14 79 14 80 /* END INCLUDE FILE ... line_types.incl.pl1 */ 2469 2470 /* BEGIN INCLUDE FILE ... pdt.incl.pl1 */ 15 2 /* Requires user_attributes.incl.pl1 */ 15 3 15 4 /* Modified 740723 by PG to add AIM info */ 15 5 /* Modified 750604 by T. Casey to add priority scheduler parameters */ 15 6 /* Modified May 1976 by T. Casey to add cutoff warning thresholds and change version to 3 */ 15 7 /* Modified May 1977 by John Gintell to add reqfile, projfile, and SAT to header */ 15 8 /* Modified May 1978 by T. Casey to add pdir_quota to user entry */ 15 9 /* Modified June 1978 by T. Casey to add rel ptr to pdt hash table */ 15 10 /* Modified November 1978 by T. Casey to add max_(fore back)ground, n_(fore back)ground and abs_foreground_cpu_limit */ 15 11 /* Modified October 1979 by T. Casey to add counters for interactive and disconnected processes. */ 15 12 /* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures (UNCA). */ 15 13 /* Modified May 1980 by R. McDonald to use iod cpu time field for page charging (UNCA) */ 15 14 /* Modified December 1981 by E. N. Kittlitz for user_warn fields */ 15 15 /* Modified January 1982 by E. N. Kittlitz for user_attributes.incl.pl1 changes */ 15 16 /* Modified September 1982 by E. N. Kittlitz for default ring. */ 15 17 /* Modified 1984-07-05 BIM for min authorization, version to 4 */ 15 18 15 19 dcl (PDT_version init (4), /* version of this declaration */ 15 20 PDT_header_lth init (256), /* length in words of PDT head */ 15 21 PDT_entry_lth init (256), /* length in words of PDT entry */ 15 22 15 23 PDT_project_name_length init (9), /* proper length of pdt.project_name */ 15 24 PDT_person_id_length init (22) /* proper length of user.person_id */ 15 25 ) fixed bin internal static options (constant); 15 26 15 27 dcl 1 pdt based (pdtp) aligned, 15 28 16 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 16 2 16 3 /* the "author" items must always be the first ones in the table. The 16 4* module which moves the converted table to the System Control process 16 5* fills in these data items and assumes them to be at the head of the segment 16 6* regardless of the specific table's actual declaration. The variables 16 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 16 8* respectively. For tables installed in multiple processes, these 16 9* are to be used to lock out multiple installations. */ 16 10 16 11 /* Lock should be used as a modification lock. Since, in general, 16 12* entries may not be moved in system tables, even by installations, 16 13* it is sufficient for only installers and programs that change threads 16 14* to set or respect the lock. Simply updating data in an entry 16 15* requires no such protection. 16 16* 16 17* Last_install_time is used by readers of system tables to detect 16 18* installations or other serious modifications. By checking it before 16 19* and after copying a block of data, they can be protected against 16 20* modifications. 16 21* 16 22* Modules that set the lock should save proc_group_id, and then 16 23* put their group id there for the time they hold the lock. 16 24* if they do not actually install the, they should restore the group id. 16 25**/ 16 26 16 27 2 author aligned, /* validation data about table's author */ 16 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 16 29 3 lock bit (36), /* installation lock */ 16 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 16 31 3 update_authorization bit (1) unal, /* update only authorizations */ 16 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 16 33 3 pad bit (33) unaligned, 16 34 3 last_install_time fixed bin (71), 16 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 16 36 3 w_dir char (64), /* author's working directory */ 16 37 16 38 /* END INCLUDE FILE author.incl.pl1 */ 15 29 15 30 2 max_size fixed bin, /* max number of entries table can grow */ 15 31 2 current_size fixed bin, /* current size of table (in entries) */ 15 32 2 version fixed bin, /* table version */ 15 33 2 freep fixed bin, /* relptr to begin of free chain */ 15 34 2 n_users fixed bin, /* number of entries actually used */ 15 35 2 project_name char (28), /* name of project */ 15 36 2 project_dir char (64), /* treename of project's directory */ 15 37 2 projfile_version fixed bin, 15 38 2 projentry bit (66*36), 15 39 2 pad3 (5) bit (36) aligned, 15 40 2 reqfile_version fixed bin, 15 41 2 reqentry bit (40*36), 15 42 2 pad4 (9) fixed bin, 15 43 2 sat_version fixed bin, 15 44 2 satentry bit (52*36), /* everything in sat.project from project.at on */ 15 45 2 pad5 (4) bit (36) aligned, 15 46 2 date_reqfile_copied fixed bin (71), 15 47 2 rs_number fixed bin (9) unsigned unaligned, /* rate structure number, easier than looking in satentry */ 15 48 2 pad2l bit (27) unaligned, 15 49 2 pad2 (16) fixed bin, /* make header 256 words long */ 15 50 2 ht_relp fixed bin (18) aligned, /* if nonzero, pdt has hash table at that loc */ 15 51 2 user (1019) aligned, /* the project definition table entries */ 15 52 3 pad (256) bit (36) aligned; /* each entry is 256 words long */ 15 53 15 54 /* The hash table, if there is one, is right after the last user, and is described in hashst.incl.pl1 */ 15 55 15 56 15 57 15 58 dcl 1 user based (pdtep) aligned, /* declaration of a single PDT entry */ 15 59 2 state fixed bin, /* 1 = normal, 2 = deleted 0 = free */ 15 60 2 lock bit (36), /* update lock */ 15 61 2 person_id char (24) aligned, /* login name of user */ 15 62 2 now_in fixed bin, /* count of users logged in on this entry */ 15 63 2 password char (8) aligned, /* password for anonymous user */ 15 64 2 at like user_attributes aligned, /* include user_attributes.incl.pl1 */ 15 65 2 initial_procedure char (64) aligned, /* initproc and subsystem name packed into one string */ 15 66 2 home_dir char (64) aligned, /* user's default working directory */ 15 67 2 bump_grace fixed bin, /* number of minutes he is protected */ 15 68 2 high_ring fixed bin, /* highest ring user may use */ 15 69 2 default_ring fixed bin (17) unal, /* ring user will start in */ 15 70 2 low_ring fixed bin (17) unal, /* lowest ring user may use */ 15 71 2 outer_module char (32), /* outer module used if user is interactive */ 15 72 2 lot_size fixed bin, /* size of linkage offset table */ 15 73 2 kst_size fixed bin, /* size of known segment table */ 15 74 2 cls_size fixed bin, /* size of combined linkage */ 15 75 2 uflags, /* various flags */ 15 76 3 dont_call_init_admin bit (1) unal, /* call overseer direct */ 15 77 3 ip_given bit (1) unal, /* ip_len gives length of initproc packed in initial_procedure */ 15 78 3 ss_given bit (1) unal, /* subsystem name is packed in initial_procedure */ 15 79 3 flagpad bit (33) unal, 15 80 2 ip_len fixed bin (17) unal, /* length of initproc name packed in initial_procedure */ 15 81 2 ss_len fixed bin (17) unal, /* length of subsystem name packed in initial_procedure */ 15 82 2 dollar_limit float bin, 15 83 2 dollar_charge float bin, /* total dollars spent this month */ 15 84 2 shift_limit (0: 7) float bin, 15 85 2 daton fixed bin (71), /* date user added to system */ 15 86 2 datof fixed bin (71), /* date user deleted */ 15 87 2 last_login_time fixed bin (71), /* time of last login */ 15 88 2 last_login_unit char (4), /* terminal id last used */ 15 89 2 last_login_type fixed bin (17) unal, /* terminal type */ 15 90 2 last_login_line_type fixed bin (17) unal, /* terminal line type */ 15 91 2 time_last_bump fixed bin (71), /* for bump-wait */ 15 92 2 last_update fixed bin (71), /* time of last transaction */ 15 93 2 logins fixed bin, /* number of logins */ 15 94 2 crashes fixed bin, /* sessions abnormally terminated */ 15 95 2 interactive (0: 7), /* interactive use, shifts 0-7 */ 15 96 3 charge float bin, /* total dollar charge this shift */ 15 97 3 xxx fixed bin, 15 98 3 cpu fixed bin (71), /* cpu usage in microseconds */ 15 99 3 core fixed bin (71), /* core demand in page-microseconds */ 15 100 3 connect fixed bin (71), /* total console time in microseconds */ 15 101 3 io_ops fixed bin (71), /* total i/o ops on terminal */ 15 102 2 absentee (4), /* absentee use, queues 1-4 */ 15 103 3 charge float bin, /* dollar charge this queue */ 15 104 3 jobs fixed bin, /* number of jobs submitted */ 15 105 3 cpu fixed bin (71), /* total cpu time in microseconds */ 15 106 3 memory fixed bin (71), /* total memory demand */ 15 107 2 iod (4), /* io daemon use, queues 1-4 */ 15 108 3 charge float bin, /* dollar charge this queue */ 15 109 3 pieces fixed bin, /* pieces of output requested */ 15 110 3 pad fixed bin (35), 15 111 3 pages fixed bin (35), /* number of pages output */ 15 112 3 lines fixed bin (71), /* total record count of output */ 15 113 2 devices (16) float bin, /* device charges */ 15 114 2 time_last_reset fixed bin (71), /* time PDT last updated */ 15 115 2 absolute_limit float bin, /* Limit, not reset monthly */ 15 116 2 absolute_spent float bin, /* Spending against this */ 15 117 2 absolute_cutoff fixed bin (71), /* Spending will be reset on this date */ 15 118 2 absolute_increm fixed bin, /* .. time increment code. 0 = don't reset */ 15 119 2 pad_was_authorization bit (72) aligned, 15 120 2 group char (8), /* group for this user (if at.igroup = "1"b) */ 15 121 2 warn_days fixed bin (17) unaligned, /* warn user if less than this many days to cutoff */ 15 122 2 warn_pct fixed bin (17) unaligned, /* warn user if less than this percent of funds left */ 15 123 2 warn_dollars float bin, /* warn user if less than this amount of funds left */ 15 124 2 n_foreground fixed bin (9) unsigned unaligned, /* number of foreground and background processes */ 15 125 2 n_background fixed bin (9) unsigned unaligned, /* that this user has. see limits just below */ 15 126 2 max_foreground fixed bin (9) unsigned unaligned, /* max simultaneous foreground and */ 15 127 2 max_background fixed bin (9) unsigned unaligned, /* background processes that this user can have */ 15 128 2 n_interactive fixed bin (9) unsigned unaligned, /* number of interactive processes that user has */ 15 129 2 n_disconnected fixed bin (9) unsigned unaligned, /* number of disconnected processes that user has */ 15 130 2 pdtupad1 fixed bin (18) unsigned unaligned, 15 131 2 user_warn_days fixed bin (17) unaligned, /* warn user if less than this many days to user cutoff */ 15 132 2 user_warn_pct fixed bin (17) unaligned, /* warn user if less than this percent of user funds left */ 15 133 2 user_warn_dollars float bin, /* warn user if less than this amount of user funds left */ 15 134 2 user_authorization (2) bit (72) aligned, /* range */ 15 135 2 pdtupad (5) fixed bin, 15 136 2 abs_foreground_cpu_limit fixed bin (17) unaligned, /* time limit (sec) on foreground absentee jobs */ 15 137 2 pdir_quota fixed bin (17) unaligned, /* quota to put on user's pdir (0 => use default) */ 15 138 2 chain fixed bin; /* free chain */ 15 139 15 140 /* END INCLUDE FILE ... pdt.incl.pl1 */ 2470 2471 /* BEGIN INCLUDE FILE ... pnt_entry.incl.pl1 */ 17 2 17 3 /* Modified 790702 by C. Hornig for MSF PNT */ 17 4 /* Modified 84-07-18 BIM for V2, aim ranges, long passwords. */ 17 5 /* Modified 84-09-25 for operator attribute... -E. A. Ranzenbach */ 17 6 /* Modified 85-03-05 E. Swenson for user_validated_time */ 17 7 17 8 /**** The ms_table_mgr_ has fixed sized entries, for now. 17 9* The presence of a version field and some pad allow 17 10* us to have incrementally-upgraded PNTE's in a future change. 17 11**/ 17 12 17 13 /**** The conversion to V2 copies the existing encrypted passwords. 17 14* Since the 32 character scrambling algorithm will not give the 17 15* same results, the short_XX flags indicate that the old scrambler 17 16* should be used. The short flags are automatically turned off 17 17* by calls to update the password with the long-scrambled form. */ 17 18 17 19 /* format: style4,insnl,delnl */ 17 20 17 21 declare pntep pointer automatic; 17 22 declare 1 pnt_entry based (pntep) aligned, /* declaration of a single PNT entry */ 17 23 2 version fixed bin, 17 24 2 private aligned, 17 25 3 pw_flags aligned, 17 26 4 short_pw bit (1) unal, /* ON password is eight-character form */ 17 27 4 short_network_pw bit (1) unal, /* ON card password is eight character form. */ 17 28 3 password character (32), /* person's password */ 17 29 3 network_password character (32), 17 30 2 public, 17 31 3 user_id character (32), /* user ID (for alias entries */ 17 32 3 alias character (8), 17 33 3 default_project character (16), /* user's default project */ 17 34 3 flags, /* one-bit flags */ 17 35 4 has_password bit (1) unaligned, 17 36 4 has_network_password bit (1) unaligned, 17 37 4 trap bit (1) unal, /* If this password is used, holler */ 17 38 4 lock bit (1) unal, /* prevent login if on. */ 17 39 4 nochange bit (1) unal, /* user cannot change password */ 17 40 4 must_change bit unal, /* user must change password at next login */ 17 41 4 pw_time_lock bit (1) unal, /* if password has a time lock */ 17 42 4 generate_pw bit (1) unal, /* ON if we give new pw, OFF lets user select new pw */ 17 43 4 last_bad_pw_reported bit (1) unal, /* ON if user has NOT been told about last bad password */ 17 44 4 operator bit (1) unal, /* ON if user can login as an operator... */ 17 45 4 pads bit (26) unal, 17 46 3 n_good_pw fixed bin, /* Number of good passwords */ 17 47 3 n_bad_pw fixed bin, /* Number of wrong passwords */ 17 48 3 n_bad_pw_since_good fixed bin, /* Number of wrong passwords since good */ 17 49 3 time_pw_changed fixed bin (71), /* When password was modified by user */ 17 50 17 51 3 time_last_good_pw fixed bin (71), 17 52 3 time_last_bad_pw fixed bin (71), /* When pw was last given wrong */ 17 53 3 bad_pw_term_id character (4), /* where bad password from */ 17 54 3 bad_pw_line_type fixed bin (17), /* ... */ 17 55 3 bad_pw_term_type character (32), 17 56 3 password_timelock fixed bin (71), /* Password is locked up until here */ 17 57 3 person_authorization (2) bit (72), /* authorization of this person */ 17 58 3 default_person_authorization bit (72), /* default authorization of this person */ 17 59 3 audit bit (36), /* audit flags for person */ 17 60 3 pad1 bit (36), /* pad to even word boundary */ 17 61 3 user_validated_time fixed bin (71), /* time this PNT entry was last validated by an administrator */ 17 62 2 pad (80 - 64) bit (36) aligned; 17 63 17 64 declare PNT_ENTRY_VERSION_2 fixed bin init (2) int static options (constant); 17 65 17 66 /* END INCLUDE FILE ... pnte.incl.pl1 */ 2471 2472 /* BEGIN INCLUDE FILE ... sat.incl.pl1 */ 18 2 18 3 18 4 18 5 18 6 /****^ HISTORY COMMENTS: 18 7* 1) change(86-09-05,Parisek), approve(87-06-17,MCR7570), 18 8* audit(87-06-15,Hirneisen), install(87-08-06,MR12.1-1066): 18 9* Expand comment line of project.state to include the renamed state (state = 18 10* 3). 18 11* END HISTORY COMMENTS */ 18 12 18 13 18 14 18 15 /* Modified 740723 by PG to add AIM info */ 18 16 /* Modified 750604 by T. Casey to add priority scheduler parameters */ 18 17 /* Modified May 1976 by T. Casey to add project cutoff limits */ 18 18 /* Modified May 1978 by T. Casey to add pdir_quota */ 18 19 /* Modified November 1978 by T. Casey to add max_(fore back)ground and abs_foreground_cpu_limit */ 18 20 /* Modified July 1979 by J. N. R. Barnecut to support multiple rate structures. (UNCA) */ 18 21 /* Modified January 1982 by E. N. Kittlitz for user_attributes.incl.pl1 changes */ 18 22 /* Modified 1984-07-05 BIM range of authorizations, version 3 */ 18 23 18 24 dcl (SAT_version init (3), /* version 2 of this declaration */ 18 25 18 26 SAT_header_lth init (466), /* length in words of SAT header */ 18 27 SAT_entry_lth init (80), /* length in words of SAT entry */ 18 28 18 29 SAT_project_name_length init (9) /* proper length of project.project_id */ 18 30 ) fixed bin internal static options (constant); 18 31 18 32 dcl 1 sat based (satp) aligned, 18 33 19 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 19 2 19 3 /* the "author" items must always be the first ones in the table. The 19 4* module which moves the converted table to the System Control process 19 5* fills in these data items and assumes them to be at the head of the segment 19 6* regardless of the specific table's actual declaration. The variables 19 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 19 8* respectively. For tables installed in multiple processes, these 19 9* are to be used to lock out multiple installations. */ 19 10 19 11 /* Lock should be used as a modification lock. Since, in general, 19 12* entries may not be moved in system tables, even by installations, 19 13* it is sufficient for only installers and programs that change threads 19 14* to set or respect the lock. Simply updating data in an entry 19 15* requires no such protection. 19 16* 19 17* Last_install_time is used by readers of system tables to detect 19 18* installations or other serious modifications. By checking it before 19 19* and after copying a block of data, they can be protected against 19 20* modifications. 19 21* 19 22* Modules that set the lock should save proc_group_id, and then 19 23* put their group id there for the time they hold the lock. 19 24* if they do not actually install the, they should restore the group id. 19 25**/ 19 26 19 27 2 author aligned, /* validation data about table's author */ 19 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 19 29 3 lock bit (36), /* installation lock */ 19 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 19 31 3 update_authorization bit (1) unal, /* update only authorizations */ 19 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 19 33 3 pad bit (33) unaligned, 19 34 3 last_install_time fixed bin (71), 19 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 19 36 3 w_dir char (64), /* author's working directory */ 19 37 19 38 /* END INCLUDE FILE author.incl.pl1 */ 18 34 18 35 2 max_size fixed bin, /* max number of entries table can grow */ 18 36 2 current_size fixed bin, /* current size of table (in entries) */ 18 37 2 version fixed bin, /* version number of table (word 32) */ 18 38 2 freep fixed bin, /* free chain ptr. 0 if no free entries */ 18 39 2 n_projects fixed bin, /* number of entries actually used */ 18 40 2 pad_was_max_users bit (36) aligned, 18 41 2 max_units fixed bin, /* maximum number of login-units per session */ 18 42 2 pad_was_max_prim bit (36) aligned, 18 43 2 uwt_size fixed bin, /* size of User Weight Table */ 18 44 2 uwt (24) aligned, /* User Weight Table */ 18 45 3 initproc char (64) unaligned, /* user's initial procedure */ 18 46 3 units fixed bin, /* weight of initial procedure */ 18 47 2 system_admin (2) char (32) unal, /* system administrator ID */ 18 48 2 pad1 (4) fixed bin, /* padding to 466 wds */ 18 49 2 project (3258), /* The SAT entries. 255K segment. */ 18 50 3 pad (80) fixed bin; /* each entry is 80 words long */ 18 51 18 52 18 53 dcl 1 project based (satep) aligned, /* declaration of a single SAT entry */ 18 54 2 state fixed bin, /* state 1 = normal, 0 = free, 2 = deleted, 3 = renamed */ 18 55 2 project_id char (12) unaligned, /* project's name */ 18 56 2 project_dir char (64) unaligned, /* project's directory */ 18 57 2 pdt_ptr pointer, /* pointer to current PDT */ 18 58 2 max_users fixed bin, /* maximum number of users from project */ 18 59 2 n_users fixed bin, /* current number */ 18 60 2 at like user_attributes aligned, /* include user_attributes.incl.pl1 */ 18 61 2 admin (4) aligned, /* list of project's administrators */ 18 62 3 userid char (30) unal, /* administrator's user-id (personid.projectid) */ 18 63 3 pad char (2) unal, 18 64 2 cutoff char (1), /* if project is cut off, why. */ 18 65 2 min_ring fixed bin, /* lowest ring for project */ 18 66 2 max_ring fixed bin, /* highest ring for project */ 18 67 2 alias char (8) unal, /* project alias */ 18 68 2 group char (8) unal, /* default group for this project */ 18 69 2 grace_max fixed bin, /* maximum bump grace */ 18 70 2 audit bit (36), /* audit flags for project */ 18 71 2 project_authorization (2) bit (72), /* authorization of this project */ 18 72 2 groups (2) char (8) unal, /* authorized groups for this project */ 18 73 2 days_to_cutoff fixed bin (17) unaligned, /* these figures are as of last running of daily_summary */ 18 74 2 pct_balance fixed bin (17) unaligned, /* they are used for warning message printing only */ 18 75 2 dollars_to_cutoff float bin, /* and are not to be taken as up-to-date figures */ 18 76 2 pdir_quota fixed bin (17) unaligned, /* max pdir quota allowed for project */ 18 77 2 max_foreground fixed bin (9) unsigned unaligned, /* max simultaneous foreground and background */ 18 78 2 max_background fixed bin (9) unsigned unaligned, /* processes that a user on this project can have */ 18 79 2 abs_foreground_cpu_limit fixed bin (17) unaligned, /* time limit on foreground absentee jobs */ 18 80 2 rs_number fixed bin (9) unsigned unaligned, /* rate structure number (0=default rates ) */ 18 81 2 satpad1 fixed bin (9) unsigned unaligned, 18 82 2 satpad (1) bit (36) aligned, /* pad to 80 words */ 18 83 2 chain fixed bin; /* if free entry, chain */ 18 84 18 85 /* END INCLUDE FILE ... sat.incl.pl1 */ 2472 2473 /* BEGIN: sc_stat_.incl.pl1 * * * * * */ 20 2 20 3 20 4 /****^ HISTORY COMMENTS: 20 5* 1) change(87-02-04,GDixon), approve(87-05-25,MCR7690), 20 6* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 20 7* Add sc_stat_$vchn_requires_accept in support of DSA virtual channels. 20 8* 2) change(87-02-04,GDixon), approve(87-05-25,MCR7680), 20 9* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 20 10* Reorganized by type of data to improve readability. 20 11* END HISTORY COMMENTS */ 20 12 20 13 20 14 /* ACCESS NAMES */ 20 15 dcl ( 20 16 sc_stat_$exec_access_name, /* check MC access in an exec request */ 20 17 sc_stat_$unidentified_access_name /* check access if no one is logged in. */ 20 18 ) char(32) ext static; 20 19 20 20 /* PATHNAMES */ 20 21 dcl ( 20 22 sc_stat_$info_dir, /* admin info segs directory */ 20 23 sc_stat_$log_dir, /* as log segs directory */ 20 24 sc_stat_$mc_acs_dir, /* message coordinator ACS segments (.mcacs) dir */ 20 25 sc_stat_$sysdir /* system control directory */ 20 26 ) char(168) ext static; 20 27 20 28 /* OTHER CHAR STRINGS */ 20 29 dcl ( 20 30 sc_stat_$master_channel /* Master TTY channel. */ 20 31 ) char(6) aligned ext static; 20 32 20 33 /* LABELS */ 20 34 dcl ( 20 35 sc_stat_$admin_listener_exit_label, /* GO here to exit admin mode. Set to */ 20 36 /* ssu_$null_label unless */ 20 37 /* admin_listener is active. */ 20 38 sc_stat_$master_abort_label, /* GO here after fault that is not */ 20 39 /* attributable to a particular */ 20 40 /* command. */ 20 41 sc_stat_$system_shutdown_label /* GO here to shut down system */ 20 42 ) label variable ext static; 20 43 20 44 /* POINTERS TO */ 20 45 dcl ( 20 46 sc_stat_$admin_log_iocb, /* IOCB for admin log */ 20 47 sc_stat_$admin_log_write_ptr, /* DATA for log_write_ calls on the admin log */ 20 48 sc_stat_$admin_sci_ptr, /* DATA ssu_ for terminal currently executing */ 20 49 sc_stat_$as_log_write_ptr, /* DATA for log_write_ calls on as log, used */ 20 50 /* by sys_log_. */ 20 51 sc_stat_$initzer_ttyp, /* ENT mc_ate for initializer terminal */ 20 52 sc_stat_$master_iocb, /* IOCB for "master_i/o" */ 20 53 sc_stat_$master_sci_ptr, /* DATA ssu_ (permanent) for system control */ 20 54 sc_stat_$mc_ansp, /* HEAD of mc_anstbl */ 20 55 sc_stat_$mc_iocb, /* IOCB ptr for "mc_i/o" */ 20 56 sc_stat_$sv1_iocb, /* IOCB ptr for "severity1" */ 20 57 sc_stat_$sv2_iocb, /* IOCB ptr for "severity2" */ 20 58 sc_stat_$sv3_iocb /* IOCB ptr for "severity3" */ 20 59 ) ptr ext static; 20 60 20 61 /* SWITCHES */ 20 62 dcl ( 20 63 sc_stat_$Go, /* TRUE after answering service is listening*/ 20 64 sc_stat_$Go_typed, /* TRUE immediately after 'go' is typed */ 20 65 sc_stat_$Multics, /* TRUE after answering service started */ 20 66 sc_stat_$Multics_typed, /* TRUE immediately after 'mult' is typed */ 20 67 sc_stat_$Star_typed, /* TRUE if 'mult' and 'go' came from 'star' */ 20 68 sc_stat_$admin_listener_switch, /* TRUE if in the admin listener */ 20 69 sc_stat_$did_part1, /* TRUE if part 1 of system startup ec done */ 20 70 sc_stat_$did_part2, /* TRUE if part 2 of system startup ec done */ 20 71 sc_stat_$did_part3, /* TRUE if part 3 of system startup ec done */ 20 72 sc_stat_$mc_is_on, /* TRUE if message coordinator running */ 20 73 sc_stat_$no_operator_login, /* TRUE if operator login not required, or */ 20 74 /* if PNT not yet available. */ 20 75 sc_stat_$shutdown_typed, /* TRUE if 'shutdown' command in progress. */ 20 76 sc_stat_$test_mode, /* TRUE if in test environment */ 20 77 sc_stat_$vchn_requires_accept /* TRUE if vchn may only be used if accepted*/ 20 78 /* by operator signed on system console*/ 20 79 ) bit(1) aligned ext static; 20 80 20 81 20 82 /* END OF: sc_stat_.incl.pl1 * * * * * */ 2473 2474 /* BEGIN: sc_subsystem_info_.incl.pl1 * * * * * */ 21 2 21 3 /* format:style3,idind30 */ 21 4 21 5 /* Created 1984-10-24 BIM */ 21 6 /* Modified 1985-01-07, BIM: access control flags that track admin and X */ 21 7 /* Modified 1985-02-18, E. Swenson to save away abort_line procedure. */ 21 8 21 9 21 10 /****^ HISTORY COMMENTS: 21 11* 1) change(87-02-17,GDixon), approve(87-07-03,MCR7680), 21 12* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 21 13* Correct formatting problems. Add sc_subsystem_info.flags.dont_mask_calls 21 14* switch. 21 15* 2) change(87-07-03,GDixon), approve(87-07-03,MCR7680), 21 16* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 21 17* Removed dont_mask_calls flag. It is no longer needed to correctly perform 21 18* masking on a per-request basis. 21 19* END HISTORY COMMENTS */ 21 20 21 21 21 22 declare sc_subsystem_info_ptr pointer; 21 23 declare 1 sc_subsystem_info aligned based (sc_subsystem_info_ptr), 21 24 2 restriction_flags bit (36) aligned, /* copied from mc atep or fabricated */ 21 25 2 flags aligned, 21 26 3 no_real_tty bit (1) unaligned, /* for sc_admin_command_ */ 21 27 3 print_ready bit (1) unal, /* on for all except the system console, */ 21 28 /* instructs sc_process_command_line_ to deal */ 21 29 /* with the prompt */ 21 30 3 the_system_console bit (1) unal, /* syserr messages are printed here (but console */ 21 31 /* recover doesn't try to fix this) copied here */ 21 32 /* from the mc_ate to save other looking in there*/ 21 33 3 printer_offed bit (1) unal, /* suppress logging */ 21 34 3 pad bit (32) unaligned, 21 35 2 source_name char (32) unaligned, 21 36 2 area_ptr pointer, 21 37 2 mc_atep pointer, /* needed to play with attachments */ 21 38 2 real_iocb pointer, /* for sc_signal_io_handler_ */ 21 39 2 hangup_entry entry (pointer) variable, 21 40 /* called on io_no_permission. */ 21 41 2 real_execute_line entry (ptr, ptr, fixed bin (21), fixed bin (35)), 21 42 2 real_locate_request entry (ptr, char (*), ptr, fixed bin (35)), 21 43 2 access_control_name char (32) unaligned, 21 44 2 real_invoke_request entry, /* since MR11 ssu_ lacks the ability to abort a */ 21 45 /* single request, we have an invoke_request that*/ 21 46 /* handles a condition to unwind the request */ 21 47 2 abort_request_label label, /* go here (nonlocally) to unwind a single request */ 21 48 2 real_abort_line entry options (variable); 21 49 21 50 declare sc_ss_area area based (sc_subsystem_info.area_ptr); 21 51 21 52 /* The following defines the user flags for the request table. */ 21 53 21 54 declare sc_rf_ptr pointer; 21 55 declare 1 sc_request_flags unaligned based (sc_rf_ptr), 21 56 2 dont_parse_arguments bit, /* reply, intercom */ 21 57 2 obsolete bit, /* warn opr to not use it */ 21 58 2 dont_mask_calls bit, /* this runs without masking ev calls */ 21 59 2 requires_as bit, /* not before AS */ 21 60 2 requires_no_as bit, /* only before AS */ 21 61 2 complete_disks_first bit, /* try to mount disks */ 21 62 2 no_login_needed bit, /* sign_on */ 21 63 2 pad bit (5), 21 64 2 restriction_type fixed bin (6) unsigned; 21 65 /* index into restriction flag string */ 21 66 21 67 21 68 /* END OF: sc_subsystem_info_.incl.pl1 * * * * * */ 2474 2475 /* BEGIN send_mail_info include file */ 22 2 22 3 dcl send_mail_info_version_2 fixed bin init(2); 22 4 22 5 dcl 1 send_mail_info aligned, 22 6 2 version fixed bin, /* = 2 */ 22 7 2 sent_from char(32) aligned, 22 8 2 switches, 22 9 3 wakeup bit(1) unal, 22 10 3 mbz1 bit(1) unal, 22 11 3 always_add bit(1) unal, 22 12 3 never_add bit(1) unal, 22 13 3 notify bit(1) unal, 22 14 3 acknowledge bit(1) unal, 22 15 3 mbz bit(30) unal; 22 16 22 17 /* END send_mail_info include file */ 2475 2476 /* BEGIN INCLUDE FILE sys_log_constants.incl.pl1 ... 82-09-24 E. N. Kittlitz */ 23 2 23 3 23 4 /****^ HISTORY COMMENTS: 23 5* 1) change(87-04-22,GDixon), approve(87-06-10,MCR7708), 23 6* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 23 7* Added sl_info structure and associated named constants for use in calling 23 8* sys_log_$general. 23 9* END HISTORY COMMENTS */ 23 10 23 11 23 12 /* format: style4 */ 23 13 23 14 dcl ( 23 15 SL_TYPE_CRASH init (-3), /* type message with banner & kill system */ 23 16 SL_TYPE_BEEP init (-2), /* type message with banner */ 23 17 SL_TYPE init (-1), /* type message */ 23 18 SL_LOG_SILENT init (0), /* log message */ 23 19 SL_LOG init (1), /* log & type message */ 23 20 SL_LOG_BEEP init (2), /* log & type message with banner */ 23 21 SL_LOG_CRASH init (3) /* log & type message with banner & kill system */ 23 22 ) fixed bin internal static options (constant); 23 23 23 24 dcl 1 sl_info aligned automatic, 23 25 2 version char(8), /* structure version */ 23 26 2 arg_list_ptr ptr, /* arg_list with values */ 23 27 2 loc, 23 28 3 (mode, severity, code, caller, data, class, ioa_msg) fixed bin, 23 29 /* These flags control where the corresponding data item is found.*/ 23 30 /* -1: data appears in the corresponding structure element below */ 23 31 /* 0: data is not present anywhere */ 23 32 /* +N: data is Nth item in argument list pointed to by */ 23 33 /* sl_info.arg_list_ptr. Upon return, data copied into */ 23 34 /* corresponding structure element. */ 23 35 /* if data = +N: */ 23 36 /* argN is data_ptr, argN+1 is data_len */ 23 37 /* if ioa_msg = +N: */ 23 38 /* argN+1, ... argLAST are arguments substituted into the */ 23 39 /* ioa_msg control string. The formatted msg is returned. */ 23 40 2 flags, 23 41 3 ioa_msg_is_error_code bit(1) unal, /* ioa_ctl is error code. */ 23 42 3 flags_pad bit(35) unal, 23 43 2 mode fixed bin, /* as-mode, command-mode */ 23 44 2 severity fixed bin, /* error severity */ 23 45 2 code fixed bin(35), /* error table code */ 23 46 2 caller char(65) varying, /* caller refname$entryname*/ 23 47 2 data, /* binary data ptr/length */ 23 48 3 data_ptr ptr, 23 49 3 data_lth fixed bin(21), 23 50 2 class char(10) varying, /* binary data class */ 23 51 2 ioa_msg char(500) varying; /* formatted message text */ 23 52 23 53 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 23 54 /* */ 23 55 /* If data values (eg, sl_info.caller) are passed in the argument list, */ 23 56 /* their data types should be as shown in the structure above, except that */ 23 57 /* character strings should be char(*) nonvarying. */ 23 58 /* */ 23 59 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 23 60 23 61 /* value for sl_info.version */ 23 62 dcl SL_INFO_version_1 char (8) int static options(constant) init("sl_info1"); 23 63 23 64 /* values for sl_info.mode */ 23 65 dcl (SL_INFO_as_mode init(1), 23 66 SL_INFO_command_mode init(2)) fixed bin int static options(constant); 23 67 23 68 /* values for sl_info.loc.(severity code caller data class ioa_ctl arg) */ 23 69 dcl (SL_INFO_arg_given_in_structure init(-1), 23 70 SL_INFO_arg_not_given init(0)) fixed bin int static options(constant); 23 71 23 72 23 73 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 23 74 /* */ 23 75 /* The following static structures are commonly used in the Login Server */ 23 76 /* user control software. */ 23 77 /* */ 23 78 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 23 79 23 80 /* Syntax: call Abort (severity, code, ioa_ctl, args); */ 23 81 23 82 dcl 1 sl_info_sev_code_msg aligned int static options(constant), 23 83 2 version char(8) init ("sl_info1"), 23 84 2 arg_list_ptr ptr init (null), 23 85 2 loc, 23 86 3 (mode init (-1), 23 87 severity init ( 1), 23 88 code init ( 2), 23 89 caller init (-1), 23 90 data init ( 0), 23 91 class init ( 0), 23 92 ioa_msg init ( 3)) fixed bin, 23 93 2 flags, 23 94 3 ioa_msg_is_error_code bit(1) unal init ("0"b), 23 95 3 flags_pad bit(35) unal init ("0"b), 23 96 2 mode fixed bin init ( 1), 23 97 2 severity fixed bin init ( 0), 23 98 2 code fixed bin(35) init ( 0), 23 99 2 caller char(65) varying init (""), 23 100 2 data, 23 101 3 data_ptr ptr init (null), 23 102 3 data_lth fixed bin(21) init ( 0), 23 103 2 class char(10) varying init (""), 23 104 2 ioa_msg char(500) varying init (""); 23 105 23 106 /* Syntax: call Abort (severity, ioa_ctl, args); */ 23 107 23 108 dcl 1 sl_info_sev_msg aligned int static options(constant), 23 109 2 version char(8) init ("sl_info1"), 23 110 2 arg_list_ptr ptr init (null), 23 111 2 loc, 23 112 3 (mode init (-1), 23 113 severity init ( 1), 23 114 code init ( 0), 23 115 caller init (-1), 23 116 data init ( 0), 23 117 class init ( 0), 23 118 ioa_msg init ( 2)) fixed bin, 23 119 2 flags, 23 120 3 ioa_msg_is_error_code bit(1) unal init ("0"b), 23 121 3 flags_pad bit(35) unal init ("0"b), 23 122 2 mode fixed bin init ( 1), 23 123 2 severity fixed bin init ( 0), 23 124 2 code fixed bin(35) init ( 0), 23 125 2 caller char(65) varying init (""), 23 126 2 data, 23 127 3 data_ptr ptr init (null), 23 128 3 data_lth fixed bin(21) init ( 0), 23 129 2 class char(10) varying init (""), 23 130 2 ioa_msg char(500) varying init (""); 23 131 23 132 /* Syntax: call Abort (severity, ioa_ctl_as_error_code, args); */ 23 133 23 134 dcl 1 sl_info_sev_coded_msg aligned int static options(constant), 23 135 2 version char(8) init ("sl_info1"), 23 136 2 arg_list_ptr ptr init (null), 23 137 2 loc, 23 138 3 (mode init (-1), 23 139 severity init ( 1), 23 140 code init ( 0), 23 141 caller init (-1), 23 142 data init ( 0), 23 143 class init ( 0), 23 144 ioa_msg init ( 2)) fixed bin, 23 145 2 flags, 23 146 3 ioa_msg_is_error_code bit(1) unal init ("1"b), 23 147 3 flags_pad bit(35) unal init ("0"b), 23 148 2 mode fixed bin init ( 1), 23 149 2 severity fixed bin init ( 0), 23 150 2 code fixed bin(35) init ( 0), 23 151 2 caller char(65) varying init (""), 23 152 2 data, 23 153 3 data_ptr ptr init (null), 23 154 3 data_lth fixed bin(21) init ( 0), 23 155 2 class char(10) varying init (""), 23 156 2 ioa_msg char(500) varying init (""); 23 157 23 158 23 159 /* Syntax: call Abort (severity, code, error_return_label, ioa_ctl, args); */ 23 160 23 161 dcl 1 sl_info_sev_code_label_msg aligned int static options(constant), 23 162 2 version char(8) init ("sl_info1"), 23 163 2 arg_list_ptr ptr init (null), 23 164 2 loc, 23 165 3 (mode init (-1), 23 166 severity init ( 1), 23 167 code init ( 2), 23 168 caller init (-1), 23 169 data init ( 0), 23 170 class init ( 0), 23 171 ioa_msg init ( 4)) fixed bin, 23 172 2 flags, 23 173 3 ioa_msg_is_error_code bit(1) unal init ("0"b), 23 174 3 flags_pad bit(35) unal init ("0"b), 23 175 2 mode fixed bin init ( 1), 23 176 2 severity fixed bin init ( 0), 23 177 2 code fixed bin(35) init ( 0), 23 178 2 caller char(65) varying init (""), 23 179 2 data, 23 180 3 data_ptr ptr init (null), 23 181 3 data_lth fixed bin(21) init ( 0), 23 182 2 class char(10) varying init (""), 23 183 2 ioa_msg char(500) varying init (""); 23 184 23 185 /* Syntax: call Log_error (code, ioa_ctl, args); */ 23 186 23 187 dcl 1 sl_info_code_msg aligned int static options(constant), 23 188 2 version char(8) init ("sl_info1"), 23 189 2 arg_list_ptr ptr init (null), 23 190 2 loc, 23 191 3 (mode init (-1), 23 192 severity init (-1), 23 193 code init ( 1), 23 194 caller init (-1), 23 195 data init ( 0), 23 196 class init ( 0), 23 197 ioa_msg init ( 2)) fixed bin, 23 198 2 flags, 23 199 3 ioa_msg_is_error_code bit(1) unal init ("0"b), 23 200 3 flags_pad bit(35) unal init ("0"b), 23 201 2 mode fixed bin init ( 1), 23 202 2 severity fixed bin init ( 0), 23 203 2 code fixed bin(35) init ( 0), 23 204 2 caller char(65) varying init (""), 23 205 2 data, 23 206 3 data_ptr ptr init (null), 23 207 3 data_lth fixed bin(21) init ( 0), 23 208 2 class char(10) varying init (""), 23 209 2 ioa_msg char(500) varying init (""); 23 210 23 211 23 212 /* Syntax: call Trace (ioa_ctl, args); */ 23 213 23 214 dcl 1 sl_info_msg aligned int static options(constant), 23 215 2 version char(8) init ("sl_info1"), 23 216 2 arg_list_ptr ptr init (null), 23 217 2 loc, 23 218 3 (mode init (-1), 23 219 severity init (-1), 23 220 code init ( 0), 23 221 caller init (-1), 23 222 data init ( 0), 23 223 class init ( 0), 23 224 ioa_msg init ( 1)) fixed bin, 23 225 2 flags, 23 226 3 ioa_msg_is_error_code bit(1) unal init ("0"b), 23 227 3 flags_pad bit(35) unal init ("0"b), 23 228 2 mode fixed bin init ( 1), 23 229 2 severity fixed bin init ( 0), 23 230 2 code fixed bin(35) init ( 0), 23 231 2 caller char(65) varying init (""), 23 232 2 data, 23 233 3 data_ptr ptr init (null), 23 234 3 data_lth fixed bin(21) init ( 0), 23 235 2 class char(10) varying init (""), 23 236 2 ioa_msg char(500) varying init (""); 23 237 23 238 /* END INCLUDE FILE sys_log_constants.incl.pl1 */ 2476 2477 /* BEGIN INCLUDE FILE ... ttyp.incl.pl1 */ 24 2 24 3 dcl max_tty_type fixed bin static init (11); 24 4 24 5 dcl tty_dev_type (0:16) char (8) aligned int static init /* ASCII explanations of terminal type */ 24 6 ("Network", "1050", "2741", "TTY37", "TN300", "ARDS", "CORR2741", "TTY33", 24 7 "TTY38", "G115", "type10", "ASCII", "type12", "type13", "type14", "type15", "type16"); 24 8 24 9 /* Note that device type 0 is used for both absentee and network. Distingush some other way */ 24 10 24 11 /* END INCLUDE FILE ... ttyp.incl.pl1 */ 2477 2478 /* BEGIN INCLUDE FILE ... user_attributes.incl.pl1 TAC 10/79 */ 25 2 25 3 25 4 /****^ HISTORY COMMENTS: 25 5* 1) change(86-12-11,Brunelle), approve(87-07-13,MCR7741), 25 6* audit(87-04-19,GDixon), install(87-08-04,MR12.1-1056): 25 7* Add incl for abs_attributes.incl.pl1 to automatically include absentee 25 8* attribute switches. 25 9* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 25 10* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 25 11* A) Add USER_ATTRIBUTE_NAMES arrays. attribute_names.incl.pl1 can thereby 25 12* be deleted. 25 13* B) Add constants identifying attributes that can be changed by user at 25 14* login, etc. 25 15* END HISTORY COMMENTS */ 25 16 25 17 25 18 /* Modified 82-01-03 E. N. Kittlitz. to declare a complete level-1 structure */ 25 19 25 20 /* format: style4 */ 25 21 dcl 1 user_attributes aligned based, /* the user user_attributes */ 25 22 (2 administrator bit (1), /* 1 system administrator privileges */ 25 23 2 primary_line bit (1), /* 2 user has primary-line privileges */ 25 24 2 nobump bit (1), /* 2 user cannot be bumped */ 25 25 2 guaranteed_login bit (1), /* 4 user has guaranteed login privileges */ 25 26 2 anonymous bit (1), /* 5 used only in SAT. project may have anon.users */ 25 27 2 nopreempt bit (1), /* 6 used only in PDT. user not preemptable by others 25 28* . of same project (distinct from "nobump") */ 25 29 2 nolist bit (1), /* 7 don't list user on "who" */ 25 30 2 dialok bit (1), /* 8 user may have multiple consoles */ 25 31 2 multip bit (1), /* 9 user may have several processes */ 25 32 2 bumping bit (1), /* 10 in SAT. Can users in project bump each other? */ 25 33 2 brief bit (1), /* 11 no login or logout message */ 25 34 2 vinitproc bit (1), /* 12 user may change initial procedure */ 25 35 2 vhomedir bit (1), /* 13 user may change homedir */ 25 36 2 nostartup bit (1), /* 14 user does not want start_up.ec */ 25 37 2 sb_ok bit (1), /* 15 user may be standby */ 25 38 2 pm_ok bit (1), /* 16 user may be primary */ 25 39 2 eo_ok bit (1), /* 17 user may be edit_only */ 25 40 2 daemon bit (1), /* 18 user may login as daemon */ 25 41 2 vdim bit (1), /* 19 * OBSOLETE * user may change outer mdle */ 25 42 2 no_warning bit (1), /* 20 no warning message */ 25 43 2 igroup bit (1), /* 21 in SAT: this project may give its users individual groups 25 44* . in PDT: this user has an individual load control group */ 25 45 2 save_pdir bit (1), /* 22 save pdir after fatal process error */ 25 46 2 disconnect_ok bit (1), /* 23 ok to save user's disconnected processes */ 25 47 2 save_on_disconnect bit (1), /* 24 save them unless -nosave login arg is given */ 25 48 2 pad bit (12)) unaligned; 25 49 25 50 dcl USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 25 51 ("none", /* 0 */ 25 52 "administrator", /* 1 */ 25 53 "primary_line", /* 2 */ 25 54 "nobump", /* 3 */ 25 55 "guaranteed_login", /* 4 */ 25 56 "anonymous", /* 5 */ 25 57 "nopreempt", /* 6 */ 25 58 "nolist", /* 7 */ 25 59 "dialok", /* 8 */ 25 60 "multip", /* 9 */ 25 61 "bumping", /* 10 */ 25 62 "brief", /* 11 */ 25 63 "vinitproc", /* 12 */ 25 64 "vhomedir", /* 13 */ 25 65 "nostartup", /* 14 */ 25 66 "no_secondary", /* 15 */ 25 67 "no_prime", /* 16 */ 25 68 "no_eo", /* 17 */ 25 69 "daemon", /* 18 */ 25 70 "", /* 19 vdim OBSOLETE */ 25 71 "no_warning", /* 20 */ 25 72 "igroup", /* 21 */ 25 73 "save_pdir", /* 22 */ 25 74 "disconnect_ok", /* 23 */ 25 75 "save_on_disconnect"); /* 24 */ 25 76 25 77 dcl ALT_USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 25 78 ("null", /* 0 */ 25 79 "admin", /* 1 */ 25 80 "", "", /* 2 - 3 */ 25 81 "guar", /* 4 */ 25 82 "anon", /* 5 */ 25 83 "", "", /* 6 - 7 */ 25 84 "dial", /* 8 */ 25 85 "multi_login", /* 9 */ 25 86 "preempting", /* 10 */ 25 87 "", /* 11 */ 25 88 "v_process_overseer", /* 12 */ 25 89 "v_home_dir", /* 13 */ 25 90 "no_start_up", /* 14 */ 25 91 "no_sec", /* 15 */ 25 92 "no_primary", /* 16 */ 25 93 "no_edit_only", /* 17 */ 25 94 "op_login", /* 18 */ 25 95 "", /* 19 */ 25 96 "nowarn", /* 20 */ 25 97 "", "", "", /* 21 - 23 */ 25 98 "save"); /* 24 */ 25 99 25 100 dcl USER_ATTRIBUTES_always_allowed bit (36) aligned int static 25 101 options(constant) init("000000000010000000010000000000000000"b); 25 102 /* SAT/PDT attributes not needed for user to give (brief, no_warning) */ 25 103 25 104 dcl USER_ATTRIBUTES_default_in_pdt bit (36) aligned int static 25 105 options(constant) init("000000000010000000010000000000000000"b); 25 106 /* PDT value for (brief, no_warning) is default */ 25 107 25 108 dcl USER_ATTRIBUTES_settable_by_user bit (36) aligned int static 25 109 options(constant) init("000100000110010000010000000000000000"b); 25 110 /* user MIGHT set (bump, ns, brief, guar, no_warning) */ 25 111 26 1 /* BEGIN INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 26 2 26 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 26 4 /* */ 26 5 /* This include file describes the attributes of an absentee job. It is */ 26 6 /* used by user_table_entry.incl.pl1, abs_message_format.incl.pl1 */ 26 7 /* and PIT.incl.pl1. */ 26 8 /* */ 26 9 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 26 10 26 11 /****^ HISTORY COMMENTS: 26 12* 1) change(86-12-08,GDixon), approve(87-07-13,MCR7741), 26 13* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 26 14* Separated abs_attributes from the request structure 26 15* (abs_message_format.incl.pl1) so that the identical structure could be 26 16* used in the ute structure (user_table_entry.incl.pl1). 26 17* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 26 18* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 26 19* Added ABS_ATTRIBUTE_NAMES array. 26 20* 3) change(87-11-11,Parisek), approve(88-02-11,MCR7849), 26 21* audit(88-03-22,Lippard), install(88-07-13,MR12.2-1047): 26 22* Added the no_start_up flag. SCP6367 26 23* END HISTORY COMMENTS */ 26 24 26 25 dcl 1 user_abs_attributes aligned based, 26 26 2 restartable bit (1) unaligned, /* 1 if request may be started over from the beginning */ 26 27 2 user_deferred_until_time bit (1) unaligned, /* 1 if request was specified as deferred */ 26 28 2 proxy bit (1) unaligned, /* 1 if request submitted for someone else */ 26 29 2 set_bit_cnt bit (1) unaligned, /* 1 if should set bit count after every write call */ 26 30 2 time_in_gmt bit (1) unaligned, /* 1 if deferred_time is in GMT */ 26 31 2 user_deferred_indefinitely bit (1) unaligned, /* 1 if operator is to say when to run it */ 26 32 2 secondary_ok bit (1) unaligned, /* 1 if ok to log in as secondary foreground user */ 26 33 2 truncate_absout bit (1) unaligned, /* 1 if .absout is to be truncated */ 26 34 2 restarted bit (1) unaligned, /* 1 if job is restarted */ 26 35 2 no_start_up bit (1) unaligned, /* 1 if requested -ns */ 26 36 2 attributes_pad bit (26) unaligned; 26 37 26 38 dcl ABS_ATTRIBUTE_NAMES (10) char (28) varying int static options(constant) init( 26 39 "restartable", 26 40 "user_deferred_until_time", 26 41 "proxy", 26 42 "set_bit_cnt", 26 43 "time_in_gmt", 26 44 "user_deferred_indefinitely", 26 45 "secondary_ok", 26 46 "truncate_absout", 26 47 "restarted", 26 48 "no_start_up"); 26 49 26 50 /* END INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 26 51 25 112 25 113 25 114 /* END INCLUDE FILE ... user_attributes.incl.pl1 */ 2478 2479 /* BEGIN INCLUDE FILE ... user_table_entry.incl.pl1 */ 27 2 27 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 27 4 /* */ 27 5 /* This include file requires that the user include */ 27 6 /* user_attributes.incl.pl1 as well. It also includes */ 27 7 /* abs_attributes.incl.pl1 itself. */ 27 8 /* */ 27 9 /* This include file must be included to use absentee_user_table.incl.pl1, */ 27 10 /* answer_table.incl.pl1, and daemon_user_table.incl.pl1. */ 27 11 /* */ 27 12 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 27 13 27 14 /****^ HISTORY COMMENTS: 27 15* 1) change(81-12-21,Gilcrease), approve(86-03-27,MCR7370), 27 16* audit(86-06-23,Lippard), install(86-06-30,MR12.0-1082): 27 17* This comment for hcom. 27 18* 81-12-21 E. N. Kittlitz. derived from abs_user_tab.incl.pl1, 27 19* anstbl.incl.pl1, and dutbl.incl.pl1. 27 20* 82-01-02 E. N. Kittlitz. user_attributes.incl.pl1 changes 27 21* 84-04-04 BIM added privileged_dial_server and dial_server_ring 27 22* 84-07-12 BIM added min_process_authorization 27 23* 84-12-31 Keith Loepere added pdir_dir_quota 27 24* 85-01-16 by E. Swenson to add ute.session_uid 27 25* 2) change(85-11-16,Swenson), approve(87-07-13,MCR7737), 27 26* audit(87-04-14,GDixon), install(87-08-04,MR12.1-1056): 27 27* Added fields for DSA login server support. 27 28* 3) change(86-03-27,Gilcrease), approve(86-03-27,MCR7370), 27 29* audit(86-06-23,Lippard), install(86-06-30,MR12.0-1082): 27 30* Add truncate_absout and restarted bit for -truncate absout, SCP6297. 27 31* 4) change(86-04-09,Herbst), approve(87-07-13,MCR7697), 27 32* audit(87-04-14,GDixon), install(87-08-04,MR12.1-1056): 27 33* Added disconnection_rel_minutes. 27 34* 5) change(86-12-08,GDixon), approve(87-07-13,MCR7741), 27 35* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 27 36* Changed structure under ute.abs_attributes to use like structure in 27 37* abs_attributes.incl.pl1. This allows the same attributes to be used 27 38* in abs_message_format.incl.pl1 and pit.incl.pl1 as well as this include 27 39* file. 27 40* 6) change(87-04-14,GDixon), approve(87-07-13,MCR7741), 27 41* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 27 42* Move constants for ute.pw_flags.mask_ctl from answer_table.incl.pl1. 27 43* 7) change(87-04-16,GDixon), approve(87-07-13,MCR7741), 27 44* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 27 45* A) Global reorganization to locate things by type of data. 27 46* B) Eliminate ute.uflags.logged_in. 27 47* 8) change(87-05-10,GDixon), approve(87-07-13,MCR7741), 27 48* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 27 49* A) Reduced overlength person and project fields to proper length. 27 50* B) Adjusted dialed-console section to begin on even word boundary. 27 51* 9) change(87-05-13,GDixon), approve(87-07-13,MCR7741), 27 52* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 27 53* Add ute.line_type. 27 54* 10) change(87-11-19,Parisek), approve(88-02-11,MCR7849), 27 55* audit(88-02-23,Lippard), install(88-07-13,MR12.2-1047): 27 56* Added the lowest_ring element. Used the upper half of ute.highest_ring 27 57* for the storage. SCP6367 27 58* END HISTORY COMMENTS */ 27 59 27 60 /* format: style4 */ 27 61 27 62 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 27 63 /* */ 27 64 /* Each of the named sections below defines a type of data. Typing comes */ 27 65 /* from data associated with the ute entry itself, with the person, with */ 27 66 /* login argument data, from the main user of the data (eg, dialup_, */ 27 67 /* load_ctl_, login server). Each section begins on a double-word boundary */ 27 68 /* and is an even number of words long. The total structure is 300 decimal */ 27 69 /* words long. */ 27 70 /* */ 27 71 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 27 72 27 73 27 74 dcl UTE_version_4 fixed bin internal static options (constant) init (4); 27 75 27 76 dcl utep pointer automatic init (null); 27 77 27 78 dcl 1 ute based (utep) aligned, /* individual entry in one of the user control tables */ 27 79 27 80 /* Variables which give state of this entry */ 27 81 2 active fixed bin, /* state of entry. 0=>free. see dialup_values.incl.pl1 */ 27 82 2 process_type fixed bin, /* 1=interactive, 2=absentee, 3=daemon */ 27 83 2 ute_index fixed bin, /* index of ute in (anstbl autbl dutbl).entry array */ 27 84 2 next_free fixed bin, /* points to previous free entry */ 27 85 27 86 /* Information user gave about person_id associated with this entry. */ 27 87 2 person char (24) unal, /* user's name */ 27 88 2 project char (12) unal, /* project of absentee user */ 27 89 2 tag char (1) unal, /* instance tag - someday will be generated */ 27 90 2 tag_pad bit (27) unal, 27 91 2 anonymous fixed bin, /* 1 if anonymous, otherwise 0 */ 27 92 2 login_flags, /* flags for login data */ 27 93 3 cpw bit (1) unal, /* flag for wish to change password */ 27 94 3 generate_pw bit (1) unal, /* flag meaning -generate_pw (-gpw) was used. */ 27 95 3 special_pw unal, /* dial or slave */ 27 96 4 dial_pw bit (1) unal, /* true if dial -user */ 27 97 4 slave_pw bit (1) unal, /* true if slave -user */ 27 98 3 cdp bit (1) unal, /* flag for wish to change default project */ 27 99 3 cda bit (1) unal, /* flag to change default authorization */ 27 100 3 auth_given bit (1) unal, /* flag to mean -authorization was used. */ 27 101 3 noprint bit (1) unal, /* used at logout. inhibits printing. */ 27 102 3 operator bit (1) unaligned, /* user specified -operator on login command line */ 27 103 3 pw_pad bit (25) unal, /* spare parts */ 27 104 3 mask_ctl bit (2) unal, /* bits controlling pw mask. See constants, below */ 27 105 /* Must remain last in pw_flags so it does not */ 27 106 /* appear in PW_FLAG_VALUES array below. */ 27 107 2 generated_pw char (8) unal, /* user must type this as new password */ 27 108 2 old_password char (8) unal, /* must match user's previous password (value scrambled) */ 27 109 2 process_authorization bit (72), /* access_authorization of this process */ 27 110 27 111 /* Information user gave about process associated with this entry. */ 27 112 2 outer_module char (32) unal, /* Name of console dim */ 27 113 2 home_dir char (64) unal, /* initial home directory */ 27 114 2 init_proc char (64) unal, /* name of login responder */ 27 115 2 ip_len fixed bin (17) unal, /* length of initproc string */ 27 116 2 ss_len fixed bin (17) unal, /* length of subsystem string */ 27 117 2 ur_at like user_attributes aligned, /* bits on means attributes given by user */ 27 118 2 at like user_attributes aligned, /* bits on means attribute is on */ 27 119 2 initial_ring fixed bin, /* ring process will be started in */ 27 120 2 arg_count fixed bin, /* number of arguments to absentee control segment */ 27 121 2 ln_args fixed bin, /* length of string containing arguments */ 27 122 2 arg_lengths_ptr ptr, /* pointer to array of argument lengths */ 27 123 2 args_ptr ptr, /* pointer to arguments to absentee control segment */ 27 124 27 125 /* Most of the following information is relevant only to absentee processes */ 27 126 2 input_seg char (168) unal, /* pathname of absentee control segment */ 27 127 2 output_seg char (168) unal, /* pathname of absentee output file */ 27 128 2 request_id fixed bin (71), /* time request was entered - used as uid of request */ 27 129 2 reservation_id fixed bin (71), /* nonzero if job has a resource reservation */ 27 130 2 message_id bit (72), /* message segment id assoc with absentee request */ 27 131 2 deferred_time fixed bin (71), /* time at which absentee process should be created */ 27 132 2 max_cpu_time fixed bin (35), /* maximum number of seconds this process can run */ 27 133 2 queue fixed bin, /* -1=daemon;0=interactive or foreground;>0=queue no. 27 134* (but see uflags.adjust_abs_q_no). */ 27 135 2 real_queue fixed bin, /* real queue number; ute.queue gets fudged sometimes */ 27 136 2 abs_attributes aligned like user_abs_attributes, /* include abs_attributes.incl.pl1 */ 27 137 2 abs_flags, 27 138 3 abs_run bit (1) unal, /* on if job was started by abs run command */ 27 139 3 notify bit (1) unal, /* on if user wants notification at login and logout */ 27 140 3 abs_flags_pad bit (34) unal, 27 141 2 abs_group char (8) unal, /* original group before load_ctl_ moves it to absentee group */ 27 142 2 sender char (32) unal, /* name of RJE station that job is from */ 27 143 2 proxy_person char (28) unal, /* name of user who actually entered the request, if proxy */ 27 144 2 proxy_project char (9) unal, 27 145 2 proxy_project_pad char (3) unal, 27 146 2 abs_pad fixed bin, 27 147 27 148 /* Information about process actually created */ 27 149 2 proc_id bit (36), /* process id of absentee process */ 27 150 2 session_uid fixed bin (35), /* Unique authentication session id */ 27 151 2 process_authorization_range (2) bit (72) aligned, 27 152 2 audit bit (36), /* audit flags for user */ 27 153 2 lot_size fixed bin, /* Size of linkage offset table */ 27 154 2 kst_size fixed bin, /* Size of process known segment table */ 27 155 2 cls_size fixed bin, /* Size of process combined linkage */ 27 156 2 sus_channel fixed bin (71), /* event channel on which suspended process is blocked */ 27 157 2 lowest_ring fixed bin (17) unal, /* lowest ring permitted */ 27 158 2 highest_ring fixed bin (17) unal, /* highest ring permitted */ 27 159 2 pdir_lvix fixed bin (17) unal, /* index in disk table of lv where pdir is */ 27 160 2 pdir_quota fixed bin (17) unal, /* process directory quota */ 27 161 2 pdir_dir_quota fixed bin (17) unal, /* process directory quota for dirs */ 27 162 2 pdir_pad fixed bin(17) unal, 27 163 2 process_pad fixed bin, 27 164 27 165 /* Information about primary terminal associated with this entry */ 27 166 2 tty_name char (32) unal, /* absentee=>"abs1", etc. daemon=>"bk", etc. */ 27 167 2 terminal_type char (32) unaligned, /* terminal type */ 27 168 2 line_type fixed bin, /* line type */ 27 169 2 tty_id_code char (4) unal, /* "none" for absentee */ 27 170 2 network_connection_type fixed bin, /* see net_event_message.incl.pl1 */ 27 171 2 channel ptr unal, /* points to CDT entry for user, if any */ 27 172 27 173 /* Variables useful for dialed terminals */ 27 174 2 ndialed_consoles fixed bin, /* if master, number of slaves */ 27 175 2 dial_qualifier char (22) unal, /* first argument to dial command */ 27 176 2 dial_server_ring fixed bin (3) unsigned unaligned, /* dial server intends to attach dialing in channels at this ring. */ 27 177 2 dial_server_flags, 27 178 3 registered_dial_server bit (1) unal, /* process is a registered dial server */ 27 179 3 privileged_dial_server bit (1) unal, /* "1"b -> serves range of AIM classes */ 27 180 3 dial_server_flags_pad bit (13) unal, /* fill out the word */ 27 181 2 dial_ev_chn fixed bin (71), /* if master, control event channel */ 27 182 27 183 /* Information about usage/accounting. Device usage meters are in a 27 184* separate segment, "devtab" */ 27 185 2 pdtep ptr, /* ptr to user's pdt entry, where usage meters live */ 27 186 2 cpu_this_process fixed bin (71), /* cpu used so far this process */ 27 187 2 cpu_usage fixed bin (71), /* total cpu time used in this session */ 27 188 2 mem_usage fixed bin (71), /* memory usage for previous processes in session */ 27 189 2 mem_this_process fixed bin (71), /* memory usage at last update */ 27 190 2 last_update_time fixed bin (71), /* time of last account update */ 27 191 2 session_cost float bin, /* dollar cost of session, for printing in logout messages */ 27 192 2 ndevices fixed bin, /* Count of attached devices */ 27 193 2 device_head fixed bin, /* Table index of head of device chain */ 27 194 2 device_tail fixed bin, /* Table index of tail of device chain */ 27 195 2 rs_number fixed bin (6) unsigned unal, /* rate structure number */ 27 196 2 rs_number_pad bit(30) unal, 27 197 2 usage_pad fixed bin, 27 198 27 199 /* Information for dialup_ (control variables). */ 27 200 2 event fixed bin (71), /* event associated with channel or user manager */ 27 201 2 uprojp ptr, /* ptr to user project sat entry */ 27 202 2 login_time fixed bin (71), /* time when absentee user approved by lg_ctl_ */ 27 203 2 cant_bump_until fixed bin (71), /* bump-protection clock */ 27 204 2 recent_fatal_error_time fixed bin (71), /* time of first error in the suspected loop */ 27 205 2 recent_fatal_error_count fixed bin, /* counter to detect fatal process error loops */ 27 206 2 failure_reason fixed bin, /* why login refused 1=lg_ctl, 2=act_ctl, 3=load_ctl */ 27 207 2 count fixed bin, /* counter for logins and dialups */ 27 208 2 n_processes fixed bin, /* number of processes created in this session */ 27 209 2 lock_value fixed bin, /* number of locks set for this entry */ 27 210 2 login_result fixed bin, /* 0=logged in;1=hopeless,hang him up;2=allow another attempt */ 27 211 2 login_code char (8) unal, /* login command from LOGIN line */ 27 212 2 preempted fixed bin, /* if ^= 0 user preempted (never for abs) */ 27 213 2 destroy_flag fixed bin, /* >8 when awaiting destroy */ 27 214 2 logout_type char (4) unal, /* type of logout */ 27 215 2 logout_index fixed bin, /* to save logout handler index while waiting for termsgnl */ 27 216 2 disconnection_rel_minutes fixed bin (17) unal, /* disconnected this many minutes after login_time */ 27 217 2 next_disconnected_ate_index fixed bin (17) unal, /* thread of list of user's disconnected processes */ 27 218 2 work_class fixed bin, /* work class used by priority scheduler */ 27 219 2 group char (8) unal, /* party group identifier */ 27 220 2 whotabx fixed bin, /* index of user's entry in whotab */ 27 221 27 222 2 uflags, /* Miscellaneous flags */ 27 223 3 dont_call_init_admin bit (1) unal, /* Call overseer directly */ 27 224 3 ip_given bit (1) unal, /* user gave an initproc arg on login line */ 27 225 3 ss_given bit (1) unal, /* initial_procedure contains a subsystem name */ 27 226 3 lvs_attached bit (1) unal, /* set and used by the lv_request_ procedure */ 27 227 3 send_initial_string bit (1) unal, /* initial string should be sent after login line read */ 27 228 3 adjust_abs_q_no bit (1) unal, /* this is an absentee job; user_profile.queue is NOT true Q # */ 27 229 3 foreground_secondary_ok bit (1) unal, /* ok to login foreground absentee job as secondary */ 27 230 3 foreground_job bit (1) unal, /* job was originally from foreground queue */ 27 231 3 sus_sent bit (1) unal, /* sus_ ips signal has been sent to process */ 27 232 3 suspended bit (1) unal, /* process has responded to sus_ signal */ 27 233 3 ignore_cpulimit bit (1) unal, /* process is released, but timer can't be turned off */ 27 234 3 deferral_logged bit (1) unal, /* abs job deferral has already been logged once */ 27 235 3 save_if_disconnected bit (1) unal, /* user wants process preserved across hangups */ 27 236 3 disconnected bit (1) unal, /* process is disconnected from terminal */ 27 237 3 disconnected_list bit (1) unal, /* this ate is on a list of disconnected processes */ 27 238 3 proc_create_ok bit (1) unal, /* lg_ctl_ has set the process creation variables */ 27 239 3 activity_can_unbump bit (1) unal, /* only bump pending is for inactivity */ 27 240 3 fpe_causes_logout bit (1) unal, /* "1"b means don't try to new_proc after fatal process error */ 27 241 3 user_specified_immediate bit (1) unal, /* "1"b -> don't wait around for process destruction. */ 27 242 3 uflags_pad bit (17) unal, 27 243 27 244 /* Information used by load_ctl_ for the process */ 27 245 2 user_weight fixed bin, /* usually 10 - used in load control */ 27 246 2 standby_line fixed bin, /* 0=user has primary line, 1=standby user */ 27 247 2 bump_grace fixed bin (71), /* bump grace in microseconds */ 27 248 27 249 27 250 /* Information for login server */ 27 251 2 login_server_info, 27 252 3 our_handle bit (72) aligned, /* how LS refers to us. */ 27 253 3 his_handle bit (72) aligned, /* how we talk to LS */ 27 254 3 termination_event_channel fixed bin (71), /* for process termination notifications to the LS */ 27 255 3 response_event_channel fixed bin (71), /* for other communications with the LS */ 27 256 3 process_id bit (36) aligned, /* process_id of login server */ 27 257 2 ls_pad (5) fixed bin; /* pad to 300 decimal words */ 27 258 27 259 /* values for ute.process_type */ 27 260 27 261 dcl (PT_INTERACTIVE initial (1), 27 262 PT_ABSENTEE initial (2), 27 263 PT_DAEMON initial (3)) fixed bin internal static options (constant); 27 264 27 265 dcl PROCESS_TYPE_NAMES (0:3) char(12) varying int static options(constant) init( 27 266 "INVALID-TYPE", 27 267 "interactive", 27 268 "absentee", 27 269 "daemon"); 27 270 27 271 dcl TABLE_NAMES (0:3) char(20) int static options(constant) init( 27 272 "UNKNOWN-TABLE", 27 273 "answer_table", 27 274 "absentee_user_table", 27 275 "daemon_user_table"); 27 276 27 277 27 278 /* values for ute.pw_flags.mask_ctl */ 27 279 27 280 dcl (DO_MASK init ("00"b), 27 281 DONT_MASK init ("01"b), 27 282 DERIVE_MASK init ("10"b)) bit (2) internal static options (constant); 27 283 27 284 dcl MASK_CTL_NAMES (0:3) char(12) varying int static options(constant) init( 27 285 "do_mask", "dont_mask", "derive_mask", ""); 27 286 27 287 27 288 /* names for ute.pw_flags */ 27 289 27 290 dcl PW_FLAG_NAMES (9) char (12) varying int static options(constant) init( 27 291 "cpw", 27 292 "generate_pw", 27 293 "dial_pw", 27 294 "slave_pw", 27 295 "cdp", 27 296 "cda", 27 297 "auth_given", 27 298 "noprint", 27 299 "operator"); 27 300 27 301 /* names for ute.uflags */ 27 302 27 303 dcl UFLAG_NAMES (19) char (24) varying int static options (constant) init ( 27 304 "dont_call_init_admin", 27 305 "ip_given", 27 306 "ss_given", 27 307 "lvs_attached", 27 308 "send_initial_string", 27 309 "adjust_abs_q_no", 27 310 "foreground_secondary_ok", 27 311 "foreground_job", 27 312 "sus_sent", 27 313 "suspended", 27 314 "ignore_cpulimit", 27 315 "deferral_logged", 27 316 "save_if_disconnected", 27 317 "disconnected", 27 318 "disconnected_list", 27 319 "proc_create_ok", 27 320 "activity_can_unbump", 27 321 "fpe_causes_logout", 27 322 "user_specified_immediate"); 27 323 27 324 /* names for ute.abs_flags */ 27 325 27 326 dcl ABS_FLAG_NAMES (2) char (8) varying int static options (constant) init ( 27 327 "abs_run", 27 328 "notify"); 27 329 27 330 /* names of ute.dial_server_flags */ 27 331 27 332 dcl DIAL_SERVER_FLAG_NAMES (2) char (12) varying int static options (constant) init ( 27 333 "registered", 27 334 "privileged"); 27 335 27 336 /* values of ute.login_result */ 27 337 27 338 dcl LOGIN_RESULT_VALUES (0:2) char(24) varying int static options(constant) init( 27 339 "logged in", 27 340 "login failed, hangup", 27 341 "login failed, try again"); 27 342 27 343 /* END INCLUDE FILE ... user_table_entry.incl.pl1 */ 2479 2480 /* BEGIN INCLUDE FILE ... user_table_header.incl.pl1 */ 28 2 28 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 28 4 /* */ 28 5 /* This include file declares the header shared by the answer_table, */ 28 6 /* absentee_user_table and daemon_user_table include files. */ 28 7 /* */ 28 8 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 28 9 28 10 /****^ HISTORY COMMENTS: 28 11* 1) change(87-04-26,GDixon), approve(87-07-13,MCR7741), 28 12* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 28 13* Initial coding. 28 14* END HISTORY COMMENTS */ 28 15 28 16 dcl 1 ut_header aligned based, /* header shared by all user control tables. */ 28 17 2 header_version fixed bin, /* version of the header (3) */ 28 18 2 entry_version fixed bin, /* version of user table entries */ 28 19 2 user_table_type fixed bin, /* 1 interactive, 2 absentee, 3 daemon */ 28 20 2 header_length fixed bin, /* length of the header */ 28 21 2 max_size fixed bin, /* max number of entries in this table */ 28 22 2 current_size fixed bin, /* actual size of table (in entries) */ 28 23 2 number_free fixed bin, /* number of free entries in the table. */ 28 24 2 first_free fixed bin, /* index of first entry in the free list. */ 28 25 2 as_procid bit (36), /* process ID of user table manager process */ 28 26 2 ut_header_pad fixed bin; 28 27 28 28 /* END INCLUDE FILE ... user_table_header.incl.pl1 */ 2480 2481 /* BEGIN INCLUDE FILE ... whotab.incl.pl1 */ 29 2 29 3 /* Modified 740723 by PG to add security info */ 29 4 /* Modified April 1976 by T. Casey to add shift and shift start and end times */ 29 5 /* Modified May 1979 by T. Casey for MR7.0a to add foreground absentee variables */ 29 6 /* Modified June 1981 by E. N. Kittlitz to add n_rate_structures. */ 29 7 /* Modified December 1981 by E. N. Kittlitz to expand header. */ 29 8 /* Modified 84-11-14 by E. A. Ranzenbach to add "session" fiedld in place of obsolete system ID... */ 29 9 29 10 dcl 1 whotab based (whoptr) aligned, 29 11 2 mxusers fixed bin, /* max. number of users on system */ 29 12 2 n_users fixed bin, /* current number of users */ 29 13 2 mxunits fixed bin, /* maximun "load units" allowed */ 29 14 2 n_units fixed bin, /* current load */ 29 15 2 timeup fixed bin (71), /* time system was started */ 29 16 2 session char (8), /* AS state, same as anstbl.session */ 29 17 2 nextsd fixed bin (71), /* time we will shutdown */ 29 18 2 until fixed bin (71), /* projected time we start up again */ 29 19 2 lastsd fixed bin (71), /* time of last crash or shutdown */ 29 20 2 erfno char (8), /* if a crash, the error number */ 29 21 2 obsolete_why char (32), /* reason for last shutdown */ 29 22 2 installation_id char (32), /* name of installation */ 29 23 2 obsolete_message char (32), /* message for all users */ 29 24 2 abs_event fixed bin (71), /* event channel associated with absentee */ 29 25 2 abs_procid bit (36) aligned, /* process to whom messages about absentee are signalled */ 29 26 2 max_abs_users fixed bin, /* max number of absentee users */ 29 27 2 abs_users fixed bin, /* number of absentee users logged-in */ 29 28 2 n_daemons fixed bin, /* Number of daemon users logged in */ 29 29 2 request_channel fixed bin (71), /* System master channel for requests to AS. */ 29 30 2 request_process_id bit (36), /* Process ID of request dispatcher */ 29 31 2 shift fixed bin, /* current shift (copied from anstbl, for users to see) */ 29 32 2 next_shift_change_time fixed bin (71), /* time current shift ends */ 29 33 2 last_shift_change_time fixed bin (71), /* time current shift started */ 29 34 2 fg_abs_users fixed bin (17) unal, /* number of foreground absentee users */ 29 35 2 n_rate_structures fixed bin (9) unsigned unal, /* number of rate_structures defined at bootload */ 29 36 2 pad1 bit (9) unal, 29 37 2 pad (3) fixed bin, 29 38 2 version fixed bin, /* structure version */ 29 39 2 header_size fixed bin, /* length of header in words */ 29 40 2 entry_size fixed bin, /* length of entry in words */ 29 41 /* laste_adjust is used only by Answering Service programs */ 29 42 2 laste_adjust fixed bin, /* count of 32 wd blocks in hdr from header_extension_mbz1 */ 29 43 2 laste fixed bin, /* index of last entry in use (includes laste_adjust) */ 29 44 2 freep fixed bin (18) unsigned, /* index of first free entry. chained thru "chain" */ 29 45 29 46 /* whotab header extension: The header is extended from 64 words by 29 47* annexing whole user entries from the 'e' array. Each 'e' entry is 32 words 29 48* long. Each annexed block has its first word set to zero, indicating that no user entry is 29 49* present. This allows existing programs to function with old definitions of 29 50* whotab. Obviously no new header field can be more than 31 contiguous words in 29 51* length. In the Answering Service, all programs using whotab must be compiled 29 52* with the latest version. Only lg_ctl_ uses laste_adjust. */ 29 53 29 54 2 header_extension_mbz1 fixed bin, /* location 100o */ 29 55 2 n_abs (4) fixed bin, /* number of processes from each background queue */ 29 56 2 abs_qres (4) fixed bin, /* number of absentee positions reserved for each queue */ 29 57 2 abs_cpu_limit (4) fixed bin (35), /* current absentee cpu limits */ 29 58 2 abs_control, /* see absentee_user_table */ 29 59 3 mnbz bit (1) unal, /* must not be zero */ 29 60 3 abs_maxu_auto bit (1) unal, /* 1 if automatic */ 29 61 3 abs_maxq_auto bit (1) unal, /* 1 if automatic */ 29 62 3 abs_qres_auto bit (1) unal, /* 1 if automatic */ 29 63 3 abs_cpu_limit_auto bit (1) unal, /* 1 if automatic */ 29 64 3 queue_dropped (-1:4) bit (1) unal, /* 1 if queue dropped */ 29 65 3 abs_up bit (1) unal, /* 1 if absentee facility is running */ 29 66 3 abs_stopped bit (1) unal, /* 1 if absentee facility is stopped */ 29 67 3 control_pad bit (23) unal, 29 68 2 installation_request_channel fixed bin (71), /* IPC channel for install command */ 29 69 2 installation_request_pid bit (36), /* installation process identifier */ 29 70 2 sysid char (32), /* current system name */ 29 71 2 header_extension_pad1 (7) fixed bin, /* pad to size of e element, offset 137o */ 29 72 2 header_extension_mbz2 fixed bin, /* offset 140o */ 29 73 2 message char (124), /* message for all users */ 29 74 2 header_extension_mbz3 fixed bin, /* offset 200o */ 29 75 2 why char (124), /* reason for last shutdown */ 29 76 2 e (1000), /* offset 240o */ 29 77 3 active fixed bin, /* nonzero means logged in */ 29 78 3 person char (28) aligned, /* person name */ 29 79 3 project char (28), /* project id */ 29 80 3 anon fixed bin, /* 1 if anonymous user */ 29 81 3 padding fixed bin (71), 29 82 3 timeon fixed bin (71), /* time of login */ 29 83 3 units fixed bin, /* load units */ 29 84 3 stby fixed bin, /* 1 if stby */ 29 85 3 idcode char (4), /* tty id code */ 29 86 3 chain fixed bin (18) unsigned, /* chain for free list */ 29 87 3 proc_type fixed bin, /* 1 = interactive, 2 = absentee, 3 = daemon */ 29 88 3 group char (8), /* party-line group */ 29 89 3 fg_abs bit (1) unal, /* "1"b if foreground absentee user */ 29 90 3 disconnected bit (1) unaligned, /* "1"b if process is disconnected */ 29 91 3 suspended bit (1) unaligned, /* "1"b if process is suspended */ 29 92 3 pad2 bit (33) unal, 29 93 3 cant_bump_until fixed bin (71), /* protected from primary bump till here */ 29 94 3 process_authorization bit (72); /* access authorization of process */ 29 95 29 96 dcl WHOTAB_VERSION_1 fixed bin init (1) static options (constant); 29 97 29 98 /* END INCLUDE FILE ... whotab.incl.pl1 */ 2481 2482 2483 /* format: on */ 2484 2485 /* BEGIN MESSAGE DOCUMENTATION 2486* 2487* Message: 2488* lg_ctl_: login word is "QQQQ" 2489* 2490* S: as (severity1) 2491* 2492* T: $init 2493* 2494* M: If multics is typed, a random 4-digit login word 2495* is made up. 2496* 2497* A: If any system programmers are to be allowed access to the system 2498* during this special session, inform them of the login word. To allow 2499* normal use of Multics, type "word login". In order to start the absentee 2500* facility, which special sessions disable, type "abs start". 2501* 2502* 2503* Message: 2504* lg_ctl_: project.n_users = N for PROJECT (login PERSON) 2505* 2506* S: as (severity0) 2507* 2508* T: $run 2509* 2510* M: The value of project.n_users for project PROJECT went negative 2511* while attempting to login PERSON. The user was permitted login but 2512* there may be discrepancies which may affect future operations. 2513* 2514* A: $contact_sa 2515* 2516* 2517* Message: 2518* lg_ctl_$logout: called with active=N,{^}proc_create_ok for NAME.PROJ TTY ute MM||NN 2519* 2520* S: as (severity0) 2521* 2522* T: $run 2523* 2524* M: At attempt was made to logout a process which was not logged in. 2525* This is most likely the cause of a login error in the answering service. 2526* 2527* A: $contact_sa 2528* 2529* 2530* Message: 2531* lg_ctl_: project.n_users = N for PROJ (logout PERSON) 2532* 2533* S: as (severity0) 2534* 2535* T: $run 2536* 2537* M: The count of the active users on a project went negative when 2538* attempting to logout PERSON. This is most likely the result of a logic 2539* error in the answering service or a damaged PDT. 2540* 2541* A: $contact_sa 2542* 2543* 2544* Message: 2545* lg_ctl_: tracing turned on. 2546* 2547* S: as (severity1) 2548* 2549* T: $run 2550* 2551* M: A system administrator has enabled tracing of the module lg_ctl_. 2552* Debugging information will appear on the console. 2553* 2554* A: $ignore 2555* 2556* 2557* Message: 2558* lg_ctl_: tracing turned off. 2559* 2560* S: as (severity1) 2561* 2562* T: $run 2563* 2564* M: A system adminstrator has disabled tracing of the module lg_ctl_. 2565* 2566* A: $ignore 2567* 2568* 2569* Message: 2570* lg_ctl_: ERROR_MESSAGE. Error updating PNT entry of USER. 2571* 2572* S: as (severity2) 2573* 2574* T: $run 2575* 2576* M: The system was unable to update the PNT for the user. 2577* Login for the user was refused. 2578* 2579* A: $contact_sa 2580* 2581* 2582* Message: 2583* lg_ctl_: ERROR_MESSAGE. Unable to check access for channel CHANNEL. 2584* 2585* S: as (severity 1) 2586* 2587* T: $run 2588* 2589* M: The channel CHANNEL has the check_acs attribute set. However, 2590* it was not possible to examine the Access Control Segment for the 2591* reason noted in ERROR_MESSAGE. Login for the user attempting to use this 2592* channel was refused. 2593* 2594* A: $inform_sa 2595* 2596* 2597* Message: 2598* lg_ctl_: TYPE access to channel CHANNEL by NAME.PROJ denied by ACS. 2599* 2600* S: as (severity 0) 2601* 2602* T: $run 2603* 2604* M: The user NAME.PROJ attempted to use the TYPE command while 2605* dialed-up on channel CHANNEL. However, the access to the channel 2606* is restricted by Access Control Segment, and the user is not permitted 2607* to use the channel. 2608* 2609* A: $ignore 2610* 2611* 2612* Message: 2613* lg_ctl_: too many bad passwords for NAME.PROJ from CHANNEL (TYPE terminal "ID"). 2614* 2615* S: as (severity2) 2616* 2617* T: $run 2618* 2619* M: The user identified by NAME on the project PROJ has either forgotten 2620* his password or someone else is trying to guess it. The system has refused 2621* the login for an installation-specified number of times before this message 2622* is printed. The maximum number of times the password can be used 2623* incorrectly before this message is printed is stored in the segment 2624* installation_parms. 2625* 2626* A: $contact_sa 2627* 2628* 2629* Message: 2630* lg_ctl_: disconnected count for USER is N1 in cdte, N2 in pdte, n_processes=N3. 2631* 2632* S: as (severity1) 2633* 2634* T: $run 2635* 2636* M: The PDT entry for the user indicates that the user has a different 2637* number of disconnected processes than could actually be found in the 2638* answer_table. The PDT count is forced to the count of disconnected 2639* processes found in the answer_table. If this message occurs repeatedly 2640* for a given user, notify the system administrator. 2641* 2642* A: $ignore 2643* 2644* 2645* Message: 2646* lg_ctl_: ERROR_MESSAGE. Checksum failure reading PNT entry of USER. 2647* 2648* S: as (severity2) 2649* 2650* T: $run 2651* 2652* M: The PNT entry for USER is damaged. It may have to be recreated, 2653* or the entire PNT may have to be retrieved in special session. This 2654* can occur as a result of a damaged PNT, or due to a logic error in the 2655* answering service. 2656* 2657* A: $contact_sa 2658* 2659* 2660* Message: 2661* lg_ctl_: ERROR_MESSAGE. Error reading PNT entry of USER. 2662* 2663* S: as (severity2) 2664* 2665* T: $run 2666* 2667* M: This indicates that the system was unable to access the PNT. 2668* Login for the user was refused. 2669* 2670* A: $contact_sa 2671* Some or all users will be unable to log in. 2672* 2673* 2674* Message: 2675* lg_ctl_: ERROR_MESSAGE. Changing Mail Table default project for USER to PROJ 2676* 2677* S: as (severity2) 2678* 2679* T: $run 2680* 2681* M: USER.PROJ logged in with the -change_default_project control 2682* argument, but it was not possible to change his Mail Table entry 2683* for the reason noted in ERROR_MESSAGE. USER's default project was changed, 2684* though, but the Mail Table and the PNT are now inconsistent. 2685* 2686* A: $inform_sa 2687* 2688* 2689* Message: 2690* lg_ctl_: password used PERS.PROJ CHANNEL TERM_TYPE ID 2691* 2692* S: as (severity2) 2693* 2694* T: $run 2695* 2696* M: The system administrator has set a password trap on 2697* the password for the person PERS. This message is typed when the 2698* person tries to log in. The login was attempted from a TERM_TYPE terminal 2699* with identification code ID, using channel CHANNEL. 2700* 2701* A: Unless the system administrator has asked you to watch for 2702* this message, ignore it. The system administrator can locate this 2703* message in the log and is presumably watching for it. 2704* 2705* 2706* Message: 2707* lg_ctl_: sat.ht has "WWWW", SAT has "xxxx" at MM|NN. 2708* 2709* S: as (severity2) 2710* 2711* T: $run 2712* 2713* M: The SAT and its hash table are out of step or a storage system 2714* error has occurred. This could be the result of an incomplete reload. 2715* The system attempts to rehash the table and continue. 2716* 2717* A: $notify_sa 2718* 2719* 2720* Message: 2721* lg_ctl_: ERROR_MESSAGE. unable to rehash sat.ht: REASON 2722* 2723* S: as (severity2) 2724* 2725* T: $run 2726* 2727* M: An attempt to recreate the SAT hash table failed. The user 2728* attempting to log in was denied login. In all probably no users will 2729* be able to log in until the situation is repaired. 2730* 2731* A: $contact_sa 2732* 2733* 2734* Message: 2735* lg_ctl_: project PROJ, state N, still in sat.ht 2736* 2737* S: as (severity2) 2738* 2739* T: $run 2740* 2741* M: A user on a deleted project attempted to log in, and the supposedly 2742* deleted project was still in the SAT hash table. The user is refused login. 2743* The SAT and its hash table are out of step. The system continues operating. 2744* 2745* A: $inform 2746* 2747* 2748* Message: 2749* lg_ctl_: ERROR_MESSAGE. >sc1>pdt>PROJ.pdt 2750* 2751* S: as (severity2) 2752* 2753* T: $run 2754* 2755* M: All users on project PROJ are unable to log in because 2756* the project's pdt cannot be accessed for the reason ERROR_MESSAGE. 2757* 2758* A: $contact_sa 2759* If the file was lost due to a crash, it may be possible to retrieve it. 2760* If the file cannot be retrieved, the person in charge of the project or 2761* the system administrator has to regenerate the file. 2762* 2763* 2764* Message: 2765* lg_ctl_: project PROJECT has invalid rate_structure number N. Using rate_structure 0. 2766* 2767* S: as (severity2) 2768* 2769* T: $run 2770* 2771* M: The SAT entry for the project has an invalid rate_structure number. 2772* The user is allowed to log in, but is charged at the default rate (i.e. 2773* according to rate_structure 0) Notify the system administrator so that 2774* the SAT entry may be corrected. This message will occur for each login 2775* using project PROJECT. 2776* 2777* A: $contact_sa 2778* 2779* 2780* Message: 2781* lg_ctl_: PDT for project PROJECTID has its damage switch set. 2782* Login for user PERSONID refused. 2783* 2784* S: $as2 2785* 2786* T: $contact 2787* 2788* M: During a login attempt of user PERSONID on project PROJECTID, 2789* the system noticed the damage switch set on the PDT for this project. 2790* The login was denied. A system administrator should determine whether 2791* the PDT is in fact damaged. If not, he/she should turn off the damage 2792* switch for the PDT (i.e. switch_off damage >sc1>pdt>PROJECTID.pdt) If 2793* the PDT appears damaged, then it should be retrieved from backup tape 2794* or re-installed when the system is in special session. 2795* 2796* 2797* Message: 2798* lg_ctl_: no hash table at WWWWWW of PROJ.pdt 2799* 2800* S: as (severity2) 2801* 2802* T: $run 2803* 2804* M: A user is logging in to project PROJ. The project's pdt does not 2805* have a hash table, even though the pdt header says it does. The system 2806* attempts to log the user in anyway. Possibly the PDT has been damaged. 2807* 2808* A: $inform 2809* 2810* 2811* Message: 2812* lg_ctl_: user PERSON, state N, still in hash table of PROJ.pdt 2813* 2814* S: as (severity2) 2815* 2816* T: $run 2817* 2818* M: A deleted user attempted to log in to project PROJ, and his name was 2819* still in the hash table of the project's PDT. The user is refused login. 2820* The PDT has probably been damaged by a software malfunction. 2821* 2822* A: $inform 2823* 2824* 2825* Message: 2826* lg_ctl_: hash table of PROJ.pdt has PERS, pdt has PERS2, at MM|NN 2827* 2828* S: as (severity2) 2829* 2830* T: $run 2831* 2832* M: The PDT for PROJ is out of step with its hash table. 2833* The system attempts to log the user in. The PDT must be re-installed 2834* in order to correct the problem. 2835* 2836* A: $contact_sa 2837* 2838* 2839* Message: 2840* lg_ctl_: reduced pdir quota for PERSON.PROJECT from N (in PDTE) to M (in SATE) 2841* 2842* S: as (severity0) 2843* 2844* T: $run 2845* 2846* M: The value for process directory quota specified in the PDT entry 2847* for PERSON on project PROJECT was greater than the maximum allowed process 2848* directory quota specified in the SAT entry for PROJECT. The SAT value 2849* was used for this login. The project administrator for the project should 2850* set the value within the limits imposed by the system administrator. 2851* 2852* A: $ignore 2853* 2854* 2855* Message: 2856* lg_ctl_: breach of physical security by NAME.PROJ from CHANNEL (TYPE terminal "ID"). 2857* .br 2858* lg_ctl_: person authorization is AUTH_NUM (AUTH_STRING) 2859* .br 2860* lg_ctl_: terminal access class is AUTH_NUM (AUTH_STRING) 2861* 2862* S: as (severity2) 2863* 2864* T: $run 2865* 2866* M: The user identified in the first message by NAME on the project 2867* PROJ has somehow gotten access to a terminal with an access class higher 2868* than his own authorization. The next two messages give additional 2869* information, where AUTH_NUM is an encoding of the authorization or access 2870* class in numeric form and AUTH_STRING is the mnemonic form. The login is 2871* refused and the terminal is hung up. 2872* 2873* A: Notify the system security administrator. 2874* 2875* 2876* Message: 2877* lg_ctl_: raised initial ring for PERSON.PROJECT from N (in PDTE) to M (in SATE) 2878* 2879* S: as (severity0) 2880* 2881* T: $run 2882* 2883* M: The value for the initial ring specified in the PDT entry for 2884* PERSON on project PROJECT was lower than than allowed for the project 2885* in the SAT. The value in the SAT was used in logging in this user. 2886* The project adminstrator should change the value in the PDT to 2887* conform to the limits imposed by the system adminstrator. 2888* 2889* A: $ignore 2890* 2891* 2892* Message: 2893* lg_ctl_: lowered max ring for PERSON.PROJECT from N (in PDTE) to M (in SATE) 2894* 2895* S: as (severity0) 2896* 2897* T: $run 2898* 2899* M: The value for the max ring specified in the PDT entry for PERSON 2900* on project PROJECT was lower than the maximum allowed ring in the SAT 2901* for the project. The SAT value was used for this login. The project 2902* administrator should change the PDT value to conform to the limits 2903* imposed by the system administrator. 2904* 2905* 2906* Message: 2907* LOGIN PERSON.PROJECT PROC_TYPE CHANNEL (STATE) 2908* 2909* S: as (severity1) 2910* 2911* T: $run 2912* 2913* M: The user PERSON.PROJECT was successfully identified and 2914* authenticated on channel CHANNEL. The process type, PROC_TYPE, 2915* indicates the type of login and can be either "int", "dmn", "opr", 2916* or "Q N". These correspond to "interactive", "daemon", "operator", 2917* or "absentee" logins. "Q N" designates the absentee queue. STATE 2918* indicates the state of the login. It can either be "create", indicating 2919* that a process was created for the user; "connect loop", indicating that 2920* the user was queried as to what he/she wanted to do with respect to 2921* disconnected processes; or some other value indicating what was 2922* done to the user's disconnected processes. 2923* 2924* 2925* Message: 2926* LOGIN DENIED PERSON.PROJECT PROC_TYPE CHANNEL (REASON) 2927* 2928* S: as (severity1) 2929* 2930* T: $run 2931* 2932* M: An operator login was denied for PERSON.PROJECT on channel CHANNEL 2933* for the reason specified in REASON. The process type is opr for 2934* operator login attempts. 2935* 2936* 2937* Message: 2938* LOGOUT PERSON.PROJECT PROC_TYPE CHANNEL (REASON) 2939* 2940* S: as (severity1) 2941* 2942* T: $run 2943* 2944* M: The user, PERSON.PROJECT, on channel CHANNEL, with process 2945* type PROC_TYPE either logged out, or was logged out. The reason 2946* is specified in REASON. This user/channel logout did not 2947* affect a process. This can occur for slave dialed channels or 2948* channels dropped from message coordinator service. 2949* 2950* Message: 2951* lg_ctl_: PDT for project PROJECTID has its damage switch set. 2952* Login for user PERSONID refused. 2953* 2954* S: as (severity2) 2955* 2956* T: $contact 2957* 2958* M: During a login attempt of user PERSONID on project PROJECTID, 2959* the system noticed the damage switch set on the PDT for this project. 2960* The login was denied. A system administrator should determine whether 2961* the PDT is in fact damaged. If not, he/she should turn off the damage 2962* switch for the PDT (i.e. switch_off damage >sc1>pdt>PROJECTID.pdt) If 2963* the PDT appears damaged, then it should be retrieved from backup tape 2964* or re-installed when the system is in special session. 2965* 2966* 2967* END MESSAGE DOCUMENTATION */ 2968 2969 2970 end lg_ctl_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/27/89 1052.0 lg_ctl_.pl1 >spec>install>1015>lg_ctl_.pl1 2458 1 08/06/87 0913.4 absentee_user_table.incl.pl1 >ldd>include>absentee_user_table.incl.pl1 2459 2 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 2460 3 08/06/87 0913.0 answer_table.incl.pl1 >ldd>include>answer_table.incl.pl1 2461 4 08/06/87 0913.4 as_data_.incl.pl1 >ldd>include>as_data_.incl.pl1 2462 5 08/06/87 0913.4 as_data_definitions_.incl.pl1 >ldd>include>as_data_definitions_.incl.pl1 2463 6 09/09/75 2007.3 author_dcl.incl.pl1 >ldd>include>author_dcl.incl.pl1 6-10 7 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 2464 8 08/06/87 0913.0 cdt.incl.pl1 >ldd>include>cdt.incl.pl1 8-314 9 07/21/88 2036.0 fnp_types.incl.pl1 >ldd>include>fnp_types.incl.pl1 2465 10 08/06/87 0913.4 dialup_values.incl.pl1 >ldd>include>dialup_values.incl.pl1 2466 11 04/21/82 1211.8 hashst.incl.pl1 >ldd>include>hashst.incl.pl1 2468 12 08/06/87 0913.4 installation_parms.incl.pl1 >ldd>include>installation_parms.incl.pl1 12-148 13 11/21/79 1458.3 rcp_init_flags.incl.pl1 >ldd>include>rcp_init_flags.incl.pl1 2469 14 08/06/87 0913.4 line_types.incl.pl1 >ldd>include>line_types.incl.pl1 2470 15 09/13/84 0921.6 pdt.incl.pl1 >ldd>include>pdt.incl.pl1 15-29 16 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 2471 17 03/15/85 0953.1 pnt_entry.incl.pl1 >ldd>include>pnt_entry.incl.pl1 2472 18 08/06/87 1416.6 sat.incl.pl1 >ldd>include>sat.incl.pl1 18-34 19 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 2473 20 08/06/87 0913.5 sc_stat_.incl.pl1 >ldd>include>sc_stat_.incl.pl1 2474 21 08/06/87 0913.5 sc_subsystem_info_.incl.pl1 >ldd>include>sc_subsystem_info_.incl.pl1 2475 22 04/27/78 1504.4 send_mail_info.incl.pl1 >ldd>include>send_mail_info.incl.pl1 2476 23 08/06/87 0913.5 sys_log_constants.incl.pl1 >ldd>include>sys_log_constants.incl.pl1 2477 24 08/29/75 0838.6 ttyp.incl.pl1 >ldd>include>ttyp.incl.pl1 2478 25 08/06/87 0913.6 user_attributes.incl.pl1 >ldd>include>user_attributes.incl.pl1 25-112 26 07/14/88 2015.0 user_abs_attributes.incl.pl1 >ldd>include>user_abs_attributes.incl.pl1 2479 27 07/14/88 2015.0 user_table_entry.incl.pl1 >ldd>include>user_table_entry.incl.pl1 2480 28 08/06/87 0913.6 user_table_header.incl.pl1 >ldd>include>user_table_header.incl.pl1 2481 29 01/18/85 0953.2 whotab.incl.pl1 >ldd>include>whotab.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. DISC_STATE 000146 constant char(12) initial array packed unaligned dcl 307 ref 1033 1889 FTP_SERVICE constant fixed bin(17,0) initial dcl 8-259 ref 1029 1260 1874 LINE_BSC constant fixed bin(17,0) initial dcl 14-22 ref 2126 LINE_G115 constant fixed bin(17,0) initial dcl 14-22 ref 2124 LINE_HASP_OPR constant fixed bin(17,0) initial dcl 14-22 ref 2128 LINE_MC 015323 constant fixed bin(17,0) initial dcl 14-22 ref 2122 LINE_UNKNOWN constant fixed bin(17,0) initial dcl 14-22 ref 1300 1529 2165 ME 000144 constant char(7) initial packed unaligned dcl 317 set ref 1150* 1364* 1378* NL 015324 constant char(1) initial packed unaligned dcl 318 ref 625 NOW_DIALED constant fixed bin(17,0) initial dcl 10-76 ref 757 NOW_FREE constant fixed bin(17,0) initial dcl 10-76 ref 763 NOW_HAS_PROCESS constant fixed bin(17,0) initial dcl 10-76 ref 1277 NOW_LOGGED_IN constant fixed bin(17,0) initial dcl 10-76 ref 536 553 578 724 1014 1066 1132 1351 1876 2024 2058 PT_ABSENTEE constant fixed bin(17,0) initial dcl 27-261 set ref 440* 627 637 677 695 1821 1839 1928 2037 2089 2156 PT_DAEMON constant fixed bin(17,0) initial dcl 27-261 set ref 455* 641 709 2035 2160 PT_DIAL_SLAVE 000305 constant fixed bin(17,0) initial dcl 320 set ref 491* 595 620 667 1351 2149 PT_INTERACTIVE constant fixed bin(17,0) initial dcl 27-261 set ref 534* 620 635 667 721 788 1351 1753 1872 2149 P_cdtep parameter pointer dcl 380 ref 793 803 P_code parameter fixed bin(35,0) dcl 381 set ref 427 449 486 523 615* 2147* P_identical_userid parameter bit(1) dcl 1221 ref 1216 1225 P_message_flag parameter bit(1) dcl 1220 set ref 1216 1234 1244* P_operator_name parameter char packed unaligned dcl 822 set ref 813 826* 831 838* P_password parameter char(8) dcl 382 set ref 486 499 523 562 669* 1339 1565 P_process_type parameter fixed bin(17,0) dcl 2139 ref 2136 2148 P_reason parameter fixed bin(17,0) dcl 1219 in procedure "WARN_OF_ANOTHER_LOGIN" ref 1216 1225 P_reason parameter fixed bin(17,0) dcl 1053 in procedure "SCAN_ANSWER_TABLE" set ref 1043 1073 1079* 1086 P_reason parameter char packed unaligned dcl 383 in procedure "lg_ctl_" set ref 773 790* 793 805* 813 826* 831 838* P_reason parameter char packed unaligned dcl 2441 in procedure "AUDIT_LOGOUT" ref 2438 2443 2443 P_sc_subsystem_info_ptr parameter pointer dcl 820 ref 813 824 831 836 P_startflag parameter bit(1) dcl 384 ref 398 404 P_status parameter char packed unaligned dcl 385 set ref 427 438* 449 453* 629* 631* 637* 639* 667* P_success_flag parameter bit(1) dcl 2430 ref 2427 2432 P_success_sw parameter bit(1) dcl 821 set ref 813 826* P_text parameter varying char(168) dcl 386 set ref 486 523 623* 625* 635* 1093* P_utep parameter pointer dcl 387 ref 427 449 486 523 687 696 703 710 715 722 773 784 2146 RW_ACCESS constant bit(3) initial packed unaligned dcl 2-11 ref 910 910 SL_LOG 000142 constant fixed bin(17,0) initial dcl 23-14 set ref 408* 805* 826* 838* 846* 854* 905* 1150* 2242* 2250* SL_LOG_BEEP 000314 constant fixed bin(17,0) initial dcl 23-14 set ref 881* 975* 1364* 1378* 1435* 1548* 1606* 1610* 1618* 1629* 1636* 1659* 1671* 1678* 1684* 2232* SL_LOG_SILENT 000270 constant fixed bin(17,0) initial dcl 23-14 set ref 604* 725* 747* 912* 1945* 2354* 2382* SUCCESS constant bit(1) initial dcl 323 set ref 648* 659 TAG_UFT constant char(1) initial packed unaligned dcl 10-93 ref 1079 USECS_PER_DAY 000142 constant fixed bin(71,0) initial dcl 321 ref 1468 1487 1487 USER_ATTRIBUTES_always_allowed 000001 constant bit(36) initial dcl 25-100 ref 1716 1724 USER_ATTRIBUTES_default_in_pdt 000001 constant bit(36) initial dcl 25-104 ref 1721 USER_ATTRIBUTES_settable_by_user 000000 constant bit(36) initial dcl 25-108 ref 1719 1727 1730 UTE_SIZE constant fixed bin(17,0) initial dcl 3-120 ref 1065 1065 1131 1131 1142 1142 1186 1186 1188 1188 abs_flags 250 based structure level 2 dcl 27-78 abs_foreground_cpu_limit 376 based fixed bin(17,0) level 2 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 1841 1842 1842 abs_foreground_cpu_limit 115 based fixed bin(17,0) level 2 in structure "project" packed packed unaligned dcl 18-53 in procedure "lg_ctl_" ref 1840 abs_run 250 based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1906 abs_users 54 based fixed bin(17,0) level 2 dcl 29-10 set ref 698* 698 2039* 2039 access_class 12 based bit(72) array level 2 dcl 8-72 set ref 2078* 2214* 2243* 2244* access_control 50(09) based structure level 3 packed packed unaligned dcl 8-72 act_ctl_$check 000014 constant entry external dcl 198 ref 1926 active 240 based fixed bin(17,0) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 763* 2024* active based fixed bin(17,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 536 553 578 724 725* 757* 1014 1066 1132 1277 1351 1876 2058* addr builtin function dcl 193 ref 421 875 875 962 962 966 966 1020 1020 1065 1113 1113 1131 1142 1186 1188 1241 1241 1284 1284 1308 1308 1351 1351 1354 1354 1405 1478 1478 1502 1502 1539 1539 1603 1627 1629 1676 1693 1883 1883 addrel builtin function dcl 193 ref 1669 aim_check_$equal 000016 constant entry external dcl 199 ref 2084 aim_check_$greater_or_equal 000020 constant entry external dcl 200 ref 2214 aim_check_$in_range 000022 constant entry external dcl 201 ref 1819 2078 alias 74 based char(8) level 2 packed packed unaligned dcl 18-53 ref 1406 1604 always_add 11(02) 001137 automatic bit(1) level 3 packed packed unaligned dcl 22-5 set ref 954* 1238* anon 257 based fixed bin(17,0) array level 3 dcl 29-10 set ref 2022* anonymous 16 based fixed bin(17,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" ref 461 499 562 589 1066 1132 1280 1286 1330 1398 1451 1584 1646 1747 1782 1791 1801 1811 2016 2022 2210 2409 anonymous 30(04) based bit(1) level 3 in structure "project" packed packed unaligned dcl 18-53 in procedure "lg_ctl_" ref 1646 ans 000101 automatic char(64) packed unaligned dcl 327 set ref 1608* 1610* ansp 001124 automatic pointer initial dcl 3-53 set ref 402* 405 407 408 409 410 411 414 415 692* 693 706* 707 718* 719 781* 782 800* 801 3-53* 939 1064 1065 1130 1131 1142 1186 1188 1279 1468 1487 1487 1509 1552 1567 2021 2059 2143* 2144 2182 2182 2183 2410 anstbl based structure level 1 dcl 3-55 answer 000121 automatic char(200) dcl 328 set ref 957* 959* 962 962 966 966 1019* 1020 1020 1111* 1113 1113 1231* 1241 1241 1260* 1260* 1263 1282* 1284 1284 1306* 1308 1308 1476* 1478 1478 1500* 1502 1502 1534* 1537* 1539 1539 1882* 1883 1883 as_access_audit_$login 000026 constant entry external dcl 203 ref 2434 as_access_audit_$logout 000030 constant entry external dcl 204 ref 2452 as_data_$ansp 000314 external static pointer dcl 4-26 ref 402 691 692 705 706 717 718 780 781 799 800 2141 2143 as_data_$as_procid 000316 external static bit(36) dcl 4-27 ref 693 693 707 707 719 719 782 782 801 801 2144 2144 as_data_$default_weight 000320 external static fixed bin(35,0) dcl 4-34 ref 1965 as_data_$dft_user_ring 000322 external static fixed bin(3,0) dcl 4-36 ref 2367 2386 as_data_$g115_dim 000324 external static char(32) packed unaligned dcl 4-38 ref 2124 as_data_$ls_message_buffer_cur_lth 000354 external static fixed bin(18,0) dcl 4-86 set ref 2188* as_data_$max_user_ring 000326 external static fixed bin(3,0) dcl 4-41 ref 2377 2377 2390 as_data_$mrd_dim 000330 external static char(32) packed unaligned dcl 4-43 ref 2122 as_data_$pdtdir 000332 external static char(168) packed unaligned dcl 4-45 set ref 1627 1629 as_data_$rcpdir 000334 external static char(168) packed unaligned dcl 4-47 set ref 903* as_data_$rs_ptrs 000336 external static pointer array dcl 4-49 ref 975 975 1468 1468 1468 1468 1476 1476 1487 1487 1487 1487 1487 1487 1500 1500 as_data_$sat_htp 000340 external static pointer dcl 4-51 ref 1403 1403 1597 1597 1608 1608 as_data_$satp 000342 external static pointer dcl 4-52 ref 420 420 421 421 1405 1405 1603 1603 1608 1608 1608 1608 1960 1960 1961 1961 1961 1961 as_data_$suffix 000344 external static char(2) array packed unaligned dcl 4-53 ref 1109 as_data_$teens_suffix 000346 external static char(2) array packed unaligned dcl 4-55 ref 1107 as_data_$tty_dim 000350 external static char(32) packed unaligned dcl 4-57 ref 2118 2120 as_data_$whoptr 000352 external static pointer dcl 4-60 ref 405 405 414 414 698 698 698 698 700 700 700 700 712 712 712 712 759 759 759 759 760 760 760 760 763 763 764 764 764 764 765 765 765 765 766 766 1635 1635 1997 1997 1997 1997 1998 1998 1998 1998 2002 2002 2003 2003 2003 2003 2008 2008 2008 2008 2011 2011 2012 2012 2012 2012 2016 2016 2018 2018 2019 2019 2020 2020 2021 2021 2022 2022 2023 2023 2024 2024 2025 2025 2026 2026 2028 2028 2029 2029 2031 2031 2032 2032 2032 2032 2032 2032 2035 2035 2035 2035 2039 2039 2039 2039 2040 2040 2044 2044 2044 2044 2045 2045 as_error_table_$already_in_msg 000132 external static fixed bin(35,0) dcl 242 ref 1087 as_error_table_$already_in_notify_msg 000134 external static fixed bin(35,0) dcl 243 ref 1227 as_error_table_$already_in_warn_msg 000136 external static fixed bin(35,0) dcl 244 ref 1225 as_error_table_$bad_anon_pw 000140 external static fixed bin(35,0) dcl 245 ref 502 565 as_error_table_$bad_password 000142 external static fixed bin(35,0) dcl 246 ref 1374 as_error_table_$bad_personid 000144 external static fixed bin(35,0) dcl 247 ref 1359 as_error_table_$bad_project 000146 external static fixed bin(35,0) dcl 248 ref 1600 as_error_table_$breach 000150 external static fixed bin(35,0) dcl 249 ref 2217 as_error_table_$cant_give_dft_auth 000152 external static fixed bin(35,0) dcl 250 ref 1823 2091 as_error_table_$cant_give_that_authorization 000154 external static fixed bin(35,0) dcl 251 ref 1821 2089 as_error_table_$dft_auth_changed 000156 external static fixed bin(35,0) dcl 252 set ref 1425* as_error_table_$dft_proj_changed 000160 external static fixed bin(35,0) dcl 253 set ref 1412* as_error_table_$dialup_error 000162 external static fixed bin(35,0) dcl 254 ref 882 1365 1379 1611 1660 as_error_table_$illegal_hd_arg 000164 external static fixed bin(35,0) dcl 255 ref 1972 as_error_table_$illegal_ip_arg 000166 external static fixed bin(35,0) dcl 256 ref 2278 as_error_table_$illegal_om_arg 000170 external static fixed bin(35,0) dcl 257 ref 2104 as_error_table_$illegal_save_arg 000172 external static fixed bin(35,0) dcl 258 ref 1764 as_error_table_$illegal_ss_arg 000174 external static fixed bin(35,0) dcl 259 ref 2314 as_error_table_$last_login_msg 000176 external static fixed bin(35,0) dcl 260 set ref 1289* as_error_table_$login_anon_msg 000200 external static fixed bin(35,0) dcl 261 set ref 1281* as_error_table_$login_msg 000202 external static fixed bin(35,0) dcl 262 set ref 1280* as_error_table_$long_ip_arg 000204 external static fixed bin(35,0) dcl 263 ref 2329 as_error_table_$long_ss_arg 000206 external static fixed bin(35,0) dcl 264 ref 2333 as_error_table_$multiple_login_msg 000210 external static fixed bin(35,0) dcl 265 set ref 1106* as_error_table_$must_change 000212 external static fixed bin(35,0) dcl 266 ref 1463 1479 as_error_table_$must_use_generate_pw 000214 external static fixed bin(35,0) dcl 267 ref 1455 1465 1481 as_error_table_$n_disconnected_procs_msg 000216 external static fixed bin(35,0) dcl 268 set ref 1015* 1878* as_error_table_$no_change 000220 external static fixed bin(35,0) dcl 269 ref 1416 1429 1561 as_error_table_$no_daemon_bit 000222 external static fixed bin(35,0) dcl 270 ref 477 as_error_table_$no_disconnected_procs 000224 external static fixed bin(35,0) dcl 271 set ref 1004* as_error_table_$no_line_permission 000226 external static fixed bin(35,0) dcl 272 ref 508 572 as_error_table_$no_name 000230 external static fixed bin(35,0) dcl 273 ref 1327 as_error_table_$no_primary 000232 external static fixed bin(35,0) dcl 274 ref 1850 as_error_table_$not_in_pdt 000234 external static fixed bin(35,0) dcl 275 ref 462 1703 as_error_table_$password_changed 000236 external static fixed bin(35,0) dcl 276 set ref 1570* as_error_table_$password_expired 000240 external static fixed bin(35,0) dcl 277 ref 1503 as_error_table_$password_expired_msg 000242 external static fixed bin(35,0) dcl 278 set ref 1474* as_error_table_$password_locked 000244 external static fixed bin(35,0) dcl 279 ref 1554 as_error_table_$password_probe1_mail_msg 000246 external static fixed bin(35,0) dcl 280 set ref 945* as_error_table_$password_probe1_msg 000250 external static fixed bin(35,0) dcl 281 set ref 1524* as_error_table_$password_probe_mail_msg 000252 external static fixed bin(35,0) dcl 282 set ref 947* as_error_table_$password_probe_msg 000254 external static fixed bin(35,0) dcl 283 set ref 1526* as_error_table_$password_unused_too_long_msg 000256 external static fixed bin(35,0) dcl 284 set ref 1498* as_error_table_$pdt_missing 000260 external static fixed bin(35,0) dcl 285 ref 1630 as_error_table_$ring_too_high 000264 external static fixed bin(35,0) dcl 287 ref 2396 as_error_table_$ring_too_low 000262 external static fixed bin(35,0) dcl 286 ref 2373 as_error_table_$special_sess_msg 000266 external static fixed bin(35,0) dcl 288 set ref 409* as_error_table_$user_fg_cpu_limit 000270 external static fixed bin(35,0) dcl 289 ref 1846 as_error_table_$user_max_bg 000272 external static fixed bin(35,0) dcl 290 ref 1913 as_error_table_$user_max_fg 000274 external static fixed bin(35,0) dcl 291 ref 1899 as_procid 10 based bit(36) level 3 in structure "anstbl" dcl 3-55 in procedure "lg_ctl_" ref 693 707 719 782 801 2144 as_procid defined bit(36) dcl 5-17 in procedure "lg_ctl_" ref 693 707 719 782 801 2144 astty_$tty_force 000024 constant entry external dcl 202 ref 1020 1113 1284 1308 1478 1502 1539 1883 asu_$blast_user 000032 constant entry external dcl 205 ref 1263 asu_$format_ftp_msg 000034 constant entry external dcl 206 ref 1260 asu_$write_message 000036 constant entry external dcl 207 ref 1004 1412 1425 1570 at 30 based structure level 2 in structure "project" dcl 18-53 in procedure "lg_ctl_" ref 1716 1724 at 13 based structure level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 1716 1721 1724 at 100 based structure level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1719* 1719 1721* 1721 1724* 1724 1727 1730* 1730 1732* 1732 attributes 50 based structure level 3 packed packed unaligned dcl 8-72 audit 74 001002 automatic bit(36) level 3 in structure "pnte" dcl 376 in procedure "lg_ctl_" set ref 1811* audit 101 based bit(36) level 2 in structure "project" dcl 18-53 in procedure "lg_ctl_" set ref 1811* 1813 audit 304 based bit(36) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1811* 1813* audit_access_error 50(01) based bit(1) level 4 packed packed unaligned dcl 8-72 ref 2209 auth_given 17(06) based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1584 1821 2089 author based structure level 2 dcl 6-9 author_dcl based structure level 1 dcl 6-9 authorization 000203 automatic bit(72) array dcl 329 set ref 1789* 1790* 1791* 1793* 1795* 1799* 1800* 1801* 1803* 1805* authorization_string 000211 automatic char(200) packed unaligned dcl 330 set ref 2236* 2240* 2242* 2244* 2248* 2250* autp 001122 automatic pointer initial dcl 1-26 set ref 1-26* back_thread 001346 automatic fixed bin(17,0) dcl 1123 set ref 1129* 1140 1142 1143* bad_pw_line_type 53 001002 automatic fixed bin(17,0) level 3 dcl 376 set ref 943* 1529 1531 bad_pw_term_id 52 001002 automatic char(4) level 3 dcl 376 set ref 941* 1534* 1537* bad_pw_term_type 54 001002 automatic char(32) level 3 dcl 376 set ref 942* 1528 brief 100(10) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1016 1277 1412 1425 1570 1879 bstemp 000273 automatic bit(36) dcl 331 set ref 1727* 1732 cant_bump_until 404 based fixed bin(71,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" ref 2028 cant_bump_until 274 based fixed bin(71,0) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 2028* cda 17(05) based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1420 cdp 17(04) based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1401 1433 cdte based structure level 1 dcl 8-72 cdtep 001126 automatic pointer dcl 8-41 set ref 506 517 517 518 518 570 803* 805 805 805 809 810 903 905 912 941 942 943 957 959 992 993 995 995 1016 1020* 1024 1029 1033 1113* 1140 1144 1144 1149 1150 1151 1153 1170 1175 1194 1284* 1308* 1478* 1502* 1539* 1754 1754 1763 1874 1874 1879 1883* 1889 2076 2078 2080 2081 2084 2122 2124 2126 2128 2149* 2151* 2165 2165 2167 2167 2170 2173 2209 2214 2243 2244 2411 2413 chain 267 based fixed bin(18,0) array level 3 unsigned dcl 29-10 set ref 765* 2012 channel 341 based pointer level 2 packed packed unaligned dcl 27-78 ref 1259 2149 channel_threads based structure level 1 dcl 8-249 char64 000274 automatic char(64) packed unaligned dcl 332 set ref 2271* 2322* 2339 clock builtin function dcl 193 ref 406 411 cls_size 71 based fixed bin(17,0) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 1954 cls_size 307 based fixed bin(17,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1954* code 000314 automatic fixed bin(35,0) dcl 333 in procedure "lg_ctl_" set ref 875* 880 881* 903* 904 905* 962* 963 963 963 966* 970 970 970 1004* 1113* 1241* 1244 1244 1244 1284* 1298* 1299 1308* 1351* 1354* 1356 1357 1362 1364* 1368 1378* 1403* 1404 1412* 1425* 1434* 1435 1435* 1539* 1570* 1597* 1599 1608* 1609 1627* 1629* 1674* 1675 2170* 2171 2236* 2237 2237 2237* 2244* 2245 2245 2245* code parameter fixed bin(35,0) dcl 922 in procedure "check_daemon_source_acs" set ref 918 925* coded_type 000315 automatic fixed bin(17,0) dcl 334 set ref 2170* 2171* 2412 convert_access_class_$maximum 000044 constant entry external dcl 210 ref 1795 convert_access_class_$minimum 000046 constant entry external dcl 211 ref 1805 convert_access_class_$to_string_range_short 000052 constant entry external dcl 213 ref 2244 convert_access_class_$to_string_short 000050 constant entry external dcl 212 ref 2236 convert_status_code_ 000054 constant entry external dcl 215 ref 618 866 cpw 17 based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1337 1454 1459 1558 cur_line_type 113(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 8-72 ref 943 2165 2167 2413 current_access_class 114 based bit(72) array level 2 dcl 8-72 set ref 2080* 2084* current_access_class_valid 75(28) based bit(1) level 3 packed packed unaligned dcl 8-72 set ref 2076 2081* current_size 36 based fixed bin(17,0) level 2 in structure "sat" dcl 18-32 in procedure "lg_ctl_" ref 420 current_size 36 based fixed bin(17,0) level 2 in structure "pdt" dcl 15-27 in procedure "lg_ctl_" ref 1691 current_size 5 based fixed bin(17,0) level 3 in structure "anstbl" dcl 3-55 in procedure "lg_ctl_" ref 1064 1130 current_terminal_type 101 based char(32) level 2 packed packed unaligned dcl 8-72 set ref 942 2165 2167* 2170* current_time 126 based fixed bin(71,0) level 2 dcl 3-55 set ref 939 1279* 1468 1487 1487 1509 1552 1567 2021 2059 2410 daemon 100(17) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 476 date_time_$format 000056 constant entry external dcl 216 ref 1279 1288 1523 debg 000316 automatic char(8) initial dcl 335 set ref 335* 618* 631 639 644 1004* 1098* 1412* 1425* 1570* 1926* 1980* 2432 default_person_authorization 72 001002 automatic bit(72) level 3 dcl 376 set ref 962* 966* 1423* 1589 default_project 34 001002 automatic char(16) level 3 dcl 376 set ref 965* 1371 1388 1410* 1434 1434 1435* default_ring 56 based fixed bin(17,0) level 2 packed packed unaligned dcl 15-58 ref 2361 deferral_logged 431(11) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 659 663* dial_pw 17(02) based bit(1) level 4 packed packed unaligned dcl 27-78 ref 896 dialup_flags 75(18) based structure level 2 packed packed unaligned dcl 8-72 disconnect_ok 30(22) based bit(1) level 3 in structure "project" packed packed unaligned dcl 18-53 in procedure "lg_ctl_" ref 1740 disconnect_ok 100(22) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1740* 1747* 1754 1763 disconnected 431(13) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" ref 1079 1089 1139 1256 disconnected 273(01) based bit(1) array level 3 in structure "whotab" packed packed unaligned dcl 29-10 in procedure "lg_ctl_" set ref 2032* disconnected_ate_index 120 based fixed bin(17,0) level 2 packed packed unaligned dcl 8-72 set ref 993* 1140* 1175 1194* disconnected_proc_command 126 based fixed bin(12,0) level 2 packed packed unsigned unaligned dcl 8-72 ref 995 995 1016 1024 1033 1874 1879 1889 display_access_class_ 000040 constant entry external dcl 208 ref 2235 display_access_class_$range 000042 constant entry external dcl 209 ref 2243 dont_call_init_admin 72 based bit(1) level 3 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 2293 dont_call_init_admin 431 based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 2293* 2300* e 240 based structure array level 2 dcl 29-10 entry 200 based structure array level 2 dcl 3-55 set ref 1065 1131 1142 1186 1188 errmsg 000320 automatic varying char(168) dcl 336 set ref 635 637 641 1926* 1980* error_table_$bad_password 000276 external static fixed bin(35,0) dcl 292 ref 1368 error_table_$checksum_failure 000300 external static fixed bin(35,0) dcl 293 ref 1362 error_table_$id_not_found 000302 external static fixed bin(35,0) dcl 294 ref 1357 error_table_$messages_off 000304 external static fixed bin(35,0) dcl 295 ref 963 970 1244 error_table_$out_of_sequence 000306 external static fixed bin(35,0) dcl 296 set ref 400* error_table_$smallarg 000310 external static fixed bin(35,0) dcl 297 ref 2237 2245 error_table_$wakeup_denied 000312 external static fixed bin(35,0) dcl 298 ref 963 970 1244 failure_reason 411 based fixed bin(17,0) level 2 dcl 27-78 set ref 616 679* 684* 1099* 1931* fg_abs 273 based bit(1) array level 3 packed packed unaligned dcl 29-10 set ref 2032* 2040* 2045* fg_abs_users 66 based fixed bin(17,0) level 2 packed packed unaligned dcl 29-10 set ref 700* 700 2044* 2044 first_pass 000373 automatic bit(1) dcl 337 set ref 536* 648 2176* flags 40 001002 automatic structure level 3 in structure "pnte" dcl 376 in procedure "lg_ctl_" flags 50 based structure level 2 in structure "cdte" dcl 8-72 in procedure "lg_ctl_" flonginfo 000374 automatic char(100) dcl 338 set ref 618* 619 619 623 625 629 631* 641* 644* 667 fnpe based structure level 1 dcl 8-200 foreground_secondary_ok 431(06) based bit(1) level 3 packed packed unaligned dcl 27-78 ref 1849 found_identical_userid 001332 automatic bit(1) dcl 1054 set ref 1061* 1076* 1079* 1086 four_digits 000100 automatic picture(4) packed unaligned dcl 189 set ref 406* 407 freep 77 based fixed bin(18,0) level 2 unsigned dcl 29-10 set ref 765 766* 2002 2011 2012* generate_pw 17(01) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" ref 1454 generate_pw 40(07) 001002 automatic bit(1) level 4 in structure "pnte" packed packed unaligned dcl 376 in procedure "lg_ctl_" set ref 1454 1463 1479 group 426 based char(8) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" ref 2026 group 271 based char(8) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 2026* group_id 001300 automatic char(32) packed unaligned dcl 921 in procedure "check_daemon_source_acs" set ref 924* 925* group_id 001246 automatic char(32) packed unaligned dcl 890 in procedure "check_channel_acs" set ref 902* 903* guaranteed_login 100(03) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1734 hash_$search 000060 constant entry external dcl 217 ref 1403 1597 1674 hcs_$get_user_access_modes 000062 constant entry external dcl 218 ref 903 hcs_$initiate 000064 constant entry external dcl 220 ref 1627 header based structure level 2 dcl 3-55 high_ring 55 based fixed bin(17,0) level 2 dcl 15-58 set ref 2382 2382* 2390 highest_ring 312(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 27-78 set ref 2400* home_dir 34 based char(64) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 1976 home_dir 36 based char(64) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1970 1976* ht_relp 377 based fixed bin(18,0) level 2 dcl 15-27 set ref 1664 1668 1669 1671* htable based structure level 1 dcl 11-6 htp 001130 automatic pointer initial dcl 2467 set ref 2467* i 000425 automatic fixed bin(17,0) dcl 339 in procedure "lg_ctl_" set ref 409* 410 420* 421* 619* 623 625 957* 959* 962 962 966 966 1064* 1065* 1111* 1113* 1282* 1284* 1306* 1308* 1403* 1405 1476* 1478* 1500* 1502* 1534* 1537* 1539* 1597* 1603 1664* 1674* 1676 1691* 1693* 1840* 1841 1841* 1842* 1842 1844 1844 1855* 1856 1856* 1857* 1857 1859 1859 1907* 1908 1908* 1909* 1909 1911 1911 1960* 1961 1961* 2284* 2287* 2288 2288* 2291 2291 2292 2317* 2321* 2324* 2326 2327 2339 2339 2340 2359* 2361* 2363* 2363 2367 2367* 2370 2377 2377* 2378 i 001347 automatic fixed bin(17,0) dcl 1124 in procedure "BUILD_DISCONNECTED_LIST" set ref 1130* 1131 1140 1142 1143* id 4 based char(4) level 2 dcl 11-6 ref 1670 1670 id_code 000426 automatic char(4) dcl 340 set ref 975* 1231* 1282* 1548* 2025 2158* 2162* 2173* 2232* idcode 266 based char(4) array level 3 dcl 29-10 set ref 2025* index builtin function dcl 193 ref 2287 init_proc 56 based char(64) level 2 packed packed unaligned dcl 27-78 set ref 1961 2271 2291* 2298 2339* initial_procedure 14 based char(64) level 2 dcl 15-58 ref 2287 2291 2322 initial_ring 101 based fixed bin(17,0) level 2 dcl 27-78 set ref 2358 2359 2370 2370 2378* 2394 initproc 46 based char(64) array level 3 packed packed unaligned dcl 18-32 ref 1961 installation_parms based structure level 1 dcl 12-33 installation_parms_part_1 based structure level 1 dcl 12-40 installation_parms_resource_array_part based structure array level 1 unaligned dcl 12-144 ioa_$rs 000066 constant entry external dcl 221 ref 409 957 959 1019 1093 1111 1231 1282 1306 1476 1500 1534 1537 1882 ioa_$rsnnl 000070 constant entry external dcl 222 ref 924 961 965 1240 1303 1531 2167 ip defined pointer dcl 5-21 ref 975 1468 1468 1476 1487 1487 1487 1500 ip_given 431(01) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" ref 2276 2328 ip_given 72(01) based bit(1) level 3 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 2284 ip_len 73 based fixed bin(17,0) level 2 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 2284 2322 ip_len 76 based fixed bin(17,0) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 2271 2292* 2298 2298 2301* 2301 2327 2339 kst_size 70 based fixed bin(17,0) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 1953 kst_size 306 based fixed bin(17,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1953* l 000427 automatic fixed bin(17,0) dcl 341 set ref 1019* 1020* 1093* 1231* 1241 1241 1260* 1260* 1882* 1883* last_bad_pw_reported 40(08) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 940* 970* 973* 1541* 1545 last_login_line_type 115(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 15-58 set ref 1295 1300 1303 2413* last_login_time 112 based fixed bin(71,0) level 2 dcl 15-58 set ref 1287 1288* 2410* last_login_type 115 based fixed bin(17,0) level 2 packed packed unaligned dcl 15-58 set ref 1295 1297 1300 2412* last_login_unit 114 based char(4) level 2 dcl 15-58 set ref 1306* 2411* last_term_type 000430 automatic char(32) packed unaligned dcl 342 set ref 1300* 1303* 1306* laste 76 based fixed bin(17,0) level 2 dcl 29-10 set ref 2003* 2003 2008 laste_adjust 75 based fixed bin(17,0) level 2 dcl 29-10 ref 2008 length builtin function dcl 193 ref 517 518 619 623 1331 1370 1371 1386 1388 li 001372 automatic fixed bin(17,0) dcl 1163 set ref 1177* 1194* line_type 33 based fixed bin(17,0) level 2 packed packed unaligned dcl 8-72 ref 2122 2124 2126 2128 line_types 000002 constant char(16) initial array packed unaligned dcl 14-54 set ref 1303* 1531* 2167* ll 001373 automatic fixed bin(17,0) dcl 1163 set ref 1170* 1177* load_ctl_ 000072 constant entry external dcl 223 ref 1980 load_ctl_$unload 000074 constant entry external dcl 224 ref 730 lock 40(03) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 1552 login 50(12) based bit(1) level 4 packed packed unaligned dcl 8-72 ref 570 login_code 416 based char(8) level 2 packed packed unaligned dcl 27-78 ref 1323 login_flags 17 based structure level 2 dcl 27-78 login_result 415 based fixed bin(17,0) level 2 dcl 27-78 set ref 519* 604 614 648 659 663 675* 677* 682* 1097* 1928* 1930* 2060* login_state 000440 automatic char(12) packed unaligned dcl 343 set ref 1008* 1033* 1323* 1889* 1925* 2432* 2434* login_time 402 based fixed bin(71,0) level 2 dcl 27-78 set ref 1192 1192 2059* login_tries 505 based fixed bin(17,0) level 3 dcl 12-33 ref 975 login_word 44 based char(8) level 2 packed packed unaligned dcl 3-55 set ref 407* 408* 415* logout_reason 000443 automatic char(12) packed unaligned dcl 344 set ref 2443* 2445* 2447 2447* 2449 2449* 2452* logout_type 422 based char(4) level 2 packed packed unaligned dcl 27-78 ref 2445 long 001200 automatic char(100) dcl 861 set ref 866* 868 lot_size 305 based fixed bin(17,0) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1952* lot_size 67 based fixed bin(17,0) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 1952 low_ring 56(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 15-58 set ref 2354 2354* 2363 2401 lowest_ring 312 based fixed bin(17,0) level 2 packed packed unaligned dcl 27-78 set ref 2401* lp1 001364 automatic pointer dcl 1162 set ref 1186* 1187 1192 1197 1204 lp2 001366 automatic pointer dcl 1162 set ref 1188* 1192 1197 1198 1199 lpp 001370 automatic pointer dcl 1162 set ref 1174* 1196 1199* 1204* lx1 001374 automatic fixed bin(17,0) dcl 1163 set ref 1175* 1186 1198 1205* lx2 001375 automatic fixed bin(17,0) dcl 1163 set ref 1187* 1188 1194 1196 1205 mail_table_initializer_$set_dft_proj 000076 constant entry external dcl 225 ref 1434 max builtin function dcl 193 ref 2363 2401 max_auth 001550 automatic bit(72) dcl 2207 set ref 2210* 2212* 2214* 2235* 2236* max_background 361(27) based fixed bin(9,0) level 2 in structure "user" packed packed unsigned unaligned dcl 15-58 in procedure "lg_ctl_" ref 1908 1909 1909 max_background 114(27) based fixed bin(9,0) level 2 in structure "project" packed packed unsigned unaligned dcl 18-53 in procedure "lg_ctl_" ref 1907 max_cpu_time 244 based fixed bin(35,0) level 2 dcl 27-78 ref 1844 max_foreground 361(18) based fixed bin(9,0) level 2 in structure "user" packed packed unsigned unaligned dcl 15-58 in procedure "lg_ctl_" ref 1856 1857 1857 max_foreground 114(18) based fixed bin(9,0) level 2 in structure "project" packed packed unsigned unaligned dcl 18-53 in procedure "lg_ctl_" ref 1855 max_ring 73 based fixed bin(17,0) level 2 dcl 18-53 set ref 2382 2382* 2386 2388 mc_check_access_$log_in_as_daemon 000100 constant entry external dcl 226 ref 925 mcode 000446 automatic fixed bin(35,0) initial dcl 345 set ref 345* 462* 466* 467 477* 502* 508* 520* 565* 572* 615 618* 882* 1087* 1093* 1225* 1227* 1229* 1327* 1359* 1365* 1374* 1379* 1416* 1429* 1455* 1463* 1465* 1479* 1481* 1503* 1554* 1561* 1600* 1611* 1630* 1660* 1703* 1764* 1821* 1823* 1846* 1850* 1899* 1913* 1926* 1927 1972* 1980* 1981 2089* 2091* 2104* 2217* 2278* 2314* 2329* 2333* 2373* 2396* merge_access_audit_flags_ 000102 constant entry external dcl 227 ref 1811 message_lng 112 based fixed bin(17,0) level 2 dcl 3-55 set ref 410* message_update_time 110 based fixed bin(71,0) level 2 dcl 3-55 set ref 411* min builtin function dcl 193 ref 1842 1857 1909 1948 2390 min_ring 72 based fixed bin(17,0) level 2 dcl 18-53 set ref 2354 2354* 2363 2401 mod builtin function dcl 193 ref 406 975 1109 mode 001256 automatic bit(36) dcl 891 set ref 899* 903* 906* 910 mpxe based structure level 1 dcl 8-221 multip 100(08) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 998 1025 1893 must_change 40(05) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 1461 1568* n_background 361(09) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 15-58 ref 1911 n_bad_pw 42 001002 automatic fixed bin(17,0) level 3 dcl 376 set ref 937* 937 n_bad_pw_since_good 43 001002 automatic fixed bin(17,0) level 3 dcl 376 set ref 938* 938 945 957 959* 975 1522 1524 1534 1537* 1545* n_daemons 55 based fixed bin(17,0) level 2 dcl 29-10 set ref 712* 712 2035* 2035 n_disconnected 362(09) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 15-58 set ref 994 1019* 1019 1149 1150* 1151* 1874 1882* 1882 n_disconnected_procs 126(24) based fixed bin(12,0) level 2 packed packed unsigned unaligned dcl 8-72 set ref 992* 1144* 1144 1149 1150* 1151 1153 1170 n_foreground 361 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 15-58 ref 1859 n_good_pw 41 001002 automatic fixed bin(17,0) level 3 dcl 376 set ref 1508* 1508 n_interactive 362 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 15-58 ref 1893 n_processes 001333 automatic fixed bin(17,0) dcl 1055 in procedure "SCAN_ANSWER_TABLE" set ref 1062* 1072* 1072 1103 1105* 1105 1107 1107 1107 1109 1111* n_processes 001350 automatic fixed bin(17,0) dcl 1125 in procedure "BUILD_DISCONNECTED_LIST" set ref 1128* 1138* 1138 1150* n_projects 41 based fixed bin(17,0) level 2 dcl 18-32 set ref 1608* n_rate_structures 66(18) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 29-10 ref 1635 n_units 3 based fixed bin(17,0) level 2 dcl 29-10 set ref 760* 760 1998* 1998 n_users 1 based fixed bin(17,0) level 2 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 759* 759 1997* 1997 n_users 27 based fixed bin(17,0) level 2 in structure "project" dcl 18-53 in procedure "lg_ctl_" set ref 599 604 604* 734 747 747* name 2 based char(32) level 2 dcl 8-72 set ref 805* 903 905* 912* next_disconnected_ate_index 424(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 27-78 set ref 1142* 1187 1196* 1197* 1197 1198* no_warning 100(19) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1256 nobump 100(02) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1734* nochange 40(04) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 1401 1420 1558 nolist 100(06) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 2000 nosave_arg 75(22) based bit(1) level 3 packed packed unaligned dcl 8-72 ref 1754 null builtin function dcl 193 ref 422 595 691 705 717 732 780 799 1-26 3-53 2467 27-76 1174 1260 1624 1628 1651 1686 1691 1691 1695 1698 1701 2141 2151 octal_auth_string 000447 automatic char(32) dcl 346 set ref 2235* 2242* 2243* 2250* ok 001257 automatic bit(1) dcl 892 set ref 910* 912 915 old_password 22 based char(8) level 2 packed packed unaligned dcl 27-78 ref 1337 old_pnte 000662 automatic structure level 1 dcl 375 set ref 1384* outer_module 57 based char(32) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" ref 2117 outer_module 26 based char(32) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 2101 2116 2117* 2118 2118 2120* 2122* 2124* 2126* 2128* p 001352 automatic pointer dcl 1126 in procedure "BUILD_DISCONNECTED_LIST" set ref 1131* 1132 1132 1132 1132 1132 1139 p 000460 automatic pointer dcl 347 in procedure "lg_ctl_" set ref 1065* 1066 1066 1066 1066 1073 1077 1079 1079 1240 1240 1241 1256 1256 1259 p_status_code parameter fixed bin(35,0) dcl 860 set ref 857 866* part_1 based structure level 2 dcl 12-33 password 2 001002 automatic char(32) level 3 in structure "pnte" dcl 376 in procedure "lg_ctl_" set ref 1565* password 11 based char(8) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" set ref 499 499* 562 562* password_change_interval 2042 based fixed bin(17,0) level 3 dcl 12-33 set ref 1468 1468 1476* password_changed_flag 000462 automatic bit(1) initial packed unaligned dcl 348 set ref 348* 875* 1566* password_expiration_interval 2043 based fixed bin(17,0) level 3 dcl 12-33 set ref 1487 1487 1487 1500* password_timelock 64 001002 automatic fixed bin(71,0) level 3 dcl 376 set ref 1552 pdir_quota 376(18) based fixed bin(17,0) level 2 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" set ref 1945 1945* 1948 1950 pdir_quota 313(18) based fixed bin(17,0) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1948* 1950* pdir_quota 114 based fixed bin(17,0) level 2 in structure "project" packed packed unaligned dcl 18-53 in procedure "lg_ctl_" set ref 1943 1945 1945* 1948 pdt based structure level 1 dcl 15-27 pdt_htp 000010 internal static pointer initial dcl 302 set ref 1669* 1670 1670 1674* pdt_name 000463 automatic char(32) packed unaligned dcl 349 set ref 961* 962* 965* 966* 1240* 1241* 1626* 1627* pdt_ptr 24 based pointer level 2 dcl 18-53 set ref 422* 1624 1624 1633* pdtdir based char(168) packed unaligned dcl 5-23 set ref 1627* 1629* pdtep 354 based pointer level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1706* pdtep 000474 automatic pointer dcl 350 in procedure "lg_ctl_" set ref 499 499 562 562 994 1019 1019 1149 1150 1151 1287 1288 1295 1295 1297 1300 1300 1303 1306 1651* 1676* 1677 1678 1683 1684 1684* 1686* 1691 1691 1693* 1694 1695 1695* 1698* 1701 1706 1716 1721 1724 1745 1789 1799 1841 1842 1842 1856 1857 1857 1859 1874 1882 1882 1893 1908 1909 1909 1911 1945 1945 1948 1950 1952 1953 1954 1976 1980* 2117 2284 2284 2287 2291 2293 2319 2321 2322 2322 2322 2354 2354 2361 2363 2382 2382 2390 2401 2410 2411 2412 2413 pdtp 000476 automatic pointer dcl 351 set ref 1624* 1627* 1628 1633 1664 1668 1669 1669 1671 1676 1691 1693 person 4 based char(24) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 518 604* 725* 747* 881* 899 901 924* 957* 959* 961* 965* 975* 1066 1066 1093* 1132 1132 1150* 1231* 1231* 1240* 1282* 1326 1331 1351 1354 1364* 1370* 1370 1378* 1386* 1386 1548* 1644 1659* 1945* 2018 2232* 2354* 2382* person 137 based char(20) level 3 in structure "cdte" packed packed unaligned dcl 8-72 in procedure "lg_ctl_" set ref 518* 518 805* 809* person 241 based char(28) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 764* 2016* 2018* person_authorization 66 001002 automatic bit(72) array level 3 dcl 376 set ref 1793 1803 2212 person_id 2 based char(24) level 2 dcl 15-58 set ref 1683 1684* 1695 pm_ok 100(15) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1849 pnt_entry based structure level 1 dcl 17-22 pnt_manager_$admin_get_entry 000104 constant entry external dcl 228 ref 1354 pnt_manager_$login_get_entry 000106 constant entry external dcl 229 ref 1351 pnt_manager_$update_entry 000110 constant entry external dcl 230 ref 875 pnte 001002 automatic structure level 1 dcl 376 set ref 875 875 1351 1351 1354 1354 1384 pntep 001132 automatic pointer dcl 17-21 set ref 1980* private 1 001002 automatic structure level 2 dcl 376 proc_create_ok 431(15) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 724 725* 1987* proc_type 270 based fixed bin(17,0) array level 3 dcl 29-10 set ref 2029* process_authorization 24 based bit(72) level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" set ref 1241* 1423 1586* 1589* 1782* 1819* 2031 2078* 2080 2084* process_authorization 276 based bit(72) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 2031* process_authorization_range 300 based bit(72) array level 2 dcl 27-78 set ref 1785* 1795* 1805* 1819* process_type 000500 automatic fixed bin(17,0) dcl 352 set ref 595 620 620 627 635 637 641 667 667 677 695* 709* 721* 730* 788* 1351 1351 1753 1821 1839 1872 1928 1980* 2029 2035 2037 2089 2148* 2149 2149 2156 2160 process_types 000501 automatic char(3) initial array packed unaligned dcl 353 set ref 353* 353* 353* 353* 353* project 144 based char(9) level 3 in structure "cdte" packed packed unaligned dcl 8-72 in procedure "lg_ctl_" set ref 517* 517 805* 810* project based structure level 1 dcl 18-53 in procedure "lg_ctl_" project 250 based char(28) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 764* 2019* project 722 based structure array level 2 in structure "sat" dcl 18-32 in procedure "lg_ctl_" set ref 421 1405 1603 project 12 based char(12) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 517 725* 901 924* 961* 975* 1073 1073 1093* 1132 1132 1150* 1231* 1240* 1282* 1331 1331* 1331 1371 1371* 1371 1387 1388* 1388 1403* 1406 1406 1406* 1410 1548* 1597* 1604 1604 1606* 1623* 1659* 1945* 2019 2232* 2354* 2382* project_authorization 102 based bit(72) array level 2 dcl 18-53 ref 1790 1791 1800 1801 project_id 1 based char(12) level 2 packed packed unaligned dcl 18-53 set ref 599 604* 734 747* 1406 1406 1604 1606* 1618* 1623 1626 1629* 1636* 1671* 1678* 1684* public 22 001002 automatic structure level 2 dcl 376 pw_time_lock 40(06) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 1552 queue 245 based fixed bin(17,0) level 2 dcl 27-78 ref 698 1837 2038 rcp_init_flags based structure level 1 packed packed unaligned dcl 13-8 reverse builtin function dcl 193 ref 619 rewrite_pnte 000505 automatic bit(1) dcl 359 set ref 672 879* 944* 1325* 1411* 1424* 1433 1439 1510* 1542* 1569* rs_number 374 based fixed bin(6,0) level 2 in structure "ute" packed packed unsigned unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1638* 1640* rs_number 115(18) based fixed bin(9,0) level 2 in structure "project" packed packed unsigned unaligned dcl 18-53 in procedure "lg_ctl_" set ref 1635 1635 1636* 1640 rtrim builtin function dcl 193 ref 868 901 901 902 903 1434 1434 1434 1434 1626 sat based structure level 1 dcl 18-32 sat_htp defined pointer dcl 5-25 set ref 1403* 1597* 1608* satep 000506 automatic pointer dcl 360 set ref 421* 422 598* 599 599 604 604 604 733* 734 734 747 747 747 1405* 1406 1406 1406 1603* 1604 1604 1606 1606* 1617 1618 1618 1623 1624 1624 1626 1629 1633 1635 1635 1636 1636 1640 1646 1671 1678 1684 1707 1716 1724 1740 1740 1790 1791 1800 1801 1811 1813 1840 1855 1907 1926* 1943 1945 1945 1948 1980* 2354 2354 2363 2382 2382 2386 2388 2401 satp defined pointer dcl 5-26 set ref 420 421 1405 1603 1608* 1608 1960 1961 1961 save_arg 75(21) based bit(1) level 3 packed packed unaligned dcl 8-72 ref 1754 1763 save_if_disconnected 431(12) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1754* save_on_disconnect 30(23) based bit(1) level 3 in structure "project" packed packed unaligned dcl 18-53 in procedure "lg_ctl_" ref 1740 save_on_disconnect 13(23) based bit(1) level 3 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 1745 save_on_disconnect 100(23) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1740* 1745* 1747* 1754 saved_utep 001334 automatic pointer dcl 1056 set ref 1077* 1089 1091 1093 1093 1093 sc_stat_$Go_typed 000356 external static bit(1) dcl 20-62 ref 400 sc_stat_$Multics_typed 000360 external static bit(1) dcl 20-62 ref 400 sc_subsystem_info based structure level 1 dcl 21-23 sc_subsystem_info_ptr 001134 automatic pointer dcl 21-22 set ref 824* 826 836* 838 scan_reason 000510 automatic fixed bin(17,0) dcl 361 set ref 998* 1000* 1025* 1027* 1038 1038* 1836* 1894* 1895* scramble_ 000112 constant entry external dcl 231 ref 499 562 seg_fault_error 000000 stack reference condition dcl 391 ref 1657 1666 send_mail_$access_class 000114 constant entry external dcl 232 ref 962 966 1241 send_mail_info 001137 automatic structure level 1 dcl 22-5 set ref 951* 962 962 966 966 1235* 1241 1241 send_mail_info_version_2 001136 automatic fixed bin(17,0) initial dcl 22-3 set ref 22-3* sent_from 1 001137 automatic char(32) level 2 dcl 22-5 set ref 955* 1239* service_type 32(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 8-72 ref 1029 1260 1874 session 46 based char(8) level 2 in structure "anstbl" packed packed unaligned dcl 3-55 in procedure "lg_ctl_" set ref 405* 414* session 6 based char(8) level 2 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 405* 414* session_uid 277 based fixed bin(35,0) level 2 dcl 27-78 set ref 2183* session_uid_counter 131 based fixed bin(35,0) level 2 dcl 3-55 set ref 2182* 2182 2183 slave_dial 50(13) based bit(1) level 4 packed packed unaligned dcl 8-72 ref 506 slave_pw 17(03) based bit(1) level 4 packed packed unaligned dcl 27-78 ref 897 sorted 001376 automatic bit(1) dcl 1164 set ref 1168* 1170 1173* 1201* source_name 2 based char(32) level 2 packed packed unaligned dcl 21-23 set ref 826* 838* special_message 50 based char(128) level 2 packed packed unaligned dcl 3-55 set ref 409* special_pw 17(02) based structure level 3 packed packed unaligned dcl 27-78 ss_given 72(02) based bit(1) level 3 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 2319 ss_given 431(02) based bit(1) level 3 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 2271 2312 2341* ss_len 76(18) based fixed bin(17,0) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 2271 2317 2340* ss_len 73(18) based fixed bin(17,0) level 2 in structure "user" packed packed unaligned dcl 15-58 in procedure "lg_ctl_" ref 2321 2322 standby_line 433 based fixed bin(17,0) level 2 dcl 27-78 ref 2023 state based fixed bin(17,0) level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" set ref 1677 1678* 1694 state based fixed bin(17,0) level 2 in structure "project" dcl 18-53 in procedure "lg_ctl_" set ref 1617 1618* stby 265 based fixed bin(17,0) array level 3 dcl 29-10 set ref 2023* string builtin function dcl 193 set ref 1716* 1716 1716 1716 1719* 1719 1721* 1721 1721 1721 1724* 1724 1724 1724 1727 1727 1730* 1730 1732* 1732 sub_err_ 000116 constant entry external dcl 233 ref 400 substr builtin function dcl 193 set ref 517 518 625 962 962 966 966 1241 1241 1331 1370 1371 1386 1388 2271 2291* 2291 2298 2322 2339* 2339 suspended 273(02) based bit(1) array level 3 packed packed unaligned dcl 29-10 set ref 2032* switches 11 001137 automatic structure level 2 dcl 22-5 sys_log_ 000120 constant entry external dcl 234 ref 408 604 725 747 805 826 838 846 854 912 975 1150 1548 1606 1618 1636 1659 1671 1678 1684 1945 2232 2242 2250 2354 2382 sys_log_$error_log 000122 constant entry external dcl 235 ref 881 905 1364 1378 1435 1610 1629 tag 15 based char(1) level 2 packed packed unaligned dcl 27-78 ref 1079 tcdtep 000512 automatic pointer dcl 362 set ref 1259* 1260 1260 temp_coded_type 000514 automatic fixed bin(17,0) dcl 363 set ref 1295* 1297* 1298* temp_person_name 000515 automatic char(28) packed unaligned dcl 364 set ref 1644* 1649* 1674* 1678* 1683 1684* 1695 temp_term_type 000524 automatic char(32) packed unaligned dcl 365 set ref 1089* 1091* 1093* 1298* 1299* 1300 1303* 1528* 1531* 1531* 1534* 1537* terminal_type 326 based char(32) level 2 packed packed unaligned dcl 27-78 ref 1091 time_last_bad_pw 50 001002 automatic fixed bin(71,0) level 3 dcl 376 set ref 939* 1523* time_last_good_pw 46 001002 automatic fixed bin(71,0) level 3 dcl 376 set ref 1487 1509* time_pw_changed 44 001002 automatic fixed bin(71,0) level 3 dcl 376 set ref 1468 1567* timeon 262 based fixed bin(71,0) array level 3 dcl 29-10 set ref 2021* tracing 000012 internal static bit(1) initial dcl 303 set ref 845* 853* trap 40(02) 001002 automatic bit(1) level 4 packed packed unaligned dcl 376 set ref 1548 try_blasting 001406 automatic bit(1) dcl 1222 set ref 1224* 1248* 1255 try_message 001336 automatic bit(1) dcl 1057 set ref 1060* 1079* ttt_info_$decode_type 000124 constant entry external dcl 236 ref 1298 ttt_info_$encode_type 000126 constant entry external dcl 237 ref 2170 tty_id_code 337 based char(4) level 2 in structure "ute" packed packed unaligned dcl 27-78 in procedure "lg_ctl_" set ref 1093* 2162 tty_id_code 100 based char(4) level 2 in structure "cdte" dcl 8-72 in procedure "lg_ctl_" set ref 941 957* 959* 2173 2411 tty_name 316 based char(32) level 2 packed packed unaligned dcl 27-78 set ref 725* 925* 975* 1548* 2232* tty_term_type 000534 automatic char(32) dcl 366 set ref 957* 959* 975* 1231* 1282* 1548* 2157* 2161* 2165* 2167* 2232* type 001260 automatic char(8) packed unaligned dcl 893 set ref 896* 897* 898* 912* uflags 72 based structure level 2 in structure "user" dcl 15-58 in procedure "lg_ctl_" uflags 431 based structure level 2 in structure "ute" dcl 27-78 in procedure "lg_ctl_" units 264 based fixed bin(17,0) array level 3 in structure "whotab" dcl 29-10 in procedure "lg_ctl_" set ref 2020* units 66 based fixed bin(17,0) array level 3 in structure "sat" dcl 18-32 in procedure "lg_ctl_" ref 1961 unspec builtin function dcl 193 set ref 951* 1235* up_sat_$make_sat_hash 000130 constant entry external dcl 238 ref 1608 uprojp 400 based pointer level 2 dcl 27-78 set ref 595 598 732 733 1707* ur_at 77 based structure level 2 dcl 27-78 set ref 1716* 1716 1721 1727 user 400 based structure array level 2 in structure "pdt" dcl 15-27 in procedure "lg_ctl_" set ref 1676 1693 user based structure level 1 dcl 15-58 in procedure "lg_ctl_" user_abs_attributes based structure level 1 dcl 26-25 user_attributes based structure level 1 dcl 25-21 user_authorization 365 based bit(72) array level 2 dcl 15-58 ref 1789 1799 user_id 22 001002 automatic char(32) level 3 in structure "pnte" dcl 376 in procedure "lg_ctl_" set ref 1370 1386 1434 1434 1435* user_id 001262 automatic char(32) packed unaligned dcl 894 in procedure "check_channel_acs" set ref 901* 902 912* user_limit 000544 automatic bit(1) initial dcl 367 set ref 367* 677 1900* 1914* user_name 137 based structure level 2 packed packed unaligned dcl 8-72 user_validated_time 76 001002 automatic fixed bin(71,0) level 3 dcl 376 set ref 1487 user_weight 432 based fixed bin(17,0) level 2 dcl 27-78 set ref 760 1958* 1960 1961* 1965 1965* 1998 2020 userx 000545 automatic fixed bin(17,0) dcl 368 set ref 761* 762 763 764 764 765 766 2008* 2011* 2012 2014 2016 2018 2019 2020 2021 2022 2023 2024 2025 2026 2028 2029 2031 2032 2032 2032 2040 2045 2386* 2388* 2390* 2390 2394 2400 ut_header based structure level 1 dcl 28-16 ute based structure level 1 dcl 27-78 utep 001152 automatic pointer initial dcl 27-76 set ref 461 476 499 517 518 519 536 553 562 578 589 595 598 604 604 614 616 648 659 659 663 663 675 677 679 682 684 696* 698 710* 722* 724 724 725 725 725 725 725 725* 730* 732 733 747 757 760 761 767 784* 27-76* 881 896 897 899 901 901 924 924 925 957 959 961 961 965 975 975 975 998 1004* 1014 1016 1025 1066 1066 1073 1097 1099 1132 1132 1132 1150 1150 1231 1231 1231 1263* 1277 1277 1280 1282 1282 1286 1323 1326 1330 1331 1331 1331 1331 1337 1337 1351 1351 1354 1364 1370 1370 1371 1371 1371 1378 1386 1386 1387 1388 1388 1398 1401 1403 1406 1406 1406 1410 1412 1412* 1420 1423 1425 1425* 1433 1451 1454 1454 1459 1548 1548 1548 1558 1570 1570* 1584 1584 1586 1589 1597 1604 1604 1606 1623 1638 1640 1644 1646 1659 1659 1706 1707 1716 1716 1719 1719 1721 1721 1721 1724 1724 1727 1727 1730 1730 1732 1732 1734 1734 1740 1740 1745 1747 1747 1747 1754 1754 1754 1763 1782 1782 1785 1791 1795 1801 1805 1811 1811 1813 1819 1819 1821 1837 1844 1849 1849 1876 1879 1893 1906 1926* 1928 1930 1931 1945 1945 1948 1950 1952 1953 1954 1958 1960 1961 1961 1965 1965 1970 1970 1976 1980* 1987 1998 2000 2000 2014 2016 2018 2019 2020 2022 2023 2026 2028 2031 2038 2040 2045 2058 2059 2060 2078 2080 2084 2089 2101 2103 2116 2117 2118 2118 2120 2122 2124 2126 2128 2146* 2149 2162 2183 2210 2232 2232 2232 2271 2271 2271 2271 2276 2277 2291 2292 2293 2298 2298 2298 2300 2301 2301 2312 2313 2317 2327 2328 2339 2339 2340 2341 2354 2354 2358 2359 2370 2370 2378 2382 2382 2394 2400 2401 2409 2434* 2445 2452* uwt 46 based structure array level 2 dcl 18-32 uwt_size 45 based fixed bin(17,0) level 2 dcl 18-32 ref 1960 verify builtin function dcl 193 ref 619 version 001137 automatic fixed bin(17,0) level 2 dcl 22-5 set ref 952* 1236* vhomedir 100(12) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 1970 vinitproc 100(11) based bit(1) level 3 packed packed unaligned dcl 27-78 set ref 2103 2277 2313 vlonginfo 000546 automatic varying char(100) dcl 369 set ref 945* 947* 949 957* 959* 1015* 1016 1019* 1229* 1230 1231* 1474* 1476* 1498* 1500* 1524* 1526* 1527 1534* 1537* 1878* 1879 1882* w_date 000600 automatic char(80) dcl 370 set ref 1279* 1282* 1288* 1306* 1523* 1534* 1537* wakeup 11 001137 automatic bit(1) level 3 packed packed unaligned dcl 22-5 set ref 953* 1237* whoptr defined pointer dcl 5-29 ref 405 414 698 698 700 700 712 712 759 759 760 760 763 764 764 765 765 766 1635 1997 1997 1998 1998 2002 2003 2003 2008 2008 2011 2012 2012 2016 2018 2019 2020 2021 2022 2023 2024 2025 2026 2028 2029 2031 2032 2032 2032 2035 2035 2039 2039 2040 2044 2044 2045 whotab based structure level 1 dcl 29-10 whotabx 430 based fixed bin(17,0) level 2 dcl 27-78 set ref 761 767* 2000* 2014* 2040 2045 xdebg 000624 automatic char(8) dcl 371 set ref 866* 1098 1107* 1109* 1111* xlonginfo 000626 automatic varying char(100) dcl 372 set ref 1106* 1111* 1280* 1281* 1282* 1289* 1290 1306* xpw 000660 automatic char(8) packed unaligned dcl 373 set ref 1337* 1339* 1351* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABS_ATTRIBUTE_NAMES internal static varying char(28) initial array dcl 26-38 ABS_FLAG_NAMES internal static varying char(8) initial array dcl 27-326 ACTIVE internal static fixed bin(17,0) initial dcl 8-272 ACTIVE_VALUES internal static char(18) initial array dcl 10-86 ALT_USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 25-77 ANSTBL_version_4 internal static fixed bin(17,0) initial dcl 3-51 ANS_SERVICE internal static fixed bin(17,0) initial dcl 8-259 AT_NORMAL internal static char(8) initial packed unaligned dcl 3-116 AT_SHUTDOWN internal static char(8) initial packed unaligned dcl 3-116 AT_SPECIAL internal static char(8) initial packed unaligned dcl 3-116 AUTBL_CONTROL_NAMES internal static varying char(20) initial array dcl 1-68 AUTBL_version_4 internal static fixed bin(17,0) initial dcl 1-24 A_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 Automatic_authentication internal static fixed bin(17,0) initial dcl 13-16 CDT_version internal static fixed bin(17,0) initial dcl 8-39 CDT_version_5 internal static fixed bin(17,0) initial dcl 8-38 CHANNEL_DELETED internal static fixed bin(17,0) initial dcl 8-288 DERIVE_MASK internal static bit(2) initial packed unaligned dcl 27-280 DIAL_OUT_SERVICE internal static fixed bin(17,0) initial dcl 8-259 DIAL_SERVER_FLAG_NAMES internal static varying char(12) initial array dcl 27-332 DIAL_SERVICE internal static fixed bin(17,0) initial dcl 8-259 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 2-33 DN355 internal static fixed bin(17,0) initial dcl 9-19 DN6600 internal static fixed bin(17,0) initial dcl 9-19 DN6670 internal static fixed bin(17,0) initial dcl 9-19 DN7100 internal static fixed bin(17,0) initial dcl 9-19 DONT_MASK internal static bit(2) initial packed unaligned dcl 27-280 DO_MASK internal static bit(2) initial packed unaligned dcl 27-280 E_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 FNP_BOOT internal static fixed bin(17,0) initial dcl 8-298 FNP_DOWN internal static fixed bin(17,0) initial dcl 8-298 FNP_FREE internal static fixed bin(17,0) initial dcl 8-298 FNP_UNKNOWN internal static fixed bin(17,0) initial dcl 8-298 FNP_UP internal static fixed bin(17,0) initial dcl 8-298 INACTIVE internal static fixed bin(17,0) initial dcl 8-272 LINE_1050 internal static fixed bin(17,0) initial dcl 14-22 LINE_2741 internal static fixed bin(17,0) initial dcl 14-22 LINE_ARDS internal static fixed bin(17,0) initial dcl 14-22 LINE_ASCII internal static fixed bin(17,0) initial dcl 14-22 LINE_ASYNC1 internal static fixed bin(17,0) initial dcl 14-22 LINE_ASYNC2 internal static fixed bin(17,0) initial dcl 14-22 LINE_ASYNC3 internal static fixed bin(17,0) initial dcl 14-22 LINE_COLTS internal static fixed bin(17,0) initial dcl 14-22 LINE_DSA internal static fixed bin(17,0) initial dcl 14-22 LINE_ETX internal static fixed bin(17,0) initial dcl 14-22 LINE_HDLC internal static fixed bin(17,0) initial dcl 14-22 LINE_POLLED_VIP internal static fixed bin(17,0) initial dcl 14-22 LINE_SYNC1 internal static fixed bin(17,0) initial dcl 14-22 LINE_SYNC2 internal static fixed bin(17,0) initial dcl 14-22 LINE_SYNC3 internal static fixed bin(17,0) initial dcl 14-22 LINE_SYNCH internal static fixed bin(17,0) initial dcl 14-22 LINE_TELNET internal static fixed bin(17,0) initial dcl 14-22 LINE_VIP internal static fixed bin(17,0) initial dcl 14-22 LINE_X25LAP internal static fixed bin(17,0) initial dcl 14-22 LOGIN_RESULT_VALUES internal static varying char(24) initial array dcl 27-338 MASK_CTL_NAMES internal static varying char(12) initial array dcl 27-284 MAX_HT_BUCKETS_IN_SEG internal static fixed bin(17,0) initial dcl 11-24 MC_SERVICE internal static fixed bin(17,0) initial dcl 8-259 MPX_BOOT internal static fixed bin(17,0) initial dcl 8-306 MPX_DOWN internal static fixed bin(17,0) initial dcl 8-306 MPX_FREE internal static fixed bin(17,0) initial dcl 8-306 MPX_SERVICE internal static fixed bin(17,0) initial dcl 8-259 MPX_UNKNOWN internal static fixed bin(17,0) initial dcl 8-306 MPX_UP internal static fixed bin(17,0) initial dcl 8-306 M_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 Manual_authentication internal static fixed bin(17,0) initial dcl 13-16 NOT_CONFIGURED internal static fixed bin(17,0) initial dcl 8-280 NOW_DIALED_OUT internal static fixed bin(17,0) initial dcl 10-76 NOW_DIALING internal static fixed bin(17,0) initial dcl 10-76 NOW_HUNG_UP internal static fixed bin(17,0) initial dcl 10-76 NOW_LISTENING internal static fixed bin(17,0) initial dcl 10-76 N_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 No_authentication internal static fixed bin(17,0) initial dcl 13-16 Nominal_authentication internal static fixed bin(17,0) initial dcl 13-16 PDT_entry_lth internal static fixed bin(17,0) initial dcl 15-19 PDT_header_lth internal static fixed bin(17,0) initial dcl 15-19 PDT_person_id_length internal static fixed bin(17,0) initial dcl 15-19 PDT_project_name_length internal static fixed bin(17,0) initial dcl 15-19 PDT_version internal static fixed bin(17,0) initial dcl 15-19 PNT_ENTRY_VERSION_2 internal static fixed bin(17,0) initial dcl 17-64 PREEMPT_BUMPED internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_BUMPED_NO_TERM internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_LOAD_CTL internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_TERMSGNL_RECEIVED internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_TERM_SENT internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_UNBUMP internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_UNBUMP_IGNORE_ALARM internal static fixed bin(17,0) initial dcl 10-132 PREEMPT_VALUES internal static varying char(28) initial array dcl 10-142 PROCESS_TYPE_NAMES internal static varying char(12) initial array dcl 27-265 PT_ALARM internal static fixed bin(17,0) initial dcl 10-106 PT_BUMP internal static fixed bin(17,0) initial dcl 10-106 PT_DESTROY_REQUEST internal static fixed bin(17,0) initial dcl 10-106 PT_DETACH internal static fixed bin(17,0) initial dcl 10-106 PT_FPE internal static fixed bin(17,0) initial dcl 10-106 PT_HANGUP internal static fixed bin(17,0) initial dcl 10-106 PT_LOGOUT internal static fixed bin(17,0) initial dcl 10-106 PT_NEW_PROC_AUTH internal static fixed bin(17,0) initial dcl 10-106 PT_NEW_PROC_REQUEST internal static fixed bin(17,0) initial dcl 10-106 PT_OPERATOR_TERMINATE internal static fixed bin(17,0) initial dcl 10-106 PT_SHUTDOWN internal static fixed bin(17,0) initial dcl 10-106 PT_UNBUMP internal static fixed bin(17,0) initial dcl 10-106 PW_FLAG_NAMES internal static varying char(12) initial array dcl 27-290 REW_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 RE_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 R_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SAT_entry_lth internal static fixed bin(17,0) initial dcl 18-24 SAT_header_lth internal static fixed bin(17,0) initial dcl 18-24 SAT_project_name_length internal static fixed bin(17,0) initial dcl 18-24 SAT_version internal static fixed bin(17,0) initial dcl 18-24 SA_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 2-30 SLAVE_SERVICE internal static fixed bin(17,0) initial dcl 8-259 SL_INFO_arg_given_in_structure internal static fixed bin(17,0) initial dcl 23-69 SL_INFO_arg_not_given internal static fixed bin(17,0) initial dcl 23-69 SL_INFO_as_mode internal static fixed bin(17,0) initial dcl 23-65 SL_INFO_command_mode internal static fixed bin(17,0) initial dcl 23-65 SL_INFO_version_1 internal static char(8) initial packed unaligned dcl 23-62 SL_LOG_CRASH internal static fixed bin(17,0) initial dcl 23-14 SL_TYPE internal static fixed bin(17,0) initial dcl 23-14 SL_TYPE_BEEP internal static fixed bin(17,0) initial dcl 23-14 SL_TYPE_CRASH internal static fixed bin(17,0) initial dcl 23-14 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 STATE_VALUES internal static char(15) initial array dcl 10-70 S_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 TABLE_NAMES internal static char(20) initial array packed unaligned dcl 27-271 TAG_ABSENTEE internal static char(1) initial packed unaligned dcl 10-93 TAG_DAEMON internal static char(1) initial packed unaligned dcl 10-93 TAG_INTERACTIVE internal static char(1) initial packed unaligned dcl 10-93 TAG_PROXY internal static char(1) initial packed unaligned dcl 10-93 TANDD_SERVICE internal static fixed bin(17,0) initial dcl 8-259 TRA_VEC_VALUES internal static char(32) initial array dcl 10-54 TTY_DIALED internal static fixed bin(17,0) initial dcl 10-64 TTY_HUNG internal static fixed bin(17,0) initial dcl 10-64 TTY_KNOWN internal static fixed bin(17,0) initial dcl 10-64 TTY_MASKED internal static fixed bin(17,0) initial dcl 10-64 UFLAG_NAMES internal static varying char(24) initial array dcl 27-303 USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 25-50 UTE_version_4 internal static fixed bin(17,0) initial dcl 27-74 WAIT_ANSWERBACK internal static fixed bin(17,0) initial dcl 10-25 WAIT_BEFORE_HANGUP internal static fixed bin(17,0) initial dcl 10-25 WAIT_CONNECT_REQUEST internal static fixed bin(17,0) initial dcl 10-25 WAIT_DELETE_CHANNEL internal static fixed bin(17,0) initial dcl 10-25 WAIT_DESTROY_REQUEST internal static fixed bin(17,0) initial dcl 10-25 WAIT_DETACH internal static fixed bin(17,0) initial dcl 10-25 WAIT_DIALUP internal static fixed bin(17,0) initial dcl 10-25 WAIT_DIAL_OUT internal static fixed bin(17,0) initial dcl 10-25 WAIT_DIAL_RELEASE internal static fixed bin(17,0) initial dcl 10-25 WAIT_DISCARD_WAKEUPS internal static fixed bin(17,0) initial dcl 10-25 WAIT_FIN_PRIV_ATTACH internal static fixed bin(17,0) initial dcl 10-25 WAIT_FIN_TANDD_ATTACH internal static fixed bin(17,0) initial dcl 10-25 WAIT_GREETING_MSG internal static fixed bin(17,0) initial dcl 10-25 WAIT_HANGUP internal static fixed bin(17,0) initial dcl 10-25 WAIT_LOGIN_ARGS internal static fixed bin(17,0) initial dcl 10-25 WAIT_LOGIN_LINE internal static fixed bin(17,0) initial dcl 10-25 WAIT_LOGOUT internal static fixed bin(17,0) initial dcl 10-25 WAIT_LOGOUT_HOLD internal static fixed bin(17,0) initial dcl 10-25 WAIT_LOGOUT_SIG internal static fixed bin(17,0) initial dcl 10-25 WAIT_NEW_PASSWORD internal static fixed bin(17,0) initial dcl 10-25 WAIT_NEW_PROC internal static fixed bin(17,0) initial dcl 10-25 WAIT_NEW_PROC_REQUEST internal static fixed bin(17,0) initial dcl 10-25 WAIT_OLD_PASSWORD internal static fixed bin(17,0) initial dcl 10-25 WAIT_PASSWORD internal static fixed bin(17,0) initial dcl 10-25 WAIT_REMOVE internal static fixed bin(17,0) initial dcl 10-25 WAIT_SLAVE_REQUEST internal static fixed bin(17,0) initial dcl 10-25 WAIT_TANDD_HANGUP internal static fixed bin(17,0) initial dcl 10-25 WHOTAB_VERSION_1 internal static fixed bin(17,0) initial dcl 29-96 W_ACCESS internal static bit(3) initial packed unaligned dcl 2-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 as_data_$BS external static char(1) dcl 4-21 as_data_$CR external static char(1) dcl 4-22 as_data_$abs_dim external static char(32) packed unaligned dcl 4-23 as_data_$acct_update_priority external static fixed bin(17,0) dcl 4-24 as_data_$acsdir external static char(168) packed unaligned dcl 4-25 as_data_$as_ring external static fixed bin(3,0) dcl 4-28 as_data_$as_tty automatic char(6) packed unaligned dcl 4-29 as_data_$asmtp external static pointer dcl 4-30 as_data_$autp external static pointer dcl 4-31 as_data_$buzzardp external static pointer dcl 4-32 as_data_$cdtp external static pointer dcl 4-33 as_data_$debug_flag external static bit(1) dcl 4-84 as_data_$devtabp external static pointer dcl 4-35 as_data_$dutp external static pointer dcl 4-37 as_data_$lct_initialized external static bit(1) dcl 4-39 as_data_$lct_size external static fixed bin(17,0) dcl 4-40 as_data_$login_args external static structure level 1 dcl 4-62 as_data_$login_words external static fixed bin(17,0) dcl 4-77 as_data_$ls_message_buffer_max_lth external static fixed bin(18,0) dcl 4-87 as_data_$ls_message_buffer_ptr external static pointer dcl 4-88 as_data_$ls_request_server_info_ptr external static pointer dcl 4-85 as_data_$mgtp external static pointer dcl 4-42 as_data_$ntty_dim external static char(32) packed unaligned dcl 4-44 as_data_$pit_ptr external static pointer dcl 4-46 as_data_$request_priority external static fixed bin(17,0) dcl 4-48 as_data_$rtdtp external static pointer dcl 4-50 as_data_$signal_types external static structure level 1 dcl 4-67 as_data_$sysdir external static char(168) packed unaligned dcl 4-54 as_data_$system_signal_types external static structure level 1 dcl 4-72 as_data_$terminet_tabs_string external static varying char(144) dcl 4-56 as_data_$update_priority external static fixed bin(17,0) dcl 4-58 as_data_$version external static char(8) packed unaligned dcl 4-59 as_data_login_words based structure level 1 dcl 4-77 as_tty based char(6) packed unaligned dcl 5-18 asmtp defined pointer dcl 5-19 autbl based structure level 1 dcl 1-28 authentication_level_names internal static char(12) initial array packed unaligned dcl 13-21 cdt based structure level 1 dcl 8-44 cdtp automatic pointer dcl 8-41 devtabp defined pointer dcl 5-20 fnp_models internal static fixed bin(17,0) initial array dcl 9-28 fnp_types internal static char(8) initial array packed unaligned dcl 9-25 fnpep automatic pointer dcl 8-41 generic_destination based char(32) packed unaligned dcl 8-195 hash_table_size_ automatic fixed bin(17,0) dcl 11-25 installation_parms_version_1 internal static fixed bin(17,0) initial dcl 12-37 installation_parms_version_2 internal static fixed bin(17,0) initial dcl 12-38 max_line_type internal static fixed bin(17,0) initial dcl 14-48 max_tty_type internal static fixed bin(17,0) initial dcl 24-3 mgtp defined pointer dcl 5-22 mpxep automatic pointer dcl 8-41 n_sync_line_types internal static fixed bin(17,0) initial dcl 14-50 rifp automatic pointer dcl 13-6 rs_ptrs based pointer array dcl 5-24 sc_request_flags based structure level 1 packed packed unaligned dcl 21-55 sc_rf_ptr automatic pointer dcl 21-54 sc_ss_area based area(1024) dcl 21-50 sc_stat_$Go external static bit(1) dcl 20-62 sc_stat_$Multics external static bit(1) dcl 20-62 sc_stat_$Star_typed external static bit(1) dcl 20-62 sc_stat_$admin_listener_exit_label external static label variable dcl 20-34 sc_stat_$admin_listener_switch external static bit(1) dcl 20-62 sc_stat_$admin_log_iocb external static pointer dcl 20-45 sc_stat_$admin_log_write_ptr external static pointer dcl 20-45 sc_stat_$admin_sci_ptr external static pointer dcl 20-45 sc_stat_$as_log_write_ptr external static pointer dcl 20-45 sc_stat_$did_part1 external static bit(1) dcl 20-62 sc_stat_$did_part2 external static bit(1) dcl 20-62 sc_stat_$did_part3 external static bit(1) dcl 20-62 sc_stat_$exec_access_name external static char(32) packed unaligned dcl 20-15 sc_stat_$info_dir external static char(168) packed unaligned dcl 20-21 sc_stat_$initzer_ttyp external static pointer dcl 20-45 sc_stat_$log_dir external static char(168) packed unaligned dcl 20-21 sc_stat_$master_abort_label external static label variable dcl 20-34 sc_stat_$master_channel external static char(6) dcl 20-29 sc_stat_$master_iocb external static pointer dcl 20-45 sc_stat_$master_sci_ptr external static pointer dcl 20-45 sc_stat_$mc_acs_dir external static char(168) packed unaligned dcl 20-21 sc_stat_$mc_ansp external static pointer dcl 20-45 sc_stat_$mc_iocb external static pointer dcl 20-45 sc_stat_$mc_is_on external static bit(1) dcl 20-62 sc_stat_$no_operator_login external static bit(1) dcl 20-62 sc_stat_$shutdown_typed external static bit(1) dcl 20-62 sc_stat_$sv1_iocb external static pointer dcl 20-45 sc_stat_$sv2_iocb external static pointer dcl 20-45 sc_stat_$sv3_iocb external static pointer dcl 20-45 sc_stat_$sysdir external static char(168) packed unaligned dcl 20-21 sc_stat_$system_shutdown_label external static label variable dcl 20-34 sc_stat_$test_mode external static bit(1) dcl 20-62 sc_stat_$unidentified_access_name external static char(32) packed unaligned dcl 20-15 sc_stat_$vchn_requires_accept external static bit(1) dcl 20-62 scdtp defined pointer dcl 5-27 sl_info automatic structure level 1 dcl 23-24 sl_info_code_msg internal static structure level 1 dcl 23-187 sl_info_msg internal static structure level 1 dcl 23-214 sl_info_sev_code_label_msg internal static structure level 1 dcl 23-161 sl_info_sev_code_msg internal static structure level 1 dcl 23-82 sl_info_sev_coded_msg internal static structure level 1 dcl 23-134 sl_info_sev_msg internal static structure level 1 dcl 23-108 supported_fnp internal static bit(1) initial array packed unaligned dcl 9-31 sync_line_type internal static fixed bin(17,0) initial array dcl 14-52 sysdir defined char(168) packed unaligned dcl 5-28 tty_dev_type internal static char(8) initial array dcl 24-5 NAMES DECLARED BY EXPLICIT CONTEXT. ASSERT_INTERACTIVE_LOGIN 015105 constant entry internal dcl 2419 ref 1007 1032 1888 2049 ASSERT_LOGGED_IN_STATE 013513 constant entry internal dcl 2055 ref 1006 1030 1886 1983 AUDIT_LOGIN 015111 constant entry internal dcl 2427 ref 648 659 AUDIT_LOGOUT 015137 constant entry internal dcl 2438 ref 770 790 BAD_PASSWORD 004352 constant entry internal dcl 930 ref 1373 BUILD_DISCONNECTED_LIST 005631 constant entry internal dcl 1117 ref 1031 1887 CHECK_CHANNEL_ACCESS_CLASS 013524 constant entry internal dcl 2065 ref 514 582 CHECK_FOR_MULTIPLE_LOGINS 005053 constant entry internal dcl 984 ref 589 CHECK_FOR_SECURITY_BREACH 014127 constant entry internal dcl 2194 ref 494 555 CHECK_PROCESS_LIMITS 012437 constant entry internal dcl 1830 ref 445 482 583 DETERMINE_AUTHORIZATIONS 012206 constant entry internal dcl 1772 ref 444 481 513 581 LOOKUP_PROJECT 010740 constant entry internal dcl 1594 ref 442 459 497 560 MAIN_RETURN 001355 constant label dcl 395 ref 2141 2144 MAKE_AIM_CODE 013613 constant label dcl 2084 ref 2078 NOTIFY_USER_OF_LOGIN 006471 constant entry internal dcl 1270 ref 2422 PERFORM_PASSWORD_CHECKS 010002 constant entry internal dcl 1444 ref 493 554 PROCESS_ATTRIBUTES 012060 constant entry internal dcl 1711 ref 443 470 512 576 PROCESS_AUTH_ARGUMENT 010717 constant entry internal dcl 1577 ref 458 496 559 PROCESS_CHANGE_ARGUMENTS 007455 constant entry internal dcl 1392 ref 457 495 556 PUBLISH_LOGIN 013334 constant entry internal dcl 1992 ref 1985 SCAN_ANSWER_TABLE 005316 constant entry internal dcl 1043 ref 1038 1895 SECURITY_BREACH 014171 constant entry internal dcl 2223 ref 2216 SETUP 013734 constant entry internal dcl 2136 ref 440 455 491 534 SETUP_INITIAL_PROCEDURE 014432 constant entry internal dcl 2256 ref 1938 SETUP_LOGIN_RING 014633 constant entry internal dcl 2347 ref 1941 SETUP_SUBSYSTEM 014535 constant entry internal dcl 2307 ref 1939 SET_OUTER_MODULE 013633 constant entry internal dcl 2098 ref 578 SET_UP_FOR_PROCESS_CREATION 013010 constant entry internal dcl 1922 ref 446 483 592 SORT_DISC_LIST 006032 constant entry internal dcl 1159 ref 1153 UPDATE_LOGGED_IN_INFO 015064 constant entry internal dcl 2406 ref 2423 VALIDATE_PERSON 007134 constant entry internal dcl 1316 ref 441 456 492 538 WARN_OF_ANOTHER_LOGIN 006142 constant entry internal dcl 1216 ref 1079 abs_in 001622 constant entry external dcl 427 abs_out 002604 constant entry external dcl 687 check_channel_acs 003722 constant entry internal dcl 887 ref 506 570 check_daemon_source_acs 004270 constant entry internal dcl 918 ref 466 convert_message 003571 constant entry internal dcl 857 ref 409 945 947 1015 1093 1106 1229 1280 1281 1289 1474 1498 1524 1526 1878 daemon_in 001665 constant entry external dcl 449 daemon_out 002655 constant entry external dcl 703 init 001361 constant entry external dcl 398 lg_ctl_ 001347 constant entry external dcl 99 login 002101 constant entry external dcl 523 login_abort_1 002574 constant label dcl 682 ref 467 509 573 1366 1380 1612 1661 1847 1851 login_abort_2 002557 constant label dcl 675 ref 883 1328 1631 1901 1915 login_incorrect 002554 constant label dcl 672 ref 463 478 503 566 1360 1375 1417 1430 1456 1466 1482 1504 1555 1562 1601 1704 1765 1824 1973 2092 2105 2218 2279 2315 2330 2334 2374 2397 login_operator 003334 constant entry external dcl 813 login_returns 002227 constant label dcl 595 ref 447 484 521 593 680 685 1009 1034 1890 1932 1981 logout 002714 constant entry external dcl 715 logout_channel 003224 constant entry external dcl 793 logout_no_process 003153 constant entry external dcl 773 logout_operator 003425 constant entry external dcl 831 logout_returns 003023 constant label dcl 730 ref 701 713 lookup_loop 010745 constant label dcl 1597 ref 1609 lrt2 002502 constant label dcl 648 ref 1100 maybe_write_pnte 003631 constant entry internal dcl 872 ref 672 1439 not_in_pdt 012042 constant label dcl 1701 ref 1646 1675 1680 proj_not_there 010777 constant label dcl 1600 ref 1619 trace_off 003541 constant entry external dcl 850 trace_on 003507 constant entry external dcl 842 validate 001761 constant entry external dcl 486 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 17234 17616 15333 17244 Length 21162 15333 362 1327 1700 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME lg_ctl_ 2102 external procedure is an external procedure. convert_message internal procedure shares stack frame of external procedure lg_ctl_. maybe_write_pnte internal procedure shares stack frame of external procedure lg_ctl_. check_channel_acs internal procedure shares stack frame of external procedure lg_ctl_. check_daemon_source_acs internal procedure shares stack frame of external procedure lg_ctl_. BAD_PASSWORD internal procedure shares stack frame of external procedure lg_ctl_. CHECK_FOR_MULTIPLE_LOGINS internal procedure shares stack frame of external procedure lg_ctl_. SCAN_ANSWER_TABLE internal procedure shares stack frame of external procedure lg_ctl_. BUILD_DISCONNECTED_LIST internal procedure shares stack frame of external procedure lg_ctl_. SORT_DISC_LIST internal procedure shares stack frame of external procedure lg_ctl_. WARN_OF_ANOTHER_LOGIN internal procedure shares stack frame of external procedure lg_ctl_. NOTIFY_USER_OF_LOGIN internal procedure shares stack frame of external procedure lg_ctl_. VALIDATE_PERSON internal procedure shares stack frame of external procedure lg_ctl_. PROCESS_CHANGE_ARGUMENTS internal procedure shares stack frame of external procedure lg_ctl_. PERFORM_PASSWORD_CHECKS internal procedure shares stack frame of external procedure lg_ctl_. PROCESS_AUTH_ARGUMENT internal procedure shares stack frame of external procedure lg_ctl_. LOOKUP_PROJECT 148 internal procedure enables or reverts conditions. on unit on line 1657 104 on unit PROCESS_ATTRIBUTES internal procedure shares stack frame of external procedure lg_ctl_. DETERMINE_AUTHORIZATIONS internal procedure shares stack frame of external procedure lg_ctl_. CHECK_PROCESS_LIMITS internal procedure shares stack frame of external procedure lg_ctl_. SET_UP_FOR_PROCESS_CREATION internal procedure shares stack frame of external procedure lg_ctl_. PUBLISH_LOGIN internal procedure shares stack frame of external procedure lg_ctl_. ASSERT_LOGGED_IN_STATE internal procedure shares stack frame of external procedure lg_ctl_. CHECK_CHANNEL_ACCESS_CLASS internal procedure shares stack frame of external procedure lg_ctl_. SET_OUTER_MODULE internal procedure shares stack frame of external procedure lg_ctl_. SETUP internal procedure shares stack frame of external procedure lg_ctl_. CHECK_FOR_SECURITY_BREACH internal procedure shares stack frame of external procedure lg_ctl_. SECURITY_BREACH internal procedure shares stack frame of external procedure lg_ctl_. SETUP_INITIAL_PROCEDURE internal procedure shares stack frame of external procedure lg_ctl_. SETUP_SUBSYSTEM internal procedure shares stack frame of external procedure lg_ctl_. SETUP_LOGIN_RING internal procedure shares stack frame of external procedure lg_ctl_. UPDATE_LOGGED_IN_INFO internal procedure shares stack frame of external procedure lg_ctl_. ASSERT_INTERACTIVE_LOGIN internal procedure shares stack frame of external procedure lg_ctl_. AUDIT_LOGIN internal procedure shares stack frame of external procedure lg_ctl_. AUDIT_LOGOUT internal procedure shares stack frame of external procedure lg_ctl_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 pdt_htp lg_ctl_ 000012 tracing lg_ctl_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME lg_ctl_ 000100 four_digits lg_ctl_ 000101 ans lg_ctl_ 000121 answer lg_ctl_ 000203 authorization lg_ctl_ 000211 authorization_string lg_ctl_ 000273 bstemp lg_ctl_ 000274 char64 lg_ctl_ 000314 code lg_ctl_ 000315 coded_type lg_ctl_ 000316 debg lg_ctl_ 000320 errmsg lg_ctl_ 000373 first_pass lg_ctl_ 000374 flonginfo lg_ctl_ 000425 i lg_ctl_ 000426 id_code lg_ctl_ 000427 l lg_ctl_ 000430 last_term_type lg_ctl_ 000440 login_state lg_ctl_ 000443 logout_reason lg_ctl_ 000446 mcode lg_ctl_ 000447 octal_auth_string lg_ctl_ 000460 p lg_ctl_ 000462 password_changed_flag lg_ctl_ 000463 pdt_name lg_ctl_ 000474 pdtep lg_ctl_ 000476 pdtp lg_ctl_ 000500 process_type lg_ctl_ 000501 process_types lg_ctl_ 000505 rewrite_pnte lg_ctl_ 000506 satep lg_ctl_ 000510 scan_reason lg_ctl_ 000512 tcdtep lg_ctl_ 000514 temp_coded_type lg_ctl_ 000515 temp_person_name lg_ctl_ 000524 temp_term_type lg_ctl_ 000534 tty_term_type lg_ctl_ 000544 user_limit lg_ctl_ 000545 userx lg_ctl_ 000546 vlonginfo lg_ctl_ 000600 w_date lg_ctl_ 000624 xdebg lg_ctl_ 000626 xlonginfo lg_ctl_ 000660 xpw lg_ctl_ 000662 old_pnte lg_ctl_ 001002 pnte lg_ctl_ 001122 autp lg_ctl_ 001124 ansp lg_ctl_ 001126 cdtep lg_ctl_ 001130 htp lg_ctl_ 001132 pntep lg_ctl_ 001134 sc_subsystem_info_ptr lg_ctl_ 001136 send_mail_info_version_2 lg_ctl_ 001137 send_mail_info lg_ctl_ 001152 utep lg_ctl_ 001200 long convert_message 001246 group_id check_channel_acs 001256 mode check_channel_acs 001257 ok check_channel_acs 001260 type check_channel_acs 001262 user_id check_channel_acs 001300 group_id check_daemon_source_acs 001332 found_identical_userid SCAN_ANSWER_TABLE 001333 n_processes SCAN_ANSWER_TABLE 001334 saved_utep SCAN_ANSWER_TABLE 001336 try_message SCAN_ANSWER_TABLE 001346 back_thread BUILD_DISCONNECTED_LIST 001347 i BUILD_DISCONNECTED_LIST 001350 n_processes BUILD_DISCONNECTED_LIST 001352 p BUILD_DISCONNECTED_LIST 001364 lp1 SORT_DISC_LIST 001366 lp2 SORT_DISC_LIST 001370 lpp SORT_DISC_LIST 001372 li SORT_DISC_LIST 001373 ll SORT_DISC_LIST 001374 lx1 SORT_DISC_LIST 001375 lx2 SORT_DISC_LIST 001376 sorted SORT_DISC_LIST 001406 try_blasting WARN_OF_ANOTHER_LOGIN 001550 max_auth CHECK_FOR_SECURITY_BREACH THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_g_a r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this return_mac tra_ext_1 mpfx2 mdfx1 mdfx3 enable_op shorten_stack ext_entry ext_entry_desc int_entry clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. act_ctl_$check aim_check_$equal aim_check_$greater_or_equal aim_check_$in_range as_access_audit_$login as_access_audit_$logout astty_$tty_force asu_$blast_user asu_$format_ftp_msg asu_$write_message convert_access_class_$maximum convert_access_class_$minimum convert_access_class_$to_string_range_short convert_access_class_$to_string_short convert_status_code_ date_time_$format display_access_class_ display_access_class_$range hash_$search hcs_$get_user_access_modes hcs_$initiate ioa_$rs ioa_$rsnnl load_ctl_ load_ctl_$unload mail_table_initializer_$set_dft_proj mc_check_access_$log_in_as_daemon merge_access_audit_flags_ pnt_manager_$admin_get_entry pnt_manager_$login_get_entry pnt_manager_$update_entry scramble_ send_mail_$access_class sub_err_ sys_log_ sys_log_$error_log ttt_info_$decode_type ttt_info_$encode_type up_sat_$make_sat_hash THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. as_data_$ansp as_data_$as_procid as_data_$default_weight as_data_$dft_user_ring as_data_$g115_dim as_data_$ls_message_buffer_cur_lth as_data_$max_user_ring as_data_$mrd_dim as_data_$pdtdir as_data_$rcpdir as_data_$rs_ptrs as_data_$sat_htp as_data_$satp as_data_$suffix as_data_$teens_suffix as_data_$tty_dim as_data_$whoptr as_error_table_$already_in_msg as_error_table_$already_in_notify_msg as_error_table_$already_in_warn_msg as_error_table_$bad_anon_pw as_error_table_$bad_password as_error_table_$bad_personid as_error_table_$bad_project as_error_table_$breach as_error_table_$cant_give_dft_auth as_error_table_$cant_give_that_authorization as_error_table_$dft_auth_changed as_error_table_$dft_proj_changed as_error_table_$dialup_error as_error_table_$illegal_hd_arg as_error_table_$illegal_ip_arg as_error_table_$illegal_om_arg as_error_table_$illegal_save_arg as_error_table_$illegal_ss_arg as_error_table_$last_login_msg as_error_table_$login_anon_msg as_error_table_$login_msg as_error_table_$long_ip_arg as_error_table_$long_ss_arg as_error_table_$multiple_login_msg as_error_table_$must_change as_error_table_$must_use_generate_pw as_error_table_$n_disconnected_procs_msg as_error_table_$no_change as_error_table_$no_daemon_bit as_error_table_$no_disconnected_procs as_error_table_$no_line_permission as_error_table_$no_name as_error_table_$no_primary as_error_table_$not_in_pdt as_error_table_$password_changed as_error_table_$password_expired as_error_table_$password_expired_msg as_error_table_$password_locked as_error_table_$password_probe1_mail_msg as_error_table_$password_probe1_msg as_error_table_$password_probe_mail_msg as_error_table_$password_probe_msg as_error_table_$password_unused_too_long_msg as_error_table_$pdt_missing as_error_table_$ring_too_high as_error_table_$ring_too_low as_error_table_$special_sess_msg as_error_table_$user_fg_cpu_limit as_error_table_$user_max_bg as_error_table_$user_max_fg error_table_$bad_password error_table_$checksum_failure error_table_$id_not_found error_table_$messages_off error_table_$out_of_sequence error_table_$smallarg error_table_$wakeup_denied sc_stat_$Go_typed sc_stat_$Multics_typed LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 335 001267 345 001271 348 001272 353 001273 367 001333 1 26 001334 3 53 001336 2467 001337 22 3 001340 27 76 001342 99 001346 395 001355 398 001356 400 001367 402 001423 404 001427 405 001433 406 001443 407 001456 408 001463 409 001507 410 001546 411 001551 412 001554 414 001555 415 001565 420 001570 421 001603 422 001611 423 001613 425 001615 427 001616 438 001641 440 001647 441 001651 442 001652 443 001656 444 001657 445 001660 446 001661 447 001662 449 001663 453 001704 455 001712 456 001714 457 001715 458 001716 459 001717 461 001723 462 001727 463 001732 466 001733 467 001735 470 001737 476 001740 477 001744 478 001747 481 001750 482 001751 483 001752 484 001753 486 001754 491 001772 492 001774 493 001775 494 001776 495 001777 496 002000 497 002001 499 002005 502 002040 503 002043 506 002044 508 002055 509 002060 512 002061 513 002062 514 002063 517 002064 518 002071 519 002074 520 002075 521 002076 523 002077 534 002112 536 002114 538 002120 553 002121 554 002124 555 002125 556 002126 559 002127 560 002130 562 002134 565 002167 566 002172 570 002173 572 002204 573 002207 576 002210 578 002211 581 002215 582 002216 583 002217 589 002220 592 002225 593 002226 595 002227 598 002237 599 002241 604 002247 614 002306 615 002311 616 002313 618 002316 619 002331 620 002347 623 002354 625 002363 626 002405 627 002407 629 002411 630 002417 631 002420 633 002433 635 002434 637 002447 639 002461 641 002467 644 002477 648 002502 653 002511 659 002512 663 002524 667 002532 669 002546 670 002553 672 002554 675 002557 677 002562 679 002571 680 002573 682 002574 684 002577 685 002600 687 002601 691 002612 692 002617 693 002622 695 002626 696 002630 698 002634 700 002643 701 002652 703 002653 705 002663 706 002670 707 002673 709 002677 710 002701 712 002705 713 002711 715 002712 717 002722 718 002727 719 002732 721 002736 722 002740 724 002744 725 002752 727 003022 730 003023 732 003033 733 003040 734 003042 747 003050 757 003105 759 003107 760 003114 761 003117 762 003121 763 003122 764 003126 765 003136 766 003140 767 003142 770 003143 771 003146 773 003147 780 003167 781 003174 782 003177 784 003203 788 003207 790 003211 791 003221 793 003222 799 003240 800 003245 801 003250 803 003254 805 003260 809 003317 810 003323 811 003326 813 003327 824 003354 826 003360 829 003420 831 003421 836 003445 838 003451 840 003505 842 003506 845 003515 846 003520 847 003537 850 003540 853 003547 854 003551 855 003570 857 003571 866 003573 868 003606 872 003631 875 003632 879 003653 880 003654 881 003656 882 003715 883 003720 885 003721 887 003722 896 003724 897 003733 898 003741 899 003743 901 003751 902 004023 903 004063 904 004156 905 004161 906 004220 910 004221 912 004226 915 004264 918 004270 924 004272 925 004327 926 004351 930 004352 937 004353 938 004354 939 004355 940 004360 941 004362 942 004365 943 004370 944 004374 945 004376 947 004413 949 004424 951 004431 952 004434 953 004436 954 004440 955 004442 957 004445 959 004510 961 004552 962 004607 963 004651 965 004661 966 004715 970 004757 972 004771 973 004772 975 004774 981 005052 984 005053 992 005054 993 005057 994 005061 995 005066 998 005074 1000 005103 1001 005105 1004 005106 1006 005123 1007 005124 1008 005125 1009 005132 1011 005133 1014 005134 1015 005137 1016 005150 1019 005165 1020 005227 1024 005247 1025 005254 1027 005263 1028 005265 1029 005266 1030 005273 1031 005274 1032 005275 1033 005276 1034 005310 1038 005311 1040 005315 1043 005316 1060 005320 1061 005322 1062 005323 1064 005324 1065 005335 1066 005342 1072 005360 1073 005361 1076 005371 1077 005373 1079 005374 1084 005416 1086 005420 1087 005427 1089 005432 1091 005442 1093 005445 1097 005512 1098 005515 1099 005517 1100 005521 1103 005522 1105 005524 1106 005525 1107 005536 1109 005552 1111 005562 1113 005611 1115 005630 1117 005631 1128 005632 1129 005633 1130 005634 1131 005645 1132 005652 1138 005674 1139 005675 1140 005700 1142 005707 1143 005717 1144 005721 1147 005726 1149 005730 1150 005742 1151 006016 1153 006023 1156 006031 1159 006032 1168 006033 1170 006034 1173 006045 1174 006047 1175 006051 1177 006055 1186 006065 1187 006073 1188 006077 1192 006104 1194 006107 1196 006117 1197 006122 1198 006124 1199 006126 1201 006127 1202 006130 1204 006131 1205 006132 1208 006134 1210 006136 1212 006141 1216 006142 1224 006144 1225 006145 1227 006157 1229 006162 1230 006164 1231 006171 1234 006236 1235 006242 1236 006245 1237 006247 1238 006251 1239 006253 1240 006256 1241 006313 1244 006356 1248 006371 1255 006373 1256 006375 1259 006404 1260 006406 1263 006437 1268 006470 1270 006471 1277 006472 1279 006501 1280 006543 1281 006560 1282 006571 1284 006637 1286 006656 1287 006661 1288 006664 1289 006725 1290 006736 1295 006743 1297 006755 1298 006756 1299 006777 1300 007004 1303 007021 1306 007056 1308 007114 1313 007133 1316 007134 1323 007135 1325 007141 1326 007142 1327 007146 1328 007151 1330 007152 1331 007155 1334 007167 1337 007170 1339 007177 1351 007204 1354 007250 1356 007276 1357 007300 1359 007303 1360 007305 1362 007306 1364 007310 1365 007344 1366 007347 1368 007350 1370 007352 1371 007356 1373 007367 1374 007370 1375 007373 1378 007374 1379 007430 1380 007433 1384 007434 1386 007437 1387 007443 1388 007447 1390 007454 1392 007455 1398 007456 1401 007463 1403 007471 1404 007516 1405 007520 1406 007527 1410 007546 1411 007552 1412 007554 1414 007574 1416 007575 1417 007600 1420 007601 1423 007610 1424 007613 1425 007615 1427 007635 1429 007636 1430 007641 1433 007642 1434 007650 1435 007731 1439 007776 1440 010001 1444 010002 1451 010003 1454 010010 1455 010025 1456 010030 1459 010031 1461 010033 1463 010036 1465 010044 1466 010047 1468 010050 1474 010065 1476 010075 1478 010123 1479 010143 1481 010152 1482 010155 1487 010156 1498 010177 1500 010207 1502 010235 1503 010255 1504 010260 1508 010261 1509 010262 1510 010265 1522 010267 1523 010271 1524 010331 1526 010346 1527 010357 1528 010364 1529 010367 1531 010372 1534 010427 1537 010470 1539 010530 1541 010547 1542 010551 1545 010553 1548 010557 1552 010627 1554 010641 1555 010644 1558 010645 1561 010654 1562 010657 1565 010660 1566 010665 1567 010667 1568 010672 1569 010674 1570 010676 1574 010716 1577 010717 1584 010720 1586 010727 1587 010732 1589 010733 1591 010736 1594 010737 1597 010745 1599 010774 1600 010777 1601 011003 1603 011006 1604 011015 1606 011026 1608 011060 1609 011113 1610 011116 1611 011150 1612 011154 1617 011157 1618 011162 1619 011210 1623 011211 1624 011217 1626 011226 1627 011254 1628 011317 1629 011324 1630 011366 1631 011372 1633 011375 1635 011400 1636 011416 1638 011450 1639 011454 1640 011455 1644 011461 1646 011465 1649 011473 1651 011476 1657 011500 1659 011514 1660 011546 1661 011553 1664 011556 1666 011562 1668 011563 1669 011564 1670 011570 1671 011575 1672 011626 1674 011627 1675 011653 1676 011656 1677 011662 1678 011665 1680 011721 1683 011722 1684 011726 1686 011767 1691 011772 1693 012014 1694 012020 1695 012023 1697 012031 1698 012032 1699 012034 1701 012036 1703 012042 1704 012046 1706 012051 1707 012054 1708 012057 1711 012060 1716 012061 1719 012070 1721 012073 1724 012103 1727 012107 1730 012113 1732 012116 1734 012120 1740 012125 1745 012135 1747 012142 1753 012151 1754 012154 1763 012173 1764 012201 1765 012204 1768 012205 1772 012206 1782 012207 1785 012216 1789 012233 1790 012240 1791 012245 1793 012255 1795 012260 1799 012303 1800 012310 1801 012315 1803 012326 1805 012331 1811 012354 1813 012375 1819 012400 1821 012417 1823 012432 1824 012435 1826 012436 1830 012437 1836 012440 1837 012441 1839 012444 1840 012447 1841 012453 1842 012461 1844 012472 1846 012476 1847 012501 1849 012502 1850 012510 1851 012513 1855 012514 1856 012521 1857 012530 1859 012542 1872 012550 1874 012553 1876 012571 1878 012574 1879 012605 1882 012622 1883 012664 1886 012704 1887 012705 1888 012706 1889 012707 1890 012721 1893 012722 1894 012730 1895 012732 1897 012734 1899 012735 1900 012740 1901 012742 1904 012743 1906 012744 1907 012747 1908 012753 1909 012761 1911 012772 1913 013001 1914 013004 1915 013006 1919 013007 1922 013010 1925 013011 1926 013014 1927 013044 1928 013046 1930 013055 1931 013060 1932 013062 1938 013063 1939 013064 1941 013065 1943 013066 1945 013073 1948 013143 1949 013160 1950 013161 1952 013165 1953 013170 1954 013172 1958 013174 1960 013176 1961 013215 1963 013231 1965 013233 1970 013242 1972 013251 1973 013254 1975 013255 1976 013256 1980 013262 1981 013324 1983 013326 1985 013327 1987 013330 1989 013333 1992 013334 1997 013335 1998 013341 2000 013344 2002 013351 2003 013353 2008 013354 2009 013357 2011 013360 2012 013361 2014 013364 2016 013366 2018 013400 2019 013406 2020 013414 2021 013417 2022 013422 2023 013424 2024 013426 2025 013430 2026 013432 2028 013436 2029 013440 2031 013442 2032 013446 2035 013454 2037 013461 2038 013463 2039 013465 2040 013466 2042 013474 2044 013475 2045 013502 2048 013510 2049 013511 2051 013512 2055 013513 2058 013514 2059 013516 2060 013522 2061 013523 2065 013524 2076 013525 2078 013531 2080 013550 2081 013571 2082 013573 2084 013574 2089 013613 2091 013626 2092 013631 2094 013632 2098 013633 2101 013634 2103 013641 2104 013644 2105 013647 2116 013650 2117 013654 2118 013660 2120 013672 2122 013677 2124 013712 2126 013721 2128 013726 2132 013733 2136 013734 2141 013736 2143 013743 2144 013746 2146 013752 2147 013756 2148 013757 2149 013761 2151 013770 2156 013772 2157 013775 2158 014000 2159 014002 2160 014003 2161 014005 2162 014010 2163 014013 2165 014014 2167 014026 2170 014063 2171 014105 2173 014110 2176 014113 2182 014115 2183 014122 2188 014124 2190 014126 2194 014127 2209 014130 2210 014134 2212 014143 2214 014145 2216 014163 2217 014164 2218 014167 2221 014170 2223 014171 2232 014172 2235 014237 2236 014250 2237 014271 2240 014300 2242 014303 2243 014333 2244 014345 2245 014367 2248 014376 2250 014401 2251 014431 2256 014432 2271 014433 2276 014444 2277 014447 2278 014452 2279 014455 2281 014456 2284 014457 2287 014467 2288 014477 2291 014503 2292 014506 2293 014510 2298 014514 2300 014527 2301 014531 2304 014534 2307 014535 2312 014536 2313 014542 2314 014545 2315 014550 2317 014551 2318 014555 2319 014556 2321 014562 2322 014566 2323 014573 2324 014574 2326 014576 2327 014600 2328 014606 2329 014611 2330 014614 2333 014615 2334 014620 2339 014621 2340 014626 2341 014630 2344 014632 2347 014633 2354 014634 2358 014705 2359 014711 2360 014712 2361 014713 2363 014717 2367 014735 2370 014742 2373 014747 2374 014752 2377 014753 2378 014761 2382 014762 2386 015022 2388 015032 2390 015033 2394 015044 2396 015047 2397 015051 2400 015052 2401 015053 2403 015063 2406 015064 2409 015065 2410 015070 2411 015074 2412 015077 2413 015102 2415 015104 2419 015105 2422 015106 2423 015107 2424 015110 2427 015111 2432 015113 2434 015121 2435 015136 2438 015137 2443 015150 2445 015162 2447 015166 2449 015176 2452 015205 2454 015222 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved