Handle special characters in sptps_test only if the --special option is given.
sptps_test treats lines starting with #, ^ and $ specially, in order to test the SPTPS protocol. However, this should only be done if explicitly requested, otherwise it can unexpectedly fail.
This commit is contained in:
parent
c2dc3784f1
commit
2213ecaea5
1 changed files with 11 additions and 4 deletions
|
@ -38,6 +38,7 @@ char *logfilename = NULL;
|
||||||
bool do_detach = false;
|
bool do_detach = false;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
|
|
||||||
|
static bool special;
|
||||||
static bool verbose;
|
static bool verbose;
|
||||||
static bool readonly;
|
static bool readonly;
|
||||||
static bool writeonly;
|
static bool writeonly;
|
||||||
|
@ -70,6 +71,7 @@ static struct option const long_options[] = {
|
||||||
{"writeonly", no_argument, NULL, 'w'},
|
{"writeonly", no_argument, NULL, 'w'},
|
||||||
{"packet-loss", required_argument, NULL, 'L'},
|
{"packet-loss", required_argument, NULL, 'L'},
|
||||||
{"replay-window", required_argument, NULL, 'W'},
|
{"replay-window", required_argument, NULL, 'W'},
|
||||||
|
{"special", no_argument, NULL, 's'},
|
||||||
{"verbose", required_argument, NULL, 'v'},
|
{"verbose", required_argument, NULL, 'v'},
|
||||||
{"help", no_argument, NULL, 1},
|
{"help", no_argument, NULL, 1},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
|
@ -89,6 +91,7 @@ static void usage() {
|
||||||
" -w, --writeonly Only send data from stdin to the socket.\n"
|
" -w, --writeonly Only send data from stdin to the socket.\n"
|
||||||
" -L, --packet-loss RATE Fake packet loss of RATE percent.\n"
|
" -L, --packet-loss RATE Fake packet loss of RATE percent.\n"
|
||||||
" -R, --replay-window N Set replay window to N bytes.\n"
|
" -R, --replay-window N Set replay window to N bytes.\n"
|
||||||
|
" -s, --special Enable special handling of lines starting with #, ^ and $.\n"
|
||||||
" -v, --verbose Display debug messages.\n"
|
" -v, --verbose Display debug messages.\n"
|
||||||
"\n");
|
"\n");
|
||||||
fprintf(stderr, "Report bugs to tinc@tinc-vpn.org.\n");
|
fprintf(stderr, "Report bugs to tinc@tinc-vpn.org.\n");
|
||||||
|
@ -107,7 +110,7 @@ int main(int argc, char *argv[]) {
|
||||||
ecdsa_t *mykey = NULL, *hiskey = NULL;
|
ecdsa_t *mykey = NULL, *hiskey = NULL;
|
||||||
bool quit = false;
|
bool quit = false;
|
||||||
|
|
||||||
while((r = getopt_long(argc, argv, "dqrtwL:W:v", long_options, &option_index)) != EOF) {
|
while((r = getopt_long(argc, argv, "dqrstwL:W:v", long_options, &option_index)) != EOF) {
|
||||||
switch (r) {
|
switch (r) {
|
||||||
case 0: /* long option */
|
case 0: /* long option */
|
||||||
break;
|
break;
|
||||||
|
@ -150,6 +153,10 @@ int main(int argc, char *argv[]) {
|
||||||
verbose = true;
|
verbose = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 's': /* special character handling */
|
||||||
|
special = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case '?': /* wrong options */
|
case '?': /* wrong options */
|
||||||
usage();
|
usage();
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -324,11 +331,11 @@ int main(int argc, char *argv[]) {
|
||||||
readonly = true;
|
readonly = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(buf[0] == '#')
|
if(special && buf[0] == '#')
|
||||||
s.outseqno = atoi(buf + 1);
|
s.outseqno = atoi(buf + 1);
|
||||||
if(buf[0] == '^')
|
if(special && buf[0] == '^')
|
||||||
sptps_send_record(&s, SPTPS_HANDSHAKE, NULL, 0);
|
sptps_send_record(&s, SPTPS_HANDSHAKE, NULL, 0);
|
||||||
else if(buf[0] == '$') {
|
else if(special && buf[0] == '$') {
|
||||||
sptps_force_kex(&s);
|
sptps_force_kex(&s);
|
||||||
if(len > 1)
|
if(len > 1)
|
||||||
sptps_send_record(&s, 0, buf, len);
|
sptps_send_record(&s, 0, buf, len);
|
||||||
|
|
Loading…
Reference in a new issue