summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2012-01-10 21:53:42 +1100
committerStefan Metzmacher <metze@samba.org>2012-01-18 16:23:24 +0100
commit40715e1251dc27a677c1b0b894406b6d86e391f0 (patch)
treee43d45a797e37c760f5c7319a4dab4b15937a738
parent9729bdf89f20998823a1dda9e215647a49ca76a6 (diff)
downloadsamba-40715e1251dc27a677c1b0b894406b6d86e391f0.tar.gz
samba-40715e1251dc27a677c1b0b894406b6d86e391f0.tar.bz2
samba-40715e1251dc27a677c1b0b894406b6d86e391f0.zip
s3-librpc: pass struct ndr_interface_table down to cli_pipe_open_generic/spnego()
This allows the target service (as determined from the IDL) to be passed to GSSAPI (rather than the current, incorrect, "cifs"). Andrew Bartlett Signed-off-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--source3/libsmb/passchange.c2
-rw-r--r--source3/rpc_client/cli_pipe.c15
-rw-r--r--source3/rpc_client/cli_pipe.h4
-rw-r--r--source3/rpc_client/cli_pipe_schannel.c2
-rw-r--r--source3/rpcclient/rpcclient.c4
-rw-r--r--source3/utils/net_rpc.c2
-rw-r--r--source3/winbindd/winbindd_cm.c4
7 files changed, 16 insertions, 17 deletions
diff --git a/source3/libsmb/passchange.c b/source3/libsmb/passchange.c
index 684ffd91a1..ea6d9d5edb 100644
--- a/source3/libsmb/passchange.c
+++ b/source3/libsmb/passchange.c
@@ -149,7 +149,7 @@ NTSTATUS remote_password_change(const char *remote_machine, const char *user_nam
if (!pass_must_change) {
result = cli_rpc_pipe_open_generic_auth(cli,
- &ndr_table_samr.syntax_id,
+ &ndr_table_samr,
NCACN_NP,
DCERPC_AUTH_TYPE_NTLMSSP,
DCERPC_AUTH_LEVEL_PRIVACY,
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 2ddf7bceb1..7b3cc252f0 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2812,7 +2812,7 @@ NTSTATUS cli_rpc_pipe_open_noauth(struct cli_state *cli,
****************************************************************************/
NTSTATUS cli_rpc_pipe_open_generic_auth(struct cli_state *cli,
- const struct ndr_syntax_id *interface,
+ const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
enum dcerpc_AuthType auth_type,
enum dcerpc_AuthLevel auth_level,
@@ -2824,10 +2824,10 @@ NTSTATUS cli_rpc_pipe_open_generic_auth(struct cli_state *cli,
{
struct rpc_pipe_client *result;
struct pipe_auth_data *auth = NULL;
- const char *target_service = "cifs"; /* TODO: Determine target service from the bindings or interface table */
+ const char *target_service = table->authservices->names[0];
NTSTATUS status;
- status = cli_rpc_pipe_open(cli, transport, interface, &result);
+ status = cli_rpc_pipe_open(cli, transport, &table->syntax_id, &result);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
@@ -2851,8 +2851,7 @@ NTSTATUS cli_rpc_pipe_open_generic_auth(struct cli_state *cli,
}
DEBUG(10,("cli_rpc_pipe_open_generic_auth: opened pipe %s to "
- "machine %s and bound as user %s\\%s.\n",
- get_pipe_name_from_syntax(talloc_tos(), interface),
+ "machine %s and bound as user %s\\%s.\n", table->name,
result->desthost, domain, username));
*presult = result;
@@ -2927,7 +2926,7 @@ NTSTATUS cli_rpc_pipe_open_schannel_with_key(struct cli_state *cli,
}
NTSTATUS cli_rpc_pipe_open_spnego(struct cli_state *cli,
- const struct ndr_syntax_id *interface,
+ const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
const char *oid,
enum dcerpc_AuthLevel auth_level,
@@ -2941,9 +2940,9 @@ NTSTATUS cli_rpc_pipe_open_spnego(struct cli_state *cli,
struct pipe_auth_data *auth;
struct spnego_context *spnego_ctx;
NTSTATUS status;
- const char *target_service = "cifs"; /* TODO: Determine target service from the bindings or interface table */
+ const char *target_service = table->authservices->names[0];
- status = cli_rpc_pipe_open(cli, transport, interface, &result);
+ status = cli_rpc_pipe_open(cli, transport, &table->syntax_id, &result);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
diff --git a/source3/rpc_client/cli_pipe.h b/source3/rpc_client/cli_pipe.h
index 25c9fca825..3984cf0858 100644
--- a/source3/rpc_client/cli_pipe.h
+++ b/source3/rpc_client/cli_pipe.h
@@ -85,7 +85,7 @@ NTSTATUS cli_rpc_pipe_open_noauth_transport(struct cli_state *cli,
struct rpc_pipe_client **presult);
NTSTATUS cli_rpc_pipe_open_generic_auth(struct cli_state *cli,
- const struct ndr_syntax_id *interface,
+ const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
enum dcerpc_AuthType auth_type,
enum dcerpc_AuthLevel auth_level,
@@ -96,7 +96,7 @@ NTSTATUS cli_rpc_pipe_open_generic_auth(struct cli_state *cli,
struct rpc_pipe_client **presult);
NTSTATUS cli_rpc_pipe_open_spnego(struct cli_state *cli,
- const struct ndr_syntax_id *interface,
+ const struct ndr_interface_table *table,
enum dcerpc_transport_t transport,
const char *oid,
enum dcerpc_AuthLevel auth_level,
diff --git a/source3/rpc_client/cli_pipe_schannel.c b/source3/rpc_client/cli_pipe_schannel.c
index 4a11f08a12..0ee2a8551f 100644
--- a/source3/rpc_client/cli_pipe_schannel.c
+++ b/source3/rpc_client/cli_pipe_schannel.c
@@ -100,7 +100,7 @@ static NTSTATUS get_schannel_session_key_auth_ntlmssp(struct cli_state *cli,
NTSTATUS status;
status = cli_rpc_pipe_open_spnego(
- cli, &ndr_table_netlogon.syntax_id, NCACN_NP,
+ cli, &ndr_table_netlogon, NCACN_NP,
GENSEC_OID_NTLMSSP,
DCERPC_AUTH_LEVEL_PRIVACY,
cli_state_remote_name(cli),
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c
index 0b2789c4ae..ff4354f818 100644
--- a/source3/rpcclient/rpcclient.c
+++ b/source3/rpcclient/rpcclient.c
@@ -703,7 +703,7 @@ static NTSTATUS do_cmd(struct cli_state *cli,
break;
}
ntresult = cli_rpc_pipe_open_spnego(
- cli, &cmd_entry->table->syntax_id,
+ cli, cmd_entry->table,
default_transport,
oid,
pipe_default_auth_level,
@@ -717,7 +717,7 @@ static NTSTATUS do_cmd(struct cli_state *cli,
case DCERPC_AUTH_TYPE_NTLMSSP:
case DCERPC_AUTH_TYPE_KRB5:
ntresult = cli_rpc_pipe_open_generic_auth(
- cli, &cmd_entry->table->syntax_id,
+ cli, cmd_entry->table,
default_transport,
pipe_default_auth_type,
pipe_default_auth_level,
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
index fa3a49fe37..4aaf365a88 100644
--- a/source3/utils/net_rpc.c
+++ b/source3/utils/net_rpc.c
@@ -201,7 +201,7 @@ int run_rpc_command(struct net_context *c,
} else {
if (conn_flags & NET_FLAGS_SEAL) {
nt_status = cli_rpc_pipe_open_generic_auth(
- cli, &table->syntax_id,
+ cli, table,
(conn_flags & NET_FLAGS_TCP) ?
NCACN_IP_TCP : NCACN_NP,
DCERPC_AUTH_TYPE_NTLMSSP,
diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index 5d8826127b..39ac28422e 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -2191,7 +2191,7 @@ NTSTATUS cm_connect_sam(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx,
/* We have an authenticated connection. Use a NTLMSSP SPNEGO
authenticated SAMR pipe with sign & seal. */
status = cli_rpc_pipe_open_spnego(conn->cli,
- &ndr_table_samr.syntax_id,
+ &ndr_table_samr,
NCACN_NP,
GENSEC_OID_NTLMSSP,
DCERPC_AUTH_LEVEL_PRIVACY,
@@ -2431,7 +2431,7 @@ NTSTATUS cm_connect_lsa(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx,
/* We have an authenticated connection. Use a NTLMSSP SPNEGO
* authenticated LSA pipe with sign & seal. */
result = cli_rpc_pipe_open_spnego
- (conn->cli, &ndr_table_lsarpc.syntax_id, NCACN_NP,
+ (conn->cli, &ndr_table_lsarpc, NCACN_NP,
GENSEC_OID_NTLMSSP,
DCERPC_AUTH_LEVEL_PRIVACY,
cli_state_remote_name(conn->cli),