r24527: Add a function lp_canonicalize_parameter_with_value that turns
authorMichael Adam <obnox@samba.org>
Fri, 17 Aug 2007 16:03:18 +0000 (16:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:29:54 +0000 (12:29 -0500)
a parameter and value into the canonical paramter with the value
inverted if it was in invers boolean synonym.

Make net conf use this function when storing parameters.

Michael
(This used to be commit 3b762ab18392fd06427957b0263262e3b8e34b9d)

source3/param/loadparm.c
source3/utils/net_conf.c

index ea1bb0a23f44fdaf69a7ec514289c052a7f5afae..bd318791b5b081a8956c605f26fe45d213c876fa 100644 (file)
@@ -2845,6 +2845,51 @@ BOOL lp_canonicalize_parameter(const char *parm_name, const char **canon_parm,
 
 }
 
+/**************************************************************************
+ Determine the canonical name for a parameter.
+ 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 false in all other cases.
+**************************************************************************/
+
+BOOL lp_canonicalize_parameter_with_value(const char *parm_name,
+                                         const char *val,
+                                         const char **canon_parm,
+                                         const char **canon_val)
+{
+       int num;
+       BOOL inverse;
+
+       if (!lp_parameter_is_valid(parm_name)) {
+               *canon_parm = NULL;
+               *canon_val = NULL;
+               return False;
+       }
+
+       num = map_parameter_canonical(parm_name, &inverse);
+       if (num < 0) {
+               /* 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;
+}
+
 /***************************************************************************
  Map a parameter's string representation to something we can use. 
  Returns False if the parameter string is not recognised, else TRUE.
index 2f0b3d6b0407f529cd8e3b2c82a69553e4647647..c18b733a892604243a2990bf5d19ccf9a46c42f9 100644 (file)
@@ -154,43 +154,20 @@ static WERROR reg_setvalue_internal(struct registry_key *key,
        char *subkeyname;
        const char *canon_valname;
        const char *canon_valstr;
-       BOOL canon_inverse;
-       struct parm_struct *parm;
-
-       if (!lp_parameter_is_valid(valname)) {
-               d_fprintf(stderr, "Invalid parameter '%s' given.\n", valname);
-               werr = WERR_INVALID_PARAM;
-               goto done;
-       }
 
-       if (!lp_canonicalize_parameter(valname, &canon_valname, &canon_inverse))
+       if (!lp_canonicalize_parameter_with_value(valname, valstr,
+                                                 &canon_valname,
+                                                 &canon_valstr))
        {
-               d_fprintf(stderr, "ERROR: could not canonicalize parameter "
-                         "'%s' after successful validation: this should not "
-                         "happen!\n", valname);
-               werr = WERR_INVALID_PARAM;
-               goto done;
-       }
-       if (canon_inverse) {
-               if (!lp_invert_boolean(valstr, &canon_valstr)) {
-                       d_fprintf(stderr, "invalid value '%s' given for "
-                                 "parameter '%s'\n", valstr, canon_valname);
-                       werr = WERR_INVALID_PARAM;
-                       goto done;
-               }
-       } else {
-               parm = lp_get_parameter(canon_valname);
-               if (parm->type == P_BOOL) {
-                       if (!lp_canonicalize_boolean(valstr, &canon_valstr)) {
-                               d_fprintf(stderr, "invalied value '%s' given "
-                                         "for parameter '%s'\n", valstr,
-                                         canon_valname);
-                               werr = WERR_INVALID_PARAM;
-                               goto done;
-                       }
+               if (canon_valname == NULL) {
+                       d_fprintf(stderr, "invalid parameter '%s' given\n",
+                                 valname);
                } else {
-                       canon_valstr = valstr;
+                       d_fprintf(stderr, "invalid value '%s' given for "
+                                 "parameter '%s'\n", valstr, valname);
                }
+               werr = WERR_INVALID_PARAM;
+               goto done;
        }
 
        ZERO_STRUCT(val);