cli_connect_nb_send: don't segfault on host == NULL.
authorMichael Adam <obnox@samba.org>
Fri, 16 Jan 2015 15:18:45 +0000 (16:18 +0100)
committerMichael Adam <obnox@samba.org>
Mon, 19 Jan 2015 05:48:05 +0000 (06:48 +0100)
The functions called futher down can cope with host == NULL.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11058

This is part one of the bugfix:
This ensures that it is enough to pass one of host or address to the function.

Pair-Programmed-With: Andreas Schneider <asn@samba.org>

Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/cliconnect.c

index 7a9e64834cb47945c4651593f3a127e52e1ad7c5..9cbf11f1cbbdb9954dedabfe00fb1d19e20b32d2 100644 (file)
@@ -3004,21 +3004,29 @@ static struct tevent_req *cli_connect_nb_send(
 {
        struct tevent_req *req, *subreq;
        struct cli_connect_nb_state *state;
-       char *p;
 
        req = tevent_req_create(mem_ctx, &state, struct cli_connect_nb_state);
        if (req == NULL) {
                return NULL;
        }
-       state->desthost = host;
        state->signing_state = signing_state;
        state->flags = flags;
 
-       p = strchr(host, '#');
-       if (p != NULL) {
-               name_type = strtol(p+1, NULL, 16);
-               host = talloc_strndup(state, host, p - host);
-               if (tevent_req_nomem(host, req)) {
+       if (host != NULL) {
+               char *p = strchr(host, '#');
+
+               if (p != NULL) {
+                       name_type = strtol(p+1, NULL, 16);
+                       host = talloc_strndup(state, host, p - host);
+                       if (tevent_req_nomem(host, req)) {
+                               return tevent_req_post(req, ev);
+                       }
+               }
+
+               state->desthost = host;
+       } else {
+               state->desthost = print_canonical_sockaddr(state, dest_ss);
+               if (tevent_req_nomem(state->desthost, req)) {
                        return tevent_req_post(req, ev);
                }
        }