mirror of
https://git.freebsd.org/ports.git
synced 2025-07-09 13:29:24 -04:00
and "--delete" in this case) specified. PR: 96295 Suggested by: ueda _at_ drweb dot jp Obtained from: https://lists.ccs.neu.edu/pipermail/scponly/2006-March/001287.html Approved by: rushani (maintainer)
97 lines
1.7 KiB
C
97 lines
1.7 KiB
C
--- 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
|
|
*/
|