Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(77)

Unified Diff: subversion/libsvn_auth_kwallet/kwallet.cpp

Issue 989: kwallet final branch SVN Base: http://svn.collab.net/repos/svn/trunk
Patch Set: Created 6 months, 3 weeks ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side by-side-diff with in-line comments
Download patch
Index: subversion/libsvn_auth_kwallet/kwallet.cpp
===================================================================
--- subversion/libsvn_auth_kwallet/kwallet.cpp (.../trunk) (revision 0)
+++ subversion/libsvn_auth_kwallet/kwallet.cpp (.../branches/kwallet) (revision 31195)
@@ -0,0 +1,220 @@
+/*
+ * kwallet.cpp: KWallet provider for SVN_AUTH_CRED_SIMPLE
+ *
+ * ====================================================================
+ * Copyright (c) 2008 CollabNet. All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals. For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ */
+
+/* ==================================================================== */
+
+
+
+/*** Includes. ***/
+
+#include <apr_pools.h>
+#include "svn_auth.h"
+#include "svn_auth_kwallet.h"
+#include "svn_error.h"
+#include "svn_version.h"
+
+#include "private/svn_auth_private.h"
+
+#include "svn_private_config.h"
+
+#include <QtCore/QString>
+#include <QtGui/QWidget>
+
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kwallet.h>
+
+#define SVN_AUTH__KWALLET_PASSWORD_TYPE "kwallet"
+
+/*-----------------------------------------------------------------------*/
+/* KWallet simple provider, puts passwords in KWallet */
+/*-----------------------------------------------------------------------*/
+
+/* Implementation of svn_auth__password_get_t that retrieves
+ the password from KWallet. */
+static svn_boolean_t
+kwallet_password_get(const char **password,
+ apr_hash_t *creds,
+ const char *realmstring,
+ const char *username,
+ svn_boolean_t non_interactive,
+ apr_pool_t *pool)
+{
+ if (non_interactive)
sussman 2008/05/15 15:14:41 This routine has a few 'if' blocks where the curly
+ {
+ return FALSE;
+ }
+
+ if (! KWallet::Wallet::isEnabled())
+ {
+ return FALSE;
+ }
+
+ KCmdLineArgs::init(1,
+ (char *[1]) { "svn" },
+ "Subversion",
+ "subversion",
+ ki18n("Subversion"),
+ SVN_VER_NUMBER,
+ ki18n("Version control system"),
+ KCmdLineArgs::CmdLineArgKDE);
+ KApplication application;
+ QWidget widget;
+ WId wid = widget.winId();
+ svn_boolean_t ret = FALSE;
+ QString wallet_name = KWallet::Wallet::NetworkWallet();
+ QString folder = QString::fromUtf8("Subversion");
+ QString key = QString::fromUtf8(username) + "@" + QString::fromUtf8(realmstring);
sussman 2008/05/15 15:14:41 Line is > 80 columns.
+ if (! KWallet::Wallet::keyDoesNotExist(wallet_name, folder, key))
+ {
+ KWallet::Wallet *wallet = KWallet::Wallet::openWallet(wallet_name, wid, KWallet::Wallet::Synchronous);
sussman 2008/05/15 15:14:41 Same here.
+ if (wallet)
+ {
+ if (wallet->hasFolder(folder))
+ {
+ if (wallet->setFolder(folder))
+ {
+ QString q_password;
+ if (wallet->readPassword(key, q_password) == 0);
+ {
+ *password = apr_pstrmemdup(pool, q_password.toUtf8().data(), q_password.size());
sussman 2008/05/15 15:14:41 Same here.
+ ret = TRUE;
+ }
+ }
+ }
+ }
+ }
+ KWallet::Wallet::closeWallet(wallet_name, false);
+ return ret;
+}
+
+/* Implementation of svn_auth__password_set_t that stores
+ the password in KWallet. */
+static svn_boolean_t
+kwallet_password_set(apr_hash_t *creds,
+ const char *realmstring,
+ const char *username,
+ const char *password,
+ svn_boolean_t non_interactive,
+ apr_pool_t *pool)
+{
+ if (non_interactive)
sussman 2008/05/15 15:14:41 This function also has curly-brace indentation pro
+ {
+ return FALSE;
+ }
+
+ if (! KWallet::Wallet::isEnabled())
+ {
+ return FALSE;
+ }
+
+ KCmdLineArgs::init(1,
+ (char *[1]) { "svn" },
+ "Subversion",
+ "subversion",
+ ki18n("Subversion"),
+ SVN_VER_NUMBER,
+ ki18n("Version control system"),
+ KCmdLineArgs::CmdLineArgKDE);
+ KApplication application;
+ QWidget widget;
+ WId wid = widget.winId();
+ svn_boolean_t ret = FALSE;
+ QString q_password = QString::fromUtf8(password);
+ QString wallet_name = KWallet::Wallet::NetworkWallet();
+ QString folder = QString::fromUtf8("Subversion");
+ KWallet::Wallet *wallet = KWallet::Wallet::openWallet(wallet_name, wid, KWallet::Wallet::Synchronous);
sussman 2008/05/15 15:14:41 Line >80 columns.
+ if (wallet)
+ {
+ if (! wallet->hasFolder(folder))
+ {
+ wallet->createFolder(folder);
+ }
+ if (wallet->hasFolder(folder))
+ {
+ if (wallet->setFolder(folder))
+ {
+ QString key = QString::fromUtf8(username) + "@" + QString::fromUtf8(realmstring);
sussman 2008/05/15 15:14:41 Same here.
+ if (wallet->writePassword(key, q_password) == 0)
+ {
+ ret = TRUE;
+ }
+ }
+ }
+ }
+ KWallet::Wallet::closeWallet(wallet_name, false);
+ return ret;
+}
+
+/* Get cached encrypted credentials from the simple provider's cache. */
+static svn_error_t *
+kwallet_simple_first_creds(void **credentials,
+ void **iter_baton,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ return svn_auth__simple_first_creds_helper(credentials,
+ iter_baton,
+ provider_baton,
+ parameters,
+ realmstring,
+ kwallet_password_get,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
+}
+
+/* Save encrypted credentials to the simple provider's cache. */
+static svn_error_t *
+kwallet_simple_save_creds(svn_boolean_t *saved,
+ void *credentials,
+ void *provider_baton,
+ apr_hash_t *parameters,
+ const char *realmstring,
+ apr_pool_t *pool)
+{
+ return svn_auth__simple_save_creds_helper(saved, credentials,
+ provider_baton,
+ parameters,
+ realmstring,
+ kwallet_password_set,
+ SVN_AUTH__KWALLET_PASSWORD_TYPE,
+ pool);
+}
+
+static const svn_auth_provider_t kwallet_simple_provider = {
+ SVN_AUTH_CRED_SIMPLE,
+ kwallet_simple_first_creds,
+ NULL,
+ kwallet_simple_save_creds
+};
+
+/* Public API */
+extern "C" {
+void
+svn_auth_get_kwallet_simple_provider(svn_auth_provider_object_t **provider,
+ apr_pool_t *pool)
+{
+ svn_auth_provider_object_t *po =
+ static_cast<svn_auth_provider_object_t *> (apr_pcalloc(pool, sizeof(*po)));
+
+ po->vtable = &kwallet_simple_provider;
+ *provider = po;
+}
+}
Property changes on: subversion/libsvn_auth_kwallet/kwallet.cpp
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk/subversion/libsvn_subr/simple_providers_cpp.cpp:r30711-31067
Merged /branches/svnserve-logging/subversion/libsvn_subr/simple_providers_cpp.cpp:r29754-30819
Merged /branches/1.5.x-r30215/subversion/libsvn_subr/simple_providers_cpp.cpp:r30238
Merged /branches/dont-save-plaintext-passwords-by-default/subversion/libsvn_subr/simple_providers_cpp.cpp:r30654-31044
Merged /branches/log-g-performance/subversion/libsvn_subr/simple_providers_cpp.cpp:r30867-30958
Merged /branches/svn-mergeinfo-enhancements/subversion/libsvn_subr/simple_providers_cpp.cpp:r30045-30214
Merged /branches/diff-callbacks3/subversion/libsvn_subr/simple_providers_cpp.cpp:r29985-30687
Added: svn:eol-style
+ native
Property changes on: subversion/libsvn_auth_kwallet
___________________________________________________________________
Added: svn:ignore
+ Debug
Release
*.lo
*.la
.libs
*.o
*~
.*~
libsvn_auth_kwallet.def

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld r373