More arg processing fixes.
This commit is contained in:
parent
ee26cbf24d
commit
5c34ce4beb
|
@ -32,10 +32,10 @@ Traffic Legend:\n\
|
||||||
char USAGE[] = "Usage: [--record FILE] [--ssl-only] " \
|
char USAGE[] = "Usage: [--record FILE] [--ssl-only] " \
|
||||||
"[source_addr:]source_port target_addr:target_port";
|
"[source_addr:]source_port target_addr:target_port";
|
||||||
|
|
||||||
void usage() {
|
#define usage(fmt, args...) \
|
||||||
fprintf(stderr, "%s\n", USAGE);
|
fprintf(stderr, "%s\n\n", USAGE); \
|
||||||
|
fprintf(stderr, fmt , ## args); \
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
|
||||||
|
|
||||||
char target_host[256];
|
char target_host[256];
|
||||||
int target_port;
|
int target_port;
|
||||||
|
@ -217,7 +217,7 @@ void proxy_handler(ws_ctx_t *ws_ctx) {
|
||||||
|
|
||||||
/* Resolve target address */
|
/* Resolve target address */
|
||||||
if (resolve_host(&taddr.sin_addr, target_host) < -1) {
|
if (resolve_host(&taddr.sin_addr, target_host) < -1) {
|
||||||
fatal("Could not resolve target address");
|
error("Could not resolve target address");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connect(tsock, (struct sockaddr *) &taddr, sizeof(taddr)) < 0) {
|
if (connect(tsock, (struct sockaddr *) &taddr, sizeof(taddr)) < 0) {
|
||||||
|
@ -272,7 +272,7 @@ int main(int argc, char *argv[])
|
||||||
case 'r':
|
case 'r':
|
||||||
if ((fd = open(optarg, O_CREAT,
|
if ((fd = open(optarg, O_CREAT,
|
||||||
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < -1) {
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < -1) {
|
||||||
fatal("Could not access %s\n", optarg);
|
usage("Could not access %s\n", optarg);
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
settings.record = realpath(optarg, NULL);
|
settings.record = realpath(optarg, NULL);
|
||||||
|
@ -280,23 +280,18 @@ int main(int argc, char *argv[])
|
||||||
case 'c':
|
case 'c':
|
||||||
settings.cert = realpath(optarg, NULL);
|
settings.cert = realpath(optarg, NULL);
|
||||||
if (! settings.cert) {
|
if (! settings.cert) {
|
||||||
fatal("No cert file at %s\n", optarg);
|
usage("No cert file at %s\n", optarg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage("Invalid option %c\n", c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settings.ssl_only = ssl_only;
|
settings.ssl_only = ssl_only;
|
||||||
settings.daemon = foreground ? 0: 1;
|
settings.daemon = foreground ? 0: 1;
|
||||||
|
|
||||||
printf(" ssl_only: %d\n", settings.ssl_only);
|
|
||||||
printf(" daemon: %d\n", settings.daemon);
|
|
||||||
printf(" record: %s\n", settings.record);
|
|
||||||
printf(" cert: %s\n", settings.cert);
|
|
||||||
|
|
||||||
if ((argc-optind) != 2) {
|
if ((argc-optind) != 2) {
|
||||||
usage();
|
usage("Invalid number of arguments\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
found = strstr(argv[optind], ":");
|
found = strstr(argv[optind], ":");
|
||||||
|
@ -308,8 +303,8 @@ int main(int argc, char *argv[])
|
||||||
settings.listen_port = strtol(argv[optind], NULL, 10);
|
settings.listen_port = strtol(argv[optind], NULL, 10);
|
||||||
}
|
}
|
||||||
optind++;
|
optind++;
|
||||||
if ((errno != 0) || (listen_port == 0)) {
|
if (listen_port == 0) {
|
||||||
usage();
|
usage("Could not parse listen_port\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
found = strstr(argv[optind], ":");
|
found = strstr(argv[optind], ":");
|
||||||
|
@ -317,12 +312,24 @@ int main(int argc, char *argv[])
|
||||||
memcpy(target_host, argv[optind], found-argv[optind]);
|
memcpy(target_host, argv[optind], found-argv[optind]);
|
||||||
target_port = strtol(found+1, NULL, 10);
|
target_port = strtol(found+1, NULL, 10);
|
||||||
} else {
|
} else {
|
||||||
usage();
|
usage("Target argument must be host:port\n");
|
||||||
}
|
}
|
||||||
if ((errno != 0) || (target_port == 0)) {
|
if (target_port == 0) {
|
||||||
usage();
|
usage("Could not parse target port\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ssl_only) {
|
||||||
|
printf("cert: %s\n", settings.cert);
|
||||||
|
if (!settings.cert || !access(settings.cert)) {
|
||||||
|
usage("SSL only and cert file not found\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf(" ssl_only: %d\n", settings.ssl_only);
|
||||||
|
//printf(" daemon: %d\n", settings.daemon);
|
||||||
|
//printf(" record: %s\n", settings.record);
|
||||||
|
//printf(" cert: %s\n", settings.cert);
|
||||||
|
|
||||||
settings.handler = proxy_handler;
|
settings.handler = proxy_handler;
|
||||||
start_server();
|
start_server();
|
||||||
|
|
||||||
|
|
|
@ -146,6 +146,9 @@ if __name__ == '__main__':
|
||||||
try: target_port = int(target_port)
|
try: target_port = int(target_port)
|
||||||
except: parser.error("Error parsing target port")
|
except: parser.error("Error parsing target port")
|
||||||
|
|
||||||
|
if options.ssl_only and not os.path.exists(options.cert):
|
||||||
|
parser.error("SSL only and %s not found" % options.cert)
|
||||||
|
|
||||||
settings['listen_host'] = host
|
settings['listen_host'] = host
|
||||||
settings['listen_port'] = port
|
settings['listen_port'] = port
|
||||||
settings['handler'] = proxy_handler
|
settings['handler'] = proxy_handler
|
||||||
|
|
Loading…
Reference in New Issue