aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlya Dryomov <idryomov@gmail.com>2016-01-14 11:31:51 -0500
committerIlya Dryomov <idryomov@gmail.com>2016-01-21 13:36:09 -0500
commit187d131dd983fb1ab1c5d0d9ee98ab6511f252cd (patch)
treefc39313067801733d39be868da3f56a01393eaf0
parent6abe097db59e1a5af7f082709f38bd95c54ccca1 (diff)
libceph: invalidate AUTH in addition to a service ticket
If we fault due to authentication, we invalidate the service ticket we have and request a new one - the idea being that if a service rejected our authorizer, it must have expired, despite mon_client's attempts at periodic renewal. (The other possibility is that our ticket is too new and the service hasn't gotten it yet, in which case invalidating isn't necessary but doesn't hurt.) Invalidating just the service ticket is not enough, though. If we assume a failure on mon_client's part to renew a service ticket, we have to assume the same for the AUTH ticket. If our AUTH ticket is bad, we won't get any service tickets no matter how hard we try, so invalidate AUTH ticket along with the service ticket. Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Sage Weil <sage@redhat.com>
-rw-r--r--net/ceph/auth_x.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
index ab080bb18254..05e9fc21d460 100644
--- a/net/ceph/auth_x.c
+++ b/net/ceph/auth_x.c
@@ -684,8 +684,7 @@ static void ceph_x_destroy(struct ceph_auth_client *ac)
684 ac->private = NULL; 684 ac->private = NULL;
685} 685}
686 686
687static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac, 687static void invalidate_ticket(struct ceph_auth_client *ac, int peer_type)
688 int peer_type)
689{ 688{
690 struct ceph_x_ticket_handler *th; 689 struct ceph_x_ticket_handler *th;
691 690
@@ -694,6 +693,19 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
694 th->have_key = false; 693 th->have_key = false;
695} 694}
696 695
696static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
697 int peer_type)
698{
699 /*
700 * We are to invalidate a service ticket in the hopes of
701 * getting a new, hopefully more valid, one. But, we won't get
702 * it unless our AUTH ticket is good, so invalidate AUTH ticket
703 * as well, just in case.
704 */
705 invalidate_ticket(ac, peer_type);
706 invalidate_ticket(ac, CEPH_ENTITY_TYPE_AUTH);
707}
708
697static int calcu_signature(struct ceph_x_authorizer *au, 709static int calcu_signature(struct ceph_x_authorizer *au,
698 struct ceph_msg *msg, __le64 *sig) 710 struct ceph_msg *msg, __le64 *sig)
699{ 711{