From 1705630c784a7ea98efd2a328d0b9227c344c5fb Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 15 Dec 2011 13:09:38 +0000 Subject: [PATCH] make the fallback RE work --- daemon/control_udp.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/daemon/control_udp.c b/daemon/control_udp.c index fd6fd7d59..2ce6f62e4 100644 --- a/daemon/control_udp.c +++ b/daemon/control_udp.c @@ -27,7 +27,7 @@ static void control_udp_closed(int fd, void *p) { static void control_udp_incoming(int fd, void *p) { struct control_udp *u = p; - int ret; + int ret, len; char buf[8192]; struct sockaddr_in sin; socklen_t sin_len; @@ -38,17 +38,17 @@ static void control_udp_incoming(int fd, void *p) { struct iovec iov[10]; sin_len = sizeof(sin); - ret = recvfrom(fd, buf, sizeof(buf) - 1, 0, (struct sockaddr *) &sin, &sin_len); - if (ret <= 0) { + len = recvfrom(fd, buf, sizeof(buf) - 1, 0, (struct sockaddr *) &sin, &sin_len); + if (len <= 0) { mylog(LOG_WARNING, "Error reading from UDP socket"); return; } - buf[ret] = '\0'; + buf[len] = '\0'; - ret = pcre_exec(u->parse_re, u->parse_ree, buf, ret, 0, 0, ovec, G_N_ELEMENTS(ovec)); + ret = pcre_exec(u->parse_re, u->parse_ree, buf, len, 0, 0, ovec, G_N_ELEMENTS(ovec)); if (ret <= 0) { - ret = pcre_exec(u->fallback_re, NULL, buf, ret, 0, 0, ovec, G_N_ELEMENTS(ovec)); + ret = pcre_exec(u->fallback_re, NULL, buf, len, 0, 0, ovec, G_N_ELEMENTS(ovec)); if (ret <= 0) { mylog(LOG_WARNING, "Unable to parse command line from udp:" DF ": %s", DP(sin), buf); return; @@ -203,6 +203,9 @@ struct control_udp *control_udp_new(struct poller *p, u_int32_t ip, u_int16_t po /* cookie cmd flags callid addr port */ c->fallback_re = pcre_compile("^(\\S+)(?:\\s+(\\S)\\S*\\s+\\S+(\\s+\\S+)(\\s+\\S+))?", PCRE_DOLLAR_ENDONLY | PCRE_DOTALL | PCRE_CASELESS, &errptr, &erroff, NULL); + if (!c->parse_re || !c->fallback_re) + goto fail2; + ZERO(i); i.fd = fd; i.closed = control_udp_closed;