throbber
DROPBOX EX. 1004
`
`DROPBOX EX. 1004
`
`
`
`

`
`CVS Client(cid:2)Server
`
`This document describes the client(cid:2)server protocol used by CVS(cid:3) It does not describe
`how to use or administer client(cid:2)server CVS(cid:4) see the regular CVS manual for that(cid:3) This is
`version (cid:3) (cid:3) of the protocol speci(cid:8)cation(cid:9)See Chapter (cid:10)Introduction(cid:11)(cid:12) page (cid:12) for more
`on what this version number means(cid:3)
`
`Dropbox Ex. 1004
`Page 1
`
`

`
` Introduction
`
`CVS is a version control system (cid:14)with some additional con(cid:8)guration management func(cid:15)
`tionality(cid:16)(cid:3) It maintains a central repository which stores (cid:8)les (cid:14)often source code(cid:16)(cid:12) including
`past versions(cid:12) information about who modi(cid:8)ed them and when(cid:12) and so on(cid:3) People who
`wish to look at or modify those (cid:8)les(cid:12) known as developers(cid:12) use CVS to check outa working
`directory from the repository(cid:12) toc heck in new versions of (cid:8)les to the repository(cid:12) and other
`operations such as viewing the modi(cid:8)cation history of a (cid:8)le(cid:3) If developers are connected to
`the repository by a network(cid:12) particularly a slow or (cid:17)aky one(cid:12) the most e(cid:18)cient way to use
`the network is with the CVS(cid:15)speci(cid:8)c protocol described in this document(cid:3)
`Developers(cid:12) using the machine on which they store their working directory(cid:12) run the CVS
`client program(cid:3) To perform operations which cannot be done locally(cid:12) it connects to the CVS
`server program(cid:12) which maintains the repository(cid:3) For more information on how to connect
`see Chapter (cid:10)Connection and Authentication(cid:11)(cid:12) page (cid:3)
`This document describes the CVS protocol(cid:3) Unfortunately(cid:12) it does not yet completely
`document one aspect of the protocol(cid:9)the detailed operation of each CVS command and
`option(cid:9)and one must look at the CVS user documentation(cid:12) (cid:20)cvs(cid:2)texinfo(cid:21)(cid:12) for that infor(cid:15)
`mation(cid:3) The protocol is non(cid:15)proprietary (cid:14)anyone who wants to is encouraged to implement
`it(cid:16) and an implementation(cid:12) known as CVS(cid:12) is available under the GNU Public License(cid:3)
`The CVS distribution(cid:12) containing this implementation(cid:12) (cid:20)cvs(cid:2)texinfo(cid:21)(cid:12) and a copy (cid:14)possibly
`more or less up to date than what you are reading now(cid:16) of this document(cid:12) (cid:20)cvsclient(cid:2)texi(cid:21)(cid:12)
`can be found at the usual GNU FTP sites(cid:12) with a (cid:8)lename such as (cid:20)cvs(cid:3)version(cid:2)tar(cid:2)gz(cid:21)(cid:3)
`This is version (cid:3) (cid:3) of the protocol speci(cid:8)cation(cid:3) This version number is intended only
`to aid in distinguishing di(cid:22)erent versions of this speci(cid:8)cation(cid:3) Although the speci(cid:8)cation
`is currently maintained in conjunction with the CVS implementation(cid:12) and carries the same
`version number(cid:12) it also intends to document what is involved with interoperating with other
`implementations (cid:14)such as other versions of CVS(cid:16)(cid:4) see Section (cid:3)  (cid:10)Requirements(cid:11)(cid:12) page (cid:3)
`This version number should not be used by clients or servers to determine what variant of
`the protocol to speak(cid:4) they should instead use the valid(cid:3)requests and Valid(cid:3)responses
`mechanism (cid:14)see Chapter  (cid:10)Protocol(cid:11)(cid:12) page (cid:16)(cid:12) which is more (cid:17)exible(cid:3)
`
`Dropbox Ex. 1004
`Page 2
`
`

