mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-24 06:38:15 -04:00
Added support for a %H escape in the value of the RSYNC_CONNECT_PROG
environment variable.
This commit is contained in:
1 parent
eb7e7b2499
commit
e5f1a96ff8
1 file changed
+36
@@ -300,6 +300,42 @@ int open_socket_out_wrapped(char *host, int port, const char *bind_addr,
|
||||
{
|
||||
char *prog = getenv("RSYNC_CONNECT_PROG");
|
||||
|
||||
if (strchr(prog, '%')) {
|
||||
int hlen = strlen(host);
|
||||
int len = strlen(prog) + 1;
|
||||
char *f, *t;
|
||||
for (f = prog; *f; f++) {
|
||||
if (*f != '%')
|
||||
continue;
|
||||
/* Compute more than enough room. */
|
||||
if (f[1] == '%')
|
||||
f++;
|
||||
else
|
||||
len += hlen;
|
||||
}
|
||||
f = prog;
|
||||
if (!(prog = new_array(char, len)))
|
||||
out_of_memory("open_socket_out_wrapped");
|
||||
for (t = prog; *f; f++) {
|
||||
if (*f == '%') {
|
||||
switch (*++f) {
|
||||
case '%':
|
||||
/* Just skips the extra '%'. */
|
||||
break;
|
||||
case 'H':
|
||||
memcpy(t, host, hlen);
|
||||
t += hlen;
|
||||
continue;
|
||||
default:
|
||||
f--; /* pass % through */
|
||||
break;
|
||||
}
|
||||
}
|
||||
*t++ = *f;
|
||||
}
|
||||
*t = '\0';
|
||||
}
|
||||
|
||||
if (verbose >= 2) {
|
||||
rprintf(FINFO, "%sopening tcp connection to %s port %d\n",
|
||||
prog ? "Using RSYNC_CONNECT_PROG instead of " : "",
|
||||
|
||||
Reference in new issue
Block a user