COMPILATION LISTING OF SEGMENT send_ls_request_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1311.3 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1987 * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(86-06-01,Coren), approve(87-07-13,MCR7737), 12* audit(87-07-24,Brunelle), install(87-08-04,MR12.1-1055): 13* Initially written. 14* 2) change(87-03-10,GDixon), approve(87-07-13,MCR7737), 15* audit(87-07-24,Brunelle), install(87-08-04,MR12.1-1055): 16* Corrected coding standard violations. 17* END HISTORY COMMENTS */ 18 19 /* format: style4,indattr */ 20 21 send_ls_request_: 22 procedure (P_ls_request_ptr, P_ls_request_lth, P_ls_ipc_reply_ptr, 23 P_code); 24 25 /* Parameters */ 26 27 dcl P_ls_request_ptr ptr parameter; 28 dcl P_ls_request_lth fixed bin (18) parameter; 29 dcl P_ls_ipc_reply_ptr ptr parameter; 30 dcl P_code fixed bin (35) parameter; 31 32 /* Automatic */ 33 34 dcl 1 auto_event_wait_info aligned like event_wait_info automatic; 35 dcl code fixed bin (35) automatic; 36 dcl created_event_channel bit (1) aligned automatic; 37 dcl event_channel fixed bin (71) automatic; 38 dcl ls_request_lth fixed bin (18) automatic; 39 dcl request_ms_dirname char (168) automatic; 40 dcl request_ms_entryname char (32) automatic; 41 dcl server_event_channel fixed bin (71) automatic; 42 dcl server_process_id bit (36) aligned automatic; 43 44 /* Entries */ 45 46 dcl hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 47 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 48 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 49 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 50 dcl login_server_info_$request_info entry (bit (36) aligned, fixed bin (71), 51 char (*), char (*), fixed bin (35)); 52 dcl message_segment_$add_file entry (char (*), char (*), ptr, fixed bin, bit (72) aligned, fixed bin (35)); 53 54 /* External */ 55 56 dcl error_table_$null_info_ptr fixed bin (35) ext static; 57 dcl error_table_$smallarg fixed bin (35) ext static; 58 dcl error_table_$unimplemented_version fixed bin (35) ext static; 59 60 /* Constant */ 61 62 dcl TRUE bit (1) aligned initial ("1"b) internal static options (constant); 63 dcl FALSE bit (1) aligned initial ("0"b) internal static options (constant); 64 65 66 /* BUILTINS */ 67 68 dcl (addr, currentsize, null, unspec) 69 builtin; 70 71 72 /* CONDITIONS */ 73 74 dcl cleanup condition; 75 76 /* Program */ 77 78 created_event_channel = FALSE; 79 on cleanup 80 call Clean_Up (); 81 82 ls_request_ptr = P_ls_request_ptr; 83 ls_request_lth = P_ls_request_lth; 84 ls_reply_message_ptr = P_ls_ipc_reply_ptr; 85 86 if ls_request_ptr = null () then do; 87 code = error_table_$null_info_ptr; 88 goto RETURN; 89 end; 90 if ls_request_lth < currentsize (ls_request_header) then do; 91 code = error_table_$smallarg; 92 goto RETURN; 93 end; 94 95 if ls_request_header.header_version ^= 96 LS_REQUEST_HEADER_VERSION_1 then do; 97 code = error_table_$unimplemented_version; 98 goto RETURN; 99 end; 100 101 call login_server_info_$request_info (server_process_id, 102 server_event_channel, request_ms_dirname, request_ms_entryname, 103 code); 104 if code ^= 0 then 105 goto RETURN; 106 107 if ls_request_header.reply_event_channel = 0 then do; 108 created_event_channel = TRUE; 109 call ipc_$create_ev_chn (event_channel, code); 110 if code ^= 0 then 111 goto RETURN; 112 ls_request_header.reply_event_channel = event_channel; 113 end; 114 115 call message_segment_$add_file (request_ms_dirname, 116 request_ms_entryname, ls_request_ptr, ls_request_lth * 36, 117 (""b), code); 118 if code ^= 0 then 119 goto RETURN; 120 121 call hcs_$wakeup (server_process_id, server_event_channel, -1, code); 122 if code ^= 0 then 123 goto RETURN; 124 125 event_wait_channel.n_channels = 1; 126 event_wait_channel.pad = ""b; 127 event_wait_channel.channel_id = ls_request_header.reply_event_channel; 128 event_wait_info_ptr = addr (auto_event_wait_info); 129 130 BLOCK_AGAIN: 131 call ipc_$block (addr (event_wait_channel), 132 event_wait_info_ptr, code); 133 if code ^= 0 then 134 goto RETURN; 135 136 /**** For now, the formats are the same, but this might change. Fill in the 137* ipc reply output structure. */ 138 139 unspec (ls_reply_message) = unspec (event_wait_info.message); 140 code = 0; 141 RETURN: 142 P_code = code; 143 return; 144 145 Clean_Up: 146 procedure (); 147 148 if created_event_channel then 149 call ipc_$delete_ev_chn (event_channel, (0)); 150 return; 151 end Clean_Up; 152 153 /* format: off */ 154 /* BEGIN INCLUDE FILE ... event_wait_channel.incl.pl1 */ 1 2 1 3 /* ipc_$block wait list with one channel 1 4* 1 5* Written 9-May-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 declare 1 event_wait_channel aligned, 1 9 2 n_channels fixed bin initial (1), /* number of channels */ 1 10 2 pad bit (36), 1 11 2 channel_id (1) fixed bin (71); /* event channel to wait on */ 1 12 1 13 /* END INCLUDE FILE ... event_wait_channel.incl.pl1 */ 154 155 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 2 2 2 3 /* T. Casey, May 1978 */ 2 4 2 5 dcl event_wait_info_ptr ptr; 2 6 2 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 2 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 2 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 2 10 2 sender bit (36), /* process id of sender */ 2 11 2 origin, 2 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 2 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 2 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 2 15 2 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 155 156 /* BEGIN INCLUDE FILE ... login_server_messages.incl.pl1 */ 3 2 3 3 /****^ HISTORY COMMENTS: 3 4* 1) change(86-06-30,Coren), approve(86-06-30,MCR7415), 3 5* audit(86-07-02,Margolin), install(86-07-11,MR12.0-1092): 3 6* Initial implementation. 3 7* 2) change(87-04-16,GDixon), approve(87-07-13,MCR7679), 3 8* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 3 9* A) Add REQUEST_TYPES and RESPONSE_TYPES arrays. 3 10* B) Add login_server_validate_response.last_incorrect_password.time. 3 11* C) Add user_connection_info.line_type. 3 12* D) Add login_server_process_request.minimum_ring. 3 13* 3) change(87-05-14,GDixon), approve(87-07-13,MCR7737), 3 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 3 15* A) Add login_server_process_response.brief. 3 16* B) Add login_server_list_response.initial_ring. 3 17* C) Separate login_server_process_response into fixed and variable parts. 3 18* D) Move user_connection_info into login_server_request_header. 3 19* END HISTORY COMMENTS */ 3 20 3 21 /* This include file defines all the structures passed in message segments 3 22* between a login server process and the Initializer (or "answering service") 3 23* process. For convenience, messages from the server to the initializer, 3 24* passed using the send_ls_request_ subroutine, are called "requests"; 3 25* messages from the initializer to the server, passed using the user_message_ 3 26* mechanism, are called "responses". 3 27**/ 3 28 3 29 /* Request types */ 3 30 3 31 dcl (LS_VALIDATE_REQUEST initial (1), /* validate user ID and password */ 3 32 LS_PROCESS_REQUEST initial (2), /* create or connect to a process */ 3 33 LS_LIST_REQUEST initial (3), /* list disconnected processes */ 3 34 LS_DIAL_REQUEST initial (4), /* find a dial server */ 3 35 LS_DISCONNECT_REQUEST initial (5), /* report disconnection of a login channel */ 3 36 LS_LOGOUT_REQUEST initial (6), /* discard UTE (end of dialogue) */ 3 37 LS_OPERATOR_REQUEST initial (7)) /* log the user in as an operator */ 3 38 fixed bin internal static options (constant); 3 39 3 40 dcl LS_REQUEST_TYPES (7) char (10) internal static options (constant) initial 3 41 ( 3 42 "validate", 3 43 "process", 3 44 "list", 3 45 "dial", 3 46 "disconnect", 3 47 "logout", 3 48 "operator"); 3 49 3 50 dcl ls_request_ptr pointer; 3 51 3 52 /* common header for all requests */ 3 53 3 54 dcl 1 ls_request_header aligned based (ls_request_ptr), 3 55 2 header_version char (8), /* version for this header */ 3 56 2 request_version char (8), /* varies depending on the request */ 3 57 2 request_type fixed bin, 3 58 2 pad1 bit (36), 3 59 2 reply_event_channel fixed bin (71), /* event channel over which reply_message should be sent */ 3 60 2 reply_handle bit (72) aligned, /* used for dispatching response */ 3 61 2 connection_info like user_connection_info; /* connection making this request. */ 3 62 3 63 dcl LS_REQUEST_HEADER_VERSION_1 char (8) initial ("lsrh0001") internal static options (constant); 3 64 3 65 dcl 1 user_connection_info aligned based, /* common info passed in most requests */ 3 66 2 connection_name char (32), 3 67 2 access_class_range (2) bit (72), 3 68 2 terminal_type char (32), 3 69 2 terminal_id char (4), 3 70 2 line_type fixed bin; 3 71 3 72 3 73 3 74 /* "validate" request: validate user ID and password */ 3 75 3 76 dcl 1 login_server_validate_request aligned based (ls_request_ptr), 3 77 2 header like ls_request_header, /* request_type = LS_VALIDATE_REQUEST */ 3 78 2 current_password char (8), /* scrambled */ 3 79 2 authorization bit (72), /* only valid if auth_given = "1"b */ 3 80 2 terminate_event_channel fixed bin (71), /* event channel to notify server when process terminates */ 3 81 2 person_id char (22), /* as specified in login line */ 3 82 2 project_id char (9), /* likewise, might be null string */ 3 83 2 network_connection_type fixed bin, /* see below for values */ 3 84 2 new_password char (8), /* only valid if change_password = "1"b */ 3 85 2 flags, 3 86 3 gpw bit (1) unaligned, /* password generated in response to -generate_password */ 3 87 3 auth_given bit (1) unaligned, /* -authorization specified */ 3 88 3 anonymous bit (1) unaligned, /* "enterp" request */ 3 89 3 anon_no_password bit (1) unaligned, /* "enter" request */ 3 90 3 change_password bit (1) unaligned, /* gave -cpw or -gpw */ 3 91 3 change_default_auth bit (1) unaligned, /* gave -change_default_authorization */ 3 92 3 change_default_proj bit (1) unaligned, /* gave -change_default_project */ 3 93 3 operator bit (1) unaligned, /* gave -operator */ 3 94 3 pad bit (28) unaligned; 3 95 3 96 3 97 dcl LS_VALIDATE_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsvr0001"); 3 98 3 99 3 100 3 101 /* "process" request: create a process or reconnect to an existing process for the specified user */ 3 102 3 103 dcl 1 login_server_process_request aligned based (ls_request_ptr), 3 104 2 fixed_part, /* to allow for automatic copies */ 3 105 3 header like ls_request_header, /* request_type = LS_PROCESS_REQUEST */ 3 106 3 handle bit (72), /* as provided in validate_response */ 3 107 3 person_id char (22), /* the real one */ 3 108 3 project_id char (9), /* likewise */ 3 109 3 project_pad fixed bin, 3 110 3 command_type fixed bin, /* login, connect, etc.; see below for names */ 3 111 3 process_number fixed bin, /* 0 if unspecified or irrelevant */ 3 112 3 default_io_module char (32), /* I/O module to use if no outer_module specified */ 3 113 3 switch_flags, /* used to indicate if "switch"-type control args were specified */ 3 114 4 warn_given bit (1) unaligned, 3 115 4 force_given bit (1) unaligned, 3 116 4 save_given bit (1) unaligned, 3 117 4 preempt_given bit (1) unaligned, 3 118 4 brief_given bit (1) unaligned, 3 119 4 pad2 bit (31) unaligned, 3 120 3 switch_values, /* these are only valid if corresponding bit in switch_flags is on */ 3 121 4 warn bit (1) unaligned, 3 122 4 force bit (1) unaligned, 3 123 4 save_on_disconnect bit (1) unaligned, 3 124 4 preempt bit (1) unaligned, 3 125 4 brief bit (1) unaligned, /* "0"b & brief_given => -long */ 3 126 4 pad3 bit (31) unaligned, 3 127 3 other_flags, 3 128 4 init_ring_given bit (1) unaligned, /* "1"b if -ring */ 3 129 4 minimum_ring_given bit (1) unaligned, /* "1"b if MNA terminal interface ring > 1 */ 3 130 4 immediate bit (1) unaligned, /* "1"b => -new_proc (or -destroy) -immediate */ 3 131 4 no_start_up bit (1) unaligned, /* "1"b if -no_start_up */ 3 132 4 pad4 bit (32) unaligned, 3 133 3 initial_ring fixed bin, /* valid iff init_ring_given = "1"b */ 3 134 3 minimum_ring fixed bin, /* ring in which MNA terminal mgr operates */ 3 135 3 home_dir char (168), /* null if not specified */ 3 136 3 outer_module char (32), /* likewise */ 3 137 3 process_overseer char (168), /* likewise */ 3 138 3 subsystem char (168), /* likewise */ 3 139 3 n_args fixed bin, /* how many arguments specified after -ag; if 0, ignore the rest of the structure */ 3 140 2 login_arguments, /* variable part, describes stuff after -ag */ 3 141 3 arg_string_length fixed bin (21), 3 142 3 args (ls_process_request_n_args refer (login_server_process_request.n_args)), 3 143 4 start_index fixed bin (21), /* position in arg_string at which arg (i) starts */ 3 144 4 arg_length fixed bin (21), /* length of arg (i) */ 3 145 3 arg_string char (ls_process_request_arg_string_length refer (login_server_process_request.arg_string_length)); 3 146 3 147 dcl ls_process_request_n_args fixed bin; 3 148 dcl ls_process_request_arg_string_length fixed bin (21); 3 149 3 150 dcl LS_PROCESS_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lspr0001"); 3 151 3 152 3 153 3 154 /* "list" request: list the user's disconnected processes, if any */ 3 155 3 156 dcl 1 login_server_list_request aligned based (ls_request_ptr), 3 157 2 header like ls_request_header, /* request_type = LS_LIST_REQUEST */ 3 158 2 handle bit (72); 3 159 3 160 dcl LS_LIST_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lslr0001"); 3 161 3 162 3 163 3 164 /* "dial" request: find a process to accept a dial */ 3 165 3 166 /* Note: because a dial request may or may not have been preceded 3 167* by a validate request/response, the initializer_handle may be null. 3 168**/ 3 169 3 170 dcl 1 login_server_dial_request aligned based (ls_request_ptr), 3 171 2 header like ls_request_header, /* request_type = LS_DIAL_REQUEST */ 3 172 2 initializer_handle bit (72), /* as provided in validate_response (if any) */ 3 173 2 terminate_event_channel fixed bin (71), /* event channel to wake up login server when master process terminates */ 3 174 2 dial_qualifier char (22), 3 175 2 person_id char (22), /* null if not specified */ 3 176 2 project_id char (9), /* likewise */ 3 177 2 user_person_id char (22), /* if -user was specified, otherwise "" */ 3 178 2 user_project_id char (9); /* likewise */ 3 179 3 180 dcl LS_DIAL_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsdr0001"); 3 181 3 182 3 183 3 184 /* "disconnect" request: report that a login channel has disconnected */ 3 185 /* Note: this message is sent if the connection is broken either during the login dialogue 3 186* or later on when the process was using it */ 3 187 3 188 dcl 1 login_server_disconnect_request aligned based (ls_request_ptr), 3 189 2 header like ls_request_header, /* request_type = LS_DISCONNECT_REQUEST */ 3 190 2 handle bit (72), /* from original validate_response */ 3 191 2 process_id bit (36); /* ""b if no process established */ 3 192 3 193 dcl LS_DISCONNECT_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsdc0001"); 3 194 3 195 3 196 3 197 /* "logout" request: indicates that user entered the "logout" request, ending the dialogue; does not require any response */ 3 198 3 199 dcl 1 login_server_logout_request aligned based (ls_request_ptr), 3 200 2 header like ls_request_header, /* request_type = LS_LOGOUT_REQUEST */ 3 201 2 handle bit (72); 3 202 3 203 dcl LS_LOGOUT_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lslg0001"); 3 204 3 205 3 206 3 207 /* "operator" request: sign the user on as an operator, the result of either 3 208* "login -operator" or "dial system". Note that in the latter case, there may 3 209* not have been a validate request (if the -user control argument wasn't specified), 3 210* in which case initializer_handle is null, and the person_id and project_id 3 211* are blank. 3 212**/ 3 213 3 214 dcl 1 login_server_operator_request aligned based (ls_request_ptr), 3 215 2 header like ls_request_header, /* request_type = LS_OPERATOR_REQUEST */ 3 216 2 initializer_handle bit (72) aligned, /* as provided in validate_response (if any) */ 3 217 2 terminate_event_channel fixed bin (71), /* event channel for wakeup when connection is dropped */ 3 218 2 person_id char (22), /* likewise */ 3 219 2 project_id char (9), /* likewise */ 3 220 2 virtual_channel char (32); /* if -virtual_channel specified, otherwise "" */ 3 221 3 222 dcl LOGIN_SERVER_OPERATOR_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsor0001"); 3 223 3 224 3 225 3 226 /* Response types */ 3 227 3 228 dcl (LS_UNKNOWN_RESPONSE initial (100), /* unknown response type. */ 3 229 LS_VALIDATE_RESPONSE initial (101), /* response to validation request */ 3 230 LS_PROCESS_RESPONSE initial (102), /* response to process request */ 3 231 LS_LIST_RESPONSE initial (103), /* response to list request */ 3 232 LS_DIAL_RESPONSE initial (104), /* response to dial request */ 3 233 LS_TERMINATION_RESPONSE initial (105), /* to notify server of a logout */ 3 234 LS_NEW_PROC_RESPONSE initial (106), /* to notify server of process termination */ 3 235 LS_OPERATOR_RESPONSE initial (107)) /* response to operator request */ 3 236 fixed bin internal static options (constant); 3 237 3 238 dcl LS_RESPONSE_TYPES (100:107) char (10) internal static options (constant) initial 3 239 ( 3 240 "UNKNOWN", 3 241 "validate", 3 242 "process", 3 243 "list", 3 244 "dial", 3 245 "terminate", 3 246 "new_proc", 3 247 "operator"); 3 248 3 249 /* NOTE: the server_handle is not included in the response structures because 3 250* it is provided in the user_message_ structures */ 3 251 3 252 3 253 3 254 dcl ls_response_ptr pointer; 3 255 3 256 /* common header for all responses */ 3 257 3 258 dcl 1 login_server_response_header aligned based (ls_response_ptr), 3 259 2 message_type fixed bin, 3 260 2 header_pad bit (36), /* force doubleword alignment */ 3 261 2 version char (8); 3 262 3 263 3 264 3 265 /* "validate" response: indicate whether user_id/password is valid */ 3 266 3 267 dcl 1 login_server_validate_response aligned based (ls_response_ptr), 3 268 2 header like login_server_response_header, /* message_type = LS_VALIDATE_RESPONSE */ 3 269 2 handle bit (72), /* to be provided by the server in subsequent */ 3 270 /* messages for the same connection */ 3 271 2 authorization bit (72), /* default if none was supplied */ 3 272 2 authorization_range (2) bit (72), /* authorization range permitted for this user */ 3 273 2 status_code fixed bin (35), /* 0 iff user is validated */ 3 274 2 person_id char (22), /* primary name from the PNT */ 3 275 2 project_id char (9), /* primary name from the PNT or PDT */ 3 276 2 n_disconnected_processes fixed bin, /* number of disconnected processes for specified user */ 3 277 2 validate_pad fixed bin, 3 278 2 previous_login_info, /* for printing login message */ 3 279 3 time fixed bin (71), 3 280 3 terminal_type char (32), 3 281 3 terminal_id char (4), 3 282 2 incorrect_passwords fixed bin, /* number of times password given incorrectly */ 3 283 2 last_incorrect_password, /* where it came from */ 3 284 3 time fixed bin (71), 3 285 3 terminal_type char (32), 3 286 3 terminal_id char (4), 3 287 2 password_interval fixed bin, /* limit (in days) for password use or change */ 3 288 2 flags, 3 289 3 disconnect bit (1) unaligned, /* if "1"b, close the connection immediately */ 3 290 3 password_changed bit (1) unal, /* "1"b => changed password */ 3 291 3 default_auth_changed bit (1) unal, /* "1"b => changed default authorization */ 3 292 3 default_proj_changed bit (1) unal, /* "1"b => changed default project */ 3 293 3 password_expired bit (1) unal, /* "1"b => password not changed recently enough */ 3 294 3 password_unused_too_long bit (1) unal, /* "1"b => password hasn't been used recently */ 3 295 3 pad bit (30) unaligned; 3 296 3 297 dcl LS_VALIDATE_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsvs0001"); 3 298 3 299 3 300 3 301 /* "process" response: responds to request to create or connect */ 3 302 3 303 dcl 1 login_server_process_response aligned based (ls_response_ptr), 3 304 2 fixed_part, 3 305 3 header like login_server_response_header, /* message_type = LS_PROCESS_RESPONSE */ 3 306 3 status_code fixed bin (35), /* 0 iff process was created or requested process exists */ 3 307 3 process_id bit (36), 3 308 3 new_handle bit (72), /* changed if reconnecting, etc. to preexisting process, all 0 otherwise */ 3 309 3 authorization bit (72), /* authorization of created or existing process */ 3 310 3 process_group_id char (32), /* Person.Project.tag */ 3 311 3 process_number fixed bin, /* as in, "Your disconnected process #2..." */ 3 312 3 n_disconnected_processes fixed bin, /* valid even if code ^= 0, e.g., if request was ambiguous */ 3 313 3 start_event_channel fixed bin (71), /* event channel to wake up user process on */ 3 314 3 login_instance fixed bin, /* "This is your Nth interactive login" */ 3 315 3 accounting_info, /* for destroyed process, if any */ 3 316 4 cpu_usage fixed bin (71), 3 317 4 cost float bin, 3 318 3 flags, /* except for disconnect and logout, invalid if status_code ^= 0 */ 3 319 4 disconnect bit (1) unaligned, /* "1"b => break the connection immediately */ 3 320 4 logout bit (1) unaligned, /* "1"b => restart login sequence */ 3 321 4 created bit (1) unaligned, /* "1"b => new process created */ 3 322 4 connected bit (1) unaligned, /* "1"b => connected to old process */ 3 323 4 new_proc bit (1) unaligned, /* "1"b => connected after new_proc */ 3 324 4 destroyed bit (1) unaligned, /* "1"b => process destroyed */ 3 325 4 anonymous bit (1) unaligned, /* "1"b => anonymous user ("enter" or "enterp") */ 3 326 4 already_logged_in bit (1) unaligned, /* "1"b => user can't log in because he already is */ 3 327 4 message_coordinator bit (1) unaligned, /* "1"b => this connection is going to be used by the message coordinator */ 3 328 4 brief bit (1) unaligned, /* "1"b => brief user attribute from PDT */ 3 329 4 pad bit (26) unaligned, 3 330 3 initial_ring fixed bin, /* ring in which process was created */ 3 331 3 already_logged_in_info, /* relevant if already_logged_in flag is "1"b */ 3 332 4 connection_name char (32), 3 333 4 terminal_type char (32), 3 334 4 terminal_id char (4), 3 335 2 accounting_message_struc, /* character string assembled by initializer giving error or warnings about the user's account */ 3 336 3 accounting_message_length fixed bin, 3 337 3 accounting_message char (ls_process_response_accounting_message_length refer (login_server_process_response.accounting_message_length)); 3 338 3 339 dcl ls_process_response_accounting_message_length fixed bin; 3 340 3 341 dcl LOGIN_SERVER_PROCESS_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsps0001"); 3 342 3 343 3 344 3 345 /* "list" response: used if create request specified "list" command */ 3 346 3 347 dcl 1 login_server_list_response aligned based (ls_response_ptr), 3 348 2 header like login_server_response_header, /* message_type = LS_LIST_RESPONSE */ 3 349 2 n_processes fixed bin, /* number of disconnected processes (might be 0) */ 3 350 2 pad_header fixed bin, 3 351 2 process_info (login_server_list_response_n_processes refer (login_server_list_response.n_processes)), 3 352 3 creation_time fixed bin (71), 3 353 3 authorization bit (72), 3 354 3 initial_ring fixed bin, 3 355 3 pad_process_info fixed bin, 3 356 3 connection_info like user_connection_info; 3 357 3 358 dcl login_server_list_response_n_processes fixed bin; 3 359 3 360 dcl LOGIN_SERVER_LIST_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lslr0001"); 3 361 3 362 3 363 3 364 /* "dial" response: response to dial request */ 3 365 3 366 dcl 1 login_server_dial_response aligned based (ls_response_ptr), 3 367 2 header like login_server_response_header, /* message_type = LS_DIAL_RESPONSE */ 3 368 2 status_code fixed bin (35), /* 0 iff dial server was found and all is OK */ 3 369 2 process_id bit (36), /* of dial server */ 3 370 2 process_group_id char (32), /* likewise */ 3 371 2 authorization bit (72), /* likewise, to make sure connection is usable */ 3 372 2 start_event_channel fixed bin (71), /* event channel to wake up user process on */ 3 373 2 process_ring fixed bin, /* initial ring of dial server */ 3 374 2 flags, 3 375 3 disconnect bit (1) unaligned, /* "1"b => break connection immediately */ 3 376 3 pad bit (35) unaligned; 3 377 3 378 dcl LOGIN_SERVER_DIAL_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsds0001"); 3 379 3 380 3 381 3 382 /* "termination" response: (not a response to anything): notify server that a 3 383* process terminated other than by logout */ 3 384 3 385 dcl 1 login_server_termination_response aligned based (ls_response_ptr), 3 386 2 header like login_server_response_header, /* message_type = LS_TERMINATION_RESPONSE */ 3 387 2 accounting_info, /* for printing in logout message */ 3 388 3 cpu_usage fixed bin (71), 3 389 3 cost float bin, 3 390 3 pad bit (33) unaligned, 3 391 2 process_id bit (36), /* of the logged-out process */ 3 392 2 process_group_id char (32), 3 393 2 status_code fixed bin (35), /* e.g., to indicate reason for fatal error */ 3 394 2 flags, 3 395 3 logout bit (1) aligned, /* no new process coming */ 3 396 3 automatic_logout bit (1) unaligned, 3 397 3 hold bit (1) unaligned, 3 398 3 brief bit (1) unaligned, 3 399 3 new_proc bit (1) unaligned, /* user-requested new process */ 3 400 3 fatal_error bit (1) unaligned, /* process died unexpectedly */ 3 401 3 fpe_caused_logout bit (1) unaligned, /* fatal error doesn't generate new process */ 3 402 3 fpe_loop bit (1) unaligned, /* fatal error loop: too many in too short a time */ 3 403 3 fpe_during_init bit (1) unaligned, /* fatal error during process initialization */ 3 404 3 offer_help bit (1) unaligned, /* print a message offering "help" */ 3 405 3 pad bit (27) unaligned; 3 406 3 407 dcl LOGIN_SERVER_TERMINATION_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lstr0001"); 3 408 3 409 3 410 3 411 /* "new_proc" response: (not actually a response to anything) -- describes a 3 412* new process (after a termination_response) */ 3 413 3 414 dcl 1 login_server_new_proc_response aligned based (ls_response_ptr), 3 415 2 header like login_server_response_header, /* message_type = LS_NEW_PROC_RESPONSE */ 3 416 2 new_authorization bit (72), /* in case of new_proc -auth */ 3 417 2 new_start_event_channel fixed bin (71), /* event channel for starting new process */ 3 418 2 new_process_id bit (36); /* process_id of newly-created process */ 3 419 3 420 dcl LOGIN_SERVER_NEW_PROC_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsnp0001"); 3 421 3 422 3 423 3 424 /* "operator" response: indicates success or failure of operator request */ 3 425 3 426 dcl 1 login_server_operator_response aligned based (ls_response_ptr), 3 427 2 header like login_server_response_header, /* message_type = LS_OPERATOR_RESPONSE */ 3 428 2 status_code fixed bin (35), /* indicates success or failure */ 3 429 2 process_id bit (36), /* process ID of the message coordinator */ 3 430 2 process_group_id char (32), /* Person.Project.tag */ 3 431 2 event_channel fixed bin (71), /* event channel over which to send connect/disconnect wakeups */ 3 432 2 ring fixed bin, /* ring of message coordinator */ 3 433 2 flags, 3 434 3 disconnect bit (1) unaligned, /* "1" => break the connection immediately */ 3 435 3 mbz bit (35) unaligned; 3 436 3 437 3 438 dcl LOGIN_SERVER_OPERATOR_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsos0001"); 3 439 3 440 3 441 /* format of reply message sent to acknowledge receipt of a request */ 3 442 3 443 dcl ls_reply_message_ptr pointer; 3 444 3 445 dcl 1 ls_reply_message aligned based (ls_reply_message_ptr), 3 446 2 code fixed bin (35), 3 447 2 flags, 3 448 3 request_invalid bit (1) unaligned, /* "1"b => could not process request */ 3 449 3 response_sent bit (1) unaligned, /* "1"b => there is a response message */ 3 450 3 as_error_code bit (1) unaligned, /* "1"b => code is from as_error_table_ */ 3 451 3 do_not_reply bit (1) unaligned, /* "1"b => special flag for AS to prevent any reply from being sent to login server */ 3 452 3 mbz bit (32) unaligned; 3 453 3 454 /* The following are values used to identify the various requests internally; those from CREATE_REQ on 3 455* can appear as "command_type" in ls_process_requests. */ 3 456 3 457 dcl (LOGIN_REQ initial (1), 3 458 ENTER_REQ initial (2), 3 459 ENTERP_REQ initial (3), 3 460 CREATE_REQ initial (4), 3 461 DESTROY_REQ initial (5), 3 462 CONNECT_REQ initial (6), 3 463 NEW_PROC_REQ initial (7), 3 464 LIST_REQ initial (8)) 3 465 fixed bin internal static options (constant); 3 466 3 467 /* The following are the possible values for login_server_validate_request.network_connection_type. 3 468* They are used by the initializer to select a default process overseer and an instance tag. 3 469**/ 3 470 3 471 dcl (NETWORK_CONNECTION_LOGIN initial (1), 3 472 NETWORK_CONNECTION_DSA_FILE_TRANSFER initial (2)) 3 473 fixed bin internal static options (constant); 3 474 3 475 /* END INCLUDE FILE ... login_server_messages.incl.pl1 */ 156 157 158 end send_ls_request_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1221.9 send_ls_request_.pl1 >special_ldd>install>MR12.1-1054>send_ls_request_.pl1 154 1 06/29/79 1728.0 event_wait_channel.incl.pl1 >ldd>include>event_wait_channel.incl.pl1 155 2 06/29/79 1727.8 event_wait_info.incl.pl1 >ldd>include>event_wait_info.incl.pl1 156 3 08/04/87 1139.9 login_server_messages.incl.pl1 >spec>install>1056>login_server_messages.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. FALSE constant bit(1) initial dcl 63 ref 78 LS_REQUEST_HEADER_VERSION_1 000000 constant char(8) initial unaligned dcl 3-63 ref 95 P_code parameter fixed bin(35,0) dcl 30 set ref 21 141* P_ls_ipc_reply_ptr parameter pointer dcl 29 ref 21 84 P_ls_request_lth parameter fixed bin(18,0) dcl 28 ref 21 83 P_ls_request_ptr parameter pointer dcl 27 ref 21 82 TRUE constant bit(1) initial dcl 62 ref 108 addr builtin function dcl 68 ref 128 130 130 auto_event_wait_info 000100 automatic structure level 1 dcl 34 set ref 128 channel_id 2 000212 automatic fixed bin(71,0) array level 2 dcl 1-8 set ref 127* cleanup 000204 stack reference condition dcl 74 ref 79 code 000107 automatic fixed bin(35,0) dcl 35 set ref 87* 91* 97* 101* 104 109* 110 115* 118 121* 122 130* 133 140* 141 created_event_channel 000110 automatic bit(1) dcl 36 set ref 78* 108* 148 currentsize builtin function dcl 68 ref 90 error_table_$null_info_ptr 000024 external static fixed bin(35,0) dcl 56 ref 87 error_table_$smallarg 000026 external static fixed bin(35,0) dcl 57 ref 91 error_table_$unimplemented_version 000030 external static fixed bin(35,0) dcl 58 ref 97 event_channel 000112 automatic fixed bin(71,0) dcl 37 set ref 109* 112 148* event_wait_channel 000212 automatic structure level 1 dcl 1-8 set ref 130 130 event_wait_info based structure level 1 dcl 2-7 event_wait_info_ptr 000216 automatic pointer dcl 2-5 set ref 128* 130* 139 hcs_$wakeup 000010 constant entry external dcl 46 ref 121 header_version based char(8) level 2 dcl 3-54 ref 95 ipc_$block 000012 constant entry external dcl 47 ref 130 ipc_$create_ev_chn 000014 constant entry external dcl 48 ref 109 ipc_$delete_ev_chn 000016 constant entry external dcl 49 ref 148 login_server_info_$request_info 000020 constant entry external dcl 50 ref 101 login_server_response_header based structure level 1 dcl 3-258 ls_reply_message based structure level 1 dcl 3-445 set ref 139* ls_reply_message_ptr 000222 automatic pointer dcl 3-443 set ref 84* 139 ls_request_header based structure level 1 dcl 3-54 set ref 90 ls_request_lth 000114 automatic fixed bin(18,0) dcl 38 set ref 83* 90 115 ls_request_ptr 000220 automatic pointer dcl 3-50 set ref 82* 86 90 95 107 112 115* 127 message 2 based fixed bin(71,0) level 2 dcl 2-7 ref 139 message_segment_$add_file 000022 constant entry external dcl 52 ref 115 n_channels 000212 automatic fixed bin(17,0) initial level 2 dcl 1-8 set ref 125* 1-8* null builtin function dcl 68 ref 86 pad 1 000212 automatic bit(36) level 2 dcl 1-8 set ref 126* reply_event_channel 6 based fixed bin(71,0) level 2 dcl 3-54 set ref 107 112* 127 request_ms_dirname 000115 automatic char(168) unaligned dcl 39 set ref 101* 115* request_ms_entryname 000167 automatic char(32) unaligned dcl 40 set ref 101* 115* server_event_channel 000200 automatic fixed bin(71,0) dcl 41 set ref 101* 121* server_process_id 000202 automatic bit(36) dcl 42 set ref 101* 121* unspec builtin function dcl 68 set ref 139* 139 user_connection_info based structure level 1 dcl 3-65 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CONNECT_REQ internal static fixed bin(17,0) initial dcl 3-457 CREATE_REQ internal static fixed bin(17,0) initial dcl 3-457 DESTROY_REQ internal static fixed bin(17,0) initial dcl 3-457 ENTERP_REQ internal static fixed bin(17,0) initial dcl 3-457 ENTER_REQ internal static fixed bin(17,0) initial dcl 3-457 LIST_REQ internal static fixed bin(17,0) initial dcl 3-457 LOGIN_REQ internal static fixed bin(17,0) initial dcl 3-457 LOGIN_SERVER_DIAL_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-378 LOGIN_SERVER_LIST_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-360 LOGIN_SERVER_NEW_PROC_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-420 LOGIN_SERVER_OPERATOR_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-222 LOGIN_SERVER_OPERATOR_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-438 LOGIN_SERVER_PROCESS_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-341 LOGIN_SERVER_TERMINATION_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-407 LS_DIAL_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_DIAL_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-180 LS_DIAL_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_DISCONNECT_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_DISCONNECT_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-193 LS_LIST_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_LIST_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-160 LS_LIST_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_LOGOUT_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_LOGOUT_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-203 LS_NEW_PROC_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_OPERATOR_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_OPERATOR_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_PROCESS_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_PROCESS_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-150 LS_PROCESS_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_REQUEST_TYPES internal static char(10) initial array unaligned dcl 3-40 LS_RESPONSE_TYPES internal static char(10) initial array unaligned dcl 3-238 LS_TERMINATION_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_UNKNOWN_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_VALIDATE_REQUEST internal static fixed bin(17,0) initial dcl 3-31 LS_VALIDATE_REQUEST_VERSION_1 internal static char(8) initial unaligned dcl 3-97 LS_VALIDATE_RESPONSE internal static fixed bin(17,0) initial dcl 3-228 LS_VALIDATE_RESPONSE_VERSION_1 internal static char(8) initial unaligned dcl 3-297 NETWORK_CONNECTION_DSA_FILE_TRANSFER internal static fixed bin(17,0) initial dcl 3-471 NETWORK_CONNECTION_LOGIN internal static fixed bin(17,0) initial dcl 3-471 NEW_PROC_REQ internal static fixed bin(17,0) initial dcl 3-457 login_server_dial_request based structure level 1 dcl 3-170 login_server_dial_response based structure level 1 dcl 3-366 login_server_disconnect_request based structure level 1 dcl 3-188 login_server_list_request based structure level 1 dcl 3-156 login_server_list_response based structure level 1 dcl 3-347 login_server_list_response_n_processes automatic fixed bin(17,0) dcl 3-358 login_server_logout_request based structure level 1 dcl 3-199 login_server_new_proc_response based structure level 1 dcl 3-414 login_server_operator_request based structure level 1 dcl 3-214 login_server_operator_response based structure level 1 dcl 3-426 login_server_process_request based structure level 1 dcl 3-103 login_server_process_response based structure level 1 dcl 3-303 login_server_termination_response based structure level 1 dcl 3-385 login_server_validate_request based structure level 1 dcl 3-76 login_server_validate_response based structure level 1 dcl 3-267 ls_process_request_arg_string_length automatic fixed bin(21,0) dcl 3-148 ls_process_request_n_args automatic fixed bin(17,0) dcl 3-147 ls_process_response_accounting_message_length automatic fixed bin(17,0) dcl 3-339 ls_response_ptr automatic pointer dcl 3-254 NAMES DECLARED BY EXPLICIT CONTEXT. BLOCK_AGAIN 000305 constant label dcl 130 Clean_Up 000337 constant entry internal dcl 145 ref 79 RETURN 000333 constant label dcl 141 ref 88 92 98 104 110 118 122 133 send_ls_request_ 000031 constant entry external dcl 21 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 530 562 356 540 Length 1024 356 32 226 151 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME send_ls_request_ 200 external procedure is an external procedure. on unit on line 79 78 on unit Clean_Up internal procedure shares stack frame of on unit on line 79. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME send_ls_request_ 000100 auto_event_wait_info send_ls_request_ 000107 code send_ls_request_ 000110 created_event_channel send_ls_request_ 000112 event_channel send_ls_request_ 000114 ls_request_lth send_ls_request_ 000115 request_ms_dirname send_ls_request_ 000167 request_ms_entryname send_ls_request_ 000200 server_event_channel send_ls_request_ 000202 server_process_id send_ls_request_ 000212 event_wait_channel send_ls_request_ 000216 event_wait_info_ptr send_ls_request_ 000220 ls_request_ptr send_ls_request_ 000222 ls_reply_message_ptr send_ls_request_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. hcs_$wakeup ipc_$block ipc_$create_ev_chn ipc_$delete_ev_chn login_server_info_$request_info message_segment_$add_file THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$null_info_ptr error_table_$smallarg error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 21 000024 1 8 000036 78 000040 79 000041 82 000057 83 000063 84 000065 86 000070 87 000074 88 000077 90 000100 91 000103 92 000106 95 000107 97 000113 98 000116 101 000117 104 000150 107 000152 108 000155 109 000157 110 000170 112 000172 115 000175 118 000237 121 000241 122 000260 125 000262 126 000264 127 000265 128 000303 130 000305 133 000322 139 000324 140 000332 141 000333 143 000336 145 000337 148 000340 150 000355 ----------------------------------------------------------- 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