const char *username,
const char *password,
NTSTATUS *perr);
+NTSTATUS cli_get_session_key(struct rpc_pipe_client *cli,
+ DATA_BLOB *session_key);
+
/* The following definitions come from rpc_client/cli_reg.c */
return NULL;
#endif
}
+
+NTSTATUS cli_get_session_key(struct rpc_pipe_client *cli,
+ DATA_BLOB *session_key)
+{
+ if (!session_key || !cli) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ if (!cli->auth) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ switch (cli->auth->auth_type) {
+ case PIPE_AUTH_TYPE_SCHANNEL:
+ *session_key = data_blob(cli->auth->a_u.schannel_auth->sess_key, 16);
+ break;
+ case PIPE_AUTH_TYPE_NTLMSSP:
+ case PIPE_AUTH_TYPE_SPNEGO_NTLMSSP:
+ *session_key = cli->auth->a_u.ntlmssp_state->session_key;
+ break;
+ case PIPE_AUTH_TYPE_KRB5:
+ case PIPE_AUTH_TYPE_SPNEGO_KRB5:
+ *session_key = cli->auth->a_u.kerberos_auth->session_key;
+ break;
+ case PIPE_AUTH_TYPE_NONE:
+ default:
+ return NT_STATUS_NO_USER_SESSION_KEY;
+ }
+
+ return NT_STATUS_OK;
+}