The branch, master has been updated
       via  28fbc5e s3-net: use SMB_SIGNING_DEFAULT in connect_to_service()
       via  1f91b6a param: validate value in 
lp_canonicalize_parameter_with_value()
       via  fa7e40b param: use early return in 
lp_canonicalize_parameter_with_value()
       via  21ae887 param: add lp_parameter_value_is_valid() function
       via  41cc17c net conf: fix error message
      from  c1a316b samba_dnsupdate: Raise after the error count is incremented

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 28fbc5ea2e39bf23808aee5035cfc2f58b7fbcfd
Author: Günther Deschner <g...@samba.org>
Date:   Fri Nov 18 18:17:52 2016 +0100

    s3-net: use SMB_SIGNING_DEFAULT in connect_to_service()
    
    For non IPC$ connections we get NT_STATUS_REVISION_MISMATCH otherwise when 
using
    the connection.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <g...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Wed Nov 23 16:52:38 CET 2016 on sn-devel-144

commit 1f91b6aa63df4c48c49dabf8b30cde33579da17f
Author: Michael Adam <ob...@samba.org>
Date:   Wed Nov 23 11:14:54 2016 +0100

    param: validate value in lp_canonicalize_parameter_with_value()
    
    Signed-off-by: Michael Adam <ob...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit fa7e40b92460c094e64cb175dfb297436fe483eb
Author: Michael Adam <ob...@samba.org>
Date:   Wed Nov 23 11:12:42 2016 +0100

    param: use early return in lp_canonicalize_parameter_with_value()
    
    This reduces the indentation and streamlines the flow.
    View with "git show -w" to see it's mostly indentation change.
    
    Signed-off-by: Michael Adam <ob...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 21ae8871580fbcacfb0091fb83ba328448850b4d
Author: Ralph Wuerthner <ralph.wuerth...@de.ibm.com>
Date:   Mon Nov 21 14:56:52 2016 +0100

    param: add lp_parameter_value_is_valid() function
    
    Signed-off-by: Ralph Wuerthner <ralph.wuerth...@de.ibm.com>
    Reviewed-by: Michael Adam <ob...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 41cc17c8d174fc54754b11ff6f68b155909642f5
Author: Ralph Wuerthner <ralph.wuerth...@de.ibm.com>
Date:   Tue Nov 22 11:20:22 2016 +0100

    net conf: fix error message
    
    Signed-off-by: Ralph Wuerthner <ralph.wuerth...@de.ibm.com>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    Reviewed-by: Michael Adam <ob...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/param/loadparm.c      | 98 +++++++++++++++++++++++++++++++++++++------
 source3/utils/net_conf_util.c |  2 +-
 source3/utils/net_util.c      |  7 +++-
 3 files changed, 92 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 3e1a15e..21073c6 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -1062,6 +1062,7 @@ static bool hash_a_service(const char *name, int number);
 static void free_service_byindex(int iService);
 static void show_parameter(int parmIndex);
 static bool is_synonym_of(int parm1, int parm2, bool *inverse);
+static bool lp_parameter_value_is_valid(const char *parm_name, const char 
*val);
 
 /*
  * This is a helper function for parametrical options support.  It returns a
@@ -1687,9 +1688,11 @@ bool lp_canonicalize_parameter(const char *parm_name, 
const char **canon_parm,
  Turn the value given into the inverse boolean expression when
  the synonym is an invers boolean synonym.
 
- Return true if parm_name is a valid parameter name and
- in case it is an invers boolean synonym, if the val string could
- successfully be converted to the reverse bool.
+ Return true if
+ - parm_name is a valid parameter name and
+ - val is a valid value for this parameter and
+ - in case the parameter is an inverse boolean synonym, if the val
+   string could successfully be converted to the reverse bool.
  Return false in all other cases.
 **************************************************************************/
 
