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);
}
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)));
}
/*
- return SMB server name
+ return SMB server name (called name)
*/
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
*/
/*
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.send_request = smb_send_request;
- c->transport.send_read = send_read_request;
- c->transport.recv_data = NULL;
+ 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;
/* Over-ride the default session key with the SMB session key */
c->security_state.session_key = smb_session_key;
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
*/
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;
*/
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;
}
/*
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;