You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2011/01/24 17:00:14 UTC
svn commit: r1062848 -
/subversion/branches/uris-as-urls/subversion/svnserve/serve.c
Author: cmpilato
Date: Mon Jan 24 16:00:14 2011
New Revision: 1062848
URL: http://svn.apache.org/viewvc?rev=1062848&view=rev
Log:
On the 'uris-as-urls' branch, review and correct some use of the
svn_uri_* APIs. (One step of many similar ones.)
* subversion/svnserve/serve.c
(authz_check_access, set_path, delete_path, link_path, reparent,
unlock_paths, get_file, get_dir, update, switch_cmd, status, diff,
get_mergeinfo, log_cmd, check_path, stat_cmd, get_locations,
get_location_segments, get_file_revs, lock, lock_many, unlock,
unlock_many, get_lock, get_locks, get_deleted_rev, find_repos,
serve): Review/correct/rename uses of the svn_uri_* APIs.
Modified:
subversion/branches/uris-as-urls/subversion/svnserve/serve.c
Modified: subversion/branches/uris-as-urls/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/uris-as-urls/subversion/svnserve/serve.c?rev=1062848&r1=1062847&r2=1062848&view=diff
==============================================================================
--- subversion/branches/uris-as-urls/subversion/svnserve/serve.c (original)
+++ subversion/branches/uris-as-urls/subversion/svnserve/serve.c Mon Jan 24 16:00:14 2011
@@ -396,8 +396,8 @@ static svn_error_t *authz_check_access(s
absolute path. Passing such a malformed path to the authz
routines throws them into an infinite loop and makes them miss
ACLs. */
- if (path && *path != '/')
- path = svn_uri_join("/", path, pool);
+ if (path)
+ path = svn_fspath__canonicalize(path, pool);
/* If we have a username, and we've not yet used it + any username
case normalization that might be requested to determine "the
@@ -764,7 +764,7 @@ static svn_error_t *set_path(svn_ra_svn_
&depth_word));
if (depth_word)
depth = svn_depth_from_word(depth_word);
- path = svn_uri_canonicalize(path, pool);
+ path = svn_relpath_canonicalize(path, pool);
if (b->from_rev && strcmp(path, "") == 0)
*b->from_rev = rev;
if (!b->err)
@@ -783,7 +783,7 @@ static svn_error_t *delete_path(svn_ra_s
const char *path;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
- path = svn_uri_canonicalize(path, pool);
+ path = svn_relpath_canonicalize(path, pool);
if (!b->err)
b->err = svn_repos_delete_path(b->report_baton, path, pool);
return SVN_NO_ERROR;
@@ -802,13 +802,17 @@ static svn_error_t *link_path(svn_ra_svn
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccrb?(?c)?w",
&path, &url, &rev, &start_empty,
&lock_token, &depth_word));
- path = svn_uri_canonicalize(path, pool);
- url = svn_path_uri_decode(svn_uri_canonicalize(url, pool), pool);
+
+ /* ### WHAT?! The link path is an absolute URL?! Didn't see that
+ coming... -- cmpilato */
+ path = svn_relpath_canonicalize(path, pool);
+ url = svn_url_canonicalize(url, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
if (!b->err)
b->err = get_fs_path(svn_path_uri_decode(b->repos_url, pool),
- url, &fs_path);
+ svn_path_uri_decode(url, pool),
+ &fs_path);
if (!b->err)
b->err = svn_repos_link_path3(b->report_baton, path, fs_path, rev,
depth, start_empty, lock_token, pool);
@@ -994,10 +998,11 @@ static svn_error_t *reparent(svn_ra_svn_
const char *fs_path;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &url));
- url = svn_path_uri_decode(svn_uri_canonicalize(url, pool), pool);
+ url = svn_url_canonicalize(url, pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(get_fs_path(svn_path_uri_decode(b->repos_url, pool),
- url, &fs_path));
+ svn_path_uri_decode(url, pool),
+ &fs_path));
SVN_ERR(log_command(b, conn, pool, "%s", svn_log__reparent(fs_path, pool)));
svn_stringbuf_set(b->fs_path, fs_path);
SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
@@ -1209,9 +1214,9 @@ static svn_error_t *add_lock_tokens(svn_
"Lock token isn't a string");
path = path_item->u.string->data;
- full_path = svn_uri_join(sb->fs_path->data,
- svn_uri_canonicalize(path, pool),
- pool);
+ full_path = svn_fspath__join(sb->fs_path->data,
+ svn_relpath_canonicalize(path, pool),
+ pool);
if (! lookup_access(pool, sb, conn, svn_authz_write,
full_path, TRUE))
@@ -1251,9 +1256,9 @@ static svn_error_t *unlock_paths(const a
path = path_item->u.string->data;
token = token_item->u.string->data;
- full_path = svn_uri_join(sb->fs_path->data,
- svn_uri_canonicalize(path, iterpool),
- iterpool);
+ full_path = svn_fspath__join(sb->fs_path->data,
+ svn_relpath_canonicalize(path, iterpool),
+ iterpool);
/* The lock may have become defunct after the commit, so ignore such
errors. */
@@ -1392,8 +1397,8 @@ static svn_error_t *get_file(svn_ra_svn_
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)bb", &path, &rev,
&want_props, &want_contents));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -1509,8 +1514,8 @@ static svn_error_t *get_dir(svn_ra_svn_c
}
}
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -1547,7 +1552,7 @@ static svn_error_t *get_dir(svn_ra_svn_c
svn_pool_clear(subpool);
- file_path = svn_uri_join(full_path, name, subpool);
+ file_path = svn_fspath__join(full_path, name, subpool);
if (! lookup_access(subpool, b, conn, svn_authz_read,
file_path, FALSE))
@@ -1647,7 +1652,7 @@ static svn_error_t *update(svn_ra_svn_co
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cb?wB", &rev, &target,
&recurse, &depth_word, &send_copyfrom_param));
- target = svn_uri_canonicalize(target, pool);
+ target = svn_relpath_canonicalize(target, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1657,7 +1662,7 @@ static svn_error_t *update(svn_ra_svn_co
send_copyfrom_args = (send_copyfrom_param == SVN_RA_SVN_UNSPECIFIED_NUMBER) ?
FALSE : (svn_boolean_t) send_copyfrom_param;
- full_path = svn_uri_join(b->fs_path->data, target, pool);
+ full_path = svn_fspath__join(b->fs_path->data, target, pool);
/* Check authorization and authenticate the user if necessary. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read, full_path, FALSE));
@@ -1698,8 +1703,8 @@ static svn_error_t *switch_cmd(svn_ra_sv
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cbc?w", &rev, &target,
&recurse, &switch_url, &depth_word));
- target = svn_uri_canonicalize(target, pool);
- switch_url = svn_uri_canonicalize(switch_url, pool);
+ target = svn_relpath_canonicalize(target, pool);
+ switch_url = svn_url_canonicalize(switch_url, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1715,7 +1720,7 @@ static svn_error_t *switch_cmd(svn_ra_sv
&switch_path));
{
- const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_fspath__join(b->fs_path->data, target, pool);
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__switch(full_path, switch_path, rev,
depth, pool)));
@@ -1742,7 +1747,7 @@ static svn_error_t *status(svn_ra_svn_co
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cb?(?r)?w",
&target, &recurse, &rev, &depth_word));
- target = svn_uri_canonicalize(target, pool);
+ target = svn_relpath_canonicalize(target, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1754,7 +1759,7 @@ static svn_error_t *status(svn_ra_svn_co
SVN_CMD_ERR(svn_fs_youngest_rev(&rev, b->fs, pool));
{
- const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_fspath__join(b->fs_path->data, target, pool);
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__status(full_path, rev, depth, pool)));
}
@@ -1791,8 +1796,8 @@ static svn_error_t *diff(svn_ra_svn_conn
&ignore_ancestry, &versus_url,
&text_deltas, &depth_word));
}
- target = svn_uri_canonicalize(target, pool);
- versus_url = svn_uri_canonicalize(versus_url, pool);
+ target = svn_relpath_canonicalize(target, pool);
+ versus_url = svn_url_canonicalize(versus_url, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1808,7 +1813,7 @@ static svn_error_t *diff(svn_ra_svn_conn
&versus_path));
{
- const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_fspath__join(b->fs_path->data, target, pool);
svn_revnum_t from_rev;
SVN_ERR(accept_report(NULL, &from_rev,
conn, pool, b, rev, target, versus_path,
@@ -1858,10 +1863,8 @@ static svn_error_t *get_mergeinfo(svn_ra
if (item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Path is not a string"));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(item->u.string->data,
- pool),
- pool);
+ full_path = svn_relpath_canonicalize(item->u.string->data, pool);
+ full_path = svn_fspath__join(b->fs_path->data, full_path, pool);
APR_ARRAY_PUSH(canonical_paths, const char *) = full_path;
}
@@ -2037,10 +2040,8 @@ static svn_error_t *log_cmd(svn_ra_svn_c
if (elt->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Log path entry not a string"));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(elt->u.string->data,
- pool),
- pool);
+ full_path = svn_relpath_canonicalize(elt->u.string->data, pool),
+ full_path = svn_fspath__join(b->fs_path->data, full_path, pool);
APR_ARRAY_PUSH(full_paths, const char *) = full_path;
}
SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -2082,8 +2083,8 @@ static svn_error_t *check_path(svn_ra_sv
svn_node_kind_t kind;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -2112,8 +2113,8 @@ static svn_error_t *stat_cmd(svn_ra_svn_
svn_dirent_t *dirent;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -2167,9 +2168,9 @@ static svn_error_t *get_locations(svn_ra
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crl", &relative_path,
&peg_revision,
&loc_revs_proto));
- relative_path = svn_uri_canonicalize(relative_path, pool);
+ relative_path = svn_relpath_canonicalize(relative_path, pool);
- abs_path = svn_uri_join(b->fs_path->data, relative_path, pool);
+ abs_path = svn_fspath__join(b->fs_path->data, relative_path, pool);
location_revisions = apr_array_make(pool, loc_revs_proto->nelts,
sizeof(svn_revnum_t));
@@ -2256,9 +2257,9 @@ static svn_error_t *get_location_segment
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)(?r)",
&relative_path, &peg_revision,
&start_rev, &end_rev));
- relative_path = svn_uri_canonicalize(relative_path, pool);
+ relative_path = svn_relpath_canonicalize(relative_path, pool);
- abs_path = svn_uri_join(b->fs_path->data, relative_path, pool);
+ abs_path = svn_fspath__join(b->fs_path->data, relative_path, pool);
if (SVN_IS_VALID_REVNUM(start_rev)
&& SVN_IS_VALID_REVNUM(end_rev)
@@ -2389,9 +2390,9 @@ static svn_error_t *get_file_revs(svn_ra
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)?B",
&path, &start_rev, &end_rev,
&include_merged_revs_param));
- path = svn_uri_canonicalize(path, pool);
+ path = svn_relpath_canonicalize(path, pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
- full_path = svn_uri_join(b->fs_path->data, path, pool);
+ full_path = svn_fspath__join(b->fs_path->data, path, pool);
if (include_merged_revs_param == SVN_RA_SVN_UNSPECIFIED_NUMBER)
include_merged_revisions = FALSE;
@@ -2435,8 +2436,8 @@ static svn_error_t *lock(svn_ra_svn_conn
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b(?r)", &path, &comment,
&steal_lock, ¤t_rev));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write,
full_path, TRUE));
@@ -2499,9 +2500,9 @@ static svn_error_t *lock_many(svn_ra_svn
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, subpool),
- pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, subpool),
+ pool);
APR_ARRAY_PUSH(log_paths, const char *) = full_path;
if (! lookup_access(pool, b, conn, svn_authz_write, full_path, TRUE))
@@ -2563,8 +2564,8 @@ static svn_error_t *unlock(svn_ra_svn_co
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b", &path, &token,
&break_lock));
- full_path = svn_uri_join(b->fs_path->data, svn_uri_canonicalize(path, pool),
- pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
/* Username required unless break_lock was specified. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write,
@@ -2620,9 +2621,9 @@ static svn_error_t *unlock_many(svn_ra_s
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, subpool),
- pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, subpool),
+ pool);
APR_ARRAY_PUSH(log_paths, const char *) = full_path;
if (! lookup_access(subpool, b, conn, svn_authz_write, full_path,
@@ -2677,9 +2678,8 @@ static svn_error_t *get_lock(svn_ra_svn_
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
- full_path = svn_uri_join(b->fs_path->data, svn_uri_canonicalize(path,
- pool),
- pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
full_path, FALSE));
@@ -2721,8 +2721,8 @@ static svn_error_t *get_locks(svn_ra_svn
return log_fail_and_flush(err, b, conn, pool);
}
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -2849,8 +2849,8 @@ get_deleted_rev(svn_ra_svn_conn_t *conn,
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crr",
&path, &peg_revision, &end_revision));
- full_path = svn_uri_join(b->fs_path->data,
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_fspath__join(b->fs_path->data,
+ svn_relpath_canonicalize(path, pool), pool);
SVN_ERR(log_command(b, conn, pool, "get-deleted-rev"));
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_ERR(svn_repos_deleted_rev(b->fs, full_path, peg_revision, end_revision,
@@ -2965,23 +2965,21 @@ static svn_error_t *find_repos(const cha
if (path == NULL)
return svn_error_createf(SVN_ERR_BAD_URL, NULL,
"Non-svn URL passed to svn server: '%s'", url);
- path = strchr(path, '/');
- path = (path == NULL) ? "" : path + 1;
- /* Decode URI escapes from the path. */
+
+ path = strchr(path, '/');
+ path = (path == NULL) ? "" : svn_relpath_canonicalize(path, pool);
path = svn_path_uri_decode(path, pool);
- /* Ensure that it isn't possible to escape the root by skipping leading
- slashes and not allowing '..' segments. */
- while (*path == '/')
- ++path;
+ /* Ensure that it isn't possible to escape the root by disallowing
+ '..' segments. */
if (!repos_path_valid(path))
return svn_error_create(SVN_ERR_BAD_FILENAME, NULL,
"Couldn't determine repository path");
/* Join the server-configured root with the client path. */
- full_path = svn_uri_join(svn_uri_canonicalize(root, pool),
- svn_uri_canonicalize(path, pool), pool);
+ full_path = svn_dirent_join(svn_dirent_canonicalize(root, pool),
+ path, pool);
/* Search for a repository in the full path. */
repos_root = svn_repos_find_root_path(full_path, pool);
@@ -2999,9 +2997,9 @@ static svn_error_t *find_repos(const cha
svn_path_remove_components(url_buf,
svn_path_component_count(b->fs_path->data));
b->repos_url = url_buf->data;
- b->authz_repos_name = svn_uri_is_child(root, repos_root, pool);
+ b->authz_repos_name = svn_fspath__is_child(root, repos_root, pool);
if (b->authz_repos_name == NULL)
- b->repos_name = svn_uri_basename(repos_root, pool);
+ b->repos_name = svn_fspath__basename(repos_root, pool);
else
b->repos_name = b->authz_repos_name;
b->repos_name = svn_path_uri_encode(b->repos_name, pool);
@@ -3112,7 +3110,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
if (ver != 2)
return SVN_NO_ERROR;
- client_url = svn_uri_canonicalize(client_url, pool);
+ client_url = svn_url_canonicalize(client_url, pool);
SVN_ERR(svn_ra_svn_set_capabilities(conn, caplist));
/* All released versions of Subversion support edit-pipeline,