zoom: throw diagnostic for records for some udb
[metaproxy-moved-to-github.git] / src / filter_zoom.cpp
index 2c70e94..3aae72c 100644 (file)
@@ -20,7 +20,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 #include <stdlib.h>
 #include <sys/types.h>
-#include <fcntl.h>
 #include "filter_zoom.hpp"
 #include <yaz/zoom.h>
 #include <yaz/yaz-version.h>
@@ -662,8 +661,17 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
                 if (ptr->type == XML_ELEMENT_NODE
                     && !strcmp((const char *) ptr->name, "record"))
                 {
+                    if (sptr)
+                    {
+                        *error = YAZ_BIB1_UNSPECIFIED_ERROR;
+                        *addinfo = (char*) odr_malloc(odr, 40 + database.length()),
+                        sprintf(*addinfo, "multiple records for udb=%s",
+                                 database.c_str());
+                        xmlFreeDoc(doc);
+                        BackendPtr b;
+                        return b;
+                    }
                     sptr = m_p->parse_torus_record(ptr);
-                    break;
                 }
             }
         }
@@ -854,8 +862,8 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
         sprintf(xx, "%06d", ((unsigned) rand()) % 1000000);
         xx[6] = tmp_char;
 
-        int fd = creat(fname, 0666);
-        if (fd == -1)
+        FILE *file = fopen(fname, "w");
+        if (!file)
         {
             yaz_log(YLOG_WARN|YLOG_ERRNO, "create %s", fname);
             *error = YAZ_BIB1_TEMPORARY_SYSTEM_ERROR;
@@ -873,13 +881,11 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
             wrbuf_printf(w, "authentication: %s\n", authentication.c_str());
         if (proxy.length())
             wrbuf_printf(w, "proxy: %s\n", proxy.c_str());
-        if (sptr->cfAuth.length())
-            wrbuf_printf(w, "cfauth: %s\n", sptr->cfAuth.c_str());
         if (sptr->cfProxy.length())
             wrbuf_printf(w, "cfproxy: %s\n", sptr->cfProxy.c_str());
 
-        write(fd, wrbuf_buf(w), wrbuf_len(w));
-        close(fd);
+        fwrite(wrbuf_buf(w), 1, wrbuf_len(w), file);
+        fclose(file);
         yaz_log(YLOG_LOG, "file %s created\n", fname);
         xfree(fname);
     }