]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
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)
committerKarolin Seeger <kseeger@samba.org>
Mon, 26 Jan 2015 19:53:09 +0000 (20:53 +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>
(cherry picked from commit a0a254f74234bed6c9a0c71a5bda8254fa6f633f)

source3/libsmb/cliconnect.c

index 13e77046cfb7b2baa984d784164040128c802bce..5255e8af84d66c293af213fac261446c3e4e6f9e 100644 (file)
@@ -2995,21 +2995,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);
                }
        }