The CCSO Nameserver Server-Client Protocol by Steven Dorner s-dorner@uiuc.edu Computer and Communications Services Office University of Illinois at Urbana April 2, 1990 updated by Paul Pomes paul-pomes@uiuc.edu Computer and Communications Services Office University of Illinois at Urbana August 2, 1992 Introduction This document describes the protocol used by the CCSO Nameserver. It provides all the information necessary to write a program that interfaces with the Nameserver, or for a human to speak directly to the Nameserver. While CCSO provides a client program for our Nameserver, we also expect the Nameserver to be used from programs other than this client. First, our client does not run on every system. Secondly, the Nameserver is potentially of use for more than just human lookup of information; other programs (such as mail delivery agents) may wish to use the Nameserver. This was kept in mind when designing the protocol used by the Nameserver. It is fairly easy to generate and parse (if not totally regular), and should prove easy to incorporate in any program. General Format The general format of the protocol is request/response, like that of FTP;[1] the client makes requests, and the server responds to them. The conversation is in "netascii", with a carriage ____________________ Converted to portable n/troff format using the -me macros from funky Next WriteNow format (icch). [1] See RFC-959, File Transfer Protocol (FTP), J. Postel and J. Reynolds. 2 The CCSO Nameserver Server-Client Protocol return-linefeed pair[2] separating the lines, as in telnet.[3] This allows a user to use the Nameserver with any telnet client, if they wish. A request begins with a keyword, and may have zero or more key- words or values, separated by spaces, tabs, or newlines, and fol- lowed by a carriage return-linefeed pair. Values containing spaces, tabs or newlines should be enclosed in double quotes (`"'). Any printable characters may be used in a quoted string (except `"'). In addition, the sequences "\n", "\t", "\"", and "\\" may be used to mean newline, tab, double quote, and backslash, respectively. Like FTP, numerical values are used to indicate the Nameserver's response to requests. Unlike FTP, data is passed on the same connection as commands. The format for responses is as follows: result code:[entry index:][field name:]text Multiline responses should preface each line of the response with the appropriate result code, negated (prefaced with "-"), on all lines of the response but the last. If a particular command can apply to more than one entry, responses involving individual entries will have an entry index directly following the result code. This index will begin with 1, and be incremented each time a new entry is being referred to. Commands that can apply to more than one field will have the name of the field to which the response applies directly following the entry index. The text of the response will be either an error message intended for human consumption, or data from the Nameserver. Whitespace (spaces or tabs) may appear anywhere in the response. Since more than one specific piece of information may be manipu- lated by a particular command, it is possible for parts of a com- mand to succeed, while other parts of the same command fail. This situation is handled as a single multi-line response, with the result code changing as appropriate. As for FTP, numerical responses are in the range 100-599 (or from -599 to -100 for multiline responses), where the leading digit has the following significance: 1: In progress 2: Success 3: More information needed 4: Temporary failure; it may be worthwile to try again. 5: Permanent failure ____________________ [2] The carriage return is optional. [3] See RFC-854, Telnet Protocol Specification, J. Postel. The CCSO Nameserver Server-Client Protocol 3 Specific numbers have meanings to some commands; all commands obey the general scheme. Many commands generate more than one line of response; every client should be prepared to deal with such continued responses. It is worthwhile to note that a command is finished when and only when the result code on a response line (treated as a signed integer) is greater than or equal to 200. Keywords must be given in lower case; case in the values of fields is preserved, although queries are not case-sensitive. The Commands query [field=]value. . . [return field1 [field2]] ph [field=]value. . . [return field1 [field2]] This is the basic client request. It may be used in any of the Nameserver modes.[4] Entries whose fields match the given values will be found, and the requested fields printed. If no field name is specified in the query part of the command, the "name" field is assumed. If no fields are specified with a return clause, a default set of fields will be returned. Fields from each entry will be prefaced with an entry index, a colon, the field name, and another colon. If the special field name "all" is given in the return clause, all fields from the entry will be printed (subject to normal constraints with regard to Nameserver mode and field properties). Note that to view some sensitive fields, it is necessary to use Nameserver login mode. Note also that fields whose descriptions include the property Encrypt cannot be printed by the server. Values containing newlines will be broken into lines and printed one line per response. The second number on each response is the entry index; it is incremented each time the response refers to a new entry. Some implementations of qi return a 102 response before the actual entries, giving the number of entries found; be prepared to see or not see this response. "Query" and "ph" are synonyms. ____________________ [4] See The CCSO Nameserver - A Description, S. Dorner and P. Pomes, for a description of Nameserver modes. 4 The CCSO Nameserver Server-Client Protocol Examples query name=dorner phone=244-1765 -200:1: alias: s-dorner -200:1: name: dorner steven c. -200:1: email: dorner@garcon.cso.uiuc.edu -200:1: phone: (w) 244-1765 -200:1: address: 181 DCL, MC 256 -200:1: : 1201 W. Washington, C, 61821 -200:1: department: computing services office -200:1: title: res programmer -200:1: nickname: Steve -200:1: hours: 8-4 weekdays 200:Ok. query alias=s-dorner -200:1: alias: s-dorner -200:1: name: dorner steven c. -200:1: email: dorner@garcon.cso.uiuc.edu -200:1: phone: (w) 244-1765 -200:1: address: 181 DCL, MC 256 -200:1: : 1201 W. Washington, C, 61821 -200:1: department: computing services office -200:1: title: res programmer -200:1: nickname: Steve -200:1: hours: 8-4 weekdays 200:Ok. query dorner return alias hours -200:1: alias: m-dorner -508:1: hours: Not present in entry. -200:2: alias: j-dorner -508:2: hours: Not present in entry. -200:3: alias: s-dorner -200:3: hours: 8-4 weekdays -200:4: alias: j-dorner1 -508:4: hours: Not present in entry. 200:Ok. query alias=s-dorner return id -503:1: id: You may not view this field. 200:Ok. query name=dorner address=moon 501:No matches to your query. change [field=]value. . . make field=value Change looks much like query. The entries to be changed are specified as in query. They keyword make separates the search criteria from the fields to be changed. The change command works in hero mode, or in login mode if applied to fields whose The CCSO Nameserver Server-Client Protocol 5 description contain the Change property[5] in the entry of the logged-in user. If it is desired remove a field, Adjacent double quotes ("") should be given as the "new value" of the field. Fields whose descriptions include the property Encrypted must be encrypted before transmission to the Nameserver, unless the qi program is being run directly from a terminal. This encryption should be done with the password of the logged in user. Examples change alias=s-dorner make hours="when the sun shines" 506:You must be logged in to use this command. change steven dorner make hours="" 200:1 entry changed. change steven dorner make name="Dr. Strangelove" -505:name:you may not change this field. 500:1 entry found, none changed. change ikenberry make email=zzz@xxx 518:Too many entries (3) selected; limit is 2. change stanley ikenberry make email=zzz@xxx -510:s-ikenberry:You may not change this entry. 500:1 entry found, none changed. login alias answer code clear password This is used to enter login or hero mode. The Nameserver will respond with a random challenge, which may be returned in encrypted form via the answer command. The encryption key will be a password known to both the Nameserver and the user. Alter- nately, the client may respond with the clear command, and give the proper password in clear text. This is not the recommended method, and is only provided for the lazy protocol implementor. Examples login s_dorner 301:dkeiigjasdvvnmnmeigh answer ewituegndvbngkgdfkgl 200:s-dorner:Hi how are you? login s-dorner 301:?;_?DB,F9X;8O=H8Y<H[H=FY?1*;>?#(^='<!HH answer ellwekkewdfasoiioiogdfkldfg 500:Login failed. ____________________ [5] See The CCSO Nameserver - A Description, S. Dorner and P. Pomes, for a description of Nameserver field description proper- ties. 6 The CCSO Nameserver Server-Client Protocol login s-dorner 301:aksjdsflkajajeruopqwda,mcdfkklqopakdjl clear mysecret 200:s-dorner:Hi how are you? logout Exits login or hero mode, entering anonymous mode. The connec- tion is not closed, however. Example logout 200:Ok fields [field...] With no arguments, lists all field descriptions. With field names as arguments, descriptions of the named fields are given. The second number of each response is the field id number. Example fields -200:6:alias:max 32 Indexed Lookup Public Default Change Turn -200:6:alias:Unique name for user, chosen by user. -200:3:name:max 64 Indexed Lookup Public Default -200:3:name:Full name. ... -200:24:def_account:Default account for printing 200:Ok. add field=value... Creates a nameserver entry with the given fields. Note that this command adds an entry, not a field; to add a field to an existing entry, the change command should be used. Hero mode is required. Examples add name="churchill winston" address="england" 511:You may not add Nameserver entries. add name="churchill winston" address="england" 200:Ok. The CCSO Nameserver Server-Client Protocol 7 delete [field=]value... Deletes one or more nameserver entries. Note that this command deletes an entry, not a field; to remove a field from an existing entry, the change command should be used. Hero mode is required. Example delete winston churchill 200:1 entries deleted. siteinfo Returns information about the server's site. Some servers will provide more information than others; clients should be ready for specific items to be missing, or for the whole command not to be implemented. Defined data items are: Maildomain - domain to use for phquery-type mail. Mailfield - field to use for phquery-type mail. Administrator - guru in charge of service. Passwords - person in charge of ordinary password/change requests. Example siteinfo -200:1:maildomain:uiuc.edu -200:2:mailfield:alias -200:3:administrator:s-dorner@uiuc.edu -200:4:passwords:nameserv@uiuc.edu 200:Ok. set option[=value]... Sets an option for this nameserver session. Examples set verbose=off 200:Done. set language=french -513:language:unknown option 513:No option recognized. 8 The CCSO Nameserver Server-Client Protocol id information Enters the given information in the Nameserver logs. This com- mand is used by the CCSO Nameserver client to enter the user id of the person running it. Example id 103 200:Thanks. status Prints the current status of the Nameserver. Examples status 200:Database ready. status 201:Database ready, read-only. help [{native|client} [topic...]] Prints help files for the Nameserver. If client is specified, it should be a valid Nameserver client identifier, such as "ph". The client-specific help will first be searched for topic, and then the native help will be searched. If topic is omitted, a list of all available help texts will be returned. If "native" or client are also omitted, a list of clients will be returned. The second number of each response is the help text index; this number is incremented each time a new topic text is being printed. Examples help -200:1:The following clients have help: -200:1:native ph 200:Ok. help native -200:1:These "native" help topics are available: -200:1:100 401 505 ... 200:Ok. The CCSO Nameserver Server-Client Protocol 9 help ph -200:1:These "ph" help topics are available: -200:1:edit login password uiuc.general ... -200:2:These "native" help topics are also available: -200:2:site policy ... 200:Ok. help ph add -200:1:add: -200:1: SYNTAX: add name-of-field=value-of-field... ... 200:Ok. quit stop exit Ends a nameserver session. Qi will break the connection. These commands are synonymous with one another. Example quit 200:Bye! APPENDIX A Command Summary query [field=]value... [return field...] ph [field=]value... [return field...] change [field=]value... make field=value... login alias answer code clear password logout fields [field...] add field=value... delete [field=]value... set option[=value]... id information status siteinfo help [{native|client} [topic...]] quit exit stop 10 The CCSO Nameserver Server-Client Protocol APPENDIX B Result Codes 100 In progress (general). 101 Echo of current command. 102 Count of number of matches to query. 200 Success (general). 201 Database ready, but read only. 300 More information (general). 301 Encrypt this string. 400 Temporary error (general). 401 Internal database error. 402 Lock not obtained within timeout period. 475 Database unavailable; try later. 500 Permanent error (general). 501 No matches to query. 502 Too many matches to query. 503 Not authorized for requested information. 504 Not authorized for requested search criteria. 505 Not authorized to change requested field. 506 Request refused; must be logged in to execute. 507 Field does not exist. 508 Field is not present in requested entry. 509 Alias already in use. 510 Not authorized to change this entry. 511 Not authorized to add entries. 512 Illegal value. 513 Unknown option. 514 Unknown command. 515 No indexed field in query. 516 No authorization for request. 517 Operation failed because database is read only. 518 Too many entries selected by change command. 520 CPU usage limit exceeded. 521 Change command would have overriden existing field, and the "addonly" option is on. 522 Attempt to view "Encrypted" field. 523 Expecting "answer" or "clear" 524 Names of help topics may not contain "/". 598 Command unknown. 599 Syntax error. The CCSO Nameserver Server-Client Protocol 11