I checked a new feature, Admin accounts.
Admin accounts are used for perform admin restricted actions like
creating/deleting databases and altering the configuration settings.
If there are no admin accounts for a server, then admin checking is
turned off and anyone can perform admin actions.
The admin checking uses HTTP basic authentication, we'll need to
eventually support SSL to make this secure or support a more secure
authentication standard.
When the user attempts to perform an Admin action, the browser checks
the user supplied credentials and sees it if matches any admin
account. If not, a 401 Unauthorized error is returned and the HTTP
client can resubmit with proper credentials. When the credentials
match, the action is allowed to proceed.
To turning admin checking on, in the local.ini file, you add an
accounts section, with user name/password pairs, like this:
[admins]
admin = password
damien katz = foo
/end
When CouchDB starts it will find these new passwords and then hash them:
[admins]
admin = -hashed-
d6bdc9039b19e41051eb1b94ea8ef905b1a11e2e
,b53ce4e92ad24ad8fc14feadb58d8b60
damien katz = -
hashed
-2f3e9eea97e44b2bb09b56d3b1d66a41f0a74be2,6c37137b479369759e8dc591573b0599
/end
The hashed password line consists first of "-hashed-" then 2
hexadecimal encoded numbers separated by a comma, the 160 bit sha
hashed password + salt 160 bit sha hash, and then the 128 bit salt (a
UUID):
user name = -hashed-%160bit hashed value%,%128 bit salt%
So the only restrictions on passwords is they shouldn't start with "-
hashed-" and can't contain newlines.
Once a password is hashed, to change it, reset the password via the
HTTP config api, CouchDB will then automatically hash the password
without restarting. Or edit it by hand by deleting the old hashed
value (everything after the "=") and enter in the new password. Then
restart the server.
Problems/Caveats:
To run the test suite against a server with admin accounts enabled
requires the user to have admin access.
There is a known problem in Futon with Safari, maybe other browsers,
where it doesn't prompt the user for credentials, it just fails the
HTTP request. In Firefox when the tests start to run and the HTTP
client gets the first failure, the user is asked by the browser for
his user name and password, the request automatically retried and all
the tests pass without incident. But in Safari, the tests simply fail
with 401 errors and the user is never prompted for credentials.
A workaround is to do something to force the browser to "log-in" by
trying to view config values, or create a new database. Once logged in
like that, the tests will pass just fine on Safari. We maybe need to
force the log-ins at the beginning of the tests, or provide a Log-in
button somewhere in Futon.
Feedback please.
-Damien