mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-24 09:25:01 +00:00
- Fix support for rsync 3.0
Rsync 3 needs the "-e" option, which is blocked without this patch by scponly Patch pulled from upstream CVS, which states a full release will come soon: http://lists.ccs.neu.edu/pipermail/scponly/2010-November/002170.html Reported by: Frank Bartels <knarf _at_ knarf.de> PR: 152869 Submitted by: Rob Farmer <rfarmer _at_ predatorlabs.net> (maintainer)
This commit is contained in:
parent
fcdb3e1a3f
commit
fa9e601d64
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=265822
@ -71,11 +71,10 @@
|
||||
|
||||
PORTNAME= scponly
|
||||
PORTVERSION= 4.8
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= shells security
|
||||
MASTER_SITES= http://www.sublimation.org/scponly/ \
|
||||
SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-${PORTVERSION}
|
||||
|
||||
EXTRACT_SUFX= .tgz
|
||||
|
||||
MAINTAINER= rfarmer@predatorlabs.net
|
||||
|
@ -1,3 +1,2 @@
|
||||
MD5 (scponly-4.8.tgz) = 139ac9abd7f3b8dbc5c5520745318f8a
|
||||
SHA256 (scponly-4.8.tgz) = 1693dd678355749c5d9e48ecdd4628dbfe71d82955afde950ee8d88b5adc01cf
|
||||
SIZE (scponly-4.8.tgz) = 101687
|
||||
|
@ -1,11 +1,91 @@
|
||||
--- helper.c.orig 2010-01-05 21:06:05.000000000 -0800
|
||||
+++ helper.c 2010-01-05 21:06:18.000000000 -0800
|
||||
@@ -230,7 +230,7 @@
|
||||
--- helper.c 2007/08/10 18:37:27 1.24
|
||||
+++ helper.c 2008/03/08 18:57:48 1.25
|
||||
@@ -26,6 +26,11 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifdef RSYNC_COMPAT
|
||||
+#define RSYNC_ARG_SERVER 0x01
|
||||
+#define RSYNC_ARG_EXECUTE 0x02
|
||||
+#endif
|
||||
+
|
||||
#define MAX(x,y) ( ( x > y ) ? x : y )
|
||||
#define MIN(x,y) ( ( x < y ) ? x : y )
|
||||
|
||||
@@ -164,6 +169,13 @@
|
||||
int ch;
|
||||
int ac=0;
|
||||
int longopt_index = 0;
|
||||
+#ifdef RSYNC_COMPAT
|
||||
+ /*
|
||||
+ * bitwise flag: 0x01 = server, 0x02 = -e.
|
||||
+ * Thus 0x03 is allowed and 0x01 is allowed, but 0x02 is not allowed
|
||||
+ */
|
||||
+ int rsync_flags = 0;
|
||||
+#endif /* RSYNC_COMPAT */
|
||||
|
||||
while (cmdarg != NULL)
|
||||
{
|
||||
@@ -182,7 +194,7 @@
|
||||
*/
|
||||
if (1 == cmdarg->getoptflag)
|
||||
{
|
||||
- debug(LOG_DEBUG, "Using getopt processing for cmd %s\n (%s)", cmdarg->name, logstamp());
|
||||
+ debug(LOG_DEBUG, "Using getopt processing for cmd%s\n (%s)", cmdarg->name, logstamp());
|
||||
/*
|
||||
* first count the arguments in the vector
|
||||
*/
|
||||
@@ -207,7 +219,7 @@
|
||||
* otherwise, try a glibc-style reset of the global getopt vars
|
||||
*/
|
||||
optind=0;
|
||||
-#endif
|
||||
+#endif /* HAVE_OPTRESET */
|
||||
/*
|
||||
* tell getopt to only be strict if the 'opts' is well defined
|
||||
*/
|
||||
@@ -216,6 +228,18 @@
|
||||
|
||||
debug(LOG_DEBUG, "getopt processing returned '%c' (%s)", ch, logstamp());
|
||||
|
||||
+#ifdef RSYNC_COMPAT
|
||||
+ if (exact_match(cmdarg->name, PROG_RSYNC) && (ch == 's' || ch == 'e')) {
|
||||
+ if (ch == 's')
|
||||
+ rsync_flags |= RSYNC_ARG_SERVER;
|
||||
+ else
|
||||
+ /* -e */
|
||||
+ rsync_flags |= RSYNC_ARG_EXECUTE;
|
||||
+ debug(LOG_DEBUG, "rsync_flags are now set to: %0x", rsync_flags);
|
||||
+ }
|
||||
+ else
|
||||
+#endif /* RSYNC_COMPAT */
|
||||
+
|
||||
/* if the character is found in badarg, then it's not a permitted option */
|
||||
if (cmdarg->badarg != NULL && (strchr(cmdarg->badarg, ch) != NULL))
|
||||
{
|
||||
@@ -230,14 +254,23 @@
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
-#elif
|
||||
+#else
|
||||
+#ifdef RSYNC_COMPAT
|
||||
+ /* it's not safe if the execute flag was set and server was not set */
|
||||
+ if ((rsync_flags & RSYNC_ARG_EXECUTE) != 0 && (rsync_flags & RSYNC_ARG_SERVER) == 0) {
|
||||
+ syslog(LOG_ERR, "option 'e' is not allowed unless '--server' is also set with cmd %s (%s)",
|
||||
+ PROG_RSYNC, logstamp());
|
||||
+ return 1;
|
||||
+ }
|
||||
+#endif /* RSYNC_COMPAT */
|
||||
+
|
||||
+#elif /* HAVE_GETOPT */
|
||||
/*
|
||||
* make sure that processing doesn't continue if we can't validate a rsync check
|
||||
* and if the getopt flag is set.
|
||||
*/
|
||||
syslog(LOG_ERR, "a getopt() argument check could not be performed for %s, recompile scponly without support for %s or rebuild scponly with getopt", av[0], av[0]);
|
||||
return 1;
|
||||
-#endif
|
||||
+#endif /* HAVE_GETOPT */
|
||||
}
|
||||
else
|
||||
/*
|
||||
|
38
shells/scponly/files/patch-scponly.c
Normal file
38
shells/scponly/files/patch-scponly.c
Normal file
@ -0,0 +1,38 @@
|
||||
--- scponly.c 2008/01/15 06:30:20 1.45
|
||||
+++ scponly.c 2008/03/08 18:57:48 1.46
|
||||
@@ -91,16 +91,18 @@
|
||||
|
||||
#ifdef RSYNC_COMPAT
|
||||
struct option rsync_longopts[] = {
|
||||
+ /* options we need to know about that are safe */
|
||||
+ {"server", 0, 0, (int)'s'},
|
||||
/* I use 'e' for val here because that's what's listed in cmd_arg_t->badarg */
|
||||
- {"rsh", 1, 0, (int)'e'},
|
||||
+ {"rsh", 1, 0, (int)'r'},
|
||||
/* the following are disabled because they use daemon mode */
|
||||
- {"daemon", 0, 0, (int)'e'},
|
||||
- {"rsync-path", 1, 0, (int)'e'},
|
||||
- {"address", 1, 0, (int)'e'},
|
||||
- {"port", 1, 0, (int)'e'},
|
||||
- {"sockopts", 1, 0, (int)'e'},
|
||||
- {"config", 1, 0, (int)'e'},
|
||||
- {"no-detach", 0, 0, (int)'e'},
|
||||
+ {"daemon", 0, 0, (int)'d'},
|
||||
+ {"rsync-path", 1, 0, (int)'d'},
|
||||
+ {"address", 1, 0, (int)'d'},
|
||||
+ {"port", 1, 0, (int)'d'},
|
||||
+ {"sockopts", 1, 0, (int)'d'},
|
||||
+ {"config", 1, 0, (int)'d'},
|
||||
+ {"no-detach", 0, 0, (int)'d'},
|
||||
{ NULL, 0, NULL, 0 },
|
||||
};
|
||||
#endif
|
||||
@@ -157,7 +159,7 @@
|
||||
{ PROG_SCP, 1, 1, "SoF", "dfl:prtvBCc:i:P:q1246S:o:F:", empty_longopts },
|
||||
#endif
|
||||
#ifdef RSYNC_COMPAT
|
||||
- { PROG_RSYNC, 1, 0, "e", "e:", rsync_longopts },
|
||||
+ { PROG_RSYNC, 1, 0, "rde", "e::", rsync_longopts },
|
||||
#endif
|
||||
#ifdef UNISON_COMPAT
|
||||
{ PROG_UNISON, 0, 0, "-rshcmd", NULL, empty_longopts },
|
Loading…
Reference in New Issue
Block a user