Skip to content
This repository has been archived by the owner on May 25, 2021. It is now read-only.

Add users db security rules on clustered interface #20

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

mikewallace1979
Copy link
Contributor

Apply authentication_db security rules when authentication_db is on the clustered interface (5984).

COUCHDB-2452

The check to determine whether to add the callback functions for
_users DB operations was only checking the raw database name. When
using the authentication DB on the clustered database this meant
that this check would fail and the callbacks would not be added.

This commit checks the DB name (rather than the shard name) against
the value of chttpd_auth/authentication_db so that shards for
clustered authentication DBs have the appropriate callbacks added.

COUCHDB-2452 1/3
Documents in the authentication DB were being updated directly
from couch_httpd_auth via couch_db:update_doc/3. This meant that
updates to documents with the authentication DB on the clustered
interface (5984) would fail.

This commit makes the auth module responsible for the document
update via a ?MODULE:update_auth_doc/1 function and add
couch_auth_cache:update_auth_doc/1 which proxies to
couch_db:update_doc/3.

COUCHDB-2452 2/3
In order to restrict access to design documents in the
authentication DB to admins only we were checking whether a user
was admin in the couch_server callback. When running the auth DB
on the clustered interface this meant that admins could not read
the design doc because the user context was not being passed to
any of the calls to open the design doc.

One possible fix is to add the user context to all the clustering
code involving design doc access however given the amount of
plumbing here is fairly substantial the chances of getting it wrong
are rather high. The alternative is to move this check into the
http layer where we already have access to the user context.

This commit moves the admin check when accessing design docs in the
auth DB into couch_httpd_db (for the admin port).

A separate commit in couchdb-chttpd adds a similar check for
requests through the clustered port.

COUCHDB-2452 3/3
@@ -122,24 +122,26 @@ maybe_add_sys_db_callbacks(DbName, Options) ->
DbsDbName = config:get("mem3", "shard_db", "dbs"),
NodesDbName = config:get("mem3", "shard_db", "nodes"),
IsReplicatorDb = DbName == config:get("replicator", "db", "_replicator") orelse
path_ends_with(DbName, <<"_replicator">>),
path_ends_with(DbName, <<"_replicator">>),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_replicator db seems have the same issue right?

@kxepal
Copy link
Member

kxepal commented Dec 10, 2014

LGFM, though long chains of orelse leaves some strange feeling about, but no idea how to make them better.

@mikewallace1979
Copy link
Contributor Author

though long chains of orelse leaves some strange feeling about

I did cringe a little when adding the second orelse but also couldn't come up with an alternative (other than an even-more-unwieldy nested case statement).

The chain of orelse statements combined with the indentation was
pretty hard to read. This commit moves the checks into their own
function and uses lists:any (which also shortcircuits).
{after_doc_read, fun couch_users_db:after_doc_read/2},
sys_db | Options];
true ->
Options
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ixnay on the whitespace only changes.

@davisp
Copy link
Member

davisp commented Mar 24, 2015

I haven't done a thorough review yet, but this seems related to PR #41

janl pushed a commit to janl/couchdb-couch that referenced this pull request Nov 28, 2015
Matching couch_mrview, set view_type to "map" before validating query
parameters for _all_docs. This fixes a bug whereby validation fails
when specifying _all_docs?conflicts=true.

This closes apache#20

COUCHDB-2523

Signed-off-by: Alexander Shorin <[email protected]>
@hubot hubot deleted the 2452-users-db-security-on-clustered-interface branch April 28, 2017 15:46
@hubot hubot restored the 2452-users-db-security-on-clustered-interface branch April 28, 2017 20:41
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants