home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / N / TCPIP / LINUX_PC.TAR / pcnfsd_linux2 / pcnfsd.x < prev    next >
Encoding:
Text File  |  1994-04-06  |  18.7 KB  |  636 lines

  1. /* The maximum number of bytes in a user name argument */
  2. const IDENTLEN = 32;
  3. /*  The maximum number of bytes in a password argument  */
  4. const PASSWORDLEN = 64;
  5. /*  The maximum number of bytes in a print client name argument  */
  6. const CLIENTLEN = 64;
  7. /*  The maximum number of bytes in a printer name argument  */
  8. const PRINTERNAMELEN = 64;
  9. /*  The maximum number of bytes in a print user name argument  */
  10. const USERNAMELEN = 64;
  11. /*  The maximum number of bytes in a print spool file name argument  */
  12. const SPOOLNAMELEN = 64;
  13. /*  The maximum number of bytes in a print options argument  */
  14. const OPTIONSLEN = 64;
  15. /*  The maximum number of bytes in a print spool directory path  */
  16. const SPOOLDIRLEN = 255;
  17. /*   The maximum number of secondary GIDs returned by a V2 AUTH  */
  18. const EXTRAGIDLEN = 16;
  19. /*   The  maximum number of bytes in a home directory spec  */
  20. const HOMEDIRLEN = 255;
  21. /*   The maximum number of bytes in a misc. comments string */
  22. const COMMENTLEN = 255;
  23. /*   The maximum number of bytes in a print job id */
  24. const PRINTJOBIDLEN = 255;
  25. /*   The maximum number of printers returned by a LIST operation */
  26. const PRLISTMAX = 32;
  27. /*   The maximum number of print jobs returned by a QUEUE operation */
  28. const PRQUEUEMAX = 128;
  29. /*   The maximum number of entries in the facilities list */
  30. const FACILITIESMAX = 32;
  31. /*   The maximum length of an operator message */
  32. const MESSAGELEN = 512;
  33.  
  34.  
  35.  
  36. typedef string ident<IDENTLEN>;
  37. /*
  38. ** The type ident is used for passing an encoded user name for
  39. ** authentication. The server should decode the string by replacing each
  40. ** octet with the value formed by performing an exclusive-or of the octet
  41. ** value with the value 0x5b and and'ing the result with 0x7f.
  42. */
  43.  
  44. typedef string message<MESSAGELEN>;
  45. /*
  46. ** The type message is used for passing an alert message to the
  47. ** system operator on the server. The text may include newlines.
  48. */
  49.  
  50. typedef string password<PASSWORDLEN>;
  51. /*
  52. ** The type password is used for passing an encode password for
  53. ** authentication.  The server should decode the password as described
  54. ** above.
  55. */
  56.  
  57. typedef string client<CLIENTLEN>;
  58. /*
  59. ** The type client is used for passing the hostname of a client for
  60. ** printing. The server may use this name in constructing the spool
  61. ** directory name.
  62. */
  63.  
  64. typedef string printername<PRINTERNAMELEN>;
  65. /*
  66. ** The type printername is used for passing the name of a printer on which
  67. ** the client wishes to print.
  68. */
  69.  
  70. typedef string username<USERNAMELEN>;
  71. /*
  72. ** The type username is used for passing the user name for a print job.
  73. ** The server may use this in any way it chooses: it may attempt to change
  74. ** the effective identity with which it is running to username or may
  75. ** simply arrange for the text to be printed on the banner page.
  76. */
  77.  
  78. typedef string comment<COMMENTLEN>;
  79. /*
  80. ** The type comment is used to pass an uninterpreted text string which
  81. ** may be used by displayed to a human user or used for custom
  82. ** extensions to the PCNFSD service. If you elect to extend PCNFSD
  83. ** service in this way, please do so in a way which will avoid
  84. ** problems if your client attempts to interoperate with a server
  85. ** which does not support your extension. One way to do this is to
  86. ** use the 
  87. */
  88.  
  89. typedef string spoolname<SPOOLNAMELEN>;
  90. /*
  91. ** The type spoolname is used for passing the name of a print spool file
  92. ** (a simple filename not a pathname) within the spool directory.
  93. */
  94.  
  95. typedef string printjobid<PRINTJOBIDLEN>;
  96. /*
  97. ** The type printjobid is used for passing the id of a print job.
  98. */
  99.  
  100. typedef string homedir<OPTIONSLEN>;
  101. /*
  102. ** The type homedir is used to return the home directory for the user.
  103. ** If present, it should be in the form "hostname:path", where hostname
  104. ** and path are in a suitable form for communicating with the mount server.
  105. */
  106.  
  107. typedef string options<OPTIONSLEN>;
  108. /*
  109. ** The type options is used for passing implementation-specific print
  110. ** control information.  The option string is a set of printable ASCII
  111. ** characters.  The first character should be ignored by the server; it is
  112. ** reserved for client use. The second character specifies the type of
  113. ** data in the print file.  The following types are defined (an
  114. ** implementation may define additional values):
  115. ** 
  116. **  p - PostScript data. The client will ensure that a valid
  117. **      PostScript header is included.
  118. **  d - Diablo 630 data.
  119. **  x - Generic printable ASCII text. The client will have filtered
  120. **      out all non-printable characters other than CR, LF, TAB,
  121. **      BS and VT.
  122. **  r - Raw print data. The client performs no filtering.
  123. **  u - User-defined. Reserved for custom extensions. A vanilla
  124. **      pcnfsd server will treat this as equivalent to "r"
  125. ** 
  126. ** If diablo data (type 'd') is specified, a formatting specification
  127. ** string will be appended. This has the form:
  128. **     ppnnnbbb
  129. **         pp
  130. ** Pitch - 10, 12 or 15.
  131. **           nnn
  132. ** The ``normal'' font to be used - encoded as follows:
  133. **             Courier                    crn
  134. **             Courier-Bold               crb
  135. **             Courier-Oblique            con
  136. **             Courier-BoldObliqu         cob
  137. **             Helvetica                  hrn
  138. **             Helvetica-Bold             hrb
  139. **             Helvetica-Oblique          hon
  140. **             Helvetica-BoldOblique      hob
  141. **             Times-Roman                trn
  142. **             Times-Bold                 trb
  143. **             Times-Italic               ton
  144. **             Times-BoldItalic           tob
  145. **              bbb
  146. ** The ``bold'' font to be used - encoded in the same way.  For example,
  147. ** the string ``nd10hrbcob'' specifies that the print data is in Diablo
  148. ** 630 format, it should be printed at 10 pitch, ``normal'' text should be
  149. ** printed in Helvetica-Bold, and ``bold'' text should be printed in
  150. ** Courier-BoldOblique.
  151. */
  152.  
  153. enum arstat {
  154.         AUTH_RES_OK = 0,
  155.         AUTH_RES_FAKE = 1,
  156.         AUTH_RES_FAIL = 2
  157. };
  158. /*
  159. ** The type arstat is returned by PCNFSD_AUTH. A value of AUTH_RES_OK
  160. ** indicates that the server was able to verify the ident and password
  161. ** successfully.AUTH_RES_FAIL is returned if a verification failure
  162. ** occurred. The value AUTH_RES_FAKE may be used if the server wishes to
  163. ** indicate that the verification failed, but that the server has
  164. ** synthesised acceptable values for uid and gid which the client may use
  165. ** if it wishes.
  166. */
  167.  
  168. enum alrstat {
  169.         ALERT_RES_OK = 0,
  170.         ALERT_RES_FAIL = 1
  171. };
  172. /*
  173. ** The type alrstat is returned by PCNFSD_ALERT. A value of ALERT_RES_OK
  174. ** indicates that the server was able to notify the system operator
  175. ** successfully. ALERT_RES_FAIL is returned if a failure occurred
  176. */
  177. enum pirstat {
  178.         PI_RES_OK = 0,
  179.         PI_RES_NO_SUCH_PRINTER = 1,
  180.         PI_RES_FAIL = 2
  181. };
  182. /*
  183. ** The type pirstat is returned by a number of print operations. PI_RES_OK
  184. ** indicates that the operation was performed successfully. PI_RES_FAIL
  185. ** indicates that the printer name was valid, but the operation could
  186. ** not be performed. PI_RES_NO_SUCH_PRINTER indicates that the printer
  187. ** name was not recognised.
  188. */
  189.  
  190. enum pcrstat {
  191.         PC_RES_OK = 0,
  192.         PC_RES_NO_SUCH_PRINTER = 1,
  193.         PC_RES_NO_SUCH_JOB = 2,
  194.         PC_RES_NOT_OWNER = 3,
  195.         PC_RES_FAIL = 4
  196. };
  197. /*
  198. ** The type pcrstat is returned by a CANCEL, REQUEUE, HOLD, or RELEASE
  199. ** print operation.
  200. ** PC_RES_OK indicates that the operation was performed successfully.
  201. ** PC_RES_NO_SUCH_PRINTER indicates that the printer name was not recognised.
  202. ** PC_RES_NO_SUCH_JOB means that the job does not exist, or is not
  203. ** associated with the specified printer.
  204. ** PC_RES_NOT_OWNER means that the user does not have permission to
  205. ** manipulate the job.
  206. ** PC_RES_FAIL means that the job could not be manipulated for an unknown
  207. ** reason.
  208. */
  209.  
  210.  
  211. enum psrstat {
  212.         PS_RES_OK = 0,
  213.         PS_RES_ALREADY = 1,
  214.         PS_RES_NULL = 2,
  215.         PS_RES_NO_FILE = 3,
  216.         PS_RES_FAIL = 4
  217. };
  218. /*
  219. ** The type psrstat is returned by PCNFSD_PR_START. A value of PS_RES_OK
  220. ** indicates that the server has started printing the job. It is possible
  221. ** that the reply from a PCNFSD_PR_START call may be lost, in which case
  222. ** the client will repeat the call. If the spool file is still in
  223. ** existence, the server will return PS_RES_ALREADY indicating that it has
  224. ** already started printing. If the file cannot be found, PS_RES_NO_FILE
  225. ** is returned.  PS_RES_NULL indicates that the spool file was empty,
  226. ** while PS_RES_FAIL denotes a general failure.  PI_RES_FAIL is returned
  227. ** if spool directory could not be created. The value
  228. ** PI_RES_NO_SUCH_PRINTER indicates that the printer name was not
  229. ** recognised.
  230. */
  231.  
  232. enum mapreq {
  233.         MAP_REQ_UID = 0,
  234.         MAP_REQ_GID = 1,
  235.         MAP_REQ_UNAME = 2,
  236.         MAP_REQ_GNAME = 3
  237. };
  238. /*
  239. ** The type mapreq identifies the type of a mapping request.
  240. ** MAP_REQ_UID requests that the server treat the value in the
  241. ** id field as a uid and return the corresponding username in name.
  242. ** MAP_REQ_GID requests that the server treat the value in the
  243. ** id field as a gid and return the corresponding groupname in name.
  244. ** MAP_REQ_UNAME requests that the server treat the value in the
  245. ** name field as a username and return the corresponding uid in id.
  246. ** MAP_REQ_GNAME requests that the server treat the value in the
  247. ** name field as a groupname and return the corresponding gid in id.
  248. */
  249.  
  250. enum maprstat {
  251.         MAP_RES_OK = 0,
  252.         MAP_RES_UNKNOWN = 1,
  253.         MAP_RES_DENIED = 2
  254. };
  255. /*
  256. ** The type maprstat indicates the success or failure of
  257. ** an individual mapping request.
  258. */
  259.  
  260. /* 
  261. **********************************************************
  262. ** Version 1 of the PCNFSD protocol.
  263. **********************************************************
  264. */
  265. struct auth_args {
  266.         ident           id;
  267.         password        pw;
  268. };
  269. struct auth_results {
  270.         arstat          stat;
  271.         unsigned int    uid;
  272.         unsigned int    gid;
  273. };
  274.  
  275. struct pr_init_args {
  276.         client          system;
  277.         printername     pn;
  278. };
  279. struct pr_init_results {
  280.         pirstat         stat;
  281.         spoolname       dir;
  282. };
  283.  
  284. struct pr_start_args {
  285.         client          system;
  286.         printername     pn;
  287.         username        user;
  288.         spoolname       file;
  289.         options         opts;
  290. };
  291. struct pr_start_results {
  292.         psrstat         stat;
  293. };
  294.  
  295.  
  296. /* 
  297. **********************************************************
  298. ** Version 2 of the PCNFSD protocol.
  299. **********************************************************
  300. */
  301.  
  302. struct v2_info_args {
  303.         comment         vers;
  304.         comment         cm;
  305. };
  306.  
  307. struct v2_info_results {
  308.         comment         vers;
  309.         comment         cm;
  310.     int             facilities<FACILITIESMAX>;
  311. };
  312.  
  313. struct v2_pr_init_args {
  314.         client          system;
  315.         printername     pn;
  316.         comment         cm;
  317. };
  318. struct v2_pr_init_results {
  319.         pirstat         stat;
  320.         spoolname       dir;
  321.         comment         cm;
  322. };
  323.  
  324. struct v2_pr_start_args {
  325.         client          system;
  326.         printername     pn;
  327.         username        user;
  328.         spoolname       file;
  329.         options         opts;
  330.     int             copies;
  331.         comment         cm;
  332. };
  333. struct v2_pr_start_results {
  334.         psrstat         stat;
  335.         printjobid      id;
  336.         comment         cm;
  337. };
  338.  
  339.  
  340.  
  341. typedef struct pr_list_item *pr_list;
  342.  
  343. struct pr_list_item {
  344.         printername    pn;
  345.         printername    device;
  346.         client         remhost; /* empty if local */
  347.         comment        cm;
  348.         pr_list        pr_next;
  349. };
  350.  
  351. struct v2_pr_list_results {
  352.         comment        cm;
  353.         pr_list        printers;
  354. };
  355.  
  356. struct v2_pr_queue_args {
  357.         printername     pn;
  358.         client          system; 
  359.         username        user;
  360.         bool            just_mine;
  361.         comment         cm;
  362. };
  363.  
  364. typedef struct pr_queue_item *pr_queue;
  365.  
  366. struct pr_queue_item {
  367.         int            position;
  368.         printjobid     id;
  369.         comment        size;
  370.         comment        status;
  371.         client         system;
  372.         username       user;
  373.         spoolname      file;
  374.         comment        cm;
  375.         pr_queue       pr_next;
  376. };
  377.  
  378. struct v2_pr_queue_results {
  379.         pirstat        stat;
  380.         comment        cm;
  381.         bool           just_yours;
  382.         int            qlen;
  383.         int            qshown;
  384.         pr_queue       jobs;
  385. };
  386.  
  387.  
  388. struct v2_pr_cancel_args {
  389.         printername     pn;
  390.         client          system;
  391.         username        user;
  392.         printjobid      id; 
  393.         comment         cm;
  394. };
  395. struct v2_pr_cancel_results {
  396.         pcrstat        stat;
  397.         comment        cm;
  398. };
  399.  
  400.  
  401. struct v2_pr_status_args { 
  402.         printername     pn; 
  403.         comment         cm; 
  404. }; 
  405. struct v2_pr_status_results { 
  406.         pirstat        stat;
  407.         bool           avail;
  408.         bool           printing;
  409.     int            qlen;
  410.         bool           needs_operator;
  411.     comment        status;
  412.         comment        cm; 
  413. }; 
  414.   
  415. struct v2_pr_admin_args {
  416.         client          system;
  417.         username        user;
  418.         printername     pn;
  419.         comment         cm;
  420. };
  421. struct v2_pr_admin_results {
  422.         pirstat         stat;
  423.         comment         cm;
  424. };
  425.  
  426. struct v2_pr_requeue_args {
  427.         printername     pn;
  428.         client          system;
  429.         username        user;
  430.         printjobid      id;
  431.     int             qpos;
  432.         comment         cm;
  433. };
  434.  
  435. struct v2_pr_requeue_results {
  436.         pcrstat        stat;
  437.         comment        cm;
  438. };
  439.  
  440. struct v2_pr_hold_args {
  441.         printername     pn;
  442.         client          system;
  443.         username        user;
  444.         printjobid      id; 
  445.         comment         cm;
  446. };
  447. struct v2_pr_hold_results {
  448.         pcrstat        stat;
  449.         comment        cm;
  450. };
  451.  
  452. struct v2_pr_release_args {
  453.         printername     pn;
  454.         client          system;
  455.         username        user;
  456.         printjobid      id; 
  457.         comment         cm;
  458. };
  459. struct v2_pr_release_results {
  460.         pcrstat        stat;
  461.         comment        cm;
  462. };
  463.  
  464.  
  465. typedef struct mapreq_arg_item *mapreq_arg;
  466.  
  467. struct mapreq_arg_item {
  468.     mapreq           req;
  469.         int              id;
  470.         username         name;
  471.         mapreq_arg       mapreq_next;
  472. };
  473.  
  474. typedef struct mapreq_res_item *mapreq_res;
  475.  
  476. struct mapreq_res_item {
  477.     mapreq           req;
  478.     maprstat         stat;
  479.         int              id;
  480.         username         name;
  481.         mapreq_res       mapreq_next;
  482. };
  483.  
  484. struct v2_mapid_args {
  485.         comment         cm;
  486.         mapreq_arg      req_list;
  487. };
  488.  
  489.  
  490. struct v2_mapid_results {
  491.         comment         cm;
  492.         mapreq_res      res_list;
  493. };
  494.  
  495. struct v2_auth_args {
  496.         client          system;
  497.         ident           id;
  498.         password        pw;
  499.         comment         cm;
  500. };
  501. struct v2_auth_results {
  502.         arstat          stat;
  503.         unsigned int    uid;
  504.         unsigned int    gid;
  505.         unsigned int    gids<EXTRAGIDLEN>;
  506.         homedir         home;
  507.         int             def_umask;
  508.         comment         cm;
  509. };
  510.  
  511. struct v2_alert_args {
  512.         client          system;
  513.         printername     pn;
  514.         username        user;
  515.         message         msg;
  516. };
  517. struct v2_alert_results {
  518.         alrstat          stat;
  519.         comment         cm;
  520. };
  521.  
  522.  
  523. /* 
  524. **********************************************************
  525. ** Protocol description for the PCNFSD program
  526. **********************************************************
  527. */
  528. /* 
  529. ** Version 1 of the PCNFSD protocol.
  530. **
  531. ** -- PCNFSD_NULL() = 0
  532. **    Null procedure - standard for all RPC programs.
  533. **
  534. ** -- PCNFSD_AUTH() = 1
  535. **    Perform user authentication - map username, password into uid, gid.
  536. **
  537. ** -- PCNFSD_PR_INIT() = 2
  538. **    Prepare for remote printing: identify exporting spool directory.
  539. **
  540. ** -- PCNFSD_PR_START() = 3
  541. **    Submit a spooled print job for printing: the print data is
  542. **    in a file created in the spool directory.
  543. **
  544. ** Version 2 of the -- PCNFSD protocol.
  545. **
  546. ** -- PCNFSD2_NULL() = 0
  547. **    Null procedure - standard for all RPC programs.
  548. **
  549. ** -- PCNFSD2_INFO() = 1
  550. **    Determine which services are supported by this implementation
  551. **    of PCNFSD.
  552. **
  553. ** -- PCNFSD2_PR_INIT() = 2
  554. **     Prepare for remote printing: identify exporting spool directory.
  555. **
  556. ** -- PCNFSD2_PR_START() = 3
  557. **    Submit a spooled print job for printing: the print data is
  558. **      in a file created in the spool directory.
  559. **
  560. ** -- PCNFSD2_PR_LIST() = 4
  561. **    List all printers known on the server.
  562. **
  563. ** -- PCNFSD2_PR_QUEUE() = 5
  564. **    List all or part of the queued jobs for a printer.
  565. **
  566. ** -- PCNFSD2_PR_STATUS() = 6
  567. **    Determine the status of a printer.
  568. **    
  569. ** -- PCNFSD2_PR_CANCEL() = 7
  570. **    Cancel a print job.
  571. **    
  572. ** -- PCNFSD2_PR_ADMIN() = 8
  573. **    Perform an implementation-dependent printer administration
  574. **    operation.
  575. **    
  576. ** -- PCNFSD2_PR_REQUEUE() = 9
  577. **    Change the queue position of a previously-submitted print job.
  578. **    
  579. ** -- PCNFSD2_PR_HOLD() = 10
  580. **    Place a "hold" on a previously-submitted print job. The job
  581. **    will remain in the queue, but will not be printed.
  582. **    
  583. ** -- PCNFSD2_PR_RELEASE() = 11
  584. **    Release the "hold" on a previously-held print job.
  585. **    
  586. ** -- PCNFSD2_MAPID() = 12
  587. **    Perform one or more translations between user and group
  588. **    names and IDs.
  589. **    
  590. ** -- PCNFSD2_AUTH() = 13
  591. **    Perform user authentication - map username, password into uid, gid;
  592. **    may also return secondary gids, home directory, umask.
  593. **    
  594. ** -- PCNFSD2_ALERT() = 14
  595. **    Send a message to the system operator.
  596. */
  597. program PCNFSDPROG {
  598.         version PCNFSDVERS {
  599.                 void             PCNFSD_NULL(void) = 0;
  600.                 auth_results     PCNFSD_AUTH(auth_args) = 1;
  601.                 pr_init_results  PCNFSD_PR_INIT(pr_init_args) = 2;
  602.                 pr_start_results PCNFSD_PR_START(pr_start_args) = 3;
  603.         } = 1;
  604. /*
  605. ** Version 2 of the PCNFSD protocol.
  606. */
  607.         version PCNFSDV2 {
  608.                 void                   PCNFSD2_NULL(void) = 0;
  609.                 v2_info_results        PCNFSD2_INFO(v2_info_args) = 1;
  610.                 v2_pr_init_results     PCNFSD2_PR_INIT(v2_pr_init_args) = 2;
  611.                 v2_pr_start_results    PCNFSD2_PR_START(v2_pr_start_args) = 3;
  612.                 v2_pr_list_results     PCNFSD2_PR_LIST(void) = 4;
  613.                 v2_pr_queue_results    PCNFSD2_PR_QUEUE(v2_pr_queue_args) = 5;
  614.                 v2_pr_status_results   PCNFSD2_PR_STATUS(v2_pr_status_args) = 6;
  615.                 v2_pr_cancel_results   PCNFSD2_PR_CANCEL(v2_pr_cancel_args) = 7;
  616.                 v2_pr_admin_results    PCNFSD2_PR_ADMIN(v2_pr_admin_args) = 8;
  617.                 v2_pr_requeue_results  PCNFSD2_PR_REQUEUE(v2_pr_requeue_args) = 9;
  618.                 v2_pr_hold_results     PCNFSD2_PR_HOLD(v2_pr_hold_args) = 10;
  619.                 v2_pr_release_results  PCNFSD2_PR_RELEASE(v2_pr_release_args) = 11;
  620.                 v2_mapid_results       PCNFSD2_MAPID(v2_mapid_args) = 12;
  621.                 v2_auth_results        PCNFSD2_AUTH(v2_auth_args) = 13;
  622.                 v2_alert_results       PCNFSD2_ALERT(v2_alert_args) = 14;
  623.         } = 2;
  624.  
  625. } = 150001;
  626.  
  627. /*
  628. ** The following forces a publically-visible msg_out()
  629. */
  630. %#if RPC_SVC
  631. % void msg_out(msg) char *msg; {_msgout(msg);}
  632. %#endif
  633. %#if RPC_HDR
  634. % extern void msg_out();
  635. %#endif
  636.