/* BEGIN INCLUDE FILE ... login_server_messages.incl.pl1 */ /****^ HISTORY COMMENTS: 1) change(86-06-30,Coren), approve(86-06-30,MCR7415), audit(86-07-02,Margolin), install(86-07-11,MR12.0-1092): Initial implementation. 2) change(87-04-16,GDixon), approve(87-07-13,MCR7679), audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): A) Add REQUEST_TYPES and RESPONSE_TYPES arrays. B) Add login_server_validate_response.last_incorrect_password.time. C) Add user_connection_info.line_type. D) Add login_server_process_request.minimum_ring. 3) change(87-05-14,GDixon), approve(87-07-13,MCR7737), audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): A) Add login_server_process_response.brief. B) Add login_server_list_response.initial_ring. C) Separate login_server_process_response into fixed and variable parts. D) Move user_connection_info into login_server_request_header. END HISTORY COMMENTS */ /* This include file defines all the structures passed in message segments between a login server process and the Initializer (or "answering service") process. For convenience, messages from the server to the initializer, passed using the send_ls_request_ subroutine, are called "requests"; messages from the initializer to the server, passed using the user_message_ mechanism, are called "responses". */ /* Request types */ dcl (LS_VALIDATE_REQUEST initial (1), /* validate user ID and password */ LS_PROCESS_REQUEST initial (2), /* create or connect to a process */ LS_LIST_REQUEST initial (3), /* list disconnected processes */ LS_DIAL_REQUEST initial (4), /* find a dial server */ LS_DISCONNECT_REQUEST initial (5), /* report disconnection of a login channel */ LS_LOGOUT_REQUEST initial (6), /* discard UTE (end of dialogue) */ LS_OPERATOR_REQUEST initial (7)) /* log the user in as an operator */ fixed bin internal static options (constant); dcl LS_REQUEST_TYPES (7) char (10) internal static options (constant) initial ( "validate", "process", "list", "dial", "disconnect", "logout", "operator"); dcl ls_request_ptr pointer; /* common header for all requests */ dcl 1 ls_request_header aligned based (ls_request_ptr), 2 header_version char (8), /* version for this header */ 2 request_version char (8), /* varies depending on the request */ 2 request_type fixed bin, 2 pad1 bit (36), 2 reply_event_channel fixed bin (71), /* event channel over which reply_message should be sent */ 2 reply_handle bit (72) aligned, /* used for dispatching response */ 2 connection_info like user_connection_info; /* connection making this request. */ dcl LS_REQUEST_HEADER_VERSION_1 char (8) initial ("lsrh0001") internal static options (constant); dcl 1 user_connection_info aligned based, /* common info passed in most requests */ 2 connection_name char (32), 2 access_class_range (2) bit (72), 2 terminal_type char (32), 2 terminal_id char (4), 2 line_type fixed bin; /* "validate" request: validate user ID and password */ dcl 1 login_server_validate_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_VALIDATE_REQUEST */ 2 current_password char (8), /* scrambled */ 2 authorization bit (72), /* only valid if auth_given = "1"b */ 2 terminate_event_channel fixed bin (71), /* event channel to notify server when process terminates */ 2 person_id char (22), /* as specified in login line */ 2 project_id char (9), /* likewise, might be null string */ 2 network_connection_type fixed bin, /* see below for values */ 2 new_password char (8), /* only valid if change_password = "1"b */ 2 flags, 3 gpw bit (1) unaligned, /* password generated in response to -generate_password */ 3 auth_given bit (1) unaligned, /* -authorization specified */ 3 anonymous bit (1) unaligned, /* "enterp" request */ 3 anon_no_password bit (1) unaligned, /* "enter" request */ 3 change_password bit (1) unaligned, /* gave -cpw or -gpw */ 3 change_default_auth bit (1) unaligned, /* gave -change_default_authorization */ 3 change_default_proj bit (1) unaligned, /* gave -change_default_project */ 3 operator bit (1) unaligned, /* gave -operator */ 3 pad bit (28) unaligned; dcl LS_VALIDATE_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsvr0001"); /* "process" request: create a process or reconnect to an existing process for the specified user */ dcl 1 login_server_process_request aligned based (ls_request_ptr), 2 fixed_part, /* to allow for automatic copies */ 3 header like ls_request_header, /* request_type = LS_PROCESS_REQUEST */ 3 handle bit (72), /* as provided in validate_response */ 3 person_id char (22), /* the real one */ 3 project_id char (9), /* likewise */ 3 project_pad fixed bin, 3 command_type fixed bin, /* login, connect, etc.; see below for names */ 3 process_number fixed bin, /* 0 if unspecified or irrelevant */ 3 default_io_module char (32), /* I/O module to use if no outer_module specified */ 3 switch_flags, /* used to indicate if "switch"-type control args were specified */ 4 warn_given bit (1) unaligned, 4 force_given bit (1) unaligned, 4 save_given bit (1) unaligned, 4 preempt_given bit (1) unaligned, 4 brief_given bit (1) unaligned, 4 pad2 bit (31) unaligned, 3 switch_values, /* these are only valid if corresponding bit in switch_flags is on */ 4 warn bit (1) unaligned, 4 force bit (1) unaligned, 4 save_on_disconnect bit (1) unaligned, 4 preempt bit (1) unaligned, 4 brief bit (1) unaligned, /* "0"b & brief_given => -long */ 4 pad3 bit (31) unaligned, 3 other_flags, 4 init_ring_given bit (1) unaligned, /* "1"b if -ring */ 4 minimum_ring_given bit (1) unaligned, /* "1"b if MNA terminal interface ring > 1 */ 4 immediate bit (1) unaligned, /* "1"b => -new_proc (or -destroy) -immediate */ 4 no_start_up bit (1) unaligned, /* "1"b if -no_start_up */ 4 pad4 bit (32) unaligned, 3 initial_ring fixed bin, /* valid iff init_ring_given = "1"b */ 3 minimum_ring fixed bin, /* ring in which MNA terminal mgr operates */ 3 home_dir char (168), /* null if not specified */ 3 outer_module char (32), /* likewise */ 3 process_overseer char (168), /* likewise */ 3 subsystem char (168), /* likewise */ 3 n_args fixed bin, /* how many arguments specified after -ag; if 0, ignore the rest of the structure */ 2 login_arguments, /* variable part, describes stuff after -ag */ 3 arg_string_length fixed bin (21), 3 args (ls_process_request_n_args refer (login_server_process_request.n_args)), 4 start_index fixed bin (21), /* position in arg_string at which arg (i) starts */ 4 arg_length fixed bin (21), /* length of arg (i) */ 3 arg_string char (ls_process_request_arg_string_length refer (login_server_process_request.arg_string_length)); dcl ls_process_request_n_args fixed bin; dcl ls_process_request_arg_string_length fixed bin (21); dcl LS_PROCESS_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lspr0001"); /* "list" request: list the user's disconnected processes, if any */ dcl 1 login_server_list_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_LIST_REQUEST */ 2 handle bit (72); dcl LS_LIST_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lslr0001"); /* "dial" request: find a process to accept a dial */ /* Note: because a dial request may or may not have been preceded by a validate request/response, the initializer_handle may be null. */ dcl 1 login_server_dial_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_DIAL_REQUEST */ 2 initializer_handle bit (72), /* as provided in validate_response (if any) */ 2 terminate_event_channel fixed bin (71), /* event channel to wake up login server when master process terminates */ 2 dial_qualifier char (22), 2 person_id char (22), /* null if not specified */ 2 project_id char (9), /* likewise */ 2 user_person_id char (22), /* if -user was specified, otherwise "" */ 2 user_project_id char (9); /* likewise */ dcl LS_DIAL_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsdr0001"); /* "disconnect" request: report that a login channel has disconnected */ /* Note: this message is sent if the connection is broken either during the login dialogue or later on when the process was using it */ dcl 1 login_server_disconnect_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_DISCONNECT_REQUEST */ 2 handle bit (72), /* from original validate_response */ 2 process_id bit (36); /* ""b if no process established */ dcl LS_DISCONNECT_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsdc0001"); /* "logout" request: indicates that user entered the "logout" request, ending the dialogue; does not require any response */ dcl 1 login_server_logout_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_LOGOUT_REQUEST */ 2 handle bit (72); dcl LS_LOGOUT_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lslg0001"); /* "operator" request: sign the user on as an operator, the result of either "login -operator" or "dial system". Note that in the latter case, there may not have been a validate request (if the -user control argument wasn't specified), in which case initializer_handle is null, and the person_id and project_id are blank. */ dcl 1 login_server_operator_request aligned based (ls_request_ptr), 2 header like ls_request_header, /* request_type = LS_OPERATOR_REQUEST */ 2 initializer_handle bit (72) aligned, /* as provided in validate_response (if any) */ 2 terminate_event_channel fixed bin (71), /* event channel for wakeup when connection is dropped */ 2 person_id char (22), /* likewise */ 2 project_id char (9), /* likewise */ 2 virtual_channel char (32); /* if -virtual_channel specified, otherwise "" */ dcl LOGIN_SERVER_OPERATOR_REQUEST_VERSION_1 char (8) internal static options (constant) initial ("lsor0001"); /* Response types */ dcl (LS_UNKNOWN_RESPONSE initial (100), /* unknown response type. */ LS_VALIDATE_RESPONSE initial (101), /* response to validation request */ LS_PROCESS_RESPONSE initial (102), /* response to process request */ LS_LIST_RESPONSE initial (103), /* response to list request */ LS_DIAL_RESPONSE initial (104), /* response to dial request */ LS_TERMINATION_RESPONSE initial (105), /* to notify server of a logout */ LS_NEW_PROC_RESPONSE initial (106), /* to notify server of process termination */ LS_OPERATOR_RESPONSE initial (107)) /* response to operator request */ fixed bin internal static options (constant); dcl LS_RESPONSE_TYPES (100:107) char (10) internal static options (constant) initial ( "UNKNOWN", "validate", "process", "list", "dial", "terminate", "new_proc", "operator"); /* NOTE: the server_handle is not included in the response structures because it is provided in the user_message_ structures */ dcl ls_response_ptr pointer; /* common header for all responses */ dcl 1 login_server_response_header aligned based (ls_response_ptr), 2 message_type fixed bin, 2 header_pad bit (36), /* force doubleword alignment */ 2 version char (8); /* "validate" response: indicate whether user_id/password is valid */ dcl 1 login_server_validate_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_VALIDATE_RESPONSE */ 2 handle bit (72), /* to be provided by the server in subsequent */ /* messages for the same connection */ 2 authorization bit (72), /* default if none was supplied */ 2 authorization_range (2) bit (72), /* authorization range permitted for this user */ 2 status_code fixed bin (35), /* 0 iff user is validated */ 2 person_id char (22), /* primary name from the PNT */ 2 project_id char (9), /* primary name from the PNT or PDT */ 2 n_disconnected_processes fixed bin, /* number of disconnected processes for specified user */ 2 validate_pad fixed bin, 2 previous_login_info, /* for printing login message */ 3 time fixed bin (71), 3 terminal_type char (32), 3 terminal_id char (4), 2 incorrect_passwords fixed bin, /* number of times password given incorrectly */ 2 last_incorrect_password, /* where it came from */ 3 time fixed bin (71), 3 terminal_type char (32), 3 terminal_id char (4), 2 password_interval fixed bin, /* limit (in days) for password use or change */ 2 flags, 3 disconnect bit (1) unaligned, /* if "1"b, close the connection immediately */ 3 password_changed bit (1) unal, /* "1"b => changed password */ 3 default_auth_changed bit (1) unal, /* "1"b => changed default authorization */ 3 default_proj_changed bit (1) unal, /* "1"b => changed default project */ 3 password_expired bit (1) unal, /* "1"b => password not changed recently enough */ 3 password_unused_too_long bit (1) unal, /* "1"b => password hasn't been used recently */ 3 pad bit (30) unaligned; dcl LS_VALIDATE_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsvs0001"); /* "process" response: responds to request to create or connect */ dcl 1 login_server_process_response aligned based (ls_response_ptr), 2 fixed_part, 3 header like login_server_response_header, /* message_type = LS_PROCESS_RESPONSE */ 3 status_code fixed bin (35), /* 0 iff process was created or requested process exists */ 3 process_id bit (36), 3 new_handle bit (72), /* changed if reconnecting, etc. to preexisting process, all 0 otherwise */ 3 authorization bit (72), /* authorization of created or existing process */ 3 process_group_id char (32), /* Person.Project.tag */ 3 process_number fixed bin, /* as in, "Your disconnected process #2..." */ 3 n_disconnected_processes fixed bin, /* valid even if code ^= 0, e.g., if request was ambiguous */ 3 start_event_channel fixed bin (71), /* event channel to wake up user process on */ 3 login_instance fixed bin, /* "This is your Nth interactive login" */ 3 accounting_info, /* for destroyed process, if any */ 4 cpu_usage fixed bin (71), 4 cost float bin, 3 flags, /* except for disconnect and logout, invalid if status_code ^= 0 */ 4 disconnect bit (1) unaligned, /* "1"b => break the connection immediately */ 4 logout bit (1) unaligned, /* "1"b => restart login sequence */ 4 created bit (1) unaligned, /* "1"b => new process created */ 4 connected bit (1) unaligned, /* "1"b => connected to old process */ 4 new_proc bit (1) unaligned, /* "1"b => connected after new_proc */ 4 destroyed bit (1) unaligned, /* "1"b => process destroyed */ 4 anonymous bit (1) unaligned, /* "1"b => anonymous user ("enter" or "enterp") */ 4 already_logged_in bit (1) unaligned, /* "1"b => user can't log in because he already is */ 4 message_coordinator bit (1) unaligned, /* "1"b => this connection is going to be used by the message coordinator */ 4 brief bit (1) unaligned, /* "1"b => brief user attribute from PDT */ 4 pad bit (26) unaligned, 3 initial_ring fixed bin, /* ring in which process was created */ 3 already_logged_in_info, /* relevant if already_logged_in flag is "1"b */ 4 connection_name char (32), 4 terminal_type char (32), 4 terminal_id char (4), 2 accounting_message_struc, /* character string assembled by initializer giving error or warnings about the user's account */ 3 accounting_message_length fixed bin, 3 accounting_message char (ls_process_response_accounting_message_length refer (login_server_process_response.accounting_message_length)); dcl ls_process_response_accounting_message_length fixed bin; dcl LOGIN_SERVER_PROCESS_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsps0001"); /* "list" response: used if create request specified "list" command */ dcl 1 login_server_list_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_LIST_RESPONSE */ 2 n_processes fixed bin, /* number of disconnected processes (might be 0) */ 2 pad_header fixed bin, 2 process_info (login_server_list_response_n_processes refer (login_server_list_response.n_processes)), 3 creation_time fixed bin (71), 3 authorization bit (72), 3 initial_ring fixed bin, 3 pad_process_info fixed bin, 3 connection_info like user_connection_info; dcl login_server_list_response_n_processes fixed bin; dcl LOGIN_SERVER_LIST_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lslr0001"); /* "dial" response: response to dial request */ dcl 1 login_server_dial_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_DIAL_RESPONSE */ 2 status_code fixed bin (35), /* 0 iff dial server was found and all is OK */ 2 process_id bit (36), /* of dial server */ 2 process_group_id char (32), /* likewise */ 2 authorization bit (72), /* likewise, to make sure connection is usable */ 2 start_event_channel fixed bin (71), /* event channel to wake up user process on */ 2 process_ring fixed bin, /* initial ring of dial server */ 2 flags, 3 disconnect bit (1) unaligned, /* "1"b => break connection immediately */ 3 pad bit (35) unaligned; dcl LOGIN_SERVER_DIAL_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsds0001"); /* "termination" response: (not a response to anything): notify server that a process terminated other than by logout */ dcl 1 login_server_termination_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_TERMINATION_RESPONSE */ 2 accounting_info, /* for printing in logout message */ 3 cpu_usage fixed bin (71), 3 cost float bin, 3 pad bit (33) unaligned, 2 process_id bit (36), /* of the logged-out process */ 2 process_group_id char (32), 2 status_code fixed bin (35), /* e.g., to indicate reason for fatal error */ 2 flags, 3 logout bit (1) aligned, /* no new process coming */ 3 automatic_logout bit (1) unaligned, 3 hold bit (1) unaligned, 3 brief bit (1) unaligned, 3 new_proc bit (1) unaligned, /* user-requested new process */ 3 fatal_error bit (1) unaligned, /* process died unexpectedly */ 3 fpe_caused_logout bit (1) unaligned, /* fatal error doesn't generate new process */ 3 fpe_loop bit (1) unaligned, /* fatal error loop: too many in too short a time */ 3 fpe_during_init bit (1) unaligned, /* fatal error during process initialization */ 3 offer_help bit (1) unaligned, /* print a message offering "help" */ 3 pad bit (27) unaligned; dcl LOGIN_SERVER_TERMINATION_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lstr0001"); /* "new_proc" response: (not actually a response to anything) -- describes a new process (after a termination_response) */ dcl 1 login_server_new_proc_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_NEW_PROC_RESPONSE */ 2 new_authorization bit (72), /* in case of new_proc -auth */ 2 new_start_event_channel fixed bin (71), /* event channel for starting new process */ 2 new_process_id bit (36); /* process_id of newly-created process */ dcl LOGIN_SERVER_NEW_PROC_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsnp0001"); /* "operator" response: indicates success or failure of operator request */ dcl 1 login_server_operator_response aligned based (ls_response_ptr), 2 header like login_server_response_header, /* message_type = LS_OPERATOR_RESPONSE */ 2 status_code fixed bin (35), /* indicates success or failure */ 2 process_id bit (36), /* process ID of the message coordinator */ 2 process_group_id char (32), /* Person.Project.tag */ 2 event_channel fixed bin (71), /* event channel over which to send connect/disconnect wakeups */ 2 ring fixed bin, /* ring of message coordinator */ 2 flags, 3 disconnect bit (1) unaligned, /* "1" => break the connection immediately */ 3 mbz bit (35) unaligned; dcl LOGIN_SERVER_OPERATOR_RESPONSE_VERSION_1 char (8) internal static options (constant) initial ("lsos0001"); /* format of reply message sent to acknowledge receipt of a request */ dcl ls_reply_message_ptr pointer; dcl 1 ls_reply_message aligned based (ls_reply_message_ptr), 2 code fixed bin (35), 2 flags, 3 request_invalid bit (1) unaligned, /* "1"b => could not process request */ 3 response_sent bit (1) unaligned, /* "1"b => there is a response message */ 3 as_error_code bit (1) unaligned, /* "1"b => code is from as_error_table_ */ 3 do_not_reply bit (1) unaligned, /* "1"b => special flag for AS to prevent any reply from being sent to login server */ 3 mbz bit (32) unaligned; /* The following are values used to identify the various requests internally; those from CREATE_REQ on can appear as "command_type" in ls_process_requests. */ dcl (LOGIN_REQ initial (1), ENTER_REQ initial (2), ENTERP_REQ initial (3), CREATE_REQ initial (4), DESTROY_REQ initial (5), CONNECT_REQ initial (6), NEW_PROC_REQ initial (7), LIST_REQ initial (8)) fixed bin internal static options (constant); /* The following are the possible values for login_server_validate_request.network_connection_type. They are used by the initializer to select a default process overseer and an instance tag. */ dcl (NETWORK_CONNECTION_LOGIN initial (1), NETWORK_CONNECTION_DSA_FILE_TRANSFER initial (2)) fixed bin internal static options (constant); /* END INCLUDE FILE ... login_server_messages.incl.pl1 */ */ ----------------------------------------------------------- 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 */