mirror of
https://github.com/samba-team/samba.git
synced 2025-01-06 13:18:07 +03:00
named_pipe_auth: Bump info5 to info6
In the next commit, we shall replace the 'authenticated' field of
named_pipe_auth_req_info.info5.session_info.session_info.info with a
more general 'user_flags' field.
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit 8aef16bbbc
)
This commit is contained in:
parent
5a09eaf01a
commit
e46af7b332
@ -73,7 +73,7 @@ struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
||||
int ret;
|
||||
enum ndr_err_code ndr_err;
|
||||
char *lower_case_npipe;
|
||||
struct named_pipe_auth_req_info5 *info5;
|
||||
struct named_pipe_auth_req_info6 *info6;
|
||||
|
||||
req = tevent_req_create(mem_ctx, &state,
|
||||
struct tstream_npa_connect_state);
|
||||
@ -119,39 +119,39 @@ struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
||||
goto post;
|
||||
}
|
||||
|
||||
state->auth_req.level = 5;
|
||||
info5 = &state->auth_req.info.info5;
|
||||
state->auth_req.level = 6;
|
||||
info6 = &state->auth_req.info.info6;
|
||||
|
||||
info5->transport = transport;
|
||||
SMB_ASSERT(info5->transport == transport); /* Assert no overflow */
|
||||
info6->transport = transport;
|
||||
SMB_ASSERT(info6->transport == transport); /* Assert no overflow */
|
||||
|
||||
info5->remote_client_name = remote_client_name_in;
|
||||
info5->remote_client_addr = tsocket_address_inet_addr_string(remote_client_addr,
|
||||
info6->remote_client_name = remote_client_name_in;
|
||||
info6->remote_client_addr = tsocket_address_inet_addr_string(remote_client_addr,
|
||||
state);
|
||||
if (!info5->remote_client_addr) {
|
||||
if (!info6->remote_client_addr) {
|
||||
/* errno might be EINVAL */
|
||||
tevent_req_error(req, errno);
|
||||
goto post;
|
||||
}
|
||||
info5->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
||||
if (!info5->remote_client_name) {
|
||||
info5->remote_client_name = info5->remote_client_addr;
|
||||
info6->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
||||
if (!info6->remote_client_name) {
|
||||
info6->remote_client_name = info6->remote_client_addr;
|
||||
}
|
||||
|
||||
info5->local_server_name = local_server_name_in;
|
||||
info5->local_server_addr = tsocket_address_inet_addr_string(local_server_addr,
|
||||
info6->local_server_name = local_server_name_in;
|
||||
info6->local_server_addr = tsocket_address_inet_addr_string(local_server_addr,
|
||||
state);
|
||||
if (!info5->local_server_addr) {
|
||||
if (!info6->local_server_addr) {
|
||||
/* errno might be EINVAL */
|
||||
tevent_req_error(req, errno);
|
||||
goto post;
|
||||
}
|
||||
info5->local_server_port = tsocket_address_inet_port(local_server_addr);
|
||||
if (!info5->local_server_name) {
|
||||
info5->local_server_name = info5->local_server_addr;
|
||||
info6->local_server_port = tsocket_address_inet_port(local_server_addr);
|
||||
if (!info6->local_server_name) {
|
||||
info6->local_server_name = info6->local_server_addr;
|
||||
}
|
||||
|
||||
info5->session_info = discard_const_p(struct auth_session_info_transport, session_info);
|
||||
info6->session_info = discard_const_p(struct auth_session_info_transport, session_info);
|
||||
|
||||
if (DEBUGLVL(10)) {
|
||||
NDR_PRINT_DEBUG(named_pipe_auth_req, &state->auth_req);
|
||||
@ -348,10 +348,10 @@ int _tstream_npa_connect_recv(struct tevent_req *req,
|
||||
|
||||
npas->unix_stream = talloc_move(stream, &state->unix_stream);
|
||||
switch (state->auth_rep.level) {
|
||||
case 5:
|
||||
npas->file_type = state->auth_rep.info.info5.file_type;
|
||||
device_state = state->auth_rep.info.info5.device_state;
|
||||
allocation_size = state->auth_rep.info.info5.allocation_size;
|
||||
case 6:
|
||||
npas->file_type = state->auth_rep.info.info6.file_type;
|
||||
device_state = state->auth_rep.info.info6.device_state;
|
||||
allocation_size = state->auth_rep.info.info6.allocation_size;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1084,7 +1084,7 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
||||
tevent_req_data(req, struct tstream_npa_accept_state);
|
||||
struct named_pipe_auth_req *pipe_request;
|
||||
struct named_pipe_auth_rep pipe_reply;
|
||||
struct named_pipe_auth_req_info5 i5;
|
||||
struct named_pipe_auth_req_info6 i6;
|
||||
enum ndr_err_code ndr_err;
|
||||
DATA_BLOB in, out;
|
||||
int err;
|
||||
@ -1147,52 +1147,52 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
|
||||
NDR_PRINT_DEBUG(named_pipe_auth_req, pipe_request);
|
||||
}
|
||||
|
||||
ZERO_STRUCT(i5);
|
||||
ZERO_STRUCT(i6);
|
||||
|
||||
if (pipe_request->level != 5) {
|
||||
if (pipe_request->level != 6) {
|
||||
DEBUG(0, ("Unknown level %u\n", pipe_request->level));
|
||||
pipe_reply.level = 0;
|
||||
pipe_reply.status = NT_STATUS_INVALID_LEVEL;
|
||||
goto reply;
|
||||
}
|
||||
|
||||
pipe_reply.level = 5;
|
||||
pipe_reply.level = 6;
|
||||
pipe_reply.status = NT_STATUS_OK;
|
||||
pipe_reply.info.info5.file_type = state->file_type;
|
||||
pipe_reply.info.info5.device_state = state->device_state;
|
||||
pipe_reply.info.info5.allocation_size = state->alloc_size;
|
||||
pipe_reply.info.info6.file_type = state->file_type;
|
||||
pipe_reply.info.info6.device_state = state->device_state;
|
||||
pipe_reply.info.info6.allocation_size = state->alloc_size;
|
||||
|
||||
i5 = pipe_request->info.info5;
|
||||
if (i5.local_server_addr == NULL) {
|
||||
i6 = pipe_request->info.info6;
|
||||
if (i6.local_server_addr == NULL) {
|
||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||
DEBUG(2, ("Missing local server address\n"));
|
||||
goto reply;
|
||||
}
|
||||
if (i5.remote_client_addr == NULL) {
|
||||
if (i6.remote_client_addr == NULL) {
|
||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||
DEBUG(2, ("Missing remote client address\n"));
|
||||
goto reply;
|
||||
}
|
||||
|
||||
ret = tsocket_address_inet_from_strings(state, "ip",
|
||||
i5.local_server_addr,
|
||||
i5.local_server_port,
|
||||
i6.local_server_addr,
|
||||
i6.local_server_port,
|
||||
&state->local_server_addr);
|
||||
if (ret != 0) {
|
||||
DEBUG(2, ("Invalid local server address[%s:%u] - %s\n",
|
||||
i5.local_server_addr, i5.local_server_port,
|
||||
i6.local_server_addr, i6.local_server_port,
|
||||
strerror(errno)));
|
||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||
goto reply;
|
||||
}
|
||||
|
||||
ret = tsocket_address_inet_from_strings(state, "ip",
|
||||
i5.remote_client_addr,
|
||||
i5.remote_client_port,
|
||||
i6.remote_client_addr,
|
||||
i6.remote_client_port,
|
||||
&state->remote_client_addr);
|
||||
if (ret != 0) {
|
||||
DEBUG(2, ("Invalid remote client address[%s:%u] - %s\n",
|
||||
i5.remote_client_addr, i5.remote_client_port,
|
||||
i6.remote_client_addr, i6.remote_client_port,
|
||||
strerror(errno)));
|
||||
pipe_reply.status = NT_STATUS_INVALID_ADDRESS;
|
||||
goto reply;
|
||||
@ -1249,14 +1249,14 @@ static void tstream_npa_accept_existing_done(struct tevent_req *subreq)
|
||||
tevent_req_done(req);
|
||||
}
|
||||
|
||||
static struct named_pipe_auth_req_info5 *copy_npa_info5(
|
||||
TALLOC_CTX *mem_ctx, const struct named_pipe_auth_req_info5 *src)
|
||||
static struct named_pipe_auth_req_info6 *copy_npa_info6(
|
||||
TALLOC_CTX *mem_ctx, const struct named_pipe_auth_req_info6 *src)
|
||||
{
|
||||
struct named_pipe_auth_req_info5 *dst = NULL;
|
||||
struct named_pipe_auth_req_info6 *dst = NULL;
|
||||
DATA_BLOB blob;
|
||||
enum ndr_err_code ndr_err;
|
||||
|
||||
dst = talloc_zero(mem_ctx, struct named_pipe_auth_req_info5);
|
||||
dst = talloc_zero(mem_ctx, struct named_pipe_auth_req_info6);
|
||||
if (dst == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
@ -1265,9 +1265,9 @@ static struct named_pipe_auth_req_info5 *copy_npa_info5(
|
||||
&blob,
|
||||
dst,
|
||||
src,
|
||||
(ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req_info5);
|
||||
(ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req_info6);
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info5 failed: %s\n",
|
||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info6 failed: %s\n",
|
||||
ndr_errstr(ndr_err));
|
||||
TALLOC_FREE(dst);
|
||||
return NULL;
|
||||
@ -1277,10 +1277,10 @@ static struct named_pipe_auth_req_info5 *copy_npa_info5(
|
||||
&blob,
|
||||
dst,
|
||||
dst,
|
||||
(ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_req_info5);
|
||||
(ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_req_info6);
|
||||
TALLOC_FREE(blob.data);
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info5 failed: %s\n",
|
||||
DBG_WARNING("ndr_push_named_pipe_auth_req_info6 failed: %s\n",
|
||||
ndr_errstr(ndr_err));
|
||||
TALLOC_FREE(dst);
|
||||
return NULL;
|
||||
@ -1294,7 +1294,7 @@ int _tstream_npa_accept_existing_recv(
|
||||
int *perrno,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct tstream_context **stream,
|
||||
struct named_pipe_auth_req_info5 **info5,
|
||||
struct named_pipe_auth_req_info6 **info6,
|
||||
enum dcerpc_transport_t *transport,
|
||||
struct tsocket_address **remote_client_addr,
|
||||
char **_remote_client_name,
|
||||
@ -1305,7 +1305,7 @@ int _tstream_npa_accept_existing_recv(
|
||||
{
|
||||
struct tstream_npa_accept_state *state =
|
||||
tevent_req_data(req, struct tstream_npa_accept_state);
|
||||
struct named_pipe_auth_req_info5 *i5 = &state->pipe_request->info.info5;
|
||||
struct named_pipe_auth_req_info6 *i6 = &state->pipe_request->info.info6;
|
||||
struct tstream_npa *npas;
|
||||
int ret;
|
||||
|
||||
@ -1346,24 +1346,24 @@ int _tstream_npa_accept_existing_recv(
|
||||
npas->unix_stream = state->plain;
|
||||
npas->file_type = state->file_type;
|
||||
|
||||
if (info5 != NULL) {
|
||||
if (info6 != NULL) {
|
||||
/*
|
||||
* Make a full copy of "info5" because further down we
|
||||
* Make a full copy of "info6" because further down we
|
||||
* talloc_move() away substructures from
|
||||
* state->pipe_request.
|
||||
*/
|
||||
struct named_pipe_auth_req_info5 *dst = copy_npa_info5(
|
||||
mem_ctx, i5);
|
||||
struct named_pipe_auth_req_info6 *dst = copy_npa_info6(
|
||||
mem_ctx, i6);
|
||||
if (dst == NULL) {
|
||||
*perrno = ENOMEM;
|
||||
tevent_req_received(req);
|
||||
return -1;
|
||||
}
|
||||
*info5 = dst;
|
||||
*info6 = dst;
|
||||
}
|
||||
|
||||
if (transport != NULL) {
|
||||
*transport = i5->transport;
|
||||
*transport = i6->transport;
|
||||
}
|
||||
if (remote_client_addr != NULL) {
|
||||
*remote_client_addr = talloc_move(
|
||||
@ -1371,7 +1371,7 @@ int _tstream_npa_accept_existing_recv(
|
||||
}
|
||||
if (_remote_client_name != NULL) {
|
||||
*_remote_client_name = discard_const_p(
|
||||
char, talloc_move(mem_ctx, &i5->remote_client_name));
|
||||
char, talloc_move(mem_ctx, &i6->remote_client_name));
|
||||
}
|
||||
if (local_server_addr != NULL) {
|
||||
*local_server_addr = talloc_move(
|
||||
@ -1379,10 +1379,10 @@ int _tstream_npa_accept_existing_recv(
|
||||
}
|
||||
if (local_server_name != NULL) {
|
||||
*local_server_name = discard_const_p(
|
||||
char, talloc_move(mem_ctx, &i5->local_server_name));
|
||||
char, talloc_move(mem_ctx, &i6->local_server_name));
|
||||
}
|
||||
if (session_info != NULL) {
|
||||
*session_info = talloc_move(mem_ctx, &i5->session_info);
|
||||
*session_info = talloc_move(mem_ctx, &i6->session_info);
|
||||
}
|
||||
|
||||
tevent_req_received(req);
|
||||
|
@ -27,7 +27,7 @@ struct tevent_req;
|
||||
struct tevent_context;
|
||||
struct auth_session_info_transport;
|
||||
struct tsocket_address;
|
||||
struct named_pipe_auth_req_info5;
|
||||
struct named_pipe_auth_req_info6;
|
||||
|
||||
struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
|
||||
struct tevent_context *ev,
|
||||
@ -114,7 +114,7 @@ int _tstream_npa_accept_existing_recv(
|
||||
int *perrno,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct tstream_context **stream,
|
||||
struct named_pipe_auth_req_info5 **info5,
|
||||
struct named_pipe_auth_req_info6 **info6,
|
||||
enum dcerpc_transport_t *transport,
|
||||
struct tsocket_address **remote_client_addr,
|
||||
char **_remote_client_name,
|
||||
|
@ -22,10 +22,10 @@ interface named_pipe_auth
|
||||
uint16 local_server_port;
|
||||
auth_session_info_transport *session_info;
|
||||
boolean8 need_idle_server;
|
||||
} named_pipe_auth_req_info5;
|
||||
} named_pipe_auth_req_info6;
|
||||
|
||||
typedef [switch_type(uint32)] union {
|
||||
[case(5)] named_pipe_auth_req_info5 info5;
|
||||
[case(6)] named_pipe_auth_req_info6 info6;
|
||||
} named_pipe_auth_req_info;
|
||||
|
||||
typedef [public,gensize] struct {
|
||||
@ -41,10 +41,10 @@ interface named_pipe_auth
|
||||
uint16 file_type;
|
||||
uint16 device_state;
|
||||
hyper allocation_size;
|
||||
} named_pipe_auth_rep_info5;
|
||||
} named_pipe_auth_rep_info6;
|
||||
|
||||
typedef [switch_type(uint32)] union {
|
||||
[case(5)] named_pipe_auth_rep_info5 info5;
|
||||
[case(6)] named_pipe_auth_rep_info6 info6;
|
||||
} named_pipe_auth_rep_info;
|
||||
|
||||
typedef [public,gensize] struct {
|
||||
|
@ -31,7 +31,7 @@ interface rpc_host_msg
|
||||
/**
|
||||
* @brief Auth info inherited from SMB
|
||||
*/
|
||||
named_pipe_auth_req_info5 *npa_info5;
|
||||
named_pipe_auth_req_info6 *npa_info6;
|
||||
|
||||
/**
|
||||
* @brief Raw bind PDU
|
||||
|
@ -272,8 +272,8 @@ static void np_sock_connect_read_done(struct tevent_req *subreq)
|
||||
tevent_req_error(req, ndr_map_error2errno(ndr_err));
|
||||
return;
|
||||
}
|
||||
if (state->npa_rep->level != 5) {
|
||||
DBG_DEBUG("npa level = %"PRIu32", expected 5\n",
|
||||
if (state->npa_rep->level != 6) {
|
||||
DBG_DEBUG("npa level = %"PRIu32", expected 6\n",
|
||||
state->npa_rep->level);
|
||||
tevent_req_error(req, EIO);
|
||||
return;
|
||||
@ -282,7 +282,7 @@ static void np_sock_connect_read_done(struct tevent_req *subreq)
|
||||
ret = tstream_npa_existing_stream(
|
||||
state,
|
||||
&state->transport,
|
||||
state->npa_rep->info.info5.file_type,
|
||||
state->npa_rep->info.info6.file_type,
|
||||
&state->npa_stream);
|
||||
if (ret == -1) {
|
||||
ret = errno;
|
||||
@ -496,7 +496,7 @@ struct tevent_req *local_np_connect_send(
|
||||
{
|
||||
struct tevent_req *req = NULL, *subreq = NULL;
|
||||
struct local_np_connect_state *state = NULL;
|
||||
struct named_pipe_auth_req_info5 *i5 = NULL;
|
||||
struct named_pipe_auth_req_info6 *i6 = NULL;
|
||||
const char *socket_dir = NULL;
|
||||
char *lower_case_pipename = NULL;
|
||||
|
||||
@ -532,14 +532,14 @@ struct tevent_req *local_np_connect_send(
|
||||
if (tevent_req_nomem(state->npa_req, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
state->npa_req->level = 5;
|
||||
state->npa_req->level = 6;
|
||||
|
||||
i5 = &state->npa_req->info.info5;
|
||||
i6 = &state->npa_req->info.info6;
|
||||
|
||||
i5->transport = transport;
|
||||
i6->transport = transport;
|
||||
|
||||
/* we don't have "int" in IDL, make sure we don't overflow */
|
||||
SMB_ASSERT(i5->transport == transport);
|
||||
SMB_ASSERT(i6->transport == transport);
|
||||
|
||||
if (remote_client_name == NULL) {
|
||||
remote_client_name = get_myname(state->npa_req);
|
||||
@ -548,7 +548,7 @@ struct tevent_req *local_np_connect_send(
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
}
|
||||
i5->remote_client_name = remote_client_name;
|
||||
i6->remote_client_name = remote_client_name;
|
||||
|
||||
if (remote_client_addr == NULL) {
|
||||
struct tsocket_address *addr = NULL;
|
||||
@ -560,18 +560,18 @@ struct tevent_req *local_np_connect_send(
|
||||
}
|
||||
remote_client_addr = addr;
|
||||
}
|
||||
i5->remote_client_addr = tsocket_address_inet_addr_string(
|
||||
i6->remote_client_addr = tsocket_address_inet_addr_string(
|
||||
remote_client_addr, state->npa_req);
|
||||
if (i5->remote_client_addr == NULL) {
|
||||
if (i6->remote_client_addr == NULL) {
|
||||
tevent_req_error(req, errno);
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
i5->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
||||
i6->remote_client_port = tsocket_address_inet_port(remote_client_addr);
|
||||
|
||||
if (local_server_name == NULL) {
|
||||
local_server_name = remote_client_name;
|
||||
}
|
||||
i5->local_server_name = local_server_name;
|
||||
i6->local_server_name = local_server_name;
|
||||
|
||||
if (local_server_addr == NULL) {
|
||||
struct tsocket_address *addr = NULL;
|
||||
@ -583,27 +583,27 @@ struct tevent_req *local_np_connect_send(
|
||||
}
|
||||
local_server_addr = addr;
|
||||
}
|
||||
i5->local_server_addr = tsocket_address_inet_addr_string(
|
||||
i6->local_server_addr = tsocket_address_inet_addr_string(
|
||||
local_server_addr, state->npa_req);
|
||||
if (i5->local_server_addr == NULL) {
|
||||
if (i6->local_server_addr == NULL) {
|
||||
tevent_req_error(req, errno);
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
i5->local_server_port = tsocket_address_inet_port(local_server_addr);
|
||||
i6->local_server_port = tsocket_address_inet_port(local_server_addr);
|
||||
|
||||
i5->session_info = talloc_zero(
|
||||
i6->session_info = talloc_zero(
|
||||
state->npa_req, struct auth_session_info_transport);
|
||||
if (tevent_req_nomem(i5->session_info, req)) {
|
||||
if (tevent_req_nomem(i6->session_info, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
i5->session_info->session_info = copy_session_info(
|
||||
i5->session_info, session_info);
|
||||
if (tevent_req_nomem(i5->session_info->session_info, req)) {
|
||||
i6->session_info->session_info = copy_session_info(
|
||||
i6->session_info, session_info);
|
||||
if (tevent_req_nomem(i6->session_info->session_info, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
i5->need_idle_server = need_idle_server;
|
||||
i6->need_idle_server = need_idle_server;
|
||||
|
||||
subreq = np_sock_connect_send(
|
||||
state, state->ev, state->socketpath, state->npa_req);
|
||||
|
@ -200,7 +200,7 @@ struct rpc_server {
|
||||
* between RPC servers: netlogon requires samr, everybody
|
||||
* requires winreg. And if a deep call in netlogon asks for a
|
||||
* samr connection, this must never end up in the same
|
||||
* process. named_pipe_auth_req_info5->need_idle_server is set
|
||||
* process. named_pipe_auth_req_info6->need_idle_server is set
|
||||
* in those cases.
|
||||
*/
|
||||
struct rpc_work_process *workers;
|
||||
@ -728,14 +728,14 @@ static int rpc_server_get_endpoints_recv(
|
||||
* anonymous session info.
|
||||
*/
|
||||
|
||||
static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
static NTSTATUS rpc_host_generate_npa_info6_from_sock(
|
||||
TALLOC_CTX *mem_ctx,
|
||||
enum dcerpc_transport_t transport,
|
||||
int sock,
|
||||
const struct samba_sockaddr *peer_addr,
|
||||
struct named_pipe_auth_req_info5 **pinfo5)
|
||||
struct named_pipe_auth_req_info6 **pinfo6)
|
||||
{
|
||||
struct named_pipe_auth_req_info5 *info5 = NULL;
|
||||
struct named_pipe_auth_req_info6 *info6 = NULL;
|
||||
struct samba_sockaddr local_addr = {
|
||||
.sa_socklen = sizeof(struct sockaddr_storage),
|
||||
};
|
||||
@ -758,18 +758,18 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
tsocket_address_to_name_fn = (transport == NCACN_IP_TCP) ?
|
||||
tsocket_address_inet_addr_string : tsocket_address_unix_path;
|
||||
|
||||
info5 = talloc_zero(mem_ctx, struct named_pipe_auth_req_info5);
|
||||
if (info5 == NULL) {
|
||||
info6 = talloc_zero(mem_ctx, struct named_pipe_auth_req_info6);
|
||||
if (info6 == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
info5->session_info = talloc_zero(
|
||||
info5, struct auth_session_info_transport);
|
||||
if (info5->session_info == NULL) {
|
||||
info6->session_info = talloc_zero(
|
||||
info6, struct auth_session_info_transport);
|
||||
if (info6->session_info == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = make_session_info_anonymous(
|
||||
info5->session_info, &info5->session_info->session_info);
|
||||
info6->session_info, &info6->session_info->session_info);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DBG_DEBUG("make_session_info_anonymous failed: %s\n",
|
||||
nt_errstr(status));
|
||||
@ -777,7 +777,7 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
}
|
||||
|
||||
ret = tsocket_address_bsd_from_samba_sockaddr(
|
||||
info5, peer_addr, &taddr);
|
||||
info6, peer_addr, &taddr);
|
||||
if (ret == -1) {
|
||||
status = map_nt_error_from_unix(errno);
|
||||
DBG_DEBUG("tsocket_address_bsd_from_samba_sockaddr failed: "
|
||||
@ -785,14 +785,14 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
remote_client_addr = tsocket_address_to_name_fn(taddr, info5);
|
||||
remote_client_addr = tsocket_address_to_name_fn(taddr, info6);
|
||||
if (remote_client_addr == NULL) {
|
||||
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
||||
goto nomem;
|
||||
}
|
||||
TALLOC_FREE(taddr);
|
||||
|
||||
remote_client_name = talloc_strdup(info5, remote_client_addr);
|
||||
remote_client_name = talloc_strdup(info6, remote_client_addr);
|
||||
if (remote_client_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup failed\n");
|
||||
goto nomem;
|
||||
@ -800,7 +800,7 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
|
||||
if (transport == NCACN_IP_TCP) {
|
||||
bool ok = samba_sockaddr_get_port(
|
||||
peer_addr, &info5->remote_client_port);
|
||||
peer_addr, &info6->remote_client_port);
|
||||
if (!ok) {
|
||||
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
@ -816,7 +816,7 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
}
|
||||
|
||||
ret = tsocket_address_bsd_from_samba_sockaddr(
|
||||
info5, &local_addr, &taddr);
|
||||
info6, &local_addr, &taddr);
|
||||
if (ret == -1) {
|
||||
status = map_nt_error_from_unix(errno);
|
||||
DBG_DEBUG("tsocket_address_bsd_from_samba_sockaddr failed: "
|
||||
@ -824,14 +824,14 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
local_server_addr = tsocket_address_to_name_fn(taddr, info5);
|
||||
local_server_addr = tsocket_address_to_name_fn(taddr, info6);
|
||||
if (local_server_addr == NULL) {
|
||||
DBG_DEBUG("tsocket_address_to_name_fn failed\n");
|
||||
goto nomem;
|
||||
}
|
||||
TALLOC_FREE(taddr);
|
||||
|
||||
local_server_name = talloc_strdup(info5, local_server_addr);
|
||||
local_server_name = talloc_strdup(info6, local_server_addr);
|
||||
if (local_server_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup failed\n");
|
||||
goto nomem;
|
||||
@ -839,7 +839,7 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
|
||||
if (transport == NCACN_IP_TCP) {
|
||||
bool ok = samba_sockaddr_get_port(
|
||||
&local_addr, &info5->local_server_port);
|
||||
&local_addr, &info6->local_server_port);
|
||||
if (!ok) {
|
||||
DBG_DEBUG("samba_sockaddr_get_port failed\n");
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
@ -868,7 +868,7 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
TALLOC_FREE(remote_client_name);
|
||||
|
||||
ret = tsocket_address_unix_from_path(
|
||||
info5, AS_SYSTEM_MAGIC_PATH_TOKEN, &taddr);
|
||||
info6, AS_SYSTEM_MAGIC_PATH_TOKEN, &taddr);
|
||||
if (ret == -1) {
|
||||
DBG_DEBUG("tsocket_address_unix_from_path "
|
||||
"failed\n");
|
||||
@ -876,14 +876,14 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
}
|
||||
|
||||
remote_client_addr = tsocket_address_unix_path(
|
||||
taddr, info5);
|
||||
taddr, info6);
|
||||
if (remote_client_addr == NULL) {
|
||||
DBG_DEBUG("tsocket_address_unix_path "
|
||||
"failed\n");
|
||||
goto nomem;
|
||||
}
|
||||
remote_client_name = talloc_strdup(
|
||||
info5, remote_client_addr);
|
||||
info6, remote_client_addr);
|
||||
if (remote_client_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup failed\n");
|
||||
goto nomem;
|
||||
@ -891,18 +891,18 @@ static NTSTATUS rpc_host_generate_npa_info5_from_sock(
|
||||
}
|
||||
}
|
||||
|
||||
info5->remote_client_addr = remote_client_addr;
|
||||
info5->remote_client_name = remote_client_name;
|
||||
info5->local_server_addr = local_server_addr;
|
||||
info5->local_server_name = local_server_name;
|
||||
info6->remote_client_addr = remote_client_addr;
|
||||
info6->remote_client_name = remote_client_name;
|
||||
info6->local_server_addr = local_server_addr;
|
||||
info6->local_server_name = local_server_name;
|
||||
|
||||
*pinfo5 = info5;
|
||||
*pinfo6 = info6;
|
||||
return NT_STATUS_OK;
|
||||
|
||||
nomem:
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
fail:
|
||||
TALLOC_FREE(info5);
|
||||
TALLOC_FREE(info6);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -991,12 +991,12 @@ static struct tevent_req *rpc_host_bind_read_send(
|
||||
return req;
|
||||
}
|
||||
|
||||
status = rpc_host_generate_npa_info5_from_sock(
|
||||
status = rpc_host_generate_npa_info6_from_sock(
|
||||
state->client,
|
||||
transport,
|
||||
state->sock,
|
||||
peer_addr,
|
||||
&state->client->npa_info5);
|
||||
&state->client->npa_info6);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
tevent_req_oom(req);
|
||||
return tevent_req_post(req, ev);
|
||||
@ -1028,7 +1028,7 @@ static void rpc_host_bind_read_got_npa(struct tevent_req *subreq)
|
||||
subreq, struct tevent_req);
|
||||
struct rpc_host_bind_read_state *state = tevent_req_data(
|
||||
req, struct rpc_host_bind_read_state);
|
||||
struct named_pipe_auth_req_info5 *info5 = NULL;
|
||||
struct named_pipe_auth_req_info6 *info6 = NULL;
|
||||
int ret, err;
|
||||
|
||||
ret = tstream_npa_accept_existing_recv(
|
||||
@ -1036,7 +1036,7 @@ static void rpc_host_bind_read_got_npa(struct tevent_req *subreq)
|
||||
&err,
|
||||
state,
|
||||
&state->npa_stream,
|
||||
&info5,
|
||||
&info6,
|
||||
NULL, /* transport */
|
||||
NULL, /* remote_client_addr */
|
||||
NULL, /* remote_client_name */
|
||||
@ -1048,7 +1048,7 @@ static void rpc_host_bind_read_got_npa(struct tevent_req *subreq)
|
||||
return;
|
||||
}
|
||||
|
||||
state->client->npa_info5 = talloc_move(state->client, &info5);
|
||||
state->client->npa_info6 = talloc_move(state->client, &info6);
|
||||
|
||||
subreq = dcerpc_read_ncacn_packet_send(
|
||||
state, state->ev, state->npa_stream);
|
||||
@ -1322,7 +1322,7 @@ again:
|
||||
}
|
||||
} else {
|
||||
/* fresh assoc group requested */
|
||||
if (pending_client->client->npa_info5->need_idle_server != 0) {
|
||||
if (pending_client->client->npa_info6->need_idle_server != 0) {
|
||||
worker = rpc_host_find_idle_worker(server);
|
||||
} else {
|
||||
worker = rpc_host_find_worker(server);
|
||||
|
@ -170,7 +170,7 @@ static void rpc_worker_new_client(
|
||||
int sock)
|
||||
{
|
||||
struct dcesrv_context *dce_ctx = worker->dce_ctx;
|
||||
struct named_pipe_auth_req_info5 *info5 = client->npa_info5;
|
||||
struct named_pipe_auth_req_info6 *info6 = client->npa_info6;
|
||||
struct tsocket_address *remote_client_addr = NULL;
|
||||
struct tsocket_address *local_server_addr = NULL;
|
||||
struct dcerpc_binding *b = NULL;
|
||||
@ -261,85 +261,85 @@ static void rpc_worker_new_client(
|
||||
if (transport == NCALRPC) {
|
||||
ret = tsocket_address_unix_from_path(
|
||||
ncacn_conn,
|
||||
info5->remote_client_addr,
|
||||
info6->remote_client_addr,
|
||||
&remote_client_addr);
|
||||
if (ret == -1) {
|
||||
DBG_DEBUG("tsocket_address_unix_from_path"
|
||||
"(%s) failed: %s\n",
|
||||
info5->remote_client_addr,
|
||||
info6->remote_client_addr,
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ncacn_conn->remote_client_name = talloc_strdup(
|
||||
ncacn_conn, info5->remote_client_name);
|
||||
ncacn_conn, info6->remote_client_name);
|
||||
if (ncacn_conn->remote_client_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||
info5->remote_client_name);
|
||||
info6->remote_client_name);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ret = tsocket_address_unix_from_path(
|
||||
ncacn_conn,
|
||||
info5->local_server_addr,
|
||||
info6->local_server_addr,
|
||||
&local_server_addr);
|
||||
if (ret == -1) {
|
||||
DBG_DEBUG("tsocket_address_unix_from_path"
|
||||
"(%s) failed: %s\n",
|
||||
info5->local_server_addr,
|
||||
info6->local_server_addr,
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ncacn_conn->local_server_name = talloc_strdup(
|
||||
ncacn_conn, info5->local_server_name);
|
||||
ncacn_conn, info6->local_server_name);
|
||||
if (ncacn_conn->local_server_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||
info5->local_server_name);
|
||||
info6->local_server_name);
|
||||
goto fail;
|
||||
}
|
||||
} else {
|
||||
ret = tsocket_address_inet_from_strings(
|
||||
ncacn_conn,
|
||||
"ip",
|
||||
info5->remote_client_addr,
|
||||
info5->remote_client_port,
|
||||
info6->remote_client_addr,
|
||||
info6->remote_client_port,
|
||||
&remote_client_addr);
|
||||
if (ret == -1) {
|
||||
DBG_DEBUG("tsocket_address_inet_from_strings"
|
||||
"(%s, %"PRIu16") failed: %s\n",
|
||||
info5->remote_client_addr,
|
||||
info5->remote_client_port,
|
||||
info6->remote_client_addr,
|
||||
info6->remote_client_port,
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
ncacn_conn->remote_client_name = talloc_strdup(
|
||||
ncacn_conn, info5->remote_client_name);
|
||||
ncacn_conn, info6->remote_client_name);
|
||||
if (ncacn_conn->remote_client_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||
info5->remote_client_name);
|
||||
info6->remote_client_name);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ret = tsocket_address_inet_from_strings(
|
||||
ncacn_conn,
|
||||
"ip",
|
||||
info5->local_server_addr,
|
||||
info5->local_server_port,
|
||||
info6->local_server_addr,
|
||||
info6->local_server_port,
|
||||
&local_server_addr);
|
||||
if (ret == -1) {
|
||||
DBG_DEBUG("tsocket_address_inet_from_strings"
|
||||
"(%s, %"PRIu16") failed: %s\n",
|
||||
info5->local_server_addr,
|
||||
info5->local_server_port,
|
||||
info6->local_server_addr,
|
||||
info6->local_server_port,
|
||||
strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
ncacn_conn->local_server_name = talloc_strdup(
|
||||
ncacn_conn, info5->local_server_name);
|
||||
ncacn_conn, info6->local_server_name);
|
||||
if (ncacn_conn->local_server_name == NULL) {
|
||||
DBG_DEBUG("talloc_strdup(%s) failed\n",
|
||||
info5->local_server_name);
|
||||
info6->local_server_name);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
@ -361,10 +361,10 @@ static void rpc_worker_new_client(
|
||||
* socket that the client connected to, passed in from
|
||||
* samba-dcerpcd via the binding. For NCACN_NP (root
|
||||
* only by unix permissions) we got a
|
||||
* named_pipe_auth_req_info5 where the transport can
|
||||
* named_pipe_auth_req_info6 where the transport can
|
||||
* be overridden.
|
||||
*/
|
||||
transport = info5->transport;
|
||||
transport = info6->transport;
|
||||
} else {
|
||||
ret = tstream_bsd_existing_socket(
|
||||
ncacn_conn, sock, &tstream);
|
||||
@ -377,7 +377,7 @@ static void rpc_worker_new_client(
|
||||
sock = -1;
|
||||
|
||||
if (security_token_is_system(
|
||||
info5->session_info->session_info->security_token) &&
|
||||
info6->session_info->session_info->security_token) &&
|
||||
(transport != NCALRPC)) {
|
||||
DBG_DEBUG("System token only allowed on NCALRPC\n");
|
||||
goto fail;
|
||||
@ -390,7 +390,7 @@ static void rpc_worker_new_client(
|
||||
dce_ctx,
|
||||
ncacn_conn,
|
||||
ep,
|
||||
info5->session_info->session_info,
|
||||
info6->session_info->session_info,
|
||||
global_event_context(),
|
||||
DCESRV_CALL_STATE_FLAG_MAY_ASYNC,
|
||||
&dcesrv_conn);
|
||||
|
Loading…
Reference in New Issue
Block a user