`
` Goals
`
`(cid:0) Do not assume any access to the repository other than via this protocol(cid:3) It does not
`depend on NFS(cid:12) rdist(cid:12) etc(cid:3)
`(cid:0) Providing a reliable transport is outside this protocol(cid:3) The protocol expects a reliable
`transport that is transparent (cid:14)that is(cid:12) there is no translation of characters(cid:12) including
`characters such as such as linefeeds or carriage returns(cid:16)(cid:12) and can transmit all  octets
`(cid:14)for example for proper handling of binary (cid:8)les(cid:12) compression(cid:12) and encryption(cid:16)(cid:3) The
`encoding of characters speci(cid:8)ed by the protocol (cid:14)the names of requests and so on(cid:16) is
`the invariant ISO  character set (cid:14)a subset of most popular character sets including
`ASCII and others(cid:16)(cid:3) For more details on running the protocol over the TCP reliable
`transport(cid:12) see Chapter (cid:10)Connection and Authentication(cid:11)(cid:12) page (cid:3)
`(cid:0) Security and authentication are handled outside this protocol (cid:14)but see below about
`(cid:20)cvs kserver(cid:21) and (cid:20)cvs pserver(cid:21)(cid:16)(cid:3)
`(cid:0) The protocol makes it possible for updates to be atomic with respect to checkins(cid:4) that
`is if someone commits changes to several (cid:8)les in one cvs command(cid:12) then an update by
`someone else would either get all the changes(cid:12) or none of them(cid:3) The current cvs server
`can(cid:21)t do this(cid:12) but that isn(cid:21)t the protocol(cid:21)s fault(cid:3)
`(cid:0) The protocol is(cid:12) with a few exceptions(cid:12) transaction(cid:15)based(cid:3) That is(cid:12) the client sends all
`its requests (cid:14)without waiting for server responses(cid:16)(cid:12) and then waits for the server to send
`back all responses (cid:14)without waiting for further client requests(cid:16)(cid:3) This has the advantage
`of minimizing network turnarounds and the disadvantage of sometimes transferring
`more data than would be necessary if there were a richer interaction(cid:3) Another(cid:12) more
`subtle(cid:12) advantage is that there is no need for the protocol to provide locking for features
`such as making checkins atomic with respect to updates(cid:3) Any such locking can be
`handled entirely by the server(cid:3) A good server implementation (cid:14)such as the current
`cvs server(cid:16) will make sure that it does not have any such locks in place whenever it is
`waiting for communication with the client(cid:4) this prevents one client on a slow or (cid:17)aky
`network from interfering with the work of others(cid:3)
`(cid:0) It is a general design goal to provide only one way to do a given operation (cid:14)where
`possible(cid:16)(cid:3) For example(cid:12) implementations have no choice about whether to terminate
`lines with linefeeds or some other character(cid:14)s(cid:16)(cid:12) and request and response names are
`case(cid:15)sensitive(cid:3) This is to enhance interoperability(cid:3) If a protocol allows more than one
`way to do something(cid:12) it is all too easy for some implementations to support only some
`of them (cid:14)perhaps accidentally(cid:16)(cid:3)
`
`Dropbox Ex. 1004
`Page 3
`
`

`
` How to Connect to and Authenticate Oneself to
`the CVS server
`
`Connection and authentication occurs before the CVS protocol itself is started(cid:3) There
`are several ways to connect(cid:3)
`
`server
`
`kserver
`
`pserver
`
`If the client has a way to execute commands on the server(cid:12) and provide input
`to the commands and output from them(cid:12) then it can connect that way(cid:3) This
`could be the usual rsh (cid:14)port  (cid:16) protocol(cid:12) Kerberos rsh(cid:12) SSH(cid:12) or any similar
`mechanism(cid:3) The client may allow the user to specify the name of the server
`program(cid:4) the default is cvs(cid:3) It is invoked with one argument(cid:12) server(cid:3) Once it
`invokes the server(cid:12) the client proceeds to start the cvs protocol(cid:3)
`
`The kerberized server listens on a port (cid:14)in the current implementation(cid:12) by
`having inetd call (cid:4)cvs kserver(cid:4)(cid:16) which defaults to (cid:3) The client connects(cid:12)
`sends the usual kerberos authentication information(cid:12) and then starts the cvs
`protocol(cid:3) Note(cid:27) port is o(cid:18)cially registered for another use(cid:12) and in any
`event one cannot register more than one port for CVS(cid:12) so GSS(cid:15)API (cid:14)see below(cid:16)
`is recommended instead of kserver as a way to support kerberos(cid:3)
`
`The name pserver is somewhat confusing(cid:3) It refers to both a generic framework
`which allows the CVS protocol to support several authentication mechanisms(cid:12)
`and a name for a speci(cid:8)c mechanism which transfers a username and a clear(cid:15)
`text password(cid:3) Servers need not support all mechanisms(cid:12) and in fact servers
`will typically want to support only those mechanisms which meet the relevant
`security needs(cid:3)
`The pserver server listens on a port (cid:14)in the current implementation(cid:12) by having
`inetd call (cid:4)cvs pserver(cid:4)(cid:16) which defaults to  (cid:14)this port is o(cid:18)cially registered(cid:16)(cid:3)
`The client connects(cid:12) and sends the following(cid:27)
`(cid:0) the string (cid:20)BEGIN AUTH REQUEST(cid:21)(cid:12) a linefeed(cid:12)
`(cid:0) the cvs root(cid:12) a linefeed(cid:12)
`(cid:0) the username(cid:12) a linefeed(cid:12)
`(cid:0) the password trivially encoded (cid:14)see Chapter  (cid:10)Password scrambling(cid:11)(cid:12)
`page (cid:16)(cid:12) a linefeed(cid:12)
`(cid:0) the string (cid:20)END AUTH REQUEST(cid:21)(cid:12) and a linefeed(cid:3)
`
`The client must send the identical string for cvs root both here and later in
`the Root request of the cvs protocol itself(cid:3) Servers are encouraged to enforce
`this restriction(cid:3) The possible server responses (cid:14)each of which is followed by
`a linefeed(cid:16) are the following(cid:3) Note that although there is a small similarity
`between this authentication protocol and the cvs protocol(cid:12) they are separate(cid:3)
`
`I LOVE YOU
`
`I HATE YOU
`
`The authentication is successful(cid:3) The client proceeds with the cvs
`protocol itself(cid:3)
`
`The authentication fails(cid:3) After sending this response(cid:12) the server
`may close the connection(cid:3) It is up to the server to decide whether
`
`Dropbox Ex. 1004
`Page 4
`
`

