From rsync-cvs at lists.samba.org Mon Feb 20 19:09:56 2017 From: rsync-cvs at lists.samba.org (Rsync CVS commit messages) Date: Mon, 20 Feb 2017 20:09:56 +0100 (CET) Subject: [SCM] The rsync repository. - branch master updated Message-ID: The branch, master has been updated via 9e7b8ab Don't allow --daemon or --server alias via popt. Fixes bug 12576. from 87bc224 Add a way to specify xattr name filtering. https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9e7b8ab7cf66ecd152002926a7da61d8ad862522 Author: Wayne Davison Date: Mon Feb 20 11:04:06 2017 -0800 Don't allow --daemon or --server alias via popt. Fixes bug 12576. ----------------------------------------------------------------------- Summary of changes: options.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) Changeset truncated at 500 lines: diff --git a/options.c b/options.c index 6ba13b7..64ec8b8 100644 --- a/options.c +++ b/options.c @@ -1281,6 +1281,22 @@ static void create_refuse_error(int which) } } +/* This is used to make sure that --daemon & --server cannot be aliased to + * something else. These options have always disabled popt aliases for the + * parsing of a daemon or server command-line, but we have to make sure that + * these options cannot vanish so that the alias disabling can take effect. */ +static void popt_unalias(poptContext con, const char *opt) +{ + struct poptAlias unalias; + + unalias.longName = opt + 2; /* point past the leading "--" */ + unalias.shortName = '\0'; + unalias.argc = 1; + unalias.argv = new_array(const char*, 1); + unalias.argv[0] = strdup(opt); + + poptAddAlias(con, unalias, 0); +} /** * Process command line arguments. Called on both local and remote. @@ -1320,8 +1336,11 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (pc) poptFreeContext(pc); pc = poptGetContext(RSYNC_NAME, argc, argv, long_options, 0); - if (!am_server) + if (!am_server) { poptReadDefaultConfig(pc, 0); + popt_unalias(pc, "--daemon"); + popt_unalias(pc, "--server"); + } while ((opt = poptGetNextOpt(pc)) != -1) { /* most options are handled automatically by popt; -- The rsync repository.