Allow empty strings in "case" statements. Closes #836
authorAlan T. DeKok <aland@freeradius.org>
Wed, 19 Nov 2014 17:07:22 +0000 (12:07 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 19 Nov 2014 17:07:22 +0000 (12:07 -0500)
src/main/conffile.c
src/main/modcall.c
src/tests/keywords/case-empty-string [new file with mode: 0644]

index 2a0c3ba..04c28a0 100644 (file)
@@ -365,7 +365,7 @@ CONF_SECTION *cf_section_alloc(CONF_SECTION *parent, char const *name1,
                return NULL;
        }
 
-       if (name2 && *name2) {
+       if (name2) {
                cs->name2 = talloc_typed_strdup(cs, name2);
                if (!cs->name2) goto error;
        }
index eed1614..3e428c3 100644 (file)
@@ -1943,13 +1943,13 @@ static modcallable *do_compile_modswitch (modcallable *parent, rlm_components_t
                }
 
                name2 = cf_section_name2(subcs);
-               if (!name2 && !had_seen_default) {
-                       had_seen_default = true;
-                       continue;
-               }
+               if (!name2) {
+                       if (!had_seen_default) {
+                               had_seen_default = true;
+                               continue;
+                       }
 
-               if (!name2 || (name2[0] == '\0')) {
-                       cf_log_err(ci, "\"case\" sections must have a name");
+                       cf_log_err(ci, "Cannot have two 'default' case statements");
                        talloc_free(vpt);
                        return NULL;
                }
diff --git a/src/tests/keywords/case-empty-string b/src/tests/keywords/case-empty-string
new file mode 100644 (file)
index 0000000..4b8e7cd
--- /dev/null
@@ -0,0 +1,25 @@
+# PRE: switch
+#
+update request {
+       Filter-Id := ""
+}
+
+switch &Filter-Id {
+       case "" {
+               update reply {
+                       Filter-Id := "filter"
+               }
+       }
+
+       case "doug" {
+               update reply {
+                       Filter-Id := "doug"
+               }
+       }
+
+       case {
+               update reply {
+                       Filter-Id := "default"
+               }
+       }
+}