Checkout Tools
  • last updated 3 hours ago
Constraints: committers
Constraints: files
Constraints: dates
Add KDE 5 support to the KWallet auth provider. The --with-kwallet

option now looks for KDE 5 before looking for KDE 4. Both 4 and 5

use the same underlying storage and so passwords written by one can

be read by the other.

* build/ac-macros/kwallet.m4 (SVN_LIB_KWALLET): Detect KDE 4 and 5.

* build/ac-macros/compiler.m4 (SVN_CXX_MODE_SETUP11): New, set -std=c++11.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_password_get, kwallet_password_set): Support KDE 4 and 5.

  1. … 2 more files in changeset.
Following up on r1700740, add missing include.

Patch by: James McCoy <jamessan{_AT_}>

* subversion/libsvn_auth_kwallet/kwallet.cpp

(includes): Add svn_hash.h.

In the kwallet code: Initialize the wallet cache once, instead

of every time we get or save a password. Cache the wallet in the

parameter hash and its pool instead of the single invocation pool.

This patch is in response to an issue

Found by: James McCoy <jamessan{_AT_}>

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_terminate): Add forward definition.

(get_wallet): Register pool cleanup handler once, and only when we set

the wallet. Register cleanup on the hash pool.

(kwallet_terminate): Completely cleanup.


kwallet_password_set): Don't add another cleanup hook on every invocation.

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c,

subversion/libsvn_auth_kwallet/kwallet.cpp: Include headers from system-wide

directories before includig headers from the Subversion source tree.

Patch by: Raphael Kubo da Costa <>

  1. … 1 more file in changeset.
Fix segfault when using kwallet support.

apr_pool_cleanup_register does not accept NULL values for the callbacks.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_password_get,kwallet_password_set): Use apr_pool_cleanup_null

instead of NULL.

Patch by: Lekensteyn <>

(lines wrapped by me)

Remove a cast that is both ugly, and apparently illegal in g++ 4.7.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(q_argc, q_argv): New.

(kwallet_password_get, kwallet_password_set):

Use q_argc and q_argv instead of trying to open-code them.

Rename and redocument some private functions whose utility has grown

beyond the scope of their original refactored usage.

* subversion/include/private/svn_auth_private.h

(svn_auth__simple_creds_cache_get): Renamed (and redocumented) from

svn_auth__simple_first_creds_helper(). Callers updated.

