libcli/smb: add smb2cli_tcon_{should_sign,is_signing_on}()
authorStefan Metzmacher <metze@samba.org>
Fri, 26 Sep 2014 04:29:02 +0000 (06:29 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 30 Sep 2014 21:35:08 +0000 (23:35 +0200)
This can be used to force signing for individual requests.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h

index e720a500fa6c7eac1612efac9b9b450dad4232cf..67b44d93b465429d284f800215f1cae12c6eeeb2 100644 (file)
@@ -186,6 +186,7 @@ struct smbXcli_tcon {
                uint32_t flags;
                uint32_t capabilities;
                uint32_t maximal_access;
+               bool should_sign;
                bool should_encrypt;
        } smb2;
 };
@@ -2694,6 +2695,9 @@ struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
        if (tcon) {
                tid = tcon->smb2.tcon_id;
 
+               if (tcon->smb2.should_sign) {
+                       state->smb2.should_sign = true;
+               }
                if (tcon->smb2.should_encrypt) {
                        state->smb2.should_encrypt = true;
                }
@@ -5214,12 +5218,14 @@ void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
        tcon->smb2.capabilities = capabilities;
        tcon->smb2.maximal_access = maximal_access;
 
+       tcon->smb2.should_sign = false;
        tcon->smb2.should_encrypt = false;
 
        if (session == NULL) {
                return;
        }
 
+       tcon->smb2.should_sign = session->smb2->should_sign;
        tcon->smb2.should_encrypt = session->smb2->should_encrypt;
 
        if (flags & SMB2_SHAREFLAG_ENCRYPT_DATA) {
@@ -5227,6 +5233,21 @@ void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
        }
 }
 
+void smb2cli_tcon_should_sign(struct smbXcli_tcon *tcon,
+                             bool should_sign)
+{
+       tcon->smb2.should_sign = should_sign;
+}
+
+bool smb2cli_tcon_is_signing_on(struct smbXcli_tcon *tcon)
+{
+       if (tcon->smb2.should_encrypt) {
+               return true;
+       }
+
+       return tcon->smb2.should_sign;
+}
+
 void smb2cli_tcon_should_encrypt(struct smbXcli_tcon *tcon,
                                 bool should_encrypt)
 {
index ffe720f3a0308f8ce1173386d42491269912aadf..bb3647e53d082979a7000d8ef9c8b79a1b813147 100644 (file)
@@ -420,6 +420,9 @@ void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             uint32_t flags,
                             uint32_t capabilities,
                             uint32_t maximal_access);
+void smb2cli_tcon_should_sign(struct smbXcli_tcon *tcon,
+                             bool should_sign);
+bool smb2cli_tcon_is_signing_on(struct smbXcli_tcon *tcon);
 void smb2cli_tcon_should_encrypt(struct smbXcli_tcon *tcon,
                                 bool should_encrypt);
 bool smb2cli_tcon_is_encryption_on(struct smbXcli_tcon *tcon);