1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

r14714: On DCE/RPC, we need the name of the remote server used on the socket,

for Kerberos.  It must be the full name contacted, not the 'called
name' we might want to use for \\server things, so add another function.

Andrew Bartlett
This commit is contained in:
Andrew Bartlett 2006-03-25 11:39:09 +00:00 committed by Gerald (Jerry) Carter
parent 78447333b0
commit 6d57d1dbb7
5 changed files with 50 additions and 17 deletions

View File

@ -65,6 +65,8 @@ struct dcerpc_connection {
const char *(*peer_name)(struct dcerpc_connection *);
const char *(*target_hostname)(struct dcerpc_connection *);
/* send a request to the server */
NTSTATUS (*send_request)(struct dcerpc_connection *, DATA_BLOB *, BOOL trigger_read);

View File

@ -228,7 +228,7 @@ struct composite_context *dcerpc_bind_auth_send(TALLOC_CTX *mem_ctx,
}
c->status = gensec_set_target_hostname(
sec->generic_state, p->conn->transport.peer_name(p->conn));
sec->generic_state, p->conn->transport.target_hostname(p->conn));
if (!NT_STATUS_IS_OK(c->status)) {
DEBUG(1, ("Failed to set GENSEC target hostname: %s\n",
nt_errstr(c->status)));

View File

@ -350,7 +350,7 @@ static NTSTATUS smb_shutdown_pipe(struct dcerpc_connection *c)
}
/*
return SMB server name
return SMB server name (called name)
*/
static const char *smb_peer_name(struct dcerpc_connection *c)
{
@ -358,6 +358,15 @@ static const char *smb_peer_name(struct dcerpc_connection *c)
return smb->server_name;
}
/*
return remote name we make the actual connection (good for kerberos)
*/
static const char *smb_target_hostname(struct dcerpc_connection *c)
{
struct smb_private *smb = talloc_get_type(c->transport.private, struct smb_private);
return smb->tree->session->transport->socket->hostname;
}
/*
fetch the user session key
*/
@ -462,14 +471,15 @@ static void pipe_open_recv(struct smbcli_request *req)
/*
fill in the transport methods
*/
c->transport.transport = NCACN_NP;
c->transport.private = NULL;
c->transport.shutdown_pipe = smb_shutdown_pipe;
c->transport.peer_name = smb_peer_name;
c->transport.transport = NCACN_NP;
c->transport.private = NULL;
c->transport.shutdown_pipe = smb_shutdown_pipe;
c->transport.peer_name = smb_peer_name;
c->transport.target_hostname = smb_target_hostname;
c->transport.send_request = smb_send_request;
c->transport.send_read = send_read_request;
c->transport.recv_data = NULL;
c->transport.send_request = smb_send_request;
c->transport.send_read = send_read_request;
c->transport.recv_data = NULL;
/* Over-ride the default session key with the SMB session key */
c->security_state.session_key = smb_session_key;

View File

@ -331,6 +331,16 @@ static const char *smb2_peer_name(struct dcerpc_connection *c)
return smb->server_name;
}
/*
return remote name we make the actual connection (good for kerberos)
*/
static const char *smb2_target_hostname(struct dcerpc_connection *c)
{
struct smb2_private *smb = talloc_get_type(c->transport.private,
struct smb2_private);
return smb->tree->session->transport->socket->hostname;
}
/*
fetch the user session key
*/
@ -432,6 +442,7 @@ static void pipe_open_recv(struct smb2_request *req)
c->transport.private = NULL;
c->transport.shutdown_pipe = smb2_shutdown_pipe;
c->transport.peer_name = smb2_peer_name;
c->transport.target_hostname = smb2_target_hostname;
c->transport.send_request = smb2_send_request;
c->transport.send_read = send_read_request;

View File

@ -187,7 +187,16 @@ static NTSTATUS sock_shutdown_pipe(struct dcerpc_connection *p)
*/
static const char *sock_peer_name(struct dcerpc_connection *p)
{
struct sock_private *sock = p->transport.private;
struct sock_private *sock = talloc_get_type(p->transport.private, struct sock_private);
return sock->server_name;
}
/*
return remote name we make the actual connection (good for kerberos)
*/
static const char *sock_target_hostname(struct dcerpc_connection *p)
{
struct sock_private *sock = talloc_get_type(p->transport.private, struct sock_private);
return sock->server_name;
}
@ -226,15 +235,16 @@ static void continue_socket_connect(struct composite_context *ctx)
/*
fill in the transport methods
*/
conn->transport.transport = s->transport;
conn->transport.private = NULL;
conn->transport.transport = s->transport;
conn->transport.private = NULL;
conn->transport.send_request = sock_send_request;
conn->transport.send_read = sock_send_read;
conn->transport.recv_data = NULL;
conn->transport.send_request = sock_send_request;
conn->transport.send_read = sock_send_read;
conn->transport.recv_data = NULL;
conn->transport.shutdown_pipe = sock_shutdown_pipe;
conn->transport.peer_name = sock_peer_name;
conn->transport.shutdown_pipe = sock_shutdown_pipe;
conn->transport.peer_name = sock_peer_name;
conn->transport.target_hostname = sock_target_hostname;
sock->sock = s->socket_ctx;
sock->pending_reads = 0;