From: Adam Dickmeiss Date: Wed, 15 Aug 2012 14:03:03 +0000 (+0200) Subject: zoom: IP auth in place X-Git-Tag: v1.3.42~5 X-Git-Url: http://lists.indexdata.com/?a=commitdiff_plain;h=7ebda9fb6eb58f2c365a6ca0eb67f8a559f7119b;p=metaproxy-moved-to-github.git zoom: IP auth in place --- diff --git a/src/filter_zoom.cpp b/src/filter_zoom.cpp index bf12680..22e1ca7 100644 --- a/src/filter_zoom.cpp +++ b/src/filter_zoom.cpp @@ -2462,19 +2462,30 @@ void yf::Zoom::Frontend::auth(mp::Package &package, Z_InitRequest *req, break; } } - // need to dig out IP!! - if (user.length() == 0 || password.length() == 0) + std::string ip = package.origin().get_address(); + yaz_log(YLOG_LOG, "IP=%s", ip.c_str()); + + std::string torus_query; + + if (user.length() && password.length()) { - *error = YAZ_BIB1_INIT_AC_BAD_USERID_AND_OR_PASSWORD; - *addinfo = odr_strdup(odr, "User and password required"); - return; + torus_query = "userName==" + user + " and password==" + password; + } + else + { + const char *ip_cstr = ip.c_str(); + const char *cp = strchr(ip_cstr, ':'); + if (cp) + ip_cstr = cp + 1; + + torus_query = "ip encloses/net.ipaddress \""; + torus_query += ip_cstr; + torus_query += "\""; } std::string dummy_db; std::string dummy_realm; - std::string torus_query = "userName==" + user + - " and password==" + password; xmlDoc *doc = mp::get_searchable(package, m_p->torus_auth_url, dummy_db, torus_query, dummy_realm, m_p->proxy); if (!doc)