-/* $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.
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);
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;
}
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;
}
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;
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)
{