Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_subr/config_file.c view on Meta::CPAN
default:
if (svn_stringbuf_isempty(ctx->section))
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
"line %d: Section header expected",
ctx->line);
else if (count != 0)
return svn_error_createf(SVN_ERR_MALFORMED_FILE, NULL,
"line %d: Option expected",
ctx->line);
else
SVN_ERR(parse_option(&ch, ctx, scratch_pool));
break;
}
}
while (ch != EOF);
return SVN_NO_ERROR;
}
/* Helper for ensure_auth_dirs: create SUBDIR under AUTH_DIR, iff
SUBDIR does not already exist, but ignore any errors. Use POOL for
temporary allocation. */
static void
ensure_auth_subdir(const char *auth_dir,
const char *subdir,
apr_pool_t *pool)
{
svn_error_t *err;
const char *subdir_full_path;
svn_node_kind_t kind;
subdir_full_path = svn_dirent_join(auth_dir, subdir, pool);
err = svn_io_check_path(subdir_full_path, &kind, pool);
if (err || kind == svn_node_none)
{
svn_error_clear(err);
svn_error_clear(svn_io_dir_make(subdir_full_path, APR_OS_DEFAULT, pool));
}
}
/* Helper for svn_config_ensure: see if ~/.subversion/auth/ and its
subdirs exist, try to create them, but don't throw errors on
failure. PATH is assumed to be a path to the user's private config
directory. */
static void
ensure_auth_dirs(const char *path,
apr_pool_t *pool)
{
svn_node_kind_t kind;
const char *auth_dir;
svn_error_t *err;
/* Ensure ~/.subversion/auth/ */
auth_dir = svn_dirent_join(path, SVN_CONFIG__AUTH_SUBDIR, pool);
err = svn_io_check_path(auth_dir, &kind, pool);
if (err || kind == svn_node_none)
{
svn_error_clear(err);
/* 'chmod 700' permissions: */
err = svn_io_dir_make(auth_dir,
(APR_UREAD | APR_UWRITE | APR_UEXECUTE),
pool);
if (err)
{
/* Don't try making subdirs if we can't make the top-level dir. */
svn_error_clear(err);
return;
}
}
/* If a provider exists that wants to store credentials in
~/.subversion, a subdirectory for the cred_kind must exist. */
ensure_auth_subdir(auth_dir, SVN_AUTH_CRED_SIMPLE, pool);
ensure_auth_subdir(auth_dir, SVN_AUTH_CRED_USERNAME, pool);
ensure_auth_subdir(auth_dir, SVN_AUTH_CRED_SSL_SERVER_TRUST, pool);
ensure_auth_subdir(auth_dir, SVN_AUTH_CRED_SSL_CLIENT_CERT_PW, pool);
}
svn_error_t *
svn_config_ensure(const char *config_dir, apr_pool_t *pool)
{
const char *path;
svn_node_kind_t kind;
svn_error_t *err;
/* Ensure that the user-specific config directory exists. */
SVN_ERR(svn_config_get_user_config_path(&path, config_dir, NULL, pool));
if (! path)
return SVN_NO_ERROR;
err = svn_io_check_resolved_path(path, &kind, pool);
if (err)
{
/* Don't throw an error, but don't continue. */
svn_error_clear(err);
return SVN_NO_ERROR;
}
if (kind == svn_node_none)
{
err = svn_io_dir_make(path, APR_OS_DEFAULT, pool);
if (err)
{
/* Don't throw an error, but don't continue. */
svn_error_clear(err);
return SVN_NO_ERROR;
}
}
else if (kind == svn_node_file)
{
/* Somebody put a file where the config directory should be.
Wacky. Let's bail. */
return SVN_NO_ERROR;
}
/* Else, there's a configuration directory. */
( run in 0.474 second using v1.01-cache-2.11-cpan-39bf76dae61 )