(svn_auth__simple_creds_cache_set: Renamed (and redocumented) from

svn_auth__simple_save_creds_helper(). Callers updated.

(svn_auth__ssl_client_cert_pw_cache_get): Renamed (and redocumented) from

svn_auth__ssl_client_cert_pw_file_first_creds_helper(). Callers updated.

(svn_auth__ssl_client_cert_pw_cache_set): Renamed (and redocumented) from

svn_auth__ssl_client_cert_pw_file_save_creds_helper(). Callers updated.

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c,

* subversion/libsvn_subr/ssl_client_cert_pw_providers.c,

* subversion/libsvn_subr/macos_keychain.c,

* subversion/libsvn_subr/gpg_agent.c,

* subversion/libsvn_subr/win32_crypto.c,

* subversion/libsvn_subr/simple_providers.c,

* subversion/libsvn_auth_kwallet/kwallet.cpp

Track function renames.

  1. … 7 more files in changeset.
Fix issues 4112, GNOME keyring --non-interactive prevents passwords on

disk, and 4110, open KDE wallet not used when --non-interactive. This

also delays any GNOME unlock prompt until the keyring is accessed so

matching the KDE behvaiour.

* subversion/include/private/svn_auth_private.h

(svn_auth__password_get_t, svn_auth__simple_password_get): Add boolean

parameter, return svn_error_t.

(svn_auth__simple_password_get, svn_auth__simple_password_set,


svn_auth__ssl_client_cert_pw_set): Adjust to match new prototype.

* subversion/libsvn_auth_gnome_keyring/gnome_keyring.c

(ensure_gnome_keyring_is_unlocked): New, code factored from

functions such as simple_gnome_keyring_first_creds.

(password_get_gnome_keyring, password_set_gnome_keyring): New

prototype, do unlocked check here.

(simple_gnome_keyring_first_creds, simple_gnome_keyring_save_creds,


ssl_client_cert_pw_gnome_keyring_save_creds): Don't do unlocked check.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_password_get, kwallet_password_set): Adjust to match new

prototype, allow non-interactive access if wallet is unlocked.

* subversion/libsvn_subr/simple_providers.c

(svn_auth__simple_password_get, svn_auth__simple_password_set,


svn_auth__simple_save_creds_helper): Adjust to match new prototype.

* subversion/libsvn_subr/ssl_client_cert_pw_providers.c

(svn_auth__ssl_client_cert_pw_get, svn_auth__ssl_client_cert_pw_set,


svn_auth__ssl_client_cert_pw_file_save_creds_helper): Adjust to match

new prototype.

* subversion/libsvn_subr/win32_crypto.c

(windows_password_encrypter, windows_password_decrypter,


windows_ssl_client_cert_pw_decrypter): Adjust to match new prototype.

* subversion/libsvn_subr/macos_keychain.c

(keychain_password_set, keychain_password_get): Adjust to match new


* subversion/libsvn_subr/gpg_agent.c

(password_get_gpg_agent, password_set_gpg_agent): Adjust to match new


  1. … 7 more files in changeset.
Just padding my stats.

(Actually, doing my regular trailing whitespace removal, similar to r875968.)

* everywhere:

for extsn in c h cpp java py pl rb; do

sed -i -e 's/[ \t]*$//' `find . -name "*.$extsn" | xargs grep '[ \t]$' -l`


  1. … 166 more files in changeset.
* subversion/libsvn_auth_kwallet/kwallet.cpp

(svn_auth_get_kwallet_ssl_client_cert_pw_provider): Wrap this public function

in an extern "C" block, just like svn_auth_get_kwallet_simple_provider().

Remove some goo introduced in r878078 and follow-ups, which was related to

the Linux-specific code which has been removed in r1002144.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(): Remove unneeded #includes.


(get_wallet): Remove POOL parameter.

(kwallet_terminate, kwallet_password_get, kwallet_password_set): Adjust

users of get_wallet and INITIALIZE_APPLICATION as appropriate.

* subversion/svnsync/main.c,


(main): Don't bother setting the "qapplication-safe" parameter for

the Kwallet code, it's not needed anymore.

  1. … 2 more files in changeset.
* subversion/libsvn_auth_kwallet/kwallet.cpp

(get_parent_pid): Remove. This function is specific to Linux and relies

on a specific format of a file in the Linux /proc filesystem.

This approach has been critized in STATUS on the 1.6.x branch for quite

some time now (see the vetoed r878078 group nomination). So we should

not release it in 1.7 either.

(get_wid): Use the WINDOWID environment variable to find the X window ID

of the terminal svn is running in. This approach is reasonably portable

since it is supported by a lot of terminal emulators (and, most importantly,

by the KDE terminal emulator). Users who manually unset $WINDOWID won't see

the Kwallet window pop up in the foreground, but that is their own problem.

Also, switch to svn_cstring_atoi64() from atol() while here.

This change has been tested with KDE 4.2.4 on a Slackware 13.0 system.

Test out my new and fancy ASF commit priviledges by changing the copyright

wording in our license headers to reflect ownership by the ASF.


Change terminology to ASF, and update a link.

* subversion/libsvn_subr/opt.c

(svn_opt__print_version_info): Note that the product as a whole is

copyrighted by the ASF, and update the project website.

* everywhere:

Change license text to reflect ASF ownership.

  1. … 891 more files in changeset.
Relicense Subversion under the Apache License, Version 2.0.

* NOTICE: New.



subversion/LICENSE: Remove.

* subversion/libsvn_subr/opt.c

(svn_opt__print_version_info): Note that the product as a whole is

copyrighted by the SVN Corp, and that it contains contributions from

many people, as referenced in NOTICE.

* subversion/bindings/swig/python/LICENSE_FOR_PYTHON_BINDINGS:

Relicense the SVN parts under Apache 2.0.

* everywhere:

Change copyright notices in file headers to reflect the Apache 2.0 license.

  1. … 882 more files in changeset.
Follow-up r38004, r38014 and r38028:

* subversion/libsvn_auth_kwallet/kwallet.cpp

(get_wid): Try to get WId from 'WINDOWID' environment variable if WId wasn't

previously calculated.

(get_wid, get_wallet): WId is usually unsigned, so replace '-1' with '1'.

Suggested by: peters

Follow-up to r38004 and r38014:

* Remove check for setenv().

* subversion/libsvn_auth_kwallet/kwallet.cpp

(INITIALIZE_APPLICATION): Check 'svn:auth:qapplication-safe' parameter

instead of 'SVN_QAPPLICATION_SAFE' environment variable.

(get_wid): Add 'parameters' argument. Check 'svn:auth:qapplication-safe'

parameter instead of 'SVN_QAPPLICATION_SAFE' environment variable.

(get_wallet): Update call to get_wid().

* subversion/svn/main.c


* subversion/svnsync/main.c

(main): Set 'svn:auth:qapplication-safe' parameter instead of

'SVN_QAPPLICATION_SAFE' environment variable.

Suggested by: rhuijben

  1. … 3 more files in changeset.
Follow-up to r38004:

* Add check for setenv() which defines HAVE_SETENV when setenv()

is available.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(get_parent_pid): Simplify.

(get_wid): Rename 'subpool' to 'iterpool' and actually use it.

* subversion/svn/main.c


* subversion/svnsync/main.c

(main): Check HAVE_SETENV instead of __USE_BSD.

  1. … 3 more files in changeset.
Make KWallet window attached to terminal window.

(Currently implemented only on Linux.)

* subversion/libsvn_auth_kwallet/kwallet.cpp


(get_application_name): Simplify.

(get_parent_pid, get_wid): New function.

(get_wallet): Add 'pool' argument. Use WId retrieved by get_wid().

(kwallet_terminate): Update call to get_wallet().

(kwallet_password_get, kwallet_password_set): Use INITIALIZE_APPLICATION.

Update calls to get_wallet().

* subversion/svn/main.c


* subversion/svnsync/main.c

(main): Set SVN_QAPPLICATION_SAFE environment variable.

  1. … 2 more files in changeset.
Fix segmentation fault with KDE 4.2.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(): Include <QtCore/QCoreApplication>.

(kwallet_password_get, kwallet_password_set): Create a QCoreApplication

instance if it doesn't exist.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_password_get): Fix a typo.

Allow to use unique Subversion application name when using KWallet.

* subversion/include/svn_config.h


* subversion/libsvn_subr/config_file.c

(svn_config_ensure): Update default 'config' file.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(get_application_name): New.

(kwallet_terminate): Simplify.

(kwallet_password_get, kwallet_password_set): Use get_application_name().

  1. … 2 more files in changeset.
Remove all subtree mergeinfo from trunk and feature branches.


  1. … 137 more files in changeset.
Follow-up to r34222:

Use apr_pool_cleanup_register() to register kwallet_terminate() to be called

when the pool is destroyed.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_terminate): Update.

