summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiankun Miao <qiankun.miao@intel.com>2010-09-17 13:49:06 +0800
committerQiankun Miao <qiankun.miao@intel.com>2010-09-30 12:55:08 +0800
commit28ca050bfcf21a8227bdd4753f599c3e669be9f9 (patch)
treeac7d96f7f4eec23820c0c866d68863a053c5c913
parent8a734d0e6ca48d8b55ae662296d37dd3c603ad13 (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.cpp15
-rw-r--r--src/syncevo/Cmdline.cpp38
-rw-r--r--src/syncevo/SyncConfig.cpp9
-rw-r--r--src/syncevo/SyncConfig.h7
-rwxr-xr-xtest/test-dbus.py3
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",