@@ -74,23 +74,10 @@
74 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transport.nSent = 0;
75 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transport.nRcvd = 0;
76 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77 77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Remove leading "-" characters from the input string.
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This prevents attacks that try to trick a victim into using
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a ssh:// URI with a carefully crafted hostname of other
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parameter that ends up being interpreted as a command-line
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** option by "ssh".
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const char *stripLeadingMinus(const char *z){
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( z[0]=='-' ) z++;
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return z;
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
92 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
93 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Default SSH command
94 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef _WIN32
96 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zDefaultSshCmd[] = "plink -ssh -T";
@@ -106,11 +93,10 @@
106 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to talk to the remote machine.
107 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zSsh; /* The base SSH command */
109 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob zCmd; /* The SSH command */
110 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zHost; /* The host name to contact */
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n; /* Size of prefix string */
112 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
socket_ssh_resolve_addr(pUrlData);
114 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSsh = db_get("ssh-command", zDefaultSshCmd);
115 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&zCmd, zSsh, -1);
116 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pUrlData->port!=pUrlData->dfltPort && pUrlData->port ){
@@ -118,33 +104,27 @@
118 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&zCmd, " -P %d", pUrlData->port);
119 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
120 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&zCmd, " -p %d", pUrlData->port);
121 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
122 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.fSshTrace ){
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_force_newline();
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("%s", blob_str(&zCmd)); /* Show the base of the SSH command */
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
127 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pUrlData->user && pUrlData->user[0] ){
128 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zHost = mprintf("%s@%s", pUrlData->user, pUrlData->name);
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_escaped_arg(&zCmd, zHost);
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zHost);
129 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zHost = mprintf("%s", pUrlData->name);
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_escaped_arg(&zCmd, pUrlData->name);
131 115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = blob_size(&zCmd);
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&zCmd, " ", 1);
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_escape(&zCmd, stripLeadingMinus(zHost));
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&zCmd, " ", 1);
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_escape(&zCmd, mprintf("%s", pUrlData->fossil));
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_escaped_arg(&zCmd, pUrlData->fossil);
137 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&zCmd, " test-http", 10);
138 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pUrlData->path && pUrlData->path[0] ){
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&zCmd, " ", 1);
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_escape(&zCmd, mprintf("%s", stripLeadingMinus(pUrlData->path)));
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_escaped_arg(&zCmd, pUrlData->path);
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("ssh:// URI does not specify a path to the repository");
141 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
142 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.fSshTrace ){
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("%s\n", blob_str(&zCmd)+n); /* Show tail of SSH command */
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%s\n", blob_str(&zCmd)); /* Show the whole SSH command */
144 125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(zHost);
146 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
popen2(blob_str(&zCmd), &sshIn, &sshOut, &sshPid);
147 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sshPid==0 ){
148 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
socket_set_errmsg("cannot start ssh tunnel using [%b]", &zCmd);
149 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&zCmd);
151 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!