[patch] fix for "refuse options" ignored due to popt

Fabrice Bellet fabrice at bellet.info
Fri Feb 20 22:56:59 GMT 2004


Hello,

I found the reason why "refuse options" is ignored on the server
side. When then 5th argument (int val) in the poptOption struct is 
set to zero, the parsing function poptGetNextOpt() just continues
with the next arg, without returning. So check_refuse_options() is 
simply not called in such cases.

The attached patch makes "refuse options" work with checksum and 
compress. These are the most obvious options the server admin may
want to reject. Well, there may be others.

Best wishes,
-- 
fabrice
-------------- next part --------------
--- rsync-2.6.0.orig/options.c	2003-12-30 19:16:25.000000000 +0100
+++ rsync-2.6.0/options.c	2004-02-20 23:21:42.000000000 +0100
@@ -296,7 +296,7 @@
 enum {OPT_VERSION = 1000, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
       OPT_DELETE_AFTER, OPT_DELETE_EXCLUDED, OPT_LINK_DEST,
       OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW,
-      OPT_READ_BATCH, OPT_WRITE_BATCH};
+      OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_CHECKSUM, OPT_COMPRESS};
 
 static struct poptOption long_options[] = {
   /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
@@ -336,7 +336,7 @@
   {"group",           'g', POPT_ARG_NONE,   &preserve_gid, 0, 0, 0 },
   {"devices",         'D', POPT_ARG_NONE,   &preserve_devices, 0, 0, 0 },
   {"times",           't', POPT_ARG_NONE,   &preserve_times, 0, 0, 0 },
-  {"checksum",        'c', POPT_ARG_NONE,   &always_checksum, 0, 0, 0 },
+  {"checksum",        'c', POPT_ARG_NONE,   &always_checksum, OPT_CHECKSUM, 0, 0 },
   {"verbose",         'v', POPT_ARG_NONE,   0,               'v', 0, 0 },
   {"quiet",           'q', POPT_ARG_NONE,   0,               'q', 0, 0 },
   {"archive",         'a', POPT_ARG_NONE,   &archive_mode, 0, 0, 0 },
@@ -353,7 +353,7 @@
   {"compare-dest",     0,  POPT_ARG_STRING, &compare_dest, 0, 0, 0 },
   {"link-dest",        0,  POPT_ARG_STRING, 0,              OPT_LINK_DEST, 0, 0 },
   /* TODO: Should this take an optional int giving the compression level? */
-  {"compress",        'z', POPT_ARG_NONE,   &do_compression, 0, 0, 0 },
+  {"compress",        'z', POPT_ARG_NONE,   &do_compression, OPT_COMPRESS, 0, 0 },
   {"daemon",           0,  POPT_ARG_NONE,   &am_daemon, 0, 0, 0 },
   {"no-detach",        0,  POPT_ARG_NONE,   &no_detach, 0, 0, 0 },
   {"stats",            0,  POPT_ARG_NONE,   &do_stats, 0, 0, 0 },
@@ -585,6 +585,10 @@
 #endif
 
 
+		case OPT_CHECKSUM:
+		case OPT_COMPRESS:
+			break;
+
 		default:
 			/* FIXME: If --daemon is specified, then errors for later
 			 * parameters seem to disappear. */


More information about the rsync mailing list