(kwallet_password_get, kwallet_password_set): Call


(kwallet_simple_provider, kwallet_ssl_client_cert_pw_provider): Update.

Suggested by: rhuijben

Don't try to open wallet if opening of wallet previously failed.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(get_wallet): Don't try to open wallet if 'parameters' of authentication

baton contain "kwallet-opening-failed". Store "kwallet-opening-failed" in

'parameters' of authentication baton if opening of wallet failed.

Properly terminate KWallet authentication providers.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_password_get, kwallet_password_set): Set "kwallet-initialized" in

'parameters' of authentication baton after opening wallet.

Delete some comments.

(kwallet_terminate): New function which disconnects Subversion from KWallet

and deletes pointer to wallet.

(kwallet_simple_provider, kwallet_ssl_client_cert_pw_provider): Initialize

terminate_provider() field with kwallet_terminate().

Follow-up to r34130:

Store pointer to wallet in parameters of authentication baton instead of using

global variable.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(wallet): Delete.

(get_wallet): New.

(kwallet_password_get, kwallet_password_set): Use get_wallet().

Found by: gstein

Merge the "tc-resolve" branch to trunk. This makes "resolved" handle tree

conflicts per victim rather than per parent.

Below are all the pertinent parts of log messages on the branch, partially

edited for grouping and to remove some irrelevant details of intermediate



* subversion/libsvn_wc/adm_ops.c

(resolve_conflict_on_entry): Do not clear tree conflicts that are recorded

in this entry. Do not send a notification, but instead report (through a

new boolean output parameter) whether something was resolved.

(resolve_found_entry_callback): Resolve any tree conflict for this victim.

Send a notification if any conflict was resolved.

(svn_wc_resolved_conflict4): Use an entries-walker function that visits

unversioned tree conflict victims as well as ordinary entries.


Allow sched-deleted nodes to be resolved (fixes 15).

* subversion/libsvn_wc/adm_ops.c


