Warn if unknown attribute is met in syntax config
[yazproxy-moved-to-github.git] / src / yaz-proxy-config.cpp
index 18a49dd..5bd08e3 100644 (file)
@@ -729,7 +729,8 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
                                   char **backend_type,
                                   char **backend_charset,
                                   char **usemarcon_ini_stage1,
-                                  char **usemarcon_ini_stage2
+                                  char **usemarcon_ini_stage2,
+                                  char **backend_elementset
                                   )
 {
     if (stylesheet)
@@ -762,6 +763,8 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
         xfree (*usemarcon_ini_stage2);
         *usemarcon_ini_stage2 = 0;
     }
+    xfree(*backend_elementset);
+    *backend_elementset = 0;
 #if YAZ_HAVE_XSLT
     int syntax_has_matched = 0;
     xmlNodePtr ptr;
@@ -784,40 +787,49 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
             const char *match_backend_charset = 0;
             const char *match_usemarcon_ini_stage1 = 0;
             const char *match_usemarcon_ini_stage2 = 0;
+            const char *match_elementset = 0;
             struct _xmlAttr *attr;
             for (attr = ptr->properties; attr; attr = attr->next)
             {
                 if (!strcmp((const char *) attr->name, "type") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_type = (const char *) attr->children->content;
-                if (!strcmp((const char *) attr->name, "error") &&
+                else if (!strcmp((const char *) attr->name, "error") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_error = (const char *) attr->children->content;
-                if (!strcmp((const char *) attr->name, "marcxml") &&
+                else if (!strcmp((const char *) attr->name, "marcxml") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_marcxml = (const char *) attr->children->content;
-                if (!strcmp((const char *) attr->name, "stylesheet") &&
+                else if (!strcmp((const char *) attr->name, "stylesheet") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_stylesheet = (const char *) attr->children->content;
-                if (!strcmp((const char *) attr->name, "identifier") &&
+                else if (!strcmp((const char *) attr->name, "identifier") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_identifier = (const char *) attr->children->content;
-                if (!strcmp((const char *) attr->name, "backendtype") &&
+                else if (!strcmp((const char *) attr->name, "backendtype") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_backend_type = (const char *)
                         attr->children->content;
-                if (!strcmp((const char *) attr->name, "backendcharset") &&
+                else if (!strcmp((const char *) attr->name, "backendcharset") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_backend_charset = (const char *)
                         attr->children->content;
-                if (!strcmp((const char *) attr->name, "usemarconstage1") &&
+                else if (!strcmp((const char *) attr->name, "usemarconstage1") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_usemarcon_ini_stage1 = (const char *)
                         attr->children->content;
-                if (!strcmp((const char *) attr->name, "usemarconstage2") &&
+                else if (!strcmp((const char *) attr->name, "usemarconstage2") &&
                     attr->children && attr->children->type == XML_TEXT_NODE)
                     match_usemarcon_ini_stage2 = (const char *)
                         attr->children->content;
+                else if (!strcmp((const char *) attr->name, "backendelementset") &&
+                    attr->children && attr->children->type == XML_TEXT_NODE)
+                    match_elementset = (const char *) attr->children->content;
+                else
+                {
+                    yaz_log(YLOG_WARN, "0 Unknown attribute %s in <syntax>",
+                            (const char *) attr->name);
+                }
             }
             if (match_type)
             {
@@ -867,6 +879,11 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
                     xfree(*backend_charset);
                     *backend_charset = xstrdup(match_backend_charset);
                 }
+                if (match_elementset)
+                {
+                    xfree(*backend_elementset);
+                    *backend_elementset = xstrdup(match_elementset);
+                }
                 if (usemarcon_ini_stage1 && match_usemarcon_ini_stage1)
                 {
                     xfree(*usemarcon_ini_stage1);