Commit 5c34ce4b authored by Joel Martin's avatar Joel Martin

More arg processing fixes.

parent ee26cbf2
...@@ -32,10 +32,10 @@ Traffic Legend:\n\ ...@@ -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) { ...@@ -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[]) ...@@ -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[]) ...@@ -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[]) ...@@ -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[]) ...@@ -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 (target_port == 0) {
usage("Could not parse target port\n");
} }
if ((errno != 0) || (target_port == 0)) {
usage(); 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__': ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment