Simplify in a lot of places using odr_strdupn
[yaz-moved-to-github.git] / src / zoom-sru.c
index a5e6169..22ac8c3 100644 (file)
@@ -62,8 +62,29 @@ static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr)
 static Z_SRW_PDU *ZOOM_srw_get_pdu(ZOOM_connection c, int type)
 {
     Z_SRW_PDU *sr = yaz_srw_get_pdu(c->odr_out, type, c->sru_version);
-    sr->username = c->user;
-    sr->password = c->password;
+    if (c->url_authentication && c->user)
+    {
+        Z_SRW_extra_arg **ea = &sr->extra_args;
+        while (*ea)
+            ea = &(*ea)->next;
+        *ea = (Z_SRW_extra_arg *) odr_malloc(c->odr_out, sizeof(**ea));
+        (*ea)->name = "x-username";
+        (*ea)->value = c->user;
+        ea = &(*ea)->next;
+        if (c->password)
+        {
+            *ea = (Z_SRW_extra_arg *) odr_malloc(c->odr_out, sizeof(**ea));
+            (*ea)->name = "x-password";
+            (*ea)->value = c->password;
+            ea = &(*ea)->next;
+        }
+        *ea = 0;
+    }
+    else
+    {
+        sr->username = c->user;
+        sr->password = c->password;
+    }
     return sr;
 }
 #endif
@@ -329,14 +350,10 @@ static zoom_ret handle_srw_response(ZOOM_connection c,
             npr->u.databaseRecord->indirect_reference = 0;
             npr->u.databaseRecord->which = Z_External_octet;
 
-            npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
-                odr_malloc(c->odr_in, sizeof(Odr_oct));
-            npr->u.databaseRecord->u.octet_aligned->buf = (unsigned char*)
-                sru_rec->recordData_buf;
-            npr->u.databaseRecord->u.octet_aligned->len =
-                npr->u.databaseRecord->u.octet_aligned->size =
-                sru_rec->recordData_len;
-
+            npr->u.databaseRecord->u.octet_aligned =
+                odr_create_Odr_oct(c->odr_in,
+                                   sru_rec->recordData_buf,
+                                   sru_rec->recordData_len);
             if (sru_rec->recordSchema
                 && !strcmp(sru_rec->recordSchema,
                            "info:srw/schema/1/diagnostics-v1.1"))