From 92250665c49bae4ad810a2b5f684589f0e0a304b Mon Sep 17 00:00:00 2001 From: Jan Kupec Date: Tue, 23 Sep 2008 11:35:21 +0000 Subject: [PATCH] - when looking for credentials, use wanted_url.startsWith(stored_url) --- tests/media/CredentialManager_test.cc | 37 +++++++++++++++++++++++++++++++---- zypp/media/CredentialFileReader.cc | 4 ++++ zypp/media/CredentialManager.cc | 26 ++++++++++++------------ 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/tests/media/CredentialManager_test.cc b/tests/media/CredentialManager_test.cc index a007178..3af6e66 100644 --- a/tests/media/CredentialManager_test.cc +++ b/tests/media/CredentialManager_test.cc @@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(save_creds) AuthData cr2("pat","vymetheny"); cr2.setUrl(Url("ftp://filesuck.org")); - // should creat a new file + // should create a new file cm1.saveInGlobal(cr1); CredCollector collector; @@ -79,8 +79,6 @@ BOOST_AUTO_TEST_CASE(save_creds) cm1.saveInGlobal(cr2); - filesystem::copy(opts.globalCredFilePath, "/home/jkupec/tmp/foo"); - CredentialFileReader reader1(opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 )); BOOST_CHECK(collector.creds.size() == 2); @@ -95,4 +93,35 @@ BOOST_AUTO_TEST_CASE(save_creds) BOOST_CHECK(collector.creds.size() == 2); // todo check created file permissions -} \ No newline at end of file +} + +BOOST_AUTO_TEST_CASE(service_base_url) +{ + filesystem::TmpDir tmp; + + CredManagerOptions opts; + opts.globalCredFilePath = tmp / "fooha"; + + CredentialManager cm1(opts); + AuthData cr1("benson","absolute"); + cr1.setUrl(Url("http://joooha.com/service/path")); + cm1.addGlobalCred(cr1); + + AuthData_Ptr creds; + creds = cm1.getCred(Url("http://joooha.com/service/path/repo/repofoo")); + + BOOST_CHECK(creds.get() != NULL); + if (!creds) + return; + BOOST_CHECK(creds->username() == "benson"); + + creds = cm1.getCred(Url("http://benson@joooha.com/service/path/repo/repofoo")); + + BOOST_CHECK(creds.get() != NULL); + if (!creds) + return; + BOOST_CHECK(creds->username() == "benson"); + + creds = cm1.getCred(Url("http://nobody@joooha.com/service/path/repo/repofoo")); + BOOST_CHECK(creds.get() == NULL); +} diff --git a/zypp/media/CredentialFileReader.cc b/zypp/media/CredentialFileReader.cc index aedc4be..13f9a50 100644 --- a/zypp/media/CredentialFileReader.cc +++ b/zypp/media/CredentialFileReader.cc @@ -19,6 +19,10 @@ using std::endl; +#undef ZYPP_BASE_LOGGER_LOGGROUP +#define ZYPP_BASE_LOGGER_LOGGROUP "parser" + + /////////////////////////////////////////////////////////////////// namespace zypp { ///////////////////////////////////////////////////////////////// diff --git a/zypp/media/CredentialManager.cc b/zypp/media/CredentialManager.cc index a209c52..eb50cc0 100644 --- a/zypp/media/CredentialManager.cc +++ b/zypp/media/CredentialManager.cc @@ -157,12 +157,17 @@ namespace zypp const Url & url, url::ViewOption vopt) { + const string & username = url.getUsername(); for(CredentialManager::CredentialIterator it = set.begin(); it != set.end(); ++it) { - if (url.asString(vopt) == (*it)->url().asString(vopt)) - return *it; + // this ignores url params - not sure if it is good or bad... + if (url.asString(vopt).find((*it)->url().asString(vopt)) == 0) + { + if (username.empty() || username == (*it)->username()) + return *it; + } } - + return AuthData_Ptr(); } @@ -178,7 +183,9 @@ namespace zypp // if the wanted URL does not contain username, ignore that, too url::ViewOption vopt; // if (url.getUsername().empty()) - vopt = vopt - url::ViewOption::WITH_USERNAME; + vopt = vopt + - url::ViewOption::WITH_USERNAME + - url::ViewOption::WITH_QUERY_STR; // search in global credentials result = findIn(_credsGlobal, url, vopt); @@ -281,6 +288,7 @@ namespace zypp void CredentialManager::addCred(const AuthData & cred) { +#warning addCred(const AuthData & cred) not implemented // add with user callbacks } @@ -290,12 +298,7 @@ namespace zypp AuthData_Ptr c_ptr; c_ptr.reset(new AuthData(cred)); // FIX for child classes if needed if (_pimpl->_credsGlobal.insert(c_ptr).second) - { _pimpl->_globalDirty = true; - INT << "changed/new:" << cred << endl; - } - else - INT << "already there: " << cred << endl; } @@ -304,12 +307,7 @@ namespace zypp AuthData_Ptr c_ptr; c_ptr.reset(new AuthData(cred)); // FIX for child classes if needed if (_pimpl->_credsUser.insert(c_ptr).second) - { _pimpl->_userDirty = true; - INT << "changed/new:" << cred << endl; - } - else - INT << "already there: " << cred << endl; } -- 2.7.4