- when looking for credentials, use wanted_url.startsWith(stored_url)
authorJan Kupec <jkupec@suse.cz>
Tue, 23 Sep 2008 11:35:21 +0000 (11:35 +0000)
committerJan Kupec <jkupec@suse.cz>
Tue, 23 Sep 2008 11:35:21 +0000 (11:35 +0000)
tests/media/CredentialManager_test.cc
zypp/media/CredentialFileReader.cc
zypp/media/CredentialManager.cc

index a007178..3af6e66 100644 (file)
@@ -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);
+}
index aedc4be..13f9a50 100644 (file)
 
 using std::endl;
 
+#undef ZYPP_BASE_LOGGER_LOGGROUP
+#define ZYPP_BASE_LOGGER_LOGGROUP "parser"
+
+
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 { /////////////////////////////////////////////////////////////////
index a209c52..eb50cc0 100644 (file)
@@ -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;
   }