`
`E text
`
`to give this response(cid:12) which is generic(cid:12) or a more speci(cid:8)c response
`using (cid:20)E(cid:21) and(cid:2)or (cid:20)error(cid:21)(cid:3)
`
`Provide a message for the user(cid:3) After this reponse(cid:12) the authentica(cid:15)
`tion protocol continues with another response(cid:3) Typically the server
`will provide a series of (cid:20)E(cid:21) responses followed by (cid:20)error(cid:21)(cid:3) Compat(cid:15)
`ibility note(cid:27) cvs (cid:3) (cid:3) and older clients will print unrecognized
`auth response and text(cid:12) and then exit(cid:12) upon receiving this re(cid:15)
`sponse(cid:3)
`
`error code text
`The authentication fails(cid:3) After sending this response(cid:12) the server
`may close the connection(cid:3) The code is a code describing why it
`failed(cid:12) intended for computer consumption(cid:3) The only code currently
`de(cid:8)ned is (cid:20)(cid:21) which is nonspeci(cid:8)c(cid:12) but clients must silently treat any
`unrecognized codes as nonspeci(cid:8)c(cid:3) The text should be supplied to
`the user(cid:3) Compatibility note(cid:27) cvs (cid:3) (cid:3) and older clients will
`print unrecognized auth response and text(cid:12) and then exit(cid:12) upon
`receiving this response(cid:3)
`
`If the client wishes to merely authenticate without starting the cvs protocol(cid:12)
`the procedure is the same(cid:12) except BEGIN AUTH REQUEST is replaced with
`BEGIN VERIFICATION REQUEST(cid:12) END AUTH REQUEST is replaced with
`END VERIFICATION REQUEST(cid:12) and upon receipt of I LOVE YOU the con(cid:15)
`nection is closed rather than continuing(cid:3)
`Another mechanism is GSSAPI authentication(cid:3) GSSAPI is a generic interface
`to security services such as kerberos(cid:3) GSSAPI is speci(cid:8)ed in RFC (cid:14)GSSAPI
`version (cid:16) and RFC  (cid:14)GSSAPI version (cid:16)(cid:4) we are not aware of di(cid:22)erences
`between the two which a(cid:22)ect the protocol in incompatible ways(cid:12) so we make
`no attempt to specify one version or the other(cid:3) The procedure here is to start
`with (cid:20)BEGIN GSSAPI REQUEST(cid:21)(cid:3) GSSAPI authentication information is then ex(cid:15)
`changed between the client and the server(cid:3) Each packet of information consists
`of a two byte big endian length(cid:12) followed by that many bytes of data(cid:3) After
`the GSSAPI authentication is complete(cid:12) the server continues with the responses
`described above (cid:14)(cid:20)I LOVE YOU(cid:21)(cid:12) etc(cid:3)(cid:16)(cid:3)
`
`future possibilities
`There are a nearly unlimited number of ways to connect and authenticate(cid:3) One
`might want to allow access based on IP address (cid:14)similar to the usual rsh protocol
`but with di(cid:22)erent(cid:2)no restrictions on ports (cid:6) (cid:16)(cid:12) to adopt mechanisms such
`as Pluggable Authentication Modules (cid:14)PAM(cid:16)(cid:12) to allow users to run their own
`servers under their own usernames without root access(cid:12) or any number of other
`possibilities(cid:3) The way to add future mechanisms(cid:12) for the most part(cid:12) should be
`to continue to use port  (cid:12) but to use di(cid:22)erent strings in place of (cid:20)BEGIN AUTH
`REQUEST(cid:21)(cid:3)
`
`Dropbox Ex. 1004
`Page 5
`
`

`
` Password scrambling algorithm
`
`The pserver authentication protocol(cid:12) as described in Chapter (cid:10)Connection and Au(cid:15)
`thentication(cid:11)(cid:12) page (cid:12) trivially encodes the passwords(cid:3) This is only to prevent inadvertent
`compromise(cid:4) it provides no protection against even a relatively unsophisticated attacker(cid:3)
`For comparison(cid:12) HTTP Basic Authentication (cid:14)as described in RFC(cid:16) uses BASE for
`a similar purpose(cid:3) CVS uses its own algorithm(cid:12) described here(cid:3)
`The scrambled password starts with (cid:20)A(cid:21)(cid:12) which serves to identify the scrambling algorithm
`in use(cid:3) After that follows a single octet for each character in the password(cid:12) according to a
`(cid:8)xed encoding(cid:3) The values are shown here(cid:12) with the encoded values in decimal(cid:3) Control
`characters(cid:12) space(cid:12) and characters outside the invariant ISO  character set are not shown(cid:4)
`such characters are not recommended for use in passwords(cid:3) There is a long discussion of
`character set issues in Chapter  (cid:10)Protocol Notes(cid:11)(cid:12) page (cid:3)
`
`P 
`p 
` 
`Q 
`q
` 
`R
`
`r 
`
`S
`
`s
` 
`T 
`t 
` 
`U 
`u 
` 
`V
`
`v 
` 
`W
`
`w 
` 
`X
` 
`x
` 
`Y
`
`y 
`(cid:23) 
`Z 
`z 
`(cid:25) 
`(cid:6) 
`(cid:27)
`(cid:28) 
`(cid:30) 
`
`a 
`b 
`c 
`d
`e
`f 
`g 
`h
`i 
`j 
`k
`l
`m 
`n 
`o 
`
`(cid:11) 
`(cid:4) 
`
`(cid:17)
`(cid:18) 
`(cid:19) 
`(cid:20) 
`(cid:21) 
`(cid:22) 
`(cid:24) 
`(cid:26) 
`(cid:3) 
`(cid:2) 
`(cid:29) 
`
`A 
`B 
`C 
`D 
`E 
`F 
`G 
`H 
`I
`J 
`K 
`L 
`M 
`N
`O 
`
`(cid:31)
`
`
`
`Dropbox Ex. 1004
`Page 6
`
`

`
` The CVS client(cid:2)server protocol
`
`In the following(cid:12) (cid:20) n(cid:21) refers to a linefeed and (cid:20) t(cid:21) refers to a horizontal tab(cid:4) requests are
`what the client sends and responses are what the server sends(cid:3) In general(cid:12) the connection is
`governed by the client(cid:9)the server does not send responses without (cid:8)rst receiving requests
`to do so(cid:4) see Section (cid:3) (cid:10)Response intro(cid:11)(cid:12) page  for more details of this convention(cid:3)
`It is typical(cid:12) early in the connection(cid:12) for the client to transmit a Valid(cid:3)responses
`request(cid:12) containing all the responses it supports(cid:12) followed by a valid(cid:3)requests request(cid:12)
`which elicits from the server a Valid(cid:3)requests response containing all the requests it
`understands(cid:3) In this way(cid:12) the client and server each (cid:8)nd out what the other supports before
`exchanging large amounts of data (cid:14)such as (cid:8)le contents(cid:16)(cid:3)
`
`(cid:2) Entries Lines
`
`Entries lines are transmitted as(cid:27)
`(cid:29) name (cid:29) version (cid:29) con(cid:2)ict (cid:29) options (cid:29) tag or date
`tag or date is either (cid:20)T(cid:21) tag or (cid:20)D(cid:21) date or empty(cid:3) If it is followed by a slash(cid:12) anything
`after the slash shall be silently ignored(cid:3)
`version can be empty(cid:12) or start with (cid:20)(cid:21) or (cid:20)(cid:3)(cid:21)(cid:12) for no user (cid:8)le(cid:12) new user (cid:8)le(cid:12) or user (cid:8)le
`to be removed(cid:12) respectively(cid:3)
`con(cid:2)ict(cid:12) if it starts with (cid:20)(cid:24)(cid:21)(cid:12) indicates that the (cid:8)le had con(cid:17)icts in it(cid:3) The rest of con(cid:2)ict
`is (cid:20)(cid:27)(cid:21) if the timestamp matches the (cid:8)le(cid:12) or anything else if it doesn(cid:21)t(cid:3) If con(cid:2)ict does not
`start with a (cid:20)(cid:24)(cid:21)(cid:12) it is silently ignored(cid:3)
`options signi(cid:8)es the keyword expansion options (cid:14)for example (cid:20)(cid:3)ko(cid:21)(cid:16)(cid:3) In an Entry request(cid:12)
`this indicates the options that were speci(cid:8)ed with the (cid:8)le from the previous (cid:8)le updating
`response (cid:14)see Section (cid:3) (cid:10)Response intro(cid:11)(cid:12) page  (cid:12) for a list of (cid:8)le updating responses(cid:16)(cid:4) if
`the client is specifying the (cid:20)(cid:3)k(cid:21) or (cid:20)(cid:3)A(cid:21) option to update(cid:12) then it is the server which (cid:8)gures
`out what overrides what(cid:3)
`
`(cid:2) File Modes
`
`A mode is any number of repetitions of
`mode(cid:3)type (cid:27) data
`separated by (cid:20)(cid:26)(cid:21)(cid:3)
`mode(cid:3)type is an identi(cid:8)er composed of alphanumeric characters(cid:3) Currently speci(cid:8)ed(cid:27) (cid:20)u(cid:21)
`for user(cid:12) (cid:20)g(cid:21) for group(cid:12) (cid:20)o(cid:21) for other (cid:14)see below for discussion of whether these have their
`POSIX meaning or are more loose(cid:16)(cid:3) Unrecognized values of mode(cid:3)type are silently ignored(cid:3)
`data consists of any data not containing (cid:20)(cid:26)(cid:21)(cid:12) (cid:20) (cid:21) or (cid:20) n(cid:21)(cid:3) For (cid:20)u(cid:21)(cid:12) (cid:20)g(cid:21)(cid:12) and (cid:20)o(cid:21) mode types(cid:12)
`data consists of alphanumeric characters(cid:12) where (cid:20)r(cid:21) means read(cid:12) (cid:20)w(cid:21) means write(cid:12) (cid:20)x(cid:21) means
`execute(cid:12) and unrecognized letters are silently ignored(cid:3)
`The two most obvious ways in which the mode matters are(cid:27) (cid:14) (cid:16) is it writeable(cid:29) This
`is used by the developer communication features(cid:12) and is implemented even on OS(cid:2) (cid:14)and
`could be implemented on DOS(cid:16)(cid:12) whose notion of mode is limited to a readonly bit(cid:3) (cid:14)(cid:16) is it
`executable(cid:29) Unix CVS users need CVS to store this setting (cid:14)for shell scripts and the like(cid:16)(cid:3)
`
`Dropbox Ex. 1004
`Page 7
`
`

`
`The current CVS implementation on unix does a little bit more than just maintain these
`two settings(cid:12) but it doesn(cid:21)t really have a nice general facility to store or version control the
`mode(cid:12) even on unix(cid:12) much less across operating systems with diverse protection features(cid:3) So
`all the ins and outs of what the mode means across operating systems haven(cid:21)t really been
`worked out (cid:14)e(cid:3)g(cid:3) should the VMS port use ACLs to get POSIX semantics for groups(cid:29)(cid:16)(cid:3)
`
`(cid:2) Conventions regarding transmission of (cid:6)le names
`
`In most contexts(cid:12) (cid:20)(cid:29)(cid:21) is used to separate directory and (cid:8)le names in (cid:8)lenames(cid:12) and any
`use of other conventions (cid:14)for example(cid:12) that the user might type on the command line(cid:16) is
`converted to that form(cid:3) The only exceptions might be a few cases in which the server
`provides a magic cookie which the client then repeats verbatim(cid:12) but as the server has not
`yet been ported beyond unix(cid:12) the two rules provide the same answer (cid:14)and what to do if
`future server ports are operating on a repository like e(cid:27)(cid:2)foo or CVS ROOT(cid:27)(cid:10)FOO(cid:3)BAR(cid:11) has
`not been carefully thought out(cid:16)(cid:3)
`
`Characters outside the invariant ISO  character set should be avoided in (cid:8)lenames(cid:3)
`This restriction may need to be relaxed to allow for characters such as (cid:20)!(cid:21) and (cid:20)"(cid:21) (cid:14)see above
`about non(cid:15)unix servers(cid:16)(cid:4) this has not been carefully considered (cid:14)and currently implementa(cid:15)
`tions probably use whatever character sets that the operating systems they are running on
`allow(cid:12) and(cid:2)or that users specify(cid:16)(cid:3) Of course the most portable practice is to restrict oneself
`further(cid:12) to the POSIX portable (cid:8)lename character set as speci(cid:8)ed in POSIX(cid:3) (cid:3)
`
`(cid:2) File transmissions
`
`File contents (cid:14)noted below as (cid:4)le transmission(cid:16) can be sent in one of two forms(cid:3) The
`simpler form is a number of bytes(cid:12) followed by a linefeed(cid:12) followed by the speci(cid:8)ed number
`of bytes of (cid:8)le contents(cid:3) These are the entire contents of the speci(cid:8)ed (cid:8)le(cid:3) Second(cid:12) if both
`client and server support (cid:20)gzip(cid:3)file(cid:3)contents(cid:21)(cid:12) a (cid:20)z(cid:21) may precede the length(cid:12) and the
`(cid:20)(cid:8)le contents(cid:21) sent are actually compressed with (cid:20)gzip(cid:21) (cid:14)RFC (cid:2)  (cid:16) compression(cid:3) The
`length speci(cid:8)ed is that of the compressed version of the (cid:8)le(cid:3)
`
`In neither case are the (cid:8)le content followed by any additional data(cid:3) The transmission of
`a (cid:8)le will end with a linefeed i(cid:22) that (cid:8)le (cid:14)or its compressed form(cid:16) ends with a linefeed(cid:3)
`
`The encoding of (cid:8)le contents depends on the value for the (cid:20)(cid:3)k(cid:21) option(cid:3) If the (cid:8)le is binary
`(cid:14)as speci(cid:8)ed by the (cid:20)(cid:3)kb(cid:21) option in the appropriate place(cid:16)(cid:12) then it is just a certain number
`of octets(cid:12) and the protocol contributes nothing towards determining the encoding (cid:14)using
`the (cid:8)le name is one widespread(cid:12) if not universally popular(cid:12) mechanism(cid:16)(cid:3) If the (cid:8)le is text
`(cid:14)not binary(cid:16)(cid:12) then the (cid:8)le is sent as a series of lines(cid:12) separated by linefeeds(cid:3) If the keyword
`expansion is set to something other than (cid:20)(cid:3)ko(cid:21)(cid:12) then it is expected that the (cid:8)le conform to
`the RCS expectations regarding keyword expansion(cid:9)in particular(cid:12) that it is in a character
`set such as ASCII in which x is a dollar sign (cid:14)(cid:20)#(cid:21)(cid:16)(cid:3)
`
`(cid:2) Strings
`
`In various contexts(cid:12) for example the Argument request and the M response(cid:12) one transmits
`what is essentially an arbitrary string(cid:3) Often this will have been supplied by the user (cid:14)for
`
`Dropbox Ex. 1004
`Page 8
`
`

`
`example(cid:12) the (cid:20)(cid:3)m(cid:21) option to theci request(cid:16)(cid:3) The protocol has no mechanism to specify the
`character set of such strings(cid:4) it would be fairly safe to stick to the invariant ISO  character
`set but the existing practice is probably to just transmit whatever the user speci(cid:8)es(cid:12) and
`hope that everyone involved agrees which character set is in use(cid:12) or sticks to a common
`subset(cid:3)
`
`(cid:2) Dates
`
`The protocol contains times and dates in various places(cid:3)
`
`For the (cid:20)(cid:3)D(cid:21) option to the annotate(cid:12) co(cid:12) diff(cid:12) export(cid:12) history(cid:12) rdiff(cid:12) rtag(cid:12) tag(cid:12) and
`update requests(cid:12) the server should support two formats(cid:27)
` May  (cid:23) (cid:23) GMT (cid:25) RFC  as modi(cid:8)ed by RFC 
`(cid:25) traditional
`(cid:29)(cid:29)  (cid:23) (cid:23) GMT
`
`The former format is preferred(cid:4) the latter however is sent by the CVS command line
`client (cid:14)versions (cid:3) through at least (cid:3) (cid:16)(cid:3)
`
`For the (cid:20)(cid:3)d(cid:21) option to the log request(cid:12) servers should at least support RFC (cid:2) 
`format(cid:3) Clients are encouraged to use this format too (cid:14)traditionally the command line CVS
`client has just passed along the date format speci(cid:8)ed by the user(cid:12) however(cid:16)(cid:3)
`
`For Mod(cid:3)time(cid:12) see the description of that response(cid:3)
`
`For Notify(cid:12) see the description of that request(cid:3)
`
`(cid:2) Request intro
`
`By convention(cid:12) requests which begin with a capital letter do not elicit a response from
`the server(cid:12) while all others do (cid:30) save one(cid:3) The exception is (cid:20)gzip(cid:3)file(cid:3)contents(cid:21)(cid:3) Unrec(cid:15)
`ognized requests will always elicit a response from the server(cid:12) even if that request begins
`with a capital letter(cid:3)
`
`(cid:2) Requests
`
`Here are the requests(cid:27)
`
`Root pathname n
`Response expected(cid:27) no(cid:3) Tell the server which CVSROOT to use(cid:3) Note that path(cid:3)
`name is a local directory and not a fully quali(cid:8)ed CVSROOT variable(cid:3) pathname
`must already exist(cid:4) if creating a new root(cid:12) use the init request(cid:12) not Root(cid:3) path(cid:3)
`name does not include the hostname of the server(cid:12) how to access the server(cid:12)
`etc(cid:3)(cid:4) by the time the CVS protocol is in use(cid:12) connection(cid:12) authentication(cid:12) etc(cid:3)(cid:12)
`are already taken care of(cid:3)
`The Root request must be sent only once(cid:12) and it must be sent before any requests
`other than Valid(cid:3)responses(cid:12) valid(cid:3)requests(cid:12) UseUnchanged(cid:12) or init(cid:3)
`
`Valid(cid:3)responses request(cid:3)list n
`Response expected(cid:27) no(cid:3) Tell the server what responses the client will accept(cid:3)
`request(cid:15)list is a space separated list of tokens(cid:3)
`
`Dropbox Ex. 1004
`Page 9
`
`

