libcli/smb: add smbXcli_session_application_key()
authorStefan Metzmacher <metze@samba.org>
Wed, 1 Aug 2012 06:59:01 +0000 (08:59 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 1 Aug 2012 12:17:12 +0000 (14:17 +0200)
metze

libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h

index ff24688f08799eb8c70ae0d0f034c82a91da4085..ea6f647b76565f4bf50a97053186b5cdfac8edc8 100644 (file)
@@ -4294,6 +4294,36 @@ struct smbXcli_session *smbXcli_session_create(TALLOC_CTX *mem_ctx,
        return session;
 }
 
+NTSTATUS smbXcli_session_application_key(struct smbXcli_session *session,
+                                        TALLOC_CTX *mem_ctx,
+                                        DATA_BLOB *key)
+{
+       const DATA_BLOB *application_key;
+
+       *key = data_blob_null;
+
+       if (session->conn == NULL) {
+               return NT_STATUS_NO_USER_SESSION_KEY;
+       }
+
+       if (session->conn->protocol >= PROTOCOL_SMB2_02) {
+               application_key = &session->smb2->application_key;
+       } else {
+               application_key = &session->smb1.application_key;
+       }
+
+       if (application_key->length == 0) {
+               return NT_STATUS_NO_USER_SESSION_KEY;
+       }
+
+       *key = data_blob_dup_talloc(mem_ctx, *application_key);
+       if (key->data == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       return NT_STATUS_OK;
+}
+
 uint16_t smb1cli_session_current_id(struct smbXcli_session *session)
 {
        return session->smb1.session_id;
index 2f78247c603d9359f91f4a6ee649d6a8608e430e..c35811ac0b939e546ec705243ddf47797b5d4319 100644 (file)
@@ -248,6 +248,9 @@ NTSTATUS smbXcli_negprot(struct smbXcli_conn *conn,
 
 struct smbXcli_session *smbXcli_session_create(TALLOC_CTX *mem_ctx,
                                               struct smbXcli_conn *conn);
+NTSTATUS smbXcli_session_application_key(struct smbXcli_session *session,
+                                        TALLOC_CTX *mem_ctx,
+                                        DATA_BLOB *key);
 uint16_t smb1cli_session_current_id(struct smbXcli_session* session);
 void smb1cli_session_set_id(struct smbXcli_session* session,
                            uint16_t session_id);