From: Michael Adam Date: Tue, 30 Jun 2015 12:16:19 +0000 (+0200) Subject: Introduce setting "desired" for 'smb encrypt' and 'client/server signing' X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=204cbe3645c59b43175beeadad792b4a00e80da3;p=obnox%2Fsamba%2Fsamba-obnox.git Introduce setting "desired" for 'smb encrypt' and 'client/server signing' This should trigger the behaviour where the server requires signing when the client supports it, but does not reject clients that don't support it. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11372 Signed-off-by: Michael Adam Reviewed-by: Guenther Deschner --- diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index bb215b26992..0e114288e22 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -3207,6 +3207,7 @@ bool lpcfg_server_signing_allowed(struct loadparm_context *lp_ctx, bool *mandato case SMB_SIGNING_REQUIRED: *mandatory = true; break; + case SMB_SIGNING_DESIRED: case SMB_SIGNING_IF_REQUIRED: break; case SMB_SIGNING_DEFAULT: diff --git a/lib/param/param_table.c b/lib/param/param_table.c index 287839fb7d3..ff310381213 100644 --- a/lib/param/param_table.c +++ b/lib/param/param_table.c @@ -115,6 +115,7 @@ static const struct enum_list enum_smb_signing_vals[] = { {SMB_SIGNING_IF_REQUIRED, "On"}, {SMB_SIGNING_IF_REQUIRED, "enabled"}, {SMB_SIGNING_IF_REQUIRED, "auto"}, + {SMB_SIGNING_DESIRED, "desired"}, {SMB_SIGNING_REQUIRED, "required"}, {SMB_SIGNING_REQUIRED, "mandatory"}, {SMB_SIGNING_REQUIRED, "force"}, diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index c8ae5b06a90..6c35430c580 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -376,6 +376,12 @@ struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx, conn->desire_signing = false; conn->mandatory_signing = false; break; + case SMB_SIGNING_DESIRED: + /* if the server desires it */ + conn->allow_signing = true; + conn->desire_signing = true; + conn->mandatory_signing = false; + break; case SMB_SIGNING_REQUIRED: /* always */ conn->allow_signing = true; diff --git a/libcli/smb/smb_constants.h b/libcli/smb/smb_constants.h index 589b1a63d95..c4cca1568ea 100644 --- a/libcli/smb/smb_constants.h +++ b/libcli/smb/smb_constants.h @@ -98,6 +98,7 @@ enum smb_signing_setting { SMB_SIGNING_DEFAULT = -1, SMB_SIGNING_OFF = 0, SMB_SIGNING_IF_REQUIRED = 1, + SMB_SIGNING_DESIRED = 2, SMB_SIGNING_REQUIRED = 3, }; diff --git a/source4/smb_server/smb2/negprot.c b/source4/smb_server/smb2/negprot.c index 81f2547a8e0..b48b1700bf0 100644 --- a/source4/smb_server/smb2/negprot.c +++ b/source4/smb_server/smb2/negprot.c @@ -150,6 +150,7 @@ static NTSTATUS smb2srv_negprot_backend(struct smb2srv_request *req, struct smb2 case SMB_SIGNING_OFF: io->out.security_mode = 0; break; + case SMB_SIGNING_DESIRED: case SMB_SIGNING_IF_REQUIRED: io->out.security_mode = SMB2_NEGOTIATE_SIGNING_ENABLED; break;