`
`valid(cid:3)requests n
`Response expected(cid:27) yes(cid:3) Ask the server to send back a Valid(cid:3)requests re(cid:15)
`sponse(cid:3)
`
`Directory local(cid:3)directory n
`Additional data(cid:27) repository n(cid:3) Response expected(cid:27) no(cid:3) Tell the server what
`directory to use(cid:3) The repository should be a directory name from a previous
`server response(cid:3) Note that this both gives a default for Entry and Modified
`and also for ci and the other commands(cid:4) normal usage is to send Directory
`for each directory in which there will be an Entry or Modified(cid:12) and then a (cid:8)nal
`Directory for the original directory(cid:12) then the command(cid:3) The local(cid:3)directory
`is relative to the top level at which the command is occurring (cid:14)i(cid:3)e(cid:3) the last
`Directory which is sent before the command(cid:16)(cid:4) to indicate that top level(cid:12) (cid:20)(cid:2)(cid:21)
`should be sent for local(cid:3)directory(cid:3)
`Here is an example of where a client gets repository and local(cid:3)directory(cid:3) Sup(cid:15)
`pose that there is a module de(cid:8)ned by
`moddir dir
`That is(cid:12) one can check out moddir and it will take dir in the repository and
`check it out to moddir in the working directory(cid:3) Then an initial check out could
`proceed like this(cid:27)
`C(cid:23) Root (cid:29)home(cid:29)kingdon(cid:29)zwork(cid:29)cvsroot
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Argument moddir
`C(cid:23) Directory (cid:2)
`C(cid:23) (cid:29)home(cid:29)kingdon(cid:29)zwork(cid:29)cvsroot
`C(cid:23) co
`S(cid:23) Clear(cid:3)sticky moddir(cid:29)
`S(cid:23) (cid:29)home(cid:29)kingdon(cid:29)zwork(cid:29)cvsroot(cid:29) dir(cid:29)
`(cid:2) (cid:2) (cid:2)
`S(cid:23) ok
`In this example the response shown is Clear(cid:3)sticky(cid:12) but it could be another
`response instead(cid:3) Note that it returns two pathnames(cid:3) The (cid:8)rst one(cid:12) (cid:20)moddir(cid:29)(cid:21)(cid:12)
`indicates the working directory to check out into(cid:3) The second one(cid:12) ending in
`(cid:20) dir(cid:29)(cid:21)(cid:12) indicates the directory to pass back to the server in a subsequent
`Directory request(cid:3) For example(cid:12) a subsequent update request might look like(cid:27)
`C(cid:23) Directory moddir
`C(cid:23) (cid:29)home(cid:29)kingdon(cid:29)zwork(cid:29)cvsroot(cid:29) dir
`(cid:2) (cid:2) (cid:2)
`C(cid:23) update
`For a given local(cid:3)directory(cid:12) the repository will be the same for each of the
`responses(cid:12) so one can use the repository from whichever response is most con(cid:15)
`venient(cid:3) Typically a client will store the repository along with the sources for
`each local(cid:3)directory(cid:12) use that same setting whenever operating on that local(cid:3)
`directory(cid:12) and not update the setting as long as the local(cid:3)directory exists(cid:3)
`A client is free to rename a local(cid:3)directory at any time (cid:14)for example(cid:12) in response
`to an explicit user request(cid:16)(cid:3) While it is true that the server supplies a local(cid:3)
`
`Dropbox Ex. 1004
`Page 10
`
`

