diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /usr.sbin/rpc.pcnfsd/pcnfsd.x |
initial import of NetBSD tree
Diffstat (limited to 'usr.sbin/rpc.pcnfsd/pcnfsd.x')
-rw-r--r-- | usr.sbin/rpc.pcnfsd/pcnfsd.x | 638 |
1 files changed, 638 insertions, 0 deletions
diff --git a/usr.sbin/rpc.pcnfsd/pcnfsd.x b/usr.sbin/rpc.pcnfsd/pcnfsd.x new file mode 100644 index 00000000000..9274d768aef --- /dev/null +++ b/usr.sbin/rpc.pcnfsd/pcnfsd.x @@ -0,0 +1,638 @@ +/* $NetBSD: pcnfsd.x,v 1.2 1995/07/25 22:20:33 gwr Exp $ */ + +/* The maximum number of bytes in a user name argument */ +const IDENTLEN = 32; +/* The maximum number of bytes in a password argument */ +const PASSWORDLEN = 64; +/* The maximum number of bytes in a print client name argument */ +const CLIENTLEN = 64; +/* The maximum number of bytes in a printer name argument */ +const PRINTERNAMELEN = 64; +/* The maximum number of bytes in a print user name argument */ +const USERNAMELEN = 64; +/* The maximum number of bytes in a print spool file name argument */ +const SPOOLNAMELEN = 64; +/* The maximum number of bytes in a print options argument */ +const OPTIONSLEN = 64; +/* The maximum number of bytes in a print spool directory path */ +const SPOOLDIRLEN = 255; +/* The maximum number of secondary GIDs returned by a V2 AUTH */ +const EXTRAGIDLEN = 16; +/* The maximum number of bytes in a home directory spec */ +const HOMEDIRLEN = 255; +/* The maximum number of bytes in a misc. comments string */ +const COMMENTLEN = 255; +/* The maximum number of bytes in a print job id */ +const PRINTJOBIDLEN = 255; +/* The maximum number of printers returned by a LIST operation */ +const PRLISTMAX = 32; +/* The maximum number of print jobs returned by a QUEUE operation */ +const PRQUEUEMAX = 128; +/* The maximum number of entries in the facilities list */ +const FACILITIESMAX = 32; +/* The maximum length of an operator message */ +const MESSAGELEN = 512; + + + +typedef string ident<IDENTLEN>; +/* +** The type ident is used for passing an encoded user name for +** authentication. The server should decode the string by replacing each +** octet with the value formed by performing an exclusive-or of the octet +** value with the value 0x5b and and'ing the result with 0x7f. +*/ + +typedef string message<MESSAGELEN>; +/* +** The type message is used for passing an alert message to the +** system operator on the server. The text may include newlines. +*/ + +typedef string password<PASSWORDLEN>; +/* +** The type password is used for passing an encode password for +** authentication. The server should decode the password as described +** above. +*/ + +typedef string client<CLIENTLEN>; +/* +** The type client is used for passing the hostname of a client for +** printing. The server may use this name in constructing the spool +** directory name. +*/ + +typedef string printername<PRINTERNAMELEN>; +/* +** The type printername is used for passing the name of a printer on which +** the client wishes to print. +*/ + +typedef string username<USERNAMELEN>; +/* +** The type username is used for passing the user name for a print job. +** The server may use this in any way it chooses: it may attempt to change +** the effective identity with which it is running to username or may +** simply arrange for the text to be printed on the banner page. +*/ + +typedef string comment<COMMENTLEN>; +/* +** The type comment is used to pass an uninterpreted text string which +** may be used by displayed to a human user or used for custom +** extensions to the PCNFSD service. If you elect to extend PCNFSD +** service in this way, please do so in a way which will avoid +** problems if your client attempts to interoperate with a server +** which does not support your extension. One way to do this is to +** use the +*/ + +typedef string spoolname<SPOOLNAMELEN>; +/* +** The type spoolname is used for passing the name of a print spool file +** (a simple filename not a pathname) within the spool directory. +*/ + +typedef string printjobid<PRINTJOBIDLEN>; +/* +** The type printjobid is used for passing the id of a print job. +*/ + +typedef string homedir<OPTIONSLEN>; +/* +** The type homedir is used to return the home directory for the user. +** If present, it should be in the form "hostname:path", where hostname +** and path are in a suitable form for communicating with the mount server. +*/ + +typedef string options<OPTIONSLEN>; +/* +** The type options is used for passing implementation-specific print +** control information. The option string is a set of printable ASCII +** characters. The first character should be ignored by the server; it is +** reserved for client use. The second character specifies the type of +** data in the print file. The following types are defined (an +** implementation may define additional values): +** +** p - PostScript data. The client will ensure that a valid +** PostScript header is included. +** d - Diablo 630 data. +** x - Generic printable ASCII text. The client will have filtered +** out all non-printable characters other than CR, LF, TAB, +** BS and VT. +** r - Raw print data. The client performs no filtering. +** u - User-defined. Reserved for custom extensions. A vanilla +** pcnfsd server will treat this as equivalent to "r" +** +** If diablo data (type 'd') is specified, a formatting specification +** string will be appended. This has the form: +** ppnnnbbb +** pp +** Pitch - 10, 12 or 15. +** nnn +** The ``normal'' font to be used - encoded as follows: +** Courier crn +** Courier-Bold crb +** Courier-Oblique con +** Courier-BoldObliqu cob +** Helvetica hrn +** Helvetica-Bold hrb +** Helvetica-Oblique hon +** Helvetica-BoldOblique hob +** Times-Roman trn +** Times-Bold trb +** Times-Italic ton +** Times-BoldItalic tob +** bbb +** The ``bold'' font to be used - encoded in the same way. For example, +** the string ``nd10hrbcob'' specifies that the print data is in Diablo +** 630 format, it should be printed at 10 pitch, ``normal'' text should be +** printed in Helvetica-Bold, and ``bold'' text should be printed in +** Courier-BoldOblique. +*/ + +enum arstat { + AUTH_RES_OK = 0, + AUTH_RES_FAKE = 1, + AUTH_RES_FAIL = 2 +}; +/* +** The type arstat is returned by PCNFSD_AUTH. A value of AUTH_RES_OK +** indicates that the server was able to verify the ident and password +** successfully.AUTH_RES_FAIL is returned if a verification failure +** occurred. The value AUTH_RES_FAKE may be used if the server wishes to +** indicate that the verification failed, but that the server has +** synthesised acceptable values for uid and gid which the client may use +** if it wishes. +*/ + +enum alrstat { + ALERT_RES_OK = 0, + ALERT_RES_FAIL = 1 +}; +/* +** The type alrstat is returned by PCNFSD_ALERT. A value of ALERT_RES_OK +** indicates that the server was able to notify the system operator +** successfully. ALERT_RES_FAIL is returned if a failure occurred +*/ +enum pirstat { + PI_RES_OK = 0, + PI_RES_NO_SUCH_PRINTER = 1, + PI_RES_FAIL = 2 +}; +/* +** The type pirstat is returned by a number of print operations. PI_RES_OK +** indicates that the operation was performed successfully. PI_RES_FAIL +** indicates that the printer name was valid, but the operation could +** not be performed. PI_RES_NO_SUCH_PRINTER indicates that the printer +** name was not recognised. +*/ + +enum pcrstat { + PC_RES_OK = 0, + PC_RES_NO_SUCH_PRINTER = 1, + PC_RES_NO_SUCH_JOB = 2, + PC_RES_NOT_OWNER = 3, + PC_RES_FAIL = 4 +}; +/* +** The type pcrstat is returned by a CANCEL, REQUEUE, HOLD, or RELEASE +** print operation. +** PC_RES_OK indicates that the operation was performed successfully. +** PC_RES_NO_SUCH_PRINTER indicates that the printer name was not recognised. +** PC_RES_NO_SUCH_JOB means that the job does not exist, or is not +** associated with the specified printer. +** PC_RES_NOT_OWNER means that the user does not have permission to +** manipulate the job. +** PC_RES_FAIL means that the job could not be manipulated for an unknown +** reason. +*/ + + +enum psrstat { + PS_RES_OK = 0, + PS_RES_ALREADY = 1, + PS_RES_NULL = 2, + PS_RES_NO_FILE = 3, + PS_RES_FAIL = 4 +}; +/* +** The type psrstat is returned by PCNFSD_PR_START. A value of PS_RES_OK +** indicates that the server has started printing the job. It is possible +** that the reply from a PCNFSD_PR_START call may be lost, in which case +** the client will repeat the call. If the spool file is still in +** existence, the server will return PS_RES_ALREADY indicating that it has +** already started printing. If the file cannot be found, PS_RES_NO_FILE +** is returned. PS_RES_NULL indicates that the spool file was empty, +** while PS_RES_FAIL denotes a general failure. PI_RES_FAIL is returned +** if spool directory could not be created. The value +** PI_RES_NO_SUCH_PRINTER indicates that the printer name was not +** recognised. +*/ + +enum mapreq { + MAP_REQ_UID = 0, + MAP_REQ_GID = 1, + MAP_REQ_UNAME = 2, + MAP_REQ_GNAME = 3 +}; +/* +** The type mapreq identifies the type of a mapping request. +** MAP_REQ_UID requests that the server treat the value in the +** id field as a uid and return the corresponding username in name. +** MAP_REQ_GID requests that the server treat the value in the +** id field as a gid and return the corresponding groupname in name. +** MAP_REQ_UNAME requests that the server treat the value in the +** name field as a username and return the corresponding uid in id. +** MAP_REQ_GNAME requests that the server treat the value in the +** name field as a groupname and return the corresponding gid in id. +*/ + +enum maprstat { + MAP_RES_OK = 0, + MAP_RES_UNKNOWN = 1, + MAP_RES_DENIED = 2 +}; +/* +** The type maprstat indicates the success or failure of +** an individual mapping request. +*/ + +/* +********************************************************** +** Version 1 of the PCNFSD protocol. +********************************************************** +*/ +struct auth_args { + ident id; + password pw; +}; +struct auth_results { + arstat stat; + unsigned int uid; + unsigned int gid; +}; + +struct pr_init_args { + client system; + printername pn; +}; +struct pr_init_results { + pirstat stat; + spoolname dir; +}; + +struct pr_start_args { + client system; + printername pn; + username user; + spoolname file; + options opts; +}; +struct pr_start_results { + psrstat stat; +}; + + +/* +********************************************************** +** Version 2 of the PCNFSD protocol. +********************************************************** +*/ + +struct v2_info_args { + comment vers; + comment cm; +}; + +struct v2_info_results { + comment vers; + comment cm; + int facilities<FACILITIESMAX>; +}; + +struct v2_pr_init_args { + client system; + printername pn; + comment cm; +}; +struct v2_pr_init_results { + pirstat stat; + spoolname dir; + comment cm; +}; + +struct v2_pr_start_args { + client system; + printername pn; + username user; + spoolname file; + options opts; + int copies; + comment cm; +}; +struct v2_pr_start_results { + psrstat stat; + printjobid id; + comment cm; +}; + + + +typedef struct pr_list_item *pr_list; + +struct pr_list_item { + printername pn; + printername device; + client remhost; /* empty if local */ + comment cm; + pr_list pr_next; +}; + +struct v2_pr_list_results { + comment cm; + pr_list printers; +}; + +struct v2_pr_queue_args { + printername pn; + client system; + username user; + bool just_mine; + comment cm; +}; + +typedef struct pr_queue_item *pr_queue; + +struct pr_queue_item { + int position; + printjobid id; + comment size; + comment status; + client system; + username user; + spoolname file; + comment cm; + pr_queue pr_next; +}; + +struct v2_pr_queue_results { + pirstat stat; + comment cm; + bool just_yours; + int qlen; + int qshown; + pr_queue jobs; +}; + + +struct v2_pr_cancel_args { + printername pn; + client system; + username user; + printjobid id; + comment cm; +}; +struct v2_pr_cancel_results { + pcrstat stat; + comment cm; +}; + + +struct v2_pr_status_args { + printername pn; + comment cm; +}; +struct v2_pr_status_results { + pirstat stat; + bool avail; + bool printing; + int qlen; + bool needs_operator; + comment status; + comment cm; +}; + +struct v2_pr_admin_args { + client system; + username user; + printername pn; + comment cm; +}; +struct v2_pr_admin_results { + pirstat stat; + comment cm; +}; + +struct v2_pr_requeue_args { + printername pn; + client system; + username user; + printjobid id; + int qpos; + comment cm; +}; + +struct v2_pr_requeue_results { + pcrstat stat; + comment cm; +}; + +struct v2_pr_hold_args { + printername pn; + client system; + username user; + printjobid id; + comment cm; +}; +struct v2_pr_hold_results { + pcrstat stat; + comment cm; +}; + +struct v2_pr_release_args { + printername pn; + client system; + username user; + printjobid id; + comment cm; +}; +struct v2_pr_release_results { + pcrstat stat; + comment cm; +}; + + +typedef struct mapreq_arg_item *mapreq_arg; + +struct mapreq_arg_item { + mapreq req; + int id; + username name; + mapreq_arg mapreq_next; +}; + +typedef struct mapreq_res_item *mapreq_res; + +struct mapreq_res_item { + mapreq req; + maprstat stat; + int id; + username name; + mapreq_res mapreq_next; +}; + +struct v2_mapid_args { + comment cm; + mapreq_arg req_list; +}; + + +struct v2_mapid_results { + comment cm; + mapreq_res res_list; +}; + +struct v2_auth_args { + client system; + ident id; + password pw; + comment cm; +}; +struct v2_auth_results { + arstat stat; + unsigned int uid; + unsigned int gid; + unsigned int gids<EXTRAGIDLEN>; + homedir home; + int def_umask; + comment cm; +}; + +struct v2_alert_args { + client system; + printername pn; + username user; + message msg; +}; +struct v2_alert_results { + alrstat stat; + comment cm; +}; + + +/* +********************************************************** +** Protocol description for the PCNFSD program +********************************************************** +*/ +/* +** Version 1 of the PCNFSD protocol. +** +** -- PCNFSD_NULL() = 0 +** Null procedure - standard for all RPC programs. +** +** -- PCNFSD_AUTH() = 1 +** Perform user authentication - map username, password into uid, gid. +** +** -- PCNFSD_PR_INIT() = 2 +** Prepare for remote printing: identify exporting spool directory. +** +** -- PCNFSD_PR_START() = 3 +** Submit a spooled print job for printing: the print data is +** in a file created in the spool directory. +** +** Version 2 of the -- PCNFSD protocol. +** +** -- PCNFSD2_NULL() = 0 +** Null procedure - standard for all RPC programs. +** +** -- PCNFSD2_INFO() = 1 +** Determine which services are supported by this implementation +** of PCNFSD. +** +** -- PCNFSD2_PR_INIT() = 2 +** Prepare for remote printing: identify exporting spool directory. +** +** -- PCNFSD2_PR_START() = 3 +** Submit a spooled print job for printing: the print data is +** in a file created in the spool directory. +** +** -- PCNFSD2_PR_LIST() = 4 +** List all printers known on the server. +** +** -- PCNFSD2_PR_QUEUE() = 5 +** List all or part of the queued jobs for a printer. +** +** -- PCNFSD2_PR_STATUS() = 6 +** Determine the status of a printer. +** +** -- PCNFSD2_PR_CANCEL() = 7 +** Cancel a print job. +** +** -- PCNFSD2_PR_ADMIN() = 8 +** Perform an implementation-dependent printer administration +** operation. +** +** -- PCNFSD2_PR_REQUEUE() = 9 +** Change the queue position of a previously-submitted print job. +** +** -- PCNFSD2_PR_HOLD() = 10 +** Place a "hold" on a previously-submitted print job. The job +** will remain in the queue, but will not be printed. +** +** -- PCNFSD2_PR_RELEASE() = 11 +** Release the "hold" on a previously-held print job. +** +** -- PCNFSD2_MAPID() = 12 +** Perform one or more translations between user and group +** names and IDs. +** +** -- PCNFSD2_AUTH() = 13 +** Perform user authentication - map username, password into uid, gid; +** may also return secondary gids, home directory, umask. +** +** -- PCNFSD2_ALERT() = 14 +** Send a message to the system operator. +*/ +program PCNFSDPROG { + version PCNFSDVERS { + void PCNFSD_NULL(void) = 0; + auth_results PCNFSD_AUTH(auth_args) = 1; + pr_init_results PCNFSD_PR_INIT(pr_init_args) = 2; + pr_start_results PCNFSD_PR_START(pr_start_args) = 3; + } = 1; +/* +** Version 2 of the PCNFSD protocol. +*/ + version PCNFSDV2 { + void PCNFSD2_NULL(void) = 0; + v2_info_results PCNFSD2_INFO(v2_info_args) = 1; + v2_pr_init_results PCNFSD2_PR_INIT(v2_pr_init_args) = 2; + v2_pr_start_results PCNFSD2_PR_START(v2_pr_start_args) = 3; + v2_pr_list_results PCNFSD2_PR_LIST(void) = 4; + v2_pr_queue_results PCNFSD2_PR_QUEUE(v2_pr_queue_args) = 5; + v2_pr_status_results PCNFSD2_PR_STATUS(v2_pr_status_args) = 6; + v2_pr_cancel_results PCNFSD2_PR_CANCEL(v2_pr_cancel_args) = 7; + v2_pr_admin_results PCNFSD2_PR_ADMIN(v2_pr_admin_args) = 8; + v2_pr_requeue_results PCNFSD2_PR_REQUEUE(v2_pr_requeue_args) = 9; + v2_pr_hold_results PCNFSD2_PR_HOLD(v2_pr_hold_args) = 10; + v2_pr_release_results PCNFSD2_PR_RELEASE(v2_pr_release_args) = 11; + v2_mapid_results PCNFSD2_MAPID(v2_mapid_args) = 12; + v2_auth_results PCNFSD2_AUTH(v2_auth_args) = 13; + v2_alert_results PCNFSD2_ALERT(v2_alert_args) = 14; + } = 2; + +} = 150001; + +/* +** The following forces a publically-visible msg_out() +*/ +%#if RPC_SVC +% static void _msgout(); +% void msg_out(msg) char *msg; {_msgout(msg);} +%#endif +%#if RPC_HDR +% extern void msg_out(); +%#endif |