Using yaz_daemon rather than own code. Fixed bug #2060.
[yazproxy-moved-to-github.git] / src / yaz-proxy.cpp
index 8e4d2e6..258c5b4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: yaz-proxy.cpp,v 1.74 2007-04-16 21:54:27 adam Exp $
+/* $Id: yaz-proxy.cpp,v 1.78 2008-02-21 09:33:23 adam Exp $
    Copyright (c) 1998-2007, Index Data.
 
 This file is part of the yazproxy.
@@ -399,7 +399,6 @@ Yaz_ProxyConfig *Yaz_Proxy::check_reconfigure()
     if (m_reconfig_flag)
     {
         yaz_log(YLOG_LOG, "reconfigure");
-        yaz_log_reopen();
         if (m_config_fname && cfg)
         {
             yaz_log(YLOG_LOG, "reconfigure config %s", m_config_fname);
@@ -487,7 +486,7 @@ char *Yaz_Proxy::get_cookie(Z_OtherInformation **otherInfo)
     Z_OtherInformationUnit *oi =
         update_otherInformation(otherInfo, 0, yaz_oid_userinfo_cookie, 1, 1);
     
-    if (oi->which == Z_OtherInfo_characterInfo)
+    if (oi && oi->which == Z_OtherInfo_characterInfo)
         return oi->information.characterInfo;
     return 0;
 }
@@ -497,7 +496,7 @@ char *Yaz_Proxy::get_proxy(Z_OtherInformation **otherInfo)
     Z_OtherInformationUnit *oi =
         update_otherInformation(otherInfo, 0, yaz_oid_userinfo_proxy, 1, 1);
     
-    if (oi->which == Z_OtherInfo_characterInfo)
+    if (oi && oi->which == Z_OtherInfo_characterInfo)
         return oi->information.characterInfo;
     return 0;
 }
@@ -1011,7 +1010,7 @@ void Yaz_Proxy::convert_records_charset(Z_NamePlusRecordList *p,
             if (npr->which == Z_NamePlusRecord_databaseRecord)
             {
                 Z_External *r = npr->u.databaseRecord;
-                const int *oid = r->direct_reference;
+                const Odr_oid *oid = r->direct_reference;
                 if (!oid)
                     continue;
 
@@ -2765,24 +2764,51 @@ void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq)
         m_s2z_present_apdu = 0;
 
         m_s2z_stylesheet = 0;
-
+        
         Z_IdAuthentication *auth = NULL;
-        if (*authorization_str)
+        if (srw_pdu->username && srw_pdu->password)
         {
+            yaz_log(YLOG_LOG, "username/password: %s/%s\n",
+                    srw_pdu->username, srw_pdu->password);
             auth = (Z_IdAuthentication *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdAuthentication));
             auth->which = Z_IdAuthentication_idPass;
             auth->u.idPass = (Z_IdPass *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdPass));
             auth->u.idPass->groupId = NULL;
-            char *p = strchr(authorization_str, ':');
-            if (p)
+            auth->u.idPass->password = odr_strdup(m_s2z_odr_init, srw_pdu->password);
+            auth->u.idPass->userId = odr_strdup(m_s2z_odr_init, srw_pdu->username);
+        }
+        else
+        {
+            if (*authorization_str)
+            {
+                yaz_log(YLOG_LOG, "authorization_str present: %s\n", authorization_str);
+                auth = (Z_IdAuthentication *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdAuthentication));
+                auth->which = Z_IdAuthentication_idPass;
+                auth->u.idPass = (Z_IdPass *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdPass));
+                auth->u.idPass->groupId = NULL;
+                char *p = strchr(authorization_str, ':');
+                if (p)
+                {
+                    *p = '\0';
+                    p++;
+                    auth->u.idPass->password = odr_strdup(m_s2z_odr_init, p);
+                }
+                auth->u.idPass->userId = odr_strdup(m_s2z_odr_init, authorization_str);
+            }
+            else
             {
-                *p = '\0';
-                p++;
-                auth->u.idPass->password = odr_strdup(m_s2z_odr_init, p);
+                // Use _client_ IP as shown in the log entries...!
+                yaz_log(YLOG_LOG, "No authorization_str present: use client IP: %s\n", m_peername);
+                
+                auth = (Z_IdAuthentication *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdAuthentication));
+                   auth->which = Z_IdAuthentication_idPass;
+                   auth->u.idPass = (Z_IdPass *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdPass));
+                   auth->u.idPass->groupId  = NULL;
+                   auth->u.idPass->password = NULL;
+                   auth->u.idPass->userId   = odr_strdup(m_s2z_odr_init, m_peername);
             }
-            auth->u.idPass->userId = odr_strdup(m_s2z_odr_init, authorization_str);
-        }
-
+        }              
+        
         if (srw_pdu->which == Z_SRW_searchRetrieve_request)
         {