mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
s3:rpc: bump named_pipe_auth_req_info version number
This is because commit f893cf85cc
changed the security token in secuirty.idl, and bumping the version
was missed.
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
a842c14dc8
commit
da841a80e3
@ -73,7 +73,7 @@ struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
|||||||
int ret;
|
int ret;
|
||||||
enum ndr_err_code ndr_err;
|
enum ndr_err_code ndr_err;
|
||||||
char *lower_case_npipe;
|
char *lower_case_npipe;
|
||||||
struct named_pipe_auth_req_info7 *info7;
|
struct named_pipe_auth_req_info8 *info8;
|
||||||
|
|
||||||
req = tevent_req_create(mem_ctx, &state,
|
req = tevent_req_create(mem_ctx, &state,
|
||||||
struct tstream_npa_connect_state);
|
struct tstream_npa_connect_state);
|
||||||
@ -119,41 +119,41 @@ struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
|||||||
goto post;
|
goto post;
|
||||||
}
|
}
|
||||||
|
|
||||||
state->auth_req.level = 7;
|
state->auth_req.level = 8;
|
||||||
info7 = &state->auth_req.info.info7;
|
info8 = &state->auth_req.info.info8;
|
||||||
|
|
||||||
info7->transport = transport;
|
info8->transport = transport;
|
||||||
SMB_ASSERT(info7->transport == transport); /* Assert no overflow */
|
SMB_ASSERT(info8->transport == transport); /* Assert no overflow */
|
||||||
|
|
||||||
info7->remote_client_name = remote_client_name_in;
|
info8->remote_client_name = remote_client_name_in;
|
||||||
info7->remote_client_addr =
|
info8->remote_client_addr =
|
||||||
tsocket_address_inet_addr_string(remote_client_addr, state);
|
tsocket_address_inet_addr_string(remote_client_addr, state);
|
||||||
if (!info7->remote_client_addr) {
|
if (!info8->remote_client_addr) {
|
||||||
/* errno might be EINVAL */
|
/* errno might be EINVAL */
|
||||||
tevent_req_error(req, errno);
|
tevent_req_error(req, errno);
|
||||||
goto post;
|
goto post;
|
||||||
}
|
}
|
||||||
info7->remote_client_port =
|
info8->remote_client_port =
|
||||||
tsocket_address_inet_port(remote_client_addr);
|
tsocket_address_inet_port(remote_client_addr);
|
||||||
if (!info7->remote_client_name) {
|
if (!info8->remote_client_name) {
|
||||||
info7->remote_client_name = info7->remote_client_addr;
|
info8->remote_client_name = info8->remote_client_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
info7->local_server_name = local_server_name_in;
|
info8->local_server_name = local_server_name_in;
|
||||||
info7->local_server_addr =
|
info8->local_server_addr =
|
||||||
tsocket_address_inet_addr_string(local_server_addr, state);
|
tsocket_address_inet_addr_string(local_server_addr, state);
|
||||||
if (!info7->local_server_addr) {
|
if (!info8->local_server_addr) {
|
||||||
/* errno might be EINVAL */
|
/* errno might be EINVAL */
|
||||||
tevent_req_error(req, errno);
|
tevent_req_error(req, errno);
|
||||||
goto post;
|
goto post;
|
||||||
}
|
}
|
||||||
info7->local_server_port =
|
info8->local_server_port =
|
||||||
tsocket_address_inet_port(local_server_addr);
|
tsocket_address_inet_port(local_server_addr);
|
||||||
if (!info7->local_server_name) {
|
if (!info8->local_server_name) {
|
||||||
info7->local_server_name = info7->local_server_addr;
|
info8->local_server_name = info8->local_server_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
info7->session_info =
|
info8->session_info =
|
||||||
discard_const_p(struct auth_session_info_transport,
|
discard_const_p(struct auth_session_info_transport,
|
||||||
session_info);
|
session_info);
|
||||||
|
|
||||||
@ -352,10 +352,10 @@ int _tstream_npa_connect_recv(struct tevent_req *req,
|
|||||||
|
|
||||||
npas->unix_stream = talloc_move(stream, &state->unix_stream);
|
npas->unix_stream = talloc_move(stream, &state->unix_stream);
|
||||||
switch (state->auth_rep.level) {
|
switch (state->auth_rep.level) {
|
||||||
case 7:
|
case 8:
|
||||||
npas->file_type = state->auth_rep.info.info7.file_type;
|
npas->file_type = state->auth_rep.info.info8.file_type;
|
||||||
device_state = state->auth_rep.info.info7.device_state;
|
device_state = state->auth_rep.info.info8.device_state;
|
||||||
allocation_size = state->auth_rep.info.info7.allocation_size;
|
allocation_size = state->auth_rep.info.info8.allocation_size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1088,7 +1088,7 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
|||||||
tevent_req_data(req, struct tstream_npa_accept_state);
|
tevent_req_data(req, struct tstream_npa_accept_state);
|
||||||
struct named_pipe_auth_req *pipe_request;
|
struct named_pipe_auth_req *pipe_request;
|
||||||
struct named_pipe_auth_rep pipe_reply;
|
struct named_pipe_auth_rep pipe_reply;
|
||||||
struct named_pipe_auth_req_info7 i7;
|
struct named_pipe_auth_req_info8 i8;
|
||||||
enum ndr_err_code ndr_err;
|
enum ndr_err_code ndr_err;
|
||||||
DATA_BLOB in, out;
|
DATA_BLOB in, out;
|
||||||
int err;
|
int err;
|
||||||
@ -1151,28 +1151,28 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
|||||||
NDR_PRINT_DEBUG(named_pipe_auth_req, pipe_request);
|
NDR_PRINT_DEBUG(named_pipe_auth_req, pipe_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZERO_STRUCT(i7);
|
ZERO_STRUCT(i8);
|
||||||
|
|
||||||
if (pipe_request->level != 7) {
|
if (pipe_request->level != 8) {
|
||||||
DEBUG(0, ("Unknown level %u\n", pipe_request->level));
|
DEBUG(0, ("Unknown level %u\n", pipe_request->level));
|
||||||
pipe_reply.level = 0;
|
pipe_reply.level = 0;
|
||||||
pipe_reply.status = NT_STATUS_INVALID_LEVEL;
|
pipe_reply.status = NT_STATUS_INVALID_LEVEL;
|
||||||
goto reply;
|
goto reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
pipe_reply.level = 7;
|
pipe_reply.level = 8;
|
||||||
pipe_reply.status = NT_STATUS_OK;
|
pipe_reply.status = NT_STATUS_OK;
|
||||||
pipe_reply.info.info7.file_type = state->file_type;
|
pipe_reply.info.info8.file_type = state->file_type;
|
||||||
pipe_reply.info.info7.device_state = state->device_state;
|
pipe_reply.info.info8.device_state = state->device_state;
|
||||||
pipe_reply.info.info7.allocation_size = state->alloc_size;
|
pipe_reply.info.info8.allocation_size = state->alloc_size;
|
||||||
|
|
||||||
i7 = pipe_request->info.info7;
|
i8 = pipe_request->info.info8;
|
||||||
if (i7.local_server_addr == NULL) {
|
if (i8.local_server_addr == NULL) {
|
||||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||||
DEBUG(2, ("Missing local server address\n"));
|
DEBUG(2, ("Missing local server address\n"));
|
||||||
goto reply;
|
goto reply;
|
||||||
}
|
}
|
||||||
if (i7.remote_client_addr == NULL) {
|
if (i8.remote_client_addr == NULL) {
|
||||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||||
DEBUG(2, ("Missing remote client address\n"));
|
DEBUG(2, ("Missing remote client address\n"));
|
||||||
goto reply;
|
goto reply;
|
||||||
@ -1180,14 +1180,14 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
|||||||
|
|
||||||
ret = tsocket_address_inet_from_strings(state,
|
ret = tsocket_address_inet_from_strings(state,
|
||||||
"ip",
|
"ip",
|
||||||
i7.local_server_addr,
|
i8.local_server_addr,
|
||||||
i7.local_server_port,
|
i8.local_server_port,
|
||||||
&state->local_server_addr);
|
&state->local_server_addr);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
DEBUG(2,
|
DEBUG(2,
|
||||||
("Invalid local server address[%s:%u] - %s\n",
|
("Invalid local server address[%s:%u] - %s\n",
|
||||||
i7.local_server_addr,
|
i8.local_server_addr,
|
||||||
i7.local_server_port,
|
i8.local_server_port,
|
||||||
strerror(errno)));
|
strerror(errno)));
|
||||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||||
goto reply;
|
goto reply;
|
||||||
@ -1195,14 +1195,14 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
|||||||
|
|
||||||
ret = tsocket_address_inet_from_strings(state,
|
ret = tsocket_address_inet_from_strings(state,
|
||||||
"ip",
|
"ip",
|
||||||
i7.remote_client_addr,
|
i8.remote_client_addr,
|
||||||
i7.remote_client_port,
|
i8.remote_client_port,
|
||||||
&state->remote_client_addr);
|
&state->remote_client_addr);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
DEBUG(2,
|
DEBUG(2,
|
||||||
("Invalid remote client address[%s:%u] - %s\n",
|
("Invalid remote client address[%s:%u] - %s\n",
|
||||||
i7.remote_client_addr,
|
i8.remote_client_addr,
|
||||||
i7.remote_client_port,
|
i8.remote_client_port,
|
||||||
strerror(errno)));
|
strerror(errno)));
|
||||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||||
goto reply;
|
goto reply;
|
||||||
@ -1259,15 +1259,15 @@ static void tstream_npa_accept_existing_done(struct tevent_req *subreq)
|
|||||||
tevent_req_done(req);
|
tevent_req_done(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct named_pipe_auth_req_info7 *
|
static struct named_pipe_auth_req_info8 *
|
||||||
copy_npa_info7(TALLOC_CTX *mem_ctx,
|
copy_npa_info8(TALLOC_CTX *mem_ctx,
|
||||||
const struct named_pipe_auth_req_info7 *src)
|
const struct named_pipe_auth_req_info8 *src)
|
||||||
{
|
{
|
||||||
struct named_pipe_auth_req_info7 *dst = NULL;
|
struct named_pipe_auth_req_info8 *dst = NULL;
|
||||||
DATA_BLOB blob;
|
DATA_BLOB blob;
|
||||||
enum ndr_err_code ndr_err;
|
enum ndr_err_code ndr_err;
|
||||||
|
|
||||||
dst = talloc_zero(mem_ctx, struct named_pipe_auth_req_info7);
|
dst = talloc_zero(mem_ctx, struct named_pipe_auth_req_info8);
|
||||||
if (dst == NULL) {
|
if (dst == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1276,9 +1276,9 @@ copy_npa_info7(TALLOC_CTX *mem_ctx,
|
|||||||
&blob,
|
&blob,
|
||||||
dst,
|
dst,
|
||||||
src,
|
src,
|
||||||
(ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req_info7);
|
(ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req_info8);
|
||||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info7 failed: %s\n",
|
DBG_WARNING("ndr_push_named_pipe_auth_req_info8 failed: %s\n",
|
||||||
ndr_errstr(ndr_err));
|
ndr_errstr(ndr_err));
|
||||||
TALLOC_FREE(dst);
|
TALLOC_FREE(dst);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1288,10 +1288,10 @@ copy_npa_info7(TALLOC_CTX *mem_ctx,
|
|||||||
&blob,
|
&blob,
|
||||||
dst,
|
dst,
|
||||||
dst,
|
dst,
|
||||||
(ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_req_info7);
|
(ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_req_info8);
|
||||||
TALLOC_FREE(blob.data);
|
TALLOC_FREE(blob.data);
|
||||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info7 failed: %s\n",
|
DBG_WARNING("ndr_push_named_pipe_auth_req_info8 failed: %s\n",
|
||||||
ndr_errstr(ndr_err));
|
ndr_errstr(ndr_err));
|
||||||
TALLOC_FREE(dst);
|
TALLOC_FREE(dst);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1305,7 +1305,7 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
int *perrno,
|
int *perrno,
|
||||||
TALLOC_CTX *mem_ctx,
|
TALLOC_CTX *mem_ctx,
|
||||||
struct tstream_context **stream,
|
struct tstream_context **stream,
|
||||||
struct named_pipe_auth_req_info7 **info7,
|
struct named_pipe_auth_req_info8 **info8,
|
||||||
enum dcerpc_transport_t *transport,
|
enum dcerpc_transport_t *transport,
|
||||||
struct tsocket_address **remote_client_addr,
|
struct tsocket_address **remote_client_addr,
|
||||||
char **_remote_client_name,
|
char **_remote_client_name,
|
||||||
@ -1316,8 +1316,8 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
{
|
{
|
||||||
struct tstream_npa_accept_state *state =
|
struct tstream_npa_accept_state *state =
|
||||||
tevent_req_data(req, struct tstream_npa_accept_state);
|
tevent_req_data(req, struct tstream_npa_accept_state);
|
||||||
struct named_pipe_auth_req_info7 *i7 =
|
struct named_pipe_auth_req_info8 *i8 =
|
||||||
&state->pipe_request->info.info7;
|
&state->pipe_request->info.info8;
|
||||||
struct tstream_npa *npas;
|
struct tstream_npa *npas;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -1358,24 +1358,24 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
npas->unix_stream = state->plain;
|
npas->unix_stream = state->plain;
|
||||||
npas->file_type = state->file_type;
|
npas->file_type = state->file_type;
|
||||||
|
|
||||||
if (info7 != NULL) {
|
if (info8 != NULL) {
|
||||||
/*
|
/*
|
||||||
* Make a full copy of "info7" because further down we
|
* Make a full copy of "info8" because further down we
|
||||||
* talloc_move() away substructures from
|
* talloc_move() away substructures from
|
||||||
* state->pipe_request.
|
* state->pipe_request.
|
||||||
*/
|
*/
|
||||||
struct named_pipe_auth_req_info7 *dst =
|
struct named_pipe_auth_req_info8 *dst =
|
||||||
copy_npa_info7(mem_ctx, i7);
|
copy_npa_info8(mem_ctx, i8);
|
||||||
if (dst == NULL) {
|
if (dst == NULL) {
|
||||||
*perrno = ENOMEM;
|
*perrno = ENOMEM;
|
||||||
tevent_req_received(req);
|
tevent_req_received(req);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*info7 = dst;
|
*info8 = dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transport != NULL) {
|
if (transport != NULL) {
|
||||||
*transport = i7->transport;
|
*transport = i8->transport;
|
||||||
}
|
}
|
||||||
if (remote_client_addr != NULL) {
|
if (remote_client_addr != NULL) {
|
||||||
*remote_client_addr = talloc_move(
|
*remote_client_addr = talloc_move(
|
||||||
@ -1384,7 +1384,7 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
if (_remote_client_name != NULL) {
|
if (_remote_client_name != NULL) {
|
||||||
*_remote_client_name = discard_const_p(
|
*_remote_client_name = discard_const_p(
|
||||||
char,
|
char,
|
||||||
talloc_move(mem_ctx, &i7->remote_client_name));
|
talloc_move(mem_ctx, &i8->remote_client_name));
|
||||||
}
|
}
|
||||||
if (local_server_addr != NULL) {
|
if (local_server_addr != NULL) {
|
||||||
*local_server_addr = talloc_move(
|
*local_server_addr = talloc_move(
|
||||||
@ -1393,10 +1393,10 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
if (local_server_name != NULL) {
|
if (local_server_name != NULL) {
|
||||||
*local_server_name = discard_const_p(
|
*local_server_name = discard_const_p(
|
||||||
char,
|
char,
|
||||||
talloc_move(mem_ctx, &i7->local_server_name));
|
talloc_move(mem_ctx, &i8->local_server_name));
|
||||||
}
|
}
|
||||||
if (session_info != NULL) {
|
if (session_info != NULL) {
|
||||||
*session_info = talloc_move(mem_ctx, &i7->session_info);
|
*session_info = talloc_move(mem_ctx, &i8->session_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
tevent_req_received(req);
|
tevent_req_received(req);
|
||||||
|
@ -27,7 +27,7 @@ struct tevent_req;
|
|||||||
struct tevent_context;
|
struct tevent_context;
|
||||||
struct auth_session_info_transport;
|
struct auth_session_info_transport;
|
||||||
struct tsocket_address;
|
struct tsocket_address;
|
||||||
struct named_pipe_auth_req_info7;
|
struct named_pipe_auth_req_info8;
|
||||||
|
|
||||||
struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
||||||
struct tevent_context *ev,
|
struct tevent_context *ev,
|
||||||
@ -114,7 +114,7 @@ int _tstream_npa_accept_existing_recv(
|
|||||||
int *perrno,
|
int *perrno,
|
||||||
TALLOC_CTX *mem_ctx,
|
TALLOC_CTX *mem_ctx,
|
||||||
struct tstream_context **stream,
|
struct tstream_context **stream,
|
||||||
struct named_pipe_auth_req_info7 **info7,
|
struct named_pipe_auth_req_info8 **info8,
|
||||||
enum dcerpc_transport_t *transport,
|
enum dcerpc_transport_t *transport,
|
||||||
struct tsocket_address **remote_client_addr,
|
struct tsocket_address **remote_client_addr,
|
||||||
char **_remote_client_name,
|
char **_remote_client_name,
|
||||||
|
@ -21,10 +21,10 @@ interface named_pipe_auth
|
|||||||
[charset(DOS),string] uint8 *local_server_addr;
|
[charset(DOS),string] uint8 *local_server_addr;
|
||||||
uint16 local_server_port;
|
uint16 local_server_port;
|
||||||
auth_session_info_transport *session_info;
|
auth_session_info_transport *session_info;
|
||||||
} named_pipe_auth_req_info7;
|
} named_pipe_auth_req_info8;
|
||||||
|
|
||||||
typedef [switch_type(uint32)] union {
|
typedef [switch_type(uint32)] union {
|
||||||
[case(7)] named_pipe_auth_req_info7 info7;
|
[case(8)] named_pipe_auth_req_info8 info8;
|
||||||
} named_pipe_auth_req_info;
|
} named_pipe_auth_req_info;
|
||||||
|
|
||||||
typedef [public,gensize] struct {
|
typedef [public,gensize] struct {
|
||||||
@ -40,10 +40,10 @@ interface named_pipe_auth
|
|||||||
uint16 file_type;
|
uint16 file_type;
|
||||||
uint16 device_state;
|
uint16 device_state;
|
||||||
hyper allocation_size;
|
hyper allocation_size;
|
||||||
} named_pipe_auth_rep_info7;
|
} named_pipe_auth_rep_info8;
|
||||||
|
|
||||||
typedef [switch_type(uint32)] union {
|
typedef [switch_type(uint32)] union {
|
||||||
[case(7)] named_pipe_auth_rep_info7 info7;
|
[case(8)] named_pipe_auth_rep_info8 info8;
|
||||||
} named_pipe_auth_rep_info;
|
} named_pipe_auth_rep_info;
|
||||||
|
|
||||||
typedef [public,gensize] struct {
|
typedef [public,gensize] struct {
|
||||||
|
@ -31,7 +31,7 @@ interface rpc_host_msg
|
|||||||
/**
|
/**
|
||||||
* @brief Auth info inherited from SMB
|
* @brief Auth info inherited from SMB
|
||||||
*/
|
*/
|
||||||
named_pipe_auth_req_info7 *npa_info7;
|
named_pipe_auth_req_info8 *npa_info8;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Raw bind PDU
|
* @brief Raw bind PDU
|
||||||
|
@ -275,8 +275,8 @@ static void np_sock_connect_read_done(struct tevent_req *subreq)
|
|||||||
tevent_req_error(req, ndr_map_error2errno(ndr_err));
|
tevent_req_error(req, ndr_map_error2errno(ndr_err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (state->npa_rep->level != 7) {
|
if (state->npa_rep->level != 8) {
|
||||||
DBG_DEBUG("npa level = %" PRIu32 ", expected 7\n",
|
DBG_DEBUG("npa level = %" PRIu32 ", expected 8\n",
|
||||||
state->npa_rep->level);
|
state->npa_rep->level);
|
||||||
tevent_req_error(req, EIO);
|
tevent_req_error(req, EIO);
|
||||||
return;
|
return;
|
||||||
@ -284,7 +284,7 @@ static void np_sock_connect_read_done(struct tevent_req *subreq)
|
|||||||
|
|
||||||
ret = tstream_npa_existing_stream(state,
|
ret = tstream_npa_existing_stream(state,
|
||||||
&state->transport,
|
&state->transport,
|
||||||
state->npa_rep->info.info7.file_type,
|
state->npa_rep->info.info8.file_type,
|
||||||
&state->npa_stream);
|
&state->npa_stream);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
ret = errno;
|
ret = errno;
|
||||||
@ -498,7 +498,7 @@ struct tevent_req *local_np_connect_send(
|
|||||||
{
|
{
|
||||||
struct tevent_req *req = NULL, *subreq = NULL;
|
struct tevent_req *req = NULL, *subreq = NULL;
|
||||||
struct local_np_connect_state *state = NULL;
|
struct local_np_connect_state *state = NULL;
|
||||||
struct named_pipe_auth_req_info7 *i7 = NULL;
|
struct named_pipe_auth_req_info8 *i8 = NULL;
|
||||||
const char *socket_dir = NULL;
|
const char *socket_dir = NULL;
|
||||||
char *lower_case_pipename = NULL;
|
char *lower_case_pipename = NULL;
|
||||||
struct dom_sid npa_sid = global_sid_Samba_NPA_Flags;
|
struct dom_sid npa_sid = global_sid_Samba_NPA_Flags;
|
||||||
@ -553,14 +553,14 @@ struct tevent_req *local_np_connect_send(
|
|||||||
if (tevent_req_nomem(state->npa_req, req)) {
|
if (tevent_req_nomem(state->npa_req, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
state->npa_req->level = 7;
|
state->npa_req->level = 8;
|
||||||
|
|
||||||
i7 = &state->npa_req->info.info7;
|
i8 = &state->npa_req->info.info8;
|
||||||
|
|
||||||
i7->transport = transport;
|
i8->transport = transport;
|
||||||
|
|
||||||
/* we don't have "int" in IDL, make sure we don't overflow */
|
/* we don't have "int" in IDL, make sure we don't overflow */
|
||||||
SMB_ASSERT(i7->transport == transport);
|
SMB_ASSERT(i8->transport == transport);
|
||||||
|
|
||||||
if (remote_client_name == NULL) {
|
if (remote_client_name == NULL) {
|
||||||
remote_client_name = get_myname(state->npa_req);
|
remote_client_name = get_myname(state->npa_req);
|
||||||
@ -569,7 +569,7 @@ struct tevent_req *local_np_connect_send(
|
|||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i7->remote_client_name = remote_client_name;
|
i8->remote_client_name = remote_client_name;
|
||||||
|
|
||||||
if (remote_client_addr == NULL) {
|
if (remote_client_addr == NULL) {
|
||||||
struct tsocket_address *addr = NULL;
|
struct tsocket_address *addr = NULL;
|
||||||
@ -581,19 +581,19 @@ struct tevent_req *local_np_connect_send(
|
|||||||
}
|
}
|
||||||
remote_client_addr = addr;
|
remote_client_addr = addr;
|
||||||
}
|
}
|
||||||
i7->remote_client_addr =
|
i8->remote_client_addr =
|
||||||
tsocket_address_inet_addr_string(remote_client_addr,
|
tsocket_address_inet_addr_string(remote_client_addr,
|
||||||
state->npa_req);
|
state->npa_req);
|
||||||
if (i7->remote_client_addr == NULL) {
|
if (i8->remote_client_addr == NULL) {
|
||||||
tevent_req_error(req, errno);
|
tevent_req_error(req, errno);
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
i7->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
i8->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
||||||
|
|
||||||
if (local_server_name == NULL) {
|
if (local_server_name == NULL) {
|
||||||
local_server_name = remote_client_name;
|
local_server_name = remote_client_name;
|
||||||
}
|
}
|
||||||
i7->local_server_name = local_server_name;
|
i8->local_server_name = local_server_name;
|
||||||
|
|
||||||
if (local_server_addr == NULL) {
|
if (local_server_addr == NULL) {
|
||||||
struct tsocket_address *addr = NULL;
|
struct tsocket_address *addr = NULL;
|
||||||
@ -605,24 +605,24 @@ struct tevent_req *local_np_connect_send(
|
|||||||
}
|
}
|
||||||
local_server_addr = addr;
|
local_server_addr = addr;
|
||||||
}
|
}
|
||||||
i7->local_server_addr =
|
i8->local_server_addr =
|
||||||
tsocket_address_inet_addr_string(local_server_addr,
|
tsocket_address_inet_addr_string(local_server_addr,
|
||||||
state->npa_req);
|
state->npa_req);
|
||||||
if (i7->local_server_addr == NULL) {
|
if (i8->local_server_addr == NULL) {
|
||||||
tevent_req_error(req, errno);
|
tevent_req_error(req, errno);
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
i7->local_server_port = tsocket_address_inet_port(local_server_addr);
|
i8->local_server_port = tsocket_address_inet_port(local_server_addr);
|
||||||
|
|
||||||
i7->session_info = talloc_zero(state->npa_req,
|
i8->session_info = talloc_zero(state->npa_req,
|
||||||
struct auth_session_info_transport);
|
struct auth_session_info_transport);
|
||||||
if (tevent_req_nomem(i7->session_info, req)) {
|
if (tevent_req_nomem(i8->session_info, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
i7->session_info->session_info =
|
i8->session_info->session_info =
|
||||||
copy_session_info(i7->session_info, session_info);
|
copy_session_info(i8->session_info, session_info);
|
||||||
if (tevent_req_nomem(i7->session_info->session_info, req)) {
|
if (tevent_req_nomem(i8->session_info->session_info, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +641,7 @@ struct tevent_req *local_np_connect_send(
|
|||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
token = i7->session_info->session_info->security_token;
|
token = i8->session_info->session_info->security_token;
|
||||||
|
|
||||||
status = add_sid_to_array_unique(token,
|
status = add_sid_to_array_unique(token,
|
||||||
&npa_sid,
|
&npa_sid,
|
||||||
|
@ -202,7 +202,7 @@ struct rpc_server {
|
|||||||
* between RPC servers: netlogon requires samr, everybody
|
* between RPC servers: netlogon requires samr, everybody
|
||||||
* requires winreg. And if a deep call in netlogon asks for a
|
* requires winreg. And if a deep call in netlogon asks for a
|
||||||
* samr connection, this must never end up in the same
|
* samr connection, this must never end up in the same
|
||||||
* process. named_pipe_auth_req_info7->need_idle_server is set
|
* process. named_pipe_auth_req_info8->need_idle_server is set
|
||||||
* in those cases.
|
* in those cases.
|
||||||
*/
|
*/
|
||||||
struct rpc_work_process *workers;
|
struct rpc_work_process *workers;
|
||||||
@ -730,14 +730,14 @@ static int rpc_server_get_endpoints_recv(
|
|||||||
* anonymous session info.
|
* anonymous session info.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
static NTSTATUS rpc_host_generate_npa_info8_from_sock(
|
||||||
TALLOC_CTX *mem_ctx,
|
TALLOC_CTX *mem_ctx,
|
||||||
enum dcerpc_transport_t transport,
|
enum dcerpc_transport_t transport,
|
||||||
int sock,
|
int sock,
|
||||||
const struct samba_sockaddr *peer_addr,
|
const struct samba_sockaddr *peer_addr,
|
||||||
struct named_pipe_auth_req_info7 **pinfo7)
|
struct named_pipe_auth_req_info8 **pinfo8)
|
||||||
{
|
{
|
||||||
struct named_pipe_auth_req_info7 *info7 = NULL;
|
struct named_pipe_auth_req_info8 *info8 = NULL;
|
||||||
struct samba_sockaddr local_addr = {
|
struct samba_sockaddr local_addr = {
|
||||||
.sa_socklen = sizeof(struct sockaddr_storage),
|
.sa_socklen = sizeof(struct sockaddr_storage),
|
||||||
};
|
};
|
||||||
@ -760,26 +760,26 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
tsocket_address_to_name_fn = (transport == NCACN_IP_TCP) ?
|
tsocket_address_to_name_fn = (transport == NCACN_IP_TCP) ?
|
||||||
tsocket_address_inet_addr_string : tsocket_address_unix_path;
|
tsocket_address_inet_addr_string : tsocket_address_unix_path;
|
||||||
|
|
||||||
info7 = talloc_zero(mem_ctx, struct named_pipe_auth_req_info7);
|
info8 = talloc_zero(mem_ctx, struct named_pipe_auth_req_info8);
|
||||||
if (info7 == NULL) {
|
if (info8 == NULL) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
info7->session_info =
|
info8->session_info =
|
||||||
talloc_zero(info7, struct auth_session_info_transport);
|
talloc_zero(info8, struct auth_session_info_transport);
|
||||||
if (info7->session_info == NULL) {
|
if (info8->session_info == NULL) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = make_session_info_anonymous(
|
status = make_session_info_anonymous(
|
||||||
info7->session_info,
|
info8->session_info,
|
||||||
&info7->session_info->session_info);
|
&info8->session_info->session_info);
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DBG_DEBUG("make_session_info_anonymous failed: %s\n",
|
DBG_DEBUG("make_session_info_anonymous failed: %s\n",
|
||||||
nt_errstr(status));
|
nt_errstr(status));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = tsocket_address_bsd_from_samba_sockaddr(info7,
|
ret = tsocket_address_bsd_from_samba_sockaddr(info8,
|
||||||
peer_addr,
|
peer_addr,
|
||||||
&taddr);
|
&taddr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
@ -789,14 +789,14 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
remote_client_addr = tsocket_address_to_name_fn(taddr, info7);
|
remote_client_addr = tsocket_address_to_name_fn(taddr, info8);
|
||||||
if (remote_client_addr == NULL) {
|
if (remote_client_addr == NULL) {
|
||||||
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
}
|
}
|
||||||
TALLOC_FREE(taddr);
|
TALLOC_FREE(taddr);
|
||||||
|
|
||||||
remote_client_name = talloc_strdup(info7, remote_client_addr);
|
remote_client_name = talloc_strdup(info8, remote_client_addr);
|
||||||
if (remote_client_name == NULL) {
|
if (remote_client_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup failed\n");
|
DBG_DEBUG("talloc_strdup failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
@ -804,7 +804,7 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
|
|
||||||
if (transport == NCACN_IP_TCP) {
|
if (transport == NCACN_IP_TCP) {
|
||||||
bool ok = samba_sockaddr_get_port(peer_addr,
|
bool ok = samba_sockaddr_get_port(peer_addr,
|
||||||
&info7->remote_client_port);
|
&info8->remote_client_port);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
||||||
status = NT_STATUS_INVALID_PARAMETER;
|
status = NT_STATUS_INVALID_PARAMETER;
|
||||||
@ -819,7 +819,7 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = tsocket_address_bsd_from_samba_sockaddr(info7,
|
ret = tsocket_address_bsd_from_samba_sockaddr(info8,
|
||||||
&local_addr,
|
&local_addr,
|
||||||
&taddr);
|
&taddr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
@ -829,14 +829,14 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
local_server_addr = tsocket_address_to_name_fn(taddr, info7);
|
local_server_addr = tsocket_address_to_name_fn(taddr, info8);
|
||||||
if (local_server_addr == NULL) {
|
if (local_server_addr == NULL) {
|
||||||
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
}
|
}
|
||||||
TALLOC_FREE(taddr);
|
TALLOC_FREE(taddr);
|
||||||
|
|
||||||
local_server_name = talloc_strdup(info7, local_server_addr);
|
local_server_name = talloc_strdup(info8, local_server_addr);
|
||||||
if (local_server_name == NULL) {
|
if (local_server_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup failed\n");
|
DBG_DEBUG("talloc_strdup failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
@ -844,7 +844,7 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
|
|
||||||
if (transport == NCACN_IP_TCP) {
|
if (transport == NCACN_IP_TCP) {
|
||||||
bool ok = samba_sockaddr_get_port(&local_addr,
|
bool ok = samba_sockaddr_get_port(&local_addr,
|
||||||
&info7->local_server_port);
|
&info8->local_server_port);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
||||||
status = NT_STATUS_INVALID_PARAMETER;
|
status = NT_STATUS_INVALID_PARAMETER;
|
||||||
@ -873,7 +873,7 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
TALLOC_FREE(remote_client_name);
|
TALLOC_FREE(remote_client_name);
|
||||||
|
|
||||||
ret = tsocket_address_unix_from_path(
|
ret = tsocket_address_unix_from_path(
|
||||||
info7,
|
info8,
|
||||||
AS_SYSTEM_MAGIC_PATH_TOKEN,
|
AS_SYSTEM_MAGIC_PATH_TOKEN,
|
||||||
&taddr);
|
&taddr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
@ -883,14 +883,14 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
}
|
}
|
||||||
|
|
||||||
remote_client_addr =
|
remote_client_addr =
|
||||||
tsocket_address_unix_path(taddr, info7);
|
tsocket_address_unix_path(taddr, info8);
|
||||||
if (remote_client_addr == NULL) {
|
if (remote_client_addr == NULL) {
|
||||||
DBG_DEBUG("tsocket_address_unix_path "
|
DBG_DEBUG("tsocket_address_unix_path "
|
||||||
"failed\n");
|
"failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
}
|
}
|
||||||
remote_client_name =
|
remote_client_name =
|
||||||
talloc_strdup(info7, remote_client_addr);
|
talloc_strdup(info8, remote_client_addr);
|
||||||
if (remote_client_name == NULL) {
|
if (remote_client_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup failed\n");
|
DBG_DEBUG("talloc_strdup failed\n");
|
||||||
goto nomem;
|
goto nomem;
|
||||||
@ -898,18 +898,18 @@ static NTSTATUS rpc_host_generate_npa_info7_from_sock(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
info7->remote_client_addr = remote_client_addr;
|
info8->remote_client_addr = remote_client_addr;
|
||||||
info7->remote_client_name = remote_client_name;
|
info8->remote_client_name = remote_client_name;
|
||||||
info7->local_server_addr = local_server_addr;
|
info8->local_server_addr = local_server_addr;
|
||||||
info7->local_server_name = local_server_name;
|
info8->local_server_name = local_server_name;
|
||||||
|
|
||||||
*pinfo7 = info7;
|
*pinfo8 = info8;
|
||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
|
|
||||||
nomem:
|
nomem:
|
||||||
status = NT_STATUS_NO_MEMORY;
|
status = NT_STATUS_NO_MEMORY;
|
||||||
fail:
|
fail:
|
||||||
TALLOC_FREE(info7);
|
TALLOC_FREE(info8);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,12 +998,12 @@ static struct tevent_req *rpc_host_bind_read_send(
|
|||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = rpc_host_generate_npa_info7_from_sock(
|
status = rpc_host_generate_npa_info8_from_sock(
|
||||||
state->client,
|
state->client,
|
||||||
transport,
|
transport,
|
||||||
state->sock,
|
state->sock,
|
||||||
peer_addr,
|
peer_addr,
|
||||||
&state->client->npa_info7);
|
&state->client->npa_info8);
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
tevent_req_oom(req);
|
tevent_req_oom(req);
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
@ -1035,14 +1035,14 @@ static void rpc_host_bind_read_got_npa(struct tevent_req *subreq)
|
|||||||
subreq, struct tevent_req);
|
subreq, struct tevent_req);
|
||||||
struct rpc_host_bind_read_state *state = tevent_req_data(
|
struct rpc_host_bind_read_state *state = tevent_req_data(
|
||||||
req, struct rpc_host_bind_read_state);
|
req, struct rpc_host_bind_read_state);
|
||||||
struct named_pipe_auth_req_info7 *info7 = NULL;
|
struct named_pipe_auth_req_info8 *info8 = NULL;
|
||||||
int ret, err;
|
int ret, err;
|
||||||
|
|
||||||
ret = tstream_npa_accept_existing_recv(subreq,
|
ret = tstream_npa_accept_existing_recv(subreq,
|
||||||
&err,
|
&err,
|
||||||
state,
|
state,
|
||||||
&state->npa_stream,
|
&state->npa_stream,
|
||||||
&info7,
|
&info8,
|
||||||
NULL, /* transport */
|
NULL, /* transport */
|
||||||
NULL, /* remote_client_addr */
|
NULL, /* remote_client_addr */
|
||||||
NULL, /* remote_client_name */
|
NULL, /* remote_client_name */
|
||||||
@ -1054,7 +1054,7 @@ static void rpc_host_bind_read_got_npa(struct tevent_req *subreq)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state->client->npa_info7 = talloc_move(state->client, &info7);
|
state->client->npa_info8 = talloc_move(state->client, &info8);
|
||||||
|
|
||||||
subreq = dcerpc_read_ncacn_packet_send(
|
subreq = dcerpc_read_ncacn_packet_send(
|
||||||
state, state->ev, state->npa_stream);
|
state, state->ev, state->npa_stream);
|
||||||
@ -1328,7 +1328,7 @@ again:
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
struct auth_session_info_transport *session_info =
|
struct auth_session_info_transport *session_info =
|
||||||
pending_client->client->npa_info7->session_info;
|
pending_client->client->npa_info8->session_info;
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
bool found;
|
bool found;
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ static void rpc_worker_new_client(
|
|||||||
int sock)
|
int sock)
|
||||||
{
|
{
|
||||||
struct dcesrv_context *dce_ctx = worker->dce_ctx;
|
struct dcesrv_context *dce_ctx = worker->dce_ctx;
|
||||||
struct named_pipe_auth_req_info7 *info7 = client->npa_info7;
|
struct named_pipe_auth_req_info8 *info8 = client->npa_info8;
|
||||||
struct tsocket_address *remote_client_addr = NULL;
|
struct tsocket_address *remote_client_addr = NULL;
|
||||||
struct tsocket_address *local_server_addr = NULL;
|
struct tsocket_address *local_server_addr = NULL;
|
||||||
struct dcerpc_binding *b = NULL;
|
struct dcerpc_binding *b = NULL;
|
||||||
@ -265,84 +265,84 @@ static void rpc_worker_new_client(
|
|||||||
|
|
||||||
if (transport == NCALRPC) {
|
if (transport == NCALRPC) {
|
||||||
ret = tsocket_address_unix_from_path(ncacn_conn,
|
ret = tsocket_address_unix_from_path(ncacn_conn,
|
||||||
info7->remote_client_addr,
|
info8->remote_client_addr,
|
||||||
&remote_client_addr);
|
&remote_client_addr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
DBG_DEBUG("tsocket_address_unix_from_path"
|
DBG_DEBUG("tsocket_address_unix_from_path"
|
||||||
"(%s) failed: %s\n",
|
"(%s) failed: %s\n",
|
||||||
info7->remote_client_addr,
|
info8->remote_client_addr,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ncacn_conn->remote_client_name =
|
ncacn_conn->remote_client_name =
|
||||||
talloc_strdup(ncacn_conn, info7->remote_client_name);
|
talloc_strdup(ncacn_conn, info8->remote_client_name);
|
||||||
if (ncacn_conn->remote_client_name == NULL) {
|
if (ncacn_conn->remote_client_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||||
info7->remote_client_name);
|
info8->remote_client_name);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = tsocket_address_unix_from_path(ncacn_conn,
|
ret = tsocket_address_unix_from_path(ncacn_conn,
|
||||||
info7->local_server_addr,
|
info8->local_server_addr,
|
||||||
&local_server_addr);
|
&local_server_addr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
DBG_DEBUG("tsocket_address_unix_from_path"
|
DBG_DEBUG("tsocket_address_unix_from_path"
|
||||||
"(%s) failed: %s\n",
|
"(%s) failed: %s\n",
|
||||||
info7->local_server_addr,
|
info8->local_server_addr,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ncacn_conn->local_server_name =
|
ncacn_conn->local_server_name =
|
||||||
talloc_strdup(ncacn_conn, info7->local_server_name);
|
talloc_strdup(ncacn_conn, info8->local_server_name);
|
||||||
if (ncacn_conn->local_server_name == NULL) {
|
if (ncacn_conn->local_server_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||||
info7->local_server_name);
|
info8->local_server_name);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = tsocket_address_inet_from_strings(
|
ret = tsocket_address_inet_from_strings(
|
||||||
ncacn_conn,
|
ncacn_conn,
|
||||||
"ip",
|
"ip",
|
||||||
info7->remote_client_addr,
|
info8->remote_client_addr,
|
||||||
info7->remote_client_port,
|
info8->remote_client_port,
|
||||||
&remote_client_addr);
|
&remote_client_addr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
DBG_DEBUG("tsocket_address_inet_from_strings"
|
DBG_DEBUG("tsocket_address_inet_from_strings"
|
||||||
"(%s, %" PRIu16 ") failed: %s\n",
|
"(%s, %" PRIu16 ") failed: %s\n",
|
||||||
info7->remote_client_addr,
|
info8->remote_client_addr,
|
||||||
info7->remote_client_port,
|
info8->remote_client_port,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
ncacn_conn->remote_client_name =
|
ncacn_conn->remote_client_name =
|
||||||
talloc_strdup(ncacn_conn, info7->remote_client_name);
|
talloc_strdup(ncacn_conn, info8->remote_client_name);
|
||||||
if (ncacn_conn->remote_client_name == NULL) {
|
if (ncacn_conn->remote_client_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||||
info7->remote_client_name);
|
info8->remote_client_name);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = tsocket_address_inet_from_strings(
|
ret = tsocket_address_inet_from_strings(
|
||||||
ncacn_conn,
|
ncacn_conn,
|
||||||
"ip",
|
"ip",
|
||||||
info7->local_server_addr,
|
info8->local_server_addr,
|
||||||
info7->local_server_port,
|
info8->local_server_port,
|
||||||
&local_server_addr);
|
&local_server_addr);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
DBG_DEBUG("tsocket_address_inet_from_strings"
|
DBG_DEBUG("tsocket_address_inet_from_strings"
|
||||||
"(%s, %" PRIu16 ") failed: %s\n",
|
"(%s, %" PRIu16 ") failed: %s\n",
|
||||||
info7->local_server_addr,
|
info8->local_server_addr,
|
||||||
info7->local_server_port,
|
info8->local_server_port,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
ncacn_conn->local_server_name =
|
ncacn_conn->local_server_name =
|
||||||
talloc_strdup(ncacn_conn, info7->local_server_name);
|
talloc_strdup(ncacn_conn, info8->local_server_name);
|
||||||
if (ncacn_conn->local_server_name == NULL) {
|
if (ncacn_conn->local_server_name == NULL) {
|
||||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||||
info7->local_server_name);
|
info8->local_server_name);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,10 +364,10 @@ static void rpc_worker_new_client(
|
|||||||
* socket that the client connected to, passed in from
|
* socket that the client connected to, passed in from
|
||||||
* samba-dcerpcd via the binding. For NCACN_NP (root
|
* samba-dcerpcd via the binding. For NCACN_NP (root
|
||||||
* only by unix permissions) we got a
|
* only by unix permissions) we got a
|
||||||
* named_pipe_auth_req_info7 where the transport can
|
* named_pipe_auth_req_info8 where the transport can
|
||||||
* be overridden.
|
* be overridden.
|
||||||
*/
|
*/
|
||||||
transport = info7->transport;
|
transport = info8->transport;
|
||||||
} else {
|
} else {
|
||||||
ret = tstream_bsd_existing_socket(
|
ret = tstream_bsd_existing_socket(
|
||||||
ncacn_conn, sock, &tstream);
|
ncacn_conn, sock, &tstream);
|
||||||
@ -379,7 +379,7 @@ static void rpc_worker_new_client(
|
|||||||
}
|
}
|
||||||
sock = -1;
|
sock = -1;
|
||||||
|
|
||||||
token = info7->session_info->session_info->security_token;
|
token = info8->session_info->session_info->security_token;
|
||||||
|
|
||||||
if (security_token_is_system(token) && (transport != NCALRPC)) {
|
if (security_token_is_system(token) && (transport != NCALRPC)) {
|
||||||
DBG_DEBUG("System token only allowed on NCALRPC\n");
|
DBG_DEBUG("System token only allowed on NCALRPC\n");
|
||||||
@ -410,7 +410,7 @@ static void rpc_worker_new_client(
|
|||||||
status = dcesrv_endpoint_connect(dce_ctx,
|
status = dcesrv_endpoint_connect(dce_ctx,
|
||||||
ncacn_conn,
|
ncacn_conn,
|
||||||
ep,
|
ep,
|
||||||
info7->session_info->session_info,
|
info8->session_info->session_info,
|
||||||
global_event_context(),
|
global_event_context(),
|
||||||
state_flags,
|
state_flags,
|
||||||
&dcesrv_conn);
|
&dcesrv_conn);
|
||||||
|
Loading…
Reference in New Issue
Block a user