@@ -1700,6 +1703,7 @@ bool lp_canonicalize_parameter_with_value(const char 
*parm_name,
 {
        int num;
        bool inverse;
+       bool ret;
 
        if (!lp_parameter_is_valid(parm_name)) {
                *canon_parm = NULL;
@@ -1712,19 +1716,22 @@ bool lp_canonicalize_parameter_with_value(const char 
*parm_name,
                /* parametric option */
                *canon_parm = parm_name;
                *canon_val = val;
-       } else {
-               *canon_parm = parm_table[num].label;
-               if (inverse) {
-                       if (!lp_invert_boolean(val, canon_val)) {
-                               *canon_val = NULL;
-                               return false;
-                       }
-               } else {
-                       *canon_val = val;
+               return true;
+       }
+
+       *canon_parm = parm_table[num].label;
+       if (inverse) {
+               if (!lp_invert_boolean(val, canon_val)) {
+                       *canon_val = NULL;
+                       return false;
                }
+       } else {
+               *canon_val = val;
        }
 
-       return true;
+       ret = lp_parameter_value_is_valid(*canon_parm, *canon_val);
+
+       return ret;
 }
 
 /***************************************************************************
@@ -1852,6 +1859,71 @@ static void show_parameter(int parmIndex)
        printf("\n");
 }
 
+/*
+ * Check the value for a P_ENUM
+ */
+static bool check_enum_parameter(struct parm_struct *parm, const char *value)
+{
+       int i;
+
+       for (i = 0; parm->enum_list[i].name; i++) {
+               if (strwicmp(value, parm->enum_list[i].name) == 0) {
+                       return true;
+               }
+       }
+       return false;
+}
+
+/**************************************************************************
+ Check whether the given value is valid for the given parameter name.
+**************************************************************************/
+
+static bool lp_parameter_value_is_valid(const char *parm_name, const char *val)
+{
+       bool ret = false, tmp_bool;
+       int num = lpcfg_map_parameter(parm_name), tmp_int;
+       uint64_t tmp_int64 = 0;
+       struct parm_struct *parm;
+
+       if (num >= 0) {
+               parm = &parm_table[num];
+               switch (parm->type) {
+                       case P_BOOL:
+                       case P_BOOLREV:
+                               ret = set_boolean(val, &tmp_bool);
+                               break;
+
+                       case P_INTEGER:
+                               ret = (sscanf(val, "%d", &tmp_int) == 1);
+                               break;
+
+                       case P_OCTAL:
+                               ret = (sscanf(val, "%o", &tmp_int) == 1);
+                               break;
+
+                       case P_ENUM:
+                               ret = check_enum_parameter(parm, val);
+                               break;
+
+                       case P_BYTES:
+                               if (conv_str_size_error(val, &tmp_int64) &&
+                                   tmp_int64 <= INT_MAX) {
+                                       ret = true;
+                               }
+                               break;
+
+                       case P_CHAR:
+                       case P_LIST:
+                       case P_STRING:
+                       case P_USTRING:
+                       case P_CMDLIST:
+                               ret = true;
+                               break;
+               }
+       }
+       return ret;
+}
+
 /***************************************************************************
  Show all parameter's name, type, [values,] and flags.
 ***************************************************************************/
diff --git a/source3/utils/net_conf_util.c b/source3/utils/net_conf_util.c
index a188097..ec6a479 100644
--- a/source3/utils/net_conf_util.c
+++ b/source3/utils/net_conf_util.c
@@ -61,7 +61,7 @@ bool net_conf_param_valid(const char *service,
                 * So the value must be invalid.
                 */
                d_fprintf(stderr, "invalid value '%s' given for "
-                         "parameter '%s'\n", param, valstr);
+                         "parameter '%s'\n", valstr, param);
                return false;
        }
 
diff --git a/source3/utils/net_util.c b/source3/utils/net_util.c
index de929ff..cc65457 100644
--- a/source3/utils/net_util.c
+++ b/source3/utils/net_util.c
@@ -106,6 +106,7 @@ NTSTATUS connect_to_service(struct net_context *c,
 {
        NTSTATUS nt_status;
        int flags = 0;
+       enum smb_signing_setting signing_setting = SMB_SIGNING_DEFAULT;
 
        c->opt_password = net_prompt_pass(c, c->opt_user_name);
 
@@ -121,12 +122,16 @@ NTSTATUS connect_to_service(struct net_context *c,
                flags |= CLI_FULL_CONNECTION_USE_CCACHE;
        }
 
+       if (strequal(service_type, "IPC")) {
+               signing_setting = SMB_SIGNING_IPC_DEFAULT;
+       }
+
        nt_status = cli_full_connection(cli_ctx, NULL, server_name,
                                        server_ss, c->opt_port,
                                        service_name, service_type,
                                        c->opt_user_name, c->opt_workgroup,
                                        c->opt_password, flags,
-                                       SMB_SIGNING_IPC_DEFAULT);
+                                       signing_setting);
        if (!NT_STATUS_IS_OK(nt_status)) {
                d_fprintf(stderr, _("Could not connect to server %s\n"),
                          server_name);


-- 
Samba Shared Repository

Reply via email to