From: Vladimir Davydov <vdavydov.dev@gmail.com>
To: Konstantin Osipov <kostja@tarantool.org>
Cc: tarantool-patches@freelists.org
Subject: Re: [PATCH] auth: fix empty password authentication
Date: Wed, 10 Jul 2019 11:13:04 +0300 [thread overview]
Message-ID: <20190710081304.xs7akojupdinlgsl@esperanza> (raw)
In-Reply-To: <20190709181330.GB12956@atlas>
On Tue, Jul 09, 2019 at 09:13:30PM +0300, Konstantin Osipov wrote:
> * Vladimir Davydov <vdavydov.dev@gmail.com> [19/07/09 17:01]:
>
> > -static char zero_hash[SCRAMBLE_SIZE];
> > +/**
> > + * chap-sha1 of empty string, i.e.
> > + * base64_encode(sha1(sha1(""), 0)
> > + */
> > +#define CHAP_SHA1_EMPTY_PASSWORD "vhvewKp0tNyweZQ+cFKAlsyphfg="
>
> Please use a string constant not a define.
Okay.
>
> > part_count = mp_decode_array(&tuple);
> > - if (part_count == 0 && user->def->uid == GUEST &&
> > - memcmp(user->def->hash2, zero_hash, SCRAMBLE_SIZE) == 0) {
> > - /* No password is set for GUEST, OK. */
> > - goto ok;
>
> Please allow both empty password and no password and treat them
> the same on server side.
Guest user can't have no password. Not after commit ecb0e698dfb8
("gh-844: Authentication trigger feature in iproto"). So I don't see
any point in handling the "password is not set" case.
>
> > + if (part_count == 0) {
> > + char hash2[SCRAMBLE_SIZE];
> > + base64_decode(CHAP_SHA1_EMPTY_PASSWORD, SCRAMBLE_BASE64_SIZE,
> > + hash2, SCRAMBLE_SIZE);
> > + if (memcmp(user->def->hash2, hash2, SCRAMBLE_SIZE) == 0) {
> > + /* Empty password is set, OK. */
> > + goto ok;
> > + }
> > + /* Otherwise treat as password mismatch. */
> > + goto err;
>
> I don't get this change and it's not in the changeset comment. We
> should not allow anyone except guest to have an empty password. If
> the password is empty, not set, like in unix, it should be
> impossible toauthenticate to this user, only sudo to it.
Please see commit ecb0e698dfb8 ("gh-844: Authentication trigger feature
in iproto"). AFAIU we do want to authenticate a user without a password
if it has an empty password. If the password is unset, authentication
won't work, which is consistent with Unix guidelines.
>
> > netbox_encode_request(&stream, svp);
> > diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua
> > index 2892bb3d..0d486fa6 100644
> > --- a/src/box/lua/net_box.lua
> > +++ b/src/box/lua/net_box.lua
> > @@ -222,7 +222,6 @@ local function create_transport(host, port, user, password, callback,
> > if user == nil and password ~= nil then
> > box.error(E_PROC_LUA, 'net.box: user is not defined')
> > end
> > - if user ~= nil and password == nil then password = '' end
>
> this looks very wrong, net.box should work with all versions of
> the server.
Do we really want to care about preserving this backward compatibility
case? We are planning to backport this patch to all supported releases.
In other words, I really don't want to maintain the legacy of the
crooked commit I mentioned above. Changing the way net.box works allows
us to get a test case for free.
prev parent reply other threads:[~2019-07-10 8:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-09 13:56 Vladimir Davydov
2019-07-09 18:13 ` Konstantin Osipov
2019-07-10 8:13 ` Vladimir Davydov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190710081304.xs7akojupdinlgsl@esperanza \
--to=vdavydov.dev@gmail.com \
--cc=kostja@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='Re: [PATCH] auth: fix empty password authentication' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox