Preparing for release of 3.0.0pre1
[rsync/rsync.git] / options.c
index d8993c8..4ed54d9 100644 (file)
--- a/options.c
+++ b/options.c
@@ -1003,15 +1003,17 @@ int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
                        if (sanitize_paths)
                                arg = sanitize_path(NULL, arg, NULL, 0, NULL);
                        if (server_filter_list.head) {
+                               int rej;
                                char *cp = strdup(arg);
                                if (!cp)
                                        out_of_memory("parse_arguments");
                                if (!*cp)
                                        goto options_rejected;
                                clean_fname(cp, 1);
-                               if (check_filter(&server_filter_list, cp, 0) < 0)
-                                       goto options_rejected;
+                               rej = check_filter(&server_filter_list, cp, 0) < 0;
                                free(cp);
+                               if (rej)
+                                       goto options_rejected;
                        }
                        parse_filter_file(&filter_list, arg,
                                opt == OPT_INCLUDE_FROM ? MATCHFLG_INCLUDE : 0,
@@ -1198,9 +1200,9 @@ int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
                        break;
 #else
                        /* FIXME: this should probably be ignored with a
-                        * warning and then countermeasures taken to
-                        * restrict group and other access in the presence
-                        * of any more restrictive ACLs, but this is safe
+                        * warning and then countermeasures taken to
+                        * restrict group and other access in the presence
+                        * of any more restrictive ACLs, but this is safe
                         * for now */
                        snprintf(err_buf,sizeof(err_buf),
                                  "ACLs are not supported on this %s\n",
@@ -1444,10 +1446,10 @@ int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
                snprintf(err_buf, sizeof err_buf,
                        "--suffix cannot be a null string without --backup-dir\n");
                return 0;
-       } else if (make_backups && delete_mode && !delete_excluded && !am_server) {
-               snprintf(backup_dir_buf, sizeof backup_dir_buf,
+       } else if (make_backups && delete_mode && !delete_excluded && !am_server) {
+               snprintf(backup_dir_buf, sizeof backup_dir_buf,
                        "P *%s", backup_suffix);
-               parse_rule(&filter_list, backup_dir_buf, 0, 0);
+               parse_rule(&filter_list, backup_dir_buf, 0, 0);
        }
 
        if (make_backups && !backup_dir) {
@@ -1978,7 +1980,8 @@ void server_options(char **args, int *argc_p)
                if (!relative_paths)
                        args[ac++] = "--no-relative";
        }
-       if (relative_paths && !implied_dirs && !am_sender)
+       /* It's OK that this checks the upper-bound of the protocol_version. */
+       if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
                args[ac++] = "--no-implied-dirs";
 
        if (fuzzy_basis && am_sender)