/* store input parameters in state structure */
s->io = *io;
- s->localaddr = talloc_reference(c, io->binding->localaddress);
- s->host = talloc_reference(c, io->binding->host);
- s->target_hostname = talloc_reference(c, io->binding->target_hostname);
+ if (io->binding->localaddress != NULL) {
+ s->localaddr = talloc_strdup(s, io->binding->localaddress);
+ if (composite_nomem(s->localaddr, c)) return c;
+ }
+ if (io->binding->host != NULL) {
+ s->host = talloc_strdup(s, io->binding->host);
+ if (composite_nomem(s->host, c)) return c;
+ }
+ if (io->binding->target_hostname != NULL) {
+ s->target_hostname = talloc_strdup(s, io->binding->target_hostname);
+ if (composite_nomem(s->target_hostname, c)) return c;
+ }
/* port number is a binding endpoint here */
s->port = atoi(io->binding->endpoint);
s->conn = cn;
s->transport = transport;
if (localaddr) {
- s->localaddr = talloc_reference(c, localaddr);
+ s->localaddr = socket_address_copy(s, localaddr);
if (composite_nomem(s->localaddr, c)) return c;
}
- s->server = talloc_reference(c, server);
+ s->server = socket_address_copy(s, server);
if (composite_nomem(s->server, c)) return c;
- s->target_hostname = talloc_reference(s, target_hostname);
+ if (target_hostname) {
+ s->target_hostname = talloc_strdup(s, target_hostname);
+ if (composite_nomem(s->target_hostname, c)) return c;
+ }
s->sock = talloc(cn, struct sock_private);
if (composite_nomem(s->sock, c)) return c;
talloc_steal(s->sock, s->socket_ctx);
- s->sock->path = talloc_reference(s->sock, full_path);
+ if (full_path != NULL) {
+ s->sock->path = talloc_strdup(s->sock, full_path);
+ if (composite_nomem(s->sock->path, c)) return c;
+ }
conn_req = socket_connect_send(s->socket_ctx, s->localaddr, s->server, 0,
c->event_ctx);
}
/* get received endpoint */
- s->binding->endpoint = talloc_reference(s->binding,
- dcerpc_floor_get_rhs_data(c, &s->twr_r->tower.floors[3]));
+ s->binding->endpoint = dcerpc_floor_get_rhs_data(s->binding,
+ &s->twr_r->tower.floors[3]);
if (composite_nomem(s->binding->endpoint, c)) return;
composite_done(c);
/* anonymous credentials for rpc connection used to get endpoint mapping */
anon_creds = cli_credentials_init(mem_ctx);
+ if (composite_nomem(anon_creds, c)) return c;
cli_credentials_set_anonymous(anon_creds);
/*
binding->transport = default_binding->transport;
if (default_binding->transport == binding->transport &&
default_binding->endpoint) {
- binding->endpoint = talloc_reference(binding, default_binding->endpoint);
+ binding->endpoint = talloc_strdup(binding, default_binding->endpoint);
+ if (composite_nomem(binding->endpoint, c)) return c;
talloc_free(default_binding);
composite_done(c);
/* basic endpoint mapping data */
epmapper_binding->transport = binding->transport;
- epmapper_binding->host = talloc_reference(epmapper_binding, binding->host);
+ if (binding->host != NULL) {
+ epmapper_binding->host = talloc_strdup(epmapper_binding, binding->host);
+ if (composite_nomem(epmapper_binding->host, c)) return c;
+ }
epmapper_binding->target_hostname = epmapper_binding->host;
epmapper_binding->options = NULL;
- epmapper_binding->localaddress = talloc_reference(epmapper_binding, binding->localaddress);
+ if (binding->localaddress != NULL) {
+ epmapper_binding->localaddress = talloc_strdup(epmapper_binding, binding->localaddress);
+ if (composite_nomem(epmapper_binding->localaddress, c)) return c;
+ }
epmapper_binding->flags = 0;
epmapper_binding->assoc_group_id = 0;
epmapper_binding->endpoint = NULL;