diff options
author | Qiankun Miao <qiankun.miao@intel.com> | 2010-09-17 13:49:06 +0800 |
---|---|---|
committer | Qiankun Miao <qiankun.miao@intel.com> | 2010-09-30 12:55:08 +0800 |
commit | 28ca050bfcf21a8227bdd4753f599c3e669be9f9 (patch) | |
tree | ac7d96f7f4eec23820c0c866d68863a053c5c913 | |
parent | 8a734d0e6ca48d8b55ae662296d37dd3c603ad13 (diff) |
keyring: add keyring property (BMC#6368)dbus-testing
Dbus-server uses gnome-keyring to save password. There will be a pops
up dialog to access keyring, but it's unavailable in current chroot
environment. So, added new property "GnomeKeyring". By setting
GnomeKeyring=0 to turn off keyring in the chroot
environment.
-rw-r--r-- | src/syncevo-dbus-server.cpp | 15 | ||||
-rw-r--r-- | src/syncevo/Cmdline.cpp | 38 | ||||
-rw-r--r-- | src/syncevo/SyncConfig.cpp | 9 | ||||
-rw-r--r-- | src/syncevo/SyncConfig.h | 7 | ||||
-rwxr-xr-x | test/test-dbus.py | 3 |
5 files changed, 56 insertions, 16 deletions
diff --git a/src/syncevo-dbus-server.cpp b/src/syncevo-dbus-server.cpp index 8e2e6acb..c48d7855 100644 --- a/src/syncevo-dbus-server.cpp +++ b/src/syncevo-dbus-server.cpp @@ -2742,6 +2742,21 @@ bool DBusUserInterface::savePassword(const string &passwordName, const ConfigPasswordKey &key) { #ifdef USE_GNOME_KEYRING + string useKeyring = getUseKeyring(); + + size_t pos = useKeyring.find(':'); + if (pos != useKeyring.npos) { + useKeyring.resize(pos); + } + + if (boost::iequals(useKeyring, "f") || + boost::iequals(useKeyring, "0") || + boost::iequals(useKeyring, "off") || + boost::iequals(useKeyring, "false") || + boost::iequals(useKeyring, "no")) { + return false; + } + /* It is possible to let CmdlineSyncClient decide which of fields in ConfigPasswordKey it would use * but currently only use passed key instead */ guint32 itemId; diff --git a/src/syncevo/Cmdline.cpp b/src/syncevo/Cmdline.cpp index ef3f4d64..75f6e00e 100644 --- a/src/syncevo/Cmdline.cpp +++ b/src/syncevo/Cmdline.cpp @@ -311,29 +311,37 @@ bool Cmdline::parseBool(int opt, const char *longName, const char *shortName, bool &ok) { string option = m_argv[opt]; - string param; - size_t pos = option.find('='); - if (pos != option.npos) { - param = option.substr(pos + 1); - option.resize(pos); + string paramFirst, paramSecond; + size_t posEqual = option.find('='); + if (posEqual != option.npos) { + size_t posColon = option.find(':'); + if (posColon != option.npos) { + paramFirst = option.substr(posEqual+1, posColon - posEqual - 1); + paramSecond = option.substr(posColon+1); + } else { + paramFirst = option.substr(posEqual + 1); + } + option.resize(posEqual); } if ((longName && boost::iequals(option, longName)) || (shortName && boost::iequals(option, shortName))) { ok = true; - if (param.empty()) { + if (paramFirst.empty()) { value = def; - } else if (boost::iequals(param, "t") || - boost::iequals(param, "1") || - boost::iequals(param, "true") || - boost::iequals(param, "yes")) { + } else if (boost::iequals(paramFirst, "t") || + boost::iequals(paramFirst, "1") || + boost::iequals(paramFirst, "on") || + boost::iequals(paramFirst, "true") || + boost::iequals(paramFirst, "yes")) { value = true; - } else if (boost::iequals(param, "f") || - boost::iequals(param, "0") || - boost::iequals(param, "false") || - boost::iequals(param, "no")) { + } else if (boost::iequals(paramFirst, "f") || + boost::iequals(paramFirst, "0") || + boost::iequals(paramFirst, "off") || + boost::iequals(paramFirst, "false") || + boost::iequals(paramFirst, "no")) { value = false; } else { - usage(true, string("parameter in '") + m_argv[opt] + "' must be 1/t/true/yes or 0/f/false/no"); + usage(true, string("parameter in '") + m_argv[opt] + "' must be 1/t/true/yes:GNOME/KDE or 0/f/false/no:GNOME/KDE"); ok = false; } // was our option diff --git a/src/syncevo/SyncConfig.cpp b/src/syncevo/SyncConfig.cpp index f89187b8..ab9e72c9 100644 --- a/src/syncevo/SyncConfig.cpp +++ b/src/syncevo/SyncConfig.cpp @@ -1182,6 +1182,10 @@ static BoolConfigProperty syncPropConsumerReady("ConsumerReady", "of configurations offered to users.\n" "Has no effect in a user's server configuration.\n", "0"); +static ConfigProperty syncPropUseKeyring("keyring", + "enable or disable keyring.\n" + "options (case insensitive): yes/y/on/1:GNOME/KDE, no/n/off/0:GNOME/KDE\n", + "yes:GNOME"); static ULongConfigProperty syncPropHashCode("HashCode", "used by the SyncML library internally; do not modify"); @@ -1298,6 +1302,7 @@ ConfigPropertyRegistry &SyncConfig::getRegistry() registry.push_back(&syncPropWebURL); registry.push_back(&syncPropIconURI); registry.push_back(&syncPropConsumerReady); + registry.push_back(&syncPropUseKeyring); registry.push_back(&syncPropHashCode); registry.push_back(&syncPropConfigDate); registry.push_back(&syncPropNonce); @@ -1318,6 +1323,7 @@ ConfigPropertyRegistry &SyncConfig::getRegistry() // global sync properties syncPropDefaultPeer.setSharing(ConfigProperty::GLOBAL_SHARING); + syncPropUseKeyring.setSharing(ConfigProperty::GLOBAL_SHARING); // peer independent sync properties syncPropLogDir.setSharing(ConfigProperty::SOURCE_SET_SHARING); @@ -1585,6 +1591,9 @@ void SyncConfig::setSyncMLVersion(const string &value, bool temporarily) { syncP string SyncConfig::getPeerName() const { return syncPropPeerName.getProperty(*getNode(syncPropPeerName)); } void SyncConfig::setPeerName(const string &name) { syncPropPeerName.setProperty(*getNode(syncPropPeerName), name); } +string SyncConfig::getUseKeyring() const { return syncPropUseKeyring.getProperty(*getNode(syncPropUseKeyring)); } +void SyncConfig::setUseKeyring(const string &value) { syncPropUseKeyring.setProperty(*getNode(syncPropUseKeyring), value); } + bool SyncConfig::getPrintChanges() const { return syncPropPrintChanges.getPropertyValue(*getNode(syncPropPrintChanges)); } void SyncConfig::setPrintChanges(bool value, bool temporarily) { syncPropPrintChanges.setProperty(*getNode(syncPropPrintChanges), value, temporarily); } std::string SyncConfig::getWebURL() const { return syncPropWebURL.getProperty(*getNode(syncPropWebURL)); } diff --git a/src/syncevo/SyncConfig.h b/src/syncevo/SyncConfig.h index e01a4b5f..74e80458 100644 --- a/src/syncevo/SyncConfig.h +++ b/src/syncevo/SyncConfig.h @@ -1317,6 +1317,13 @@ class SyncConfig { virtual void setPeerName(const string &name); /** + * get and set keyring status + * used to control retrieving and saving password in keyring + */ + virtual string getUseKeyring() const; + virtual void setUseKeyring(const string &value); + + /** * The Device ID of our peer. Typically only relevant when the * peer is a client. Servers don't have a Device ID, just some * unique way of contacting them. diff --git a/test/test-dbus.py b/test/test-dbus.py index 27a2d14f..79719b97 100755 --- a/test/test-dbus.py +++ b/test/test-dbus.py @@ -1766,7 +1766,8 @@ class TestConnection(unittest.TestCase, DBusUtil): "username" : "test", "PeerIsClient" : "1", "RetryInterval" : "1", - "RetryDuration" : "10" + "RetryDuration" : "10", + "GnomeKeyring" : "0" }, "source/addressbook" : { "sync" : "two-way", "type" : "addressbook", |