Hello Gunnar, could you please test that this works for you? It's already committed in r1865, so if you're on HEAD you won't need that.
Regards, Phil -- Versioning your /etc, /home or even your whole installation? Try fsvs (fsvs.tigris.org)!
Index: src/options.h =================================================================== --- src/options.h (Revision 1864) +++ src/options.h (Arbeitskopie) @@ -105,6 +105,9 @@ enum opt__settings_e { /** The base path of the configuration area. * See \ref o_conf. */ OPT__CONF_PATH, + /** The config directory to use. + * See \ref o_configdir. */ + OPT__CONFIG_DIR, /** End of enum marker. */ OPT__COUNT Index: src/interface.h =================================================================== --- src/interface.h (Revision 1864) +++ src/interface.h (Arbeitskopie) @@ -43,6 +43,9 @@ #define DEFAULT_WAA_PATH "/var/spool/fsvs" /** The default CONF path. */ #define DEFAULT_CONF_PATH "/etc/fsvs" +/** The default config directory (for authentication data), + * relative to $FSVS_CONF. */ +#define DEFAULT_CONFIGDIR_SUB "/auth/" /** \name List of environment variables used for a chroot jail. Index: src/waa.c =================================================================== --- src/waa.c (Revision 1864) +++ src/waa.c (Arbeitskopie) @@ -158,6 +158,8 @@ inline void waa___init_path(enum opt__se int waa__init(void) { int status; + char *cp; + int len; status=0; @@ -245,6 +247,21 @@ int waa__init(void) opt__set_int( OPT__SOFTROOT, PRIO_MUSTHAVE, opt__get_int(OPT__SOFTROOT)); + + if (opt__get_int(OPT__CONFIG_DIR)==0) + { + len=opt__get_int(OPT__CONF_PATH)+strlen(DEFAULT_CONFIGDIR_SUB)+1; + + cp=malloc(len); + STOPIF_ENOMEM(!cp); + + strcpy(cp, opt__get_string(OPT__CONF_PATH)); + strcat(cp, DEFAULT_CONFIGDIR_SUB); + + opt__set_string(OPT__CONFIG_DIR, PRIO_MUSTHAVE, cp); + opt__set_int(OPT__CONFIG_DIR, PRIO_MUSTHAVE, len-1); + } + ex: return status; } Index: src/dox/options.dox =================================================================== --- src/dox/options.dox (Revision 1864) +++ src/dox/options.dox (Arbeitskopie) @@ -17,6 +17,7 @@ FSVS currently knows:<UL> <LI>\c commit_to - \ref o_commit_to <LI>\c conflict - \ref o_conflict <LI>\c conf - \ref o_conf. +<LI>\c config_dir - \ref o_configdir. <LI>\c copyfrom_exp - \ref o_copyfrom_exp <LI>\c debug_output - \ref o_debug_output <LI>\c delay - \ref o_delay @@ -584,5 +585,20 @@ howto_backup_recovery for further discus variables (\c $FSVS_CONF resp. \c $FSVS_WAA) or as command line parameter; settings in config files are ignored. + +\section o_configdir Configuration directory for the subversion libraries + +This path specifies where the subversion libraries should take their +configuration data from; the most important aspect of that is authentication +data, especially for certificate authentication. + +The default value is \c $FSVS_CONF/auth/. + +\c /etc/fsvs/config could have eg. +\code + config_dir=/root/.subversion +\endcode + + */ // vi: filetype=doxygen spell spelllang=en_gb formatoptions+=ta : Index: src/racallback.c =================================================================== --- src/racallback.c (Revision 1864) +++ src/racallback.c (Arbeitskopie) @@ -18,7 +18,6 @@ #include <subversion-1/svn_ra.h> #include <subversion-1/svn_auth.h> #include <subversion-1/svn_client.h> -#include <subversion-1/svn_config.h> #include <subversion-1/svn_cmdline.h> @@ -41,13 +40,12 @@ svn_error_t *cb__init(apr_pool_t *pool) svn_config_t *cfg; - status=0; - STOPIF_SVNERR(svn_config_get_config, - (&cfg_hash, NULL, pool) ); + STOPIF( hlp__get_svn_config(&cfg_hash), NULL); cfg = apr_hash_get(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING); + /* Set up Authentication stuff. */ STOPIF_SVNERR( svn_cmdline_setup_auth_baton, (&cb__cb_table.auth_baton, @@ -55,8 +53,8 @@ svn_error_t *cb__init(apr_pool_t *pool) opt__get_int(OPT__AUTHOR) ? opt__get_string(OPT__AUTHOR) : NULL, NULL, /* Password */ - NULL, /* Config dir */ - 1, /* no_auth_cache */ + opt__get_string(OPT__CONFIG_DIR), + 0, /* no_auth_cache */ cfg, NULL, /* cancel function */ NULL, /* cancel baton */ Index: src/url.c =================================================================== --- src/url.c (Revision 1864) +++ src/url.c (Arbeitskopie) @@ -12,6 +12,7 @@ #include <ctype.h> #include <sys/select.h> + #include "url.h" #include "waa.h" #include "cache.h" @@ -868,6 +869,8 @@ int url__open_session(svn_ra_session_t * { int status; svn_error_t *status_svn; + apr_hash_t *cfg; + status=0; if (!current_url->pool) @@ -877,13 +880,15 @@ int url__open_session(svn_ra_session_t * "no pool"); } + STOPIF( hlp__get_svn_config(&cfg), NULL); + /** Try svn_ra_reparent() */ if (!current_url->session) { STOPIF_SVNERR_EXTRA( svn_ra_open, (& current_url->session, current_url->url, &cb__cb_table, NULL, /* cbtable, cbbaton, */ - NULL, /* config hash */ + cfg, /* config hash */ current_url->pool), "Opening URL '%s' brought an error:", current_url->url); Index: src/helper.c =================================================================== --- src/helper.c (Revision 1864) +++ src/helper.c (Arbeitskopie) @@ -19,6 +19,7 @@ #include <pwd.h> #include <apr_file_io.h> #include <apr_md5.h> +#include <subversion-1/svn_config.h> #include "global.h" #include "waa.h" @@ -1833,3 +1834,26 @@ int hlp__rename_to_unique(char *fn, char ex: return status; } + + +/** -. + * Caches the result, so that the configuration is only fetched a single time. + */ +int hlp__get_svn_config(apr_hash_t **config) +{ + int status; + svn_error_t *status_svn; + static apr_hash_t *cfg=NULL; + + + status=0; + /* We assume that a config hash as NULL will never be returned. + * (Else we'd try to fetch it more than once.) */ + if (!cfg) + STOPIF_SVNERR( svn_config_get_config, + (&cfg, opt__get_string(OPT__CONFIG_DIR), global_pool)); + + *config=cfg; +ex: + return status; +} Index: src/helper.h =================================================================== --- src/helper.h (Revision 1864) +++ src/helper.h (Arbeitskopie) @@ -163,4 +163,8 @@ int hlp__rename_to_unique(char *fn, char const char **unique_name, apr_pool_t *pool); + +/** Reads the subversion config file(s), found by \ref o_configdir. */ +int hlp__get_svn_config(apr_hash_t **config); + #endif Index: src/options.c =================================================================== --- src/options.c (Revision 1864) +++ src/options.c (Arbeitskopie) @@ -225,6 +225,11 @@ struct opt__list_t opt__list[OPT__COUNT] .cp_val=DEFAULT_CONF_PATH, .i_val=strlen(DEFAULT_CONF_PATH), */ .cp_val=NULL, .i_val=0, }, + [OPT__CONFIG_DIR] = { + .name="config_dir", .parse=opt___store_string, + .cp_val=NULL, .i_val=0, + }, + [OPT__EMPTY_COMMIT] = { .name="empty_commit", .i_val=OPT__YES, Index: CHANGES =================================================================== --- CHANGES (Revision 1864) +++ CHANGES (Arbeitskopie) @@ -2,6 +2,7 @@ Changes since 1.1.16 - New "uncopy" command, to disambiguate "revert". Manually added or "prop-set" entries are kept known. - Small cleanups and documentation updates. +- New option "config_dir", important for client certificate authentication. - Performance fix for "fsvs diff -rX:Y entry" - don't diff the whole working copy, only the given entries. - "fsvs info" for the working copy root now prints the revision of the Index: example/setup.sh =================================================================== --- example/setup.sh (Revision 1864) +++ example/setup.sh (Arbeitskopie) @@ -41,7 +41,7 @@ else # Create local filelist, to make "fsvs ps" work. fsvs checkout file://$location/trunk/etc - fsvs ignore '/etc/**.dpkg-old' '/etc/**.dpkg-bak' + fsvs ignore '/etc/**.dpkg-old' '/etc/**.dpkg-new' '/etc/**.dpkg-dist' '/etc/**.dpkg-bak' fsvs ignore '/etc/**.bak' '/etc/**.old' '/etc/**~' '/**.swp' # easy to remake, no big deal (?) fsvs ignore '/etc/ssh/ssh_host_*key'
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]