Only use the "@RSYNC EXIT" tag if we're talking to a client about
authorMartin Pool <mbp@samba.org>
Thu, 23 Aug 2001 06:14:54 +0000 (06:14 +0000)
committerMartin Pool <mbp@samba.org>
Thu, 23 Aug 2001 06:14:54 +0000 (06:14 +0000)
version 25.  This prevents it appearing and messing up the module list
when an old client connects to a 2.4.7 server.

clientserver.c
csprotocol.txt
rsync.h

index 82c25de..70c12e2 100644 (file)
@@ -107,11 +107,11 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
        io_printf(fd,"%s\n",path);
        if (p) *p = '/';
 
        io_printf(fd,"%s\n",path);
        if (p) *p = '/';
 
-       while (1) {
-               /* Old servers may just drop the connection here,
-                  rather than sending a proper EXIT command.  Yuck. */
-               kludge_around_eof= True;
+       /* Old servers may just drop the connection here,
+        rather than sending a proper EXIT command.  Yuck. */
+       kludge_around_eof = remote_version < 25;
 
 
+       while (1) {
                if (!read_line(fd, line, sizeof(line)-1)) {
                        return -1;
                }
                if (!read_line(fd, line, sizeof(line)-1)) {
                        return -1;
                }
@@ -386,12 +386,14 @@ static void send_listing(int fd)
 {
        int n = lp_numservices();
        int i;
 {
        int n = lp_numservices();
        int i;
-       
+       extern int remote_version;
+
        for (i=0;i<n;i++)
                if (lp_list(i))
                    io_printf(fd, "%-15s\t%s\n", lp_name(i), lp_comment(i));
 
        for (i=0;i<n;i++)
                if (lp_list(i))
                    io_printf(fd, "%-15s\t%s\n", lp_name(i), lp_comment(i));
 
-       io_printf(fd, "@RSYNCD: EXIT\n");
+       if (remote_version >= 25)
+               io_printf(fd,"@RSYNCD: EXIT\n");
 }
 
 /* this is called when a socket connection is established to a client
 }
 
 /* this is called when a socket connection is established to a client
index b41c20f..fc38820 100644 (file)
@@ -72,3 +72,11 @@ stay tuned (or write it yourself!).
 
 
 
 
 
 
+------------
+Protocol version changes
+
+25      (2001-08-20, 2.4.7pre2) 
+
+        Send an explicit "@RSYNC EXIT" command at the end of the
+        module listing.  We never intentionally end the transmission
+        by just closing the socket anymore.
diff --git a/rsync.h b/rsync.h
index e5b5038..b26073e 100644 (file)
--- a/rsync.h
+++ b/rsync.h
 #define SAME_TIME (1<<7)
 
 /* update this if you make incompatible changes */
 #define SAME_TIME (1<<7)
 
 /* update this if you make incompatible changes */
-#define PROTOCOL_VERSION 24
+#define PROTOCOL_VERSION 25
+
+/* We refuse to interoperate with versions that are not in this range.
+ * Note that we assume we'll work with later versions: the onus is on
+ * people writing them to make sure that they don't send us anything
+ * we won't understand.
+ *
+ * There are two possible explanations for the limit at thirty: either
+ * to allow new major-rev versions that do not interoperate with us,
+ * and (more likely) so that we can detect an attempt to connect rsync
+ * to a non-rsync server, which is unlikely to begin by sending a byte
+ * between 15 and 30. */
 #define MIN_PROTOCOL_VERSION 15
 #define MAX_PROTOCOL_VERSION 30
 
 #define MIN_PROTOCOL_VERSION 15
 #define MAX_PROTOCOL_VERSION 30