*_rpccli = rpccli;
return NT_STATUS_OK;
}
-
-NTSTATUS cli_get_session_key(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *cli,
- DATA_BLOB *session_key)
-{
- NTSTATUS status;
- struct pipe_auth_data *a;
- struct gensec_security *gensec_security;
- DATA_BLOB sk = { .data = NULL };
- bool make_dup = false;
-
- if (!session_key || !cli) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- a = cli->auth;
-
- if (a == NULL) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- switch (cli->auth->auth_type) {
- case DCERPC_AUTH_TYPE_NONE:
- sk = data_blob_const(a->transport_session_key.data,
- a->transport_session_key.length);
- make_dup = true;
- break;
- default:
- gensec_security = a->auth_ctx;
- status = gensec_session_key(gensec_security, mem_ctx, &sk);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
- make_dup = false;
- break;
- }
-
- if (!sk.data) {
- return NT_STATUS_NO_USER_SESSION_KEY;
- }
-
- if (make_dup) {
- *session_key = data_blob_dup_talloc(mem_ctx, sk);
- } else {
- *session_key = sk;
- }
-
- return NT_STATUS_OK;
-}
TALLOC_CTX *mem_ctx,
struct netlogon_creds_cli_context **pcreds);
-NTSTATUS cli_get_session_key(TALLOC_CTX *mem_ctx,
- struct rpc_pipe_client *cli,
- DATA_BLOB *session_key);
-
#endif /* _CLI_PIPE_H */
/* vim: set ts=8 sw=8 noet cindent ft=c.doxygen: */