Make utm service port spec a command line option

Check NULL retvals, clean-up
pull/13/head
Soner Tari 7 years ago
parent 26cbefa3a4
commit 5a496d04e0

@ -333,23 +333,7 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
break;
case 1:
/* listenaddr */
addr = **argv;
// @todo Make this a command line or conf file option?
// @todo Need IPv6?
int rv = sys_sockaddr_parse(&spec->parent_dst_addr,
&spec->parent_dst_addrlen,
"127.0.0.1", "8080", AF_INET, 0);
if (rv == -1) {
exit(EXIT_FAILURE);
}
rv = sys_sockaddr_parse(&spec->child_src_addr,
&spec->child_src_addrlen,
"127.0.0.1", "0", AF_INET, 0);
if (rv == -1) {
exit(EXIT_FAILURE);
}
addr = **argv;
state++;
break;
case 2:
@ -383,6 +367,27 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
state++;
break;
case 3:
/* UTM service port is mandatory */
// The UTM port is set/used in pf and UTM service config.
// @todo Make this a conf file option?
// @todo Need IPv6?
if (strstr(**argv, "up:")) {
af = sys_sockaddr_parse(&spec->parent_dst_addr,
&spec->parent_dst_addrlen,
"127.0.0.1", **argv+3, AF_INET, EVUTIL_AI_PASSIVE);
if (af == -1) {
exit(EXIT_FAILURE);
}
af = sys_sockaddr_parse(&spec->child_src_addr,
&spec->child_src_addrlen,
"127.0.0.1", "0", AF_INET, EVUTIL_AI_PASSIVE);
if (af == -1) {
exit(EXIT_FAILURE);
}
state++;
}
break;
case 4:
/* [ natengine | dstaddr ] */
if (!strcmp(**argv, "tcp") ||
!strcmp(**argv, "ssl") ||
@ -404,7 +409,7 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
"\n");
exit(EXIT_FAILURE);
}
state = 5;
state = 6;
} else
if (nat_exist(**argv)) {
/* natengine */
@ -425,7 +430,7 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
state++;
}
break;
case 4:
case 5:
/* dstport */
af = sys_sockaddr_parse(&spec->connect_addr,
&spec->connect_addrlen,
@ -435,7 +440,7 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
}
state = 0;
break;
case 5:
case 6:
/* SNI dstport */
spec->sni_port = atoi(**argv);
if (!spec->sni_port) {
@ -449,7 +454,7 @@ proxyspec_parse(int *argc, char **argv[], const char *natengine)
}
(*argv)++;
}
if (state != 0 && state != 3) {
if (state != 0 && state != 4) {
fprintf(stderr, "Incomplete proxyspec!\n");
exit(EXIT_FAILURE);
}

@ -2120,9 +2120,9 @@ pxy_bev_readcb(struct bufferevent *bev, void *arg)
free(header_head);
free(header_tail);
} else {
log_dbg_level_printf(LOG_DBG_MODE_FINE, ">>>>>,,,,,,,,,,,,,,,,,,,,,,, pxy_bev_readcb: No CRLF in packet\n");
packet_size-= strlen(ctx->child_addr_str) + 2 + 1;
packet_size++;
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>,,,,,,,,,,,,,,,,,,,,,,, pxy_bev_readcb: No CRLF in packet\n");
// +2 is for \r\n
packet_size-= strlen(ctx->child_addr_str) + 2;
}
// Decrement packet_size to avoid copying the null termination
@ -2195,18 +2195,6 @@ pxy_bev_readcb_child(struct bufferevent *bev, void *arg)
}
if (bev == ctx->src.bev) {
struct sockaddr_in peeraddr;
socklen_t peeraddrlen = sizeof(peeraddr);
getpeername(ctx->fd, (struct sockaddr *)&peeraddr, &peeraddrlen);
char peer[INET_ADDRSTRLEN];
if (!inet_ntop(AF_INET, &peeraddr.sin_addr, peer, INET_ADDRSTRLEN)) {
pxy_conn_free(parent);
return;
}
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>.................................................................................... pxy_bev_readcb_child: PEER [%s]:%d <<<<< fd=%d, parent fd=%d\n", peer, (int)ntohs(peeraddr.sin_port), ctx->fd, pfd);
/* request header munging */
if (parent->spec->http) {
if (!ctx->seen_req_header) {
@ -2217,13 +2205,6 @@ pxy_bev_readcb_child(struct bufferevent *bev, void *arg)
evbuffer_add_buffer(outbuf, inbuf);
}
} else {
struct evbuffer_ptr ebp = evbuffer_search(inbuf, SSLPROXY_ADDR_KEY, SSLPROXY_ADDR_KEY_LEN, NULL);
if (ebp.pos != -1) {
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: evbuffer_search FOUND SSLproxy-Addr at %ld\n", ebp.pos);
} else {
log_dbg_level_printf(LOG_DBG_MODE_FINE, ">>>>>....................... pxy_bev_readcb_child: evbuffer_search FAILED\n");
}
size_t packet_size = evbuffer_get_length(inbuf);
// ATTENTION: +1 is for null termination
char *packet = malloc(packet_size + 1);
@ -2233,8 +2214,6 @@ pxy_bev_readcb_child(struct bufferevent *bev, void *arg)
return;
}
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: packet_size\n");
if (packet_size > 0) {
int bytes_read = evbuffer_remove(inbuf, packet, packet_size);
if (bytes_read < 0) {
@ -2255,14 +2234,9 @@ pxy_bev_readcb_child(struct bufferevent *bev, void *arg)
char *header_tail = strdup(pos2 + 2);
int header_tail_len = strlen(header_tail);
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: REMOVED SSLproxy-Addr, packet_size old=%lu, new=%d <<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: packet_size old=%lu, new=%d <<<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVED SSLproxy-Addr\n",
packet_size, header_head_len + header_tail_len);
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: header_head (size = %d):\n%s\n",
header_head_len, header_head);
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: header_tail (size = %d):\n%s\n",
header_tail_len, header_tail);
// ATTENTION: Do not add 1 to packet_size for null termination, do that in snprintf(),
// otherwise we get an extra byte in the outbuf
packet_size = header_head_len + header_tail_len;
@ -2274,8 +2248,6 @@ pxy_bev_readcb_child(struct bufferevent *bev, void *arg)
free(header_head);
}
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>>....................... pxy_bev_readcb_child: bufferevent_get_output\n");
int add_result = evbuffer_add(outbuf, packet, packet_size);
if (add_result < 0) {
log_err_printf("ERROR: evbuffer_add failed\n");
@ -2364,7 +2336,9 @@ pxy_conn_connect_child(pxy_conn_child_ctx_t *ctx)
parent->evbase, ctx->dst.bev, ctx->dst.ssl,
BUFFEREVENT_SSL_ACCEPTING,
BEV_OPT_DEFER_CALLBACKS);
bufferevent_setcb(ctx->dst.bev, pxy_bev_readcb_child, pxy_bev_writecb_child, pxy_bev_eventcb_child, ctx);
if (ctx->dst.bev) {
bufferevent_setcb(ctx->dst.bev, pxy_bev_readcb_child, pxy_bev_writecb_child, pxy_bev_eventcb_child, ctx);
}
} else {
log_dbg_level_printf(LOG_DBG_MODE_FINEST, ">>>>> pxy_conn_connect_child: SETUP dst.bev fd=%d\n", ctx->fd);
ctx->dst.bev = pxy_bufferevent_setup_child(ctx, -1, ctx->dst.ssl);

Loading…
Cancel
Save