From: Adam Dickmeiss Date: Mon, 30 Apr 2007 19:46:34 +0000 (+0000) Subject: Added patch by David Chalmers which relays x-username,x-password SRU X-Git-Tag: YAZPROXY.1.3.0~4 X-Git-Url: http://git.indexdata.com/?p=yazproxy-moved-to-github.git;a=commitdiff_plain;h=02098acac83c12e26589fea83a0afd8f4e5018ca Added patch by David Chalmers which relays x-username,x-password SRU values to Z39.50 backend. --- diff --git a/src/yaz-proxy.cpp b/src/yaz-proxy.cpp index 8e4d2e6..6b04f38 100644 --- a/src/yaz-proxy.cpp +++ b/src/yaz-proxy.cpp @@ -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.75 2007-04-30 19:46:34 adam Exp $ Copyright (c) 1998-2007, Index Data. This file is part of the yazproxy. @@ -2765,24 +2765,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) {