diff options
author | Tilman Keskinoz <arved@FreeBSD.org> | 2006-08-06 17:38:15 +0000 |
---|---|---|
committer | Tilman Keskinoz <arved@FreeBSD.org> | 2006-08-06 17:38:15 +0000 |
commit | 594b0dc64c6885d7cdc0e1403e52779453fcc1f5 (patch) | |
tree | 9541aaae84bbce3fe58f3ac9ace4f012ee0913cf /shells/scponly/files | |
parent | 1ec9be9672471e8d9cc5bfc6191f55291e3df091 (diff) |
Notes
Diffstat (limited to 'shells/scponly/files')
-rw-r--r-- | shells/scponly/files/patch-helper.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/shells/scponly/files/patch-helper.c b/shells/scponly/files/patch-helper.c new file mode 100644 index 000000000000..875de04fc1ce --- /dev/null +++ b/shells/scponly/files/patch-helper.c @@ -0,0 +1,97 @@ +--- scponly-4.6/helper.c.orig Tue Jan 31 22:04:16 2006 ++++ scponly-4.6/helper.c Thu Mar 23 00:53:01 2006 +@@ -133,6 +133,78 @@ + char **tmpptr=av; + int ch; + int ac=0; ++ char **av2 = NULL; ++ ++ /* ++ * first count the arguments in the vector ++ */ ++ tmpptr=av; ++ while (*tmpptr!=NULL) ++ { ++ *tmpptr++; ++ ac++; ++ } ++ ++#ifdef PROG_RSYNC ++ if (exact_match(PROG_RSYNC, av[0])) ++ { ++ /* ++ * these are the long opts (beginning "--") which we ++ * allow for rsync ++ */ ++ char *permitted_long_opts[] = { ++ "--server", ++ "--sender", ++ "--delete", ++ NULL /* last element must be NULL */ ++ }; ++ ++ /* ++ * make a copy of the args excluding any permitted long ++ * options ++ */ ++ int i, j; ++ av2 = malloc(ac * sizeof *av2); ++ av2[0] = av[0]; ++ for (i = 1, j = 1; i < ac; ++i) ++ { ++ if (0 == strncmp(av[i], "--", 2)) ++ { ++ char **p; ++ /* ++ * test against permitted opts ++ */ ++ for (p = permitted_long_opts; *p; ++p) ++ { ++ if (exact_match(av[i], *p)) ++ break; ++ } ++ ++ if (*p) ++ { ++ /* ++ * permitted; skip this one ++ */ ++ continue; ++ } ++ else ++ { ++ /* ++ * no match ++ */ ++ syslog(LOG_ERR, "option %s is not permitted for use with %s (%s)", ++ av[i], cmdarg->name, logstamp()); ++ return 1; ++ } ++ } ++ av2[j++] = av[i]; ++ ++ } ++ av2[j] = NULL; ++ ac = j; ++ av = av2; ++ } ++#endif /* PROG_RSYNC */ + + while (cmdarg != NULL) + { +@@ -151,15 +223,6 @@ + */ + if (1 == cmdarg->getoptflag) + { +- /* +- * first count the arguments in the vector +- */ +- tmpptr=av; +- while (*tmpptr!=NULL) +- { +- *tmpptr++; +- ac++; +- } + /* + * now use getopt to look for our problem option + */ |