]> 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>
Sat, 24 Jan 2015 21:16:11 +0000 (22:16 +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 950865167d15a9ecd42fe34f987fe3a87f5e9aeb..7292805d3d6a5ec701dd66d8298a1d0a37bc93b5 100644 (file)
@@ -3013,21 +3013,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);
                }
        }