summaryrefslogtreecommitdiff
path: root/net/ceph/auth_none.c
diff options
context:
space:
mode:
authorIlya Dryomov <idryomov@gmail.com>2021-06-21 13:17:40 +0300
committerIlya Dryomov <idryomov@gmail.com>2021-06-24 22:03:17 +0300
commit03af4c7bad8ca59143bca488b90b3775d10d7f94 (patch)
treeacc80188616ede6bd9488eb29601f41a1e0c0d44 /net/ceph/auth_none.c
parent3c0d0894320cc517fda657c69939cd0313d0b4e2 (diff)
downloadlinux-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.c3
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;
}