diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2021-06-21 13:17:40 +0300 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2021-06-24 22:03:17 +0300 |
commit | 03af4c7bad8ca59143bca488b90b3775d10d7f94 (patch) | |
tree | acc80188616ede6bd9488eb29601f41a1e0c0d44 /net/ceph/auth_none.c | |
parent | 3c0d0894320cc517fda657c69939cd0313d0b4e2 (diff) | |
download | linux-03af4c7bad8ca59143bca488b90b3775d10d7f94.tar.xz |
libceph: set global_id as soon as we get an auth ticket
Commit 61ca49a9105f ("libceph: don't set global_id until we get an
auth ticket") delayed the setting of global_id too much. It is set
only after all tickets are received, but in pre-nautilus clusters an
auth ticket and the service tickets are obtained in separate steps
(for a total of three MAuth replies). When the service tickets are
requested, global_id is used to build an authorizer; if global_id is
still 0 we never get them and fail to establish the session.
Moving the setting of global_id into protocol implementations. This
way global_id can be set exactly when an auth ticket is received, not
sooner nor later.
Fixes: 61ca49a9105f ("libceph: don't set global_id until we get an auth ticket")
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Diffstat (limited to 'net/ceph/auth_none.c')
-rw-r--r-- | net/ceph/auth_none.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ceph/auth_none.c b/net/ceph/auth_none.c index aab490a111eb..097e9f8d87a7 100644 --- a/net/ceph/auth_none.c +++ b/net/ceph/auth_none.c @@ -69,7 +69,7 @@ static int build_request(struct ceph_auth_client *ac, void *buf, void *end) * the generic auth code decode the global_id, and we carry no actual * authenticate state, so nothing happens here. */ -static int handle_reply(struct ceph_auth_client *ac, +static int handle_reply(struct ceph_auth_client *ac, u64 global_id, void *buf, void *end, u8 *session_key, int *session_key_len, u8 *con_secret, int *con_secret_len) @@ -77,6 +77,7 @@ static int handle_reply(struct ceph_auth_client *ac, struct ceph_auth_none_info *xi = ac->private; xi->starting = false; + ceph_auth_set_global_id(ac, global_id); return 0; } |