s4:libcli/raw: setup a smbXcli_session for each smbcli_session
[kai/samba.git] / source4 / libcli / raw / clisession.c
index 55cb3ef305a8e8f250e57836c09ec4bebcf6fa9b..23d7fd128707d0b27fa0edb5dc0e4411fb4343ae 100644 (file)
@@ -21,7 +21,9 @@
 
 #include "includes.h"
 #include "libcli/raw/libcliraw.h"
+#include "libcli/raw/raw_proto.h"
 #include "system/filesys.h"
+#include "../libcli/smb/smbXcli_base.h"
 
 #define SETUP_REQUEST_SESSION(cmd, wct, buflen) do { \
        req = smbcli_request_setup_session(session, cmd, wct, buflen); \
@@ -33,7 +35,8 @@
  Initialize the session context
 ****************************************************************************/
 struct smbcli_session *smbcli_session_init(struct smbcli_transport *transport, 
-                                          TALLOC_CTX *parent_ctx, bool primary)
+                                          TALLOC_CTX *parent_ctx, bool primary,
+                                          struct smbcli_session_options options)
 {
        struct smbcli_session *session;
        uint16_t flags2;
@@ -51,7 +54,20 @@ struct smbcli_session *smbcli_session_init(struct smbcli_transport *transport,
        }
        session->pid = (uint16_t)getpid();
        session->vuid = UID_FIELD_INVALID;
-       
+       session->options = options;
+
+       /*
+        * for now session->vuid is still used by the callers, but we call:
+        * smb1cli_session_set_id(session->smbXcli, session->vuid);
+        * before using session->smbXcli, in future we should remove
+        * session->vuid.
+        */
+       session->smbXcli = smbXcli_session_create(session, transport->conn);
+       if (session->smbXcli == NULL) {
+               talloc_free(session);
+               return NULL;
+       }
+
        capabilities = transport->negotiate.capabilities;
 
        flags2 = FLAGS2_LONG_PATH_COMPONENTS | FLAGS2_EXTENDED_ATTRIBUTES;
@@ -65,7 +81,7 @@ struct smbcli_session *smbcli_session_init(struct smbcli_transport *transport,
        if (capabilities & CAP_EXTENDED_SECURITY) {
                flags2 |= FLAGS2_EXTENDED_SECURITY;
        }
-       if (session->transport->negotiate.sign_info.doing_signing) {
+       if (smb1cli_conn_signing_is_active(session->transport->conn)) {
                flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES;
        }
 
@@ -287,7 +303,7 @@ struct smbcli_request *smb_raw_exit_send(struct smbcli_session *session)
 /****************************************************************************
  Send a exit (sync interface)
 *****************************************************************************/
-NTSTATUS smb_raw_exit(struct smbcli_session *session)
+_PUBLIC_ NTSTATUS smb_raw_exit(struct smbcli_session *session)
 {
        struct smbcli_request *req = smb_raw_exit_send(session);
        return smbcli_request_simple_recv(req);