`
`directory to the client(cid:12) as noted above(cid:12) this is only the default place to put the
`directory(cid:3) Of course(cid:12) the various Directory requests for a single command (cid:14)for
`example(cid:12) update or ci request(cid:16) should name a particular directory with the
`same local(cid:3)directory(cid:3)
`Each Directory request speci(cid:8)es a brand(cid:15)new local(cid:3)directory and repository(cid:4)
`that is(cid:12) local(cid:3)directory and repository are never relative to paths speci(cid:8)ed in
`any previous Directory request(cid:3)
`Here(cid:21)s a more complex example(cid:12) in which we request an update of a working
`directory which has been checked out from multiple places in the repository(cid:3)
`C(cid:23) Argument dir
`C(cid:23) Directory dir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Argument dir
`C(cid:23) Directory dir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Argument dir
`C(cid:23) Directory dir (cid:29)subdir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) update
`While directories dir and dir will be handled in similar fashion to the other
`examples given above(cid:12) dir is slightly di(cid:22)erent from the server(cid:21)s standpoint(cid:3)
`Notice that module mod is actually checked out into dir (cid:29)subdir (cid:12) meaning
`that directory dir is either empty or does not contain data checked out from
`this repository(cid:3)
`The above example will work correctly in cvs (cid:3) (cid:3) and later(cid:3) The server will
`descend the tree starting from all directories mentioned in Argument requests
`and update those directories speci(cid:8)cally mentioned in Directory requests(cid:3)
`Previous versions of cvs (cid:14) (cid:3) and earlier(cid:16) do not behave the same way(cid:3) While
`the descent of the tree begins at all directories mentioned in Argument requests(cid:12)
`descent into subdirectories only occurs if a directory has been mentioned in a
`Directory request(cid:3) Therefore(cid:12) the above example would succeed in updating
`dir and dir(cid:12) but would skip dir because that directory was not speci(cid:8)cally
`mentioned in a Directory request(cid:3) A functional version of the above that
`would run on a (cid:3) or earlier server is as follows(cid:27)
`C(cid:23) Argument dir
`C(cid:23) Directory dir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Argument dir
`C(cid:23) Directory dir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Argument dir
`
`Dropbox Ex. 1004
`Page 11
`
`

`
`C(cid:23) Directory dir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)(cid:2)
`(cid:2) (cid:2) (cid:2)
`C(cid:23) Directory dir (cid:29)subdir
`C(cid:23) (cid:29)home(cid:29)foo(cid:29)repos(cid:29)mod
`(cid:2) (cid:2) (cid:2)
`C(cid:23) update
`Note the extra Directory dir request(cid:3) It might be better to use Emptydir as
`the repository for the dir directory(cid:12) but the above will certainly work(cid:3)
`One more peculiarity of the (cid:3) and earlier protocol
`is the ordering of
`Directory arguments(cid:3) In order for a subdirectory to be registered correctly for
`descent by the recursion processor(cid:12) its parent must be sent (cid:8)rst(cid:3) For example(cid:12)
`the following would not work to update dir (cid:29)subdir (cid:27)
`(cid:2) (cid:2)

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket