Solr: fheck for ending "/" and "/select" as part of URI
[yaz-moved-to-github.git] / src / solr.c
index 9b9efb6..088fb63 100644 (file)
@@ -264,17 +264,16 @@ static int yaz_solr_decode_scan_result(ODR o, xmlNodePtr ptr,
                                        Z_SRW_scanResponse *scr)
 {
     xmlNodePtr node;
-    xmlAttr *attr;
     char *pos;
     int i = 0;
-    
+
     /* find the actual list */
     for (node = ptr->children; node; node = node->next)
         if (node->type == XML_ELEMENT_NODE) {
             ptr = node;
             break;
         }
-    
+
     scr->num_terms = 0;
     for (node = ptr->children; node; node = node->next)
         if (node->type == XML_ELEMENT_NODE && !strcmp((const char *) node->name, "int"))
@@ -282,18 +281,18 @@ static int yaz_solr_decode_scan_result(ODR o, xmlNodePtr ptr,
 
     if (scr->num_terms)
         scr->terms = odr_malloc(o, sizeof(*scr->terms) * scr->num_terms);
-    
+
     for (node = ptr->children; node; node = node->next)
     {
         if (node->type == XML_ELEMENT_NODE && !strcmp((const char *) node->name, "int"))
         {
             Z_SRW_scanTerm *term = scr->terms + i;
-            
+
             Odr_int count = 0;
             const char *val = get_facet_term_count(node, &count);
 
             term->numberOfRecords = odr_intdup(o, count);
-            
+
             /* if val contains a ^ then it is probably term<^>display term so separate them. This is due to
              * SOLR not being able to encode them into 2 separate attributes.
              */
@@ -308,11 +307,11 @@ static int yaz_solr_decode_scan_result(ODR o, xmlNodePtr ptr,
                term->displayTerm = NULL;
             }
             term->whereInList = NULL;
-            
+
             i++;
         }
     }
-    
+
     if (scr->num_terms)
         return 0;
     return -1;
@@ -330,7 +329,7 @@ int yaz_solr_decode_response(ODR o, Z_HTTP_Response *hres, Z_SRW_PDU **pdup)
     Z_SRW_PDU *pdu;
     Z_SRW_searchRetrieveResponse *sr = NULL;
     Z_SRW_scanResponse *scr = NULL;
-    
+
     if (!doc)
     {
         ret = -1;
@@ -453,6 +452,7 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
     char *path;
     char *q;
     char *pos;
+    char *cp;
     int i = 0;
 
     z_HTTP_header_add_basic_auth(encode, &hreq->headers,
@@ -561,7 +561,17 @@ int yaz_solr_encode_request(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
         odr_malloc(encode, strlen(hreq->path) +
                    strlen(uri_args) + strlen(solr_op) + 4);
 
-    sprintf(path, "%s/%s?%s", hreq->path, solr_op, uri_args);
+    strcpy(path, hreq->path);
+    cp = strrchr(path, '/');
+    if (cp)
+    {
+        if (!strcmp(cp, "/select") || !strcmp(cp, "/"))
+            *cp = '\0';
+    }
+    strcat(path, "/");
+    strcat(path, solr_op);
+    strcat(path, "?");
+    strcat(path, uri_args);
     hreq->path = path;
 
     z_HTTP_header_add_content_type(encode, &hreq->headers,