Allow sched-deleted nodes to be resolved.

* subversion/libsvn_wc/entries.c


Only try to retrieve the ADM_ACCESS in presence of tree-conflicts.


Get the ADM_ACCESS on the parent instead of on the node itself, thus

avoid an error upon an unversioned tree-conflict victim.

### TODO: check for greater subdir depths.

Fix a crash in del_tree_conflict().

* subversion/libsvn_wc/tree_conflicts.c


Only write and run the log if LOG_ACCUM is not NULL.


Fix per-victim "resolved" on directory tree-conflict victims.

* subversion/libsvn_client/resolved.c


Get the ADM_ACCESS on the target's parent directory to be able to resolve

tree-conflicted directories. Extend the ADM_LOCK_LEVEL to still be able

to lock the target node for text/prop conflicts.

* subversion/include/svn_client.h

(svn_client_resolve): Comment.

* subversion/libsvn_wc/adm_ops.c


Completely split tree-conflict resolution from text and prop conflicts,

because tree-conflicts need a different ADM_ACCESS when handling

directories. Change use of RESOLVED to already reflect the sanity-check,

and sanity-check separately for tree-conflicts. Clarify some conditions.

Also remove the debugging conditions that exited prematurely.

* subversion/libsvn_wc/tree_conflicts.c


Extend an assertion by a NULL check. Add another assertion to make sure

the VICTIM_PATH is a child node of the ADM_ACCESS' path.

* subversion/libsvn_wc/tree_conflicts.h






Comments, add "@since New in 1.6.".


Make the tree-conflict-enabled WC walker cope with an unversioned target.

* subversion/libsvn_wc/entries.c,


(svn_wc__walk_entries_and_tc): Allow the target to be unversioned, and

allow adm_access to be null.


Fix the behaviour of "resolved" that descends into unversioned

tree-conflicts even if the depth doesn't allow that.

* subversion/libsvn_wc/entries.c

(visit_tc_too_baton_t): Add TARGET and DEPTH fields.


Use new TARGET and DEPTH fields in the baton to determine whether to

descend into unversioned tree-conflicted children of a directory.

(svn_wc__walk_entries_and_tc): Supply TARGET and DEPTH to the baton.



* subversion/tests/cmdline/

(tree_conflicts_resolved): Adjust for resolving per victim.

* subversion/tests/cmdline/

(tree_conflicts_resolved_depth_empty, tree_conflicts_resolved_depth_files,


tree_conflicts_resolved_depth_infinity, make_depth_tree_conflicts):

Four new tests and a helper. The tests are XFAIL because the helper

make_depth_tree_conflicts() exposes an error in update code that

is not related to "resolved". Separate trials suggest that these

tests will pass as soon as the update issue is resolved. See

inline comment in make_depth_tree_conflicts() marked "##".

(test_list): Add the new tests.

* subversion/tests/cmdline/

(merge_history_repos): Resolve the victim, not the parent.

* subversion/tests/cmdline/

(ensure_tree_conflict): Resolve the victim, not the parent.

Make a "resolved" test also try run "resolved" on the victim's

parent first, to make sure it doesn't resolve its children.

Remove comment about not supporting "resolved" per victim.

* subversion/tests/cmdline/

(another_hudson_problem): Resolve the victim, not the parent.

  1. … 27 more files in changeset.
* subversion/libsvn_auth_kwallet/kwallet.cpp

(kwallet_disconnect): Delete this evil, unpredictable function.

Don't reopen already opened wallet.

* subversion/libsvn_auth_kwallet/kwallet.cpp

(wallet): New.

(kwallet_password_get, kwallet_password_set): Open wallet only when wallet

wasn't opened earlier.

(kwallet_disconnect): New.

Improve names and values of 2 definitions.

* subversion/include/svn_auth.h





(SVN_AUTH_PARAM_CONFIG): Provide for compatibility with the 1.5 API.




* subversion/libsvn_auth_kwallet/kwallet.cpp


* subversion/libsvn_ra_neon/session.c


* subversion/libsvn_ra_serf/serf.c


* subversion/libsvn_subr/simple_providers.c

(svn_auth__simple_first_creds_helper, prompt_for_simple_creds):

* subversion/libsvn_subr/ssl_client_cert_providers.c


* subversion/libsvn_subr/ssl_client_cert_pw_providers.c

(svn_auth__ssl_client_cert_pw_file_first_creds_helper): Update.

  1. … 6 more files in changeset.