diff options
Diffstat (limited to 'net/ceph/auth_x.c')
-rw-r--r-- | net/ceph/auth_x.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c index a16bf14eb027..96238ba95f2b 100644 --- a/net/ceph/auth_x.c +++ b/net/ceph/auth_x.c | |||
@@ -298,6 +298,7 @@ static int ceph_x_build_authorizer(struct ceph_auth_client *ac, | |||
298 | return -ENOMEM; | 298 | return -ENOMEM; |
299 | } | 299 | } |
300 | au->service = th->service; | 300 | au->service = th->service; |
301 | au->secret_id = th->secret_id; | ||
301 | 302 | ||
302 | msg_a = au->buf->vec.iov_base; | 303 | msg_a = au->buf->vec.iov_base; |
303 | msg_a->struct_v = 1; | 304 | msg_a->struct_v = 1; |
@@ -555,6 +556,26 @@ static int ceph_x_create_authorizer( | |||
555 | return 0; | 556 | return 0; |
556 | } | 557 | } |
557 | 558 | ||
559 | static int ceph_x_update_authorizer( | ||
560 | struct ceph_auth_client *ac, int peer_type, | ||
561 | struct ceph_auth_handshake *auth) | ||
562 | { | ||
563 | struct ceph_x_authorizer *au; | ||
564 | struct ceph_x_ticket_handler *th; | ||
565 | |||
566 | th = get_ticket_handler(ac, peer_type); | ||
567 | if (IS_ERR(th)) | ||
568 | return PTR_ERR(th); | ||
569 | |||
570 | au = (struct ceph_x_authorizer *)auth->authorizer; | ||
571 | if (au->secret_id < th->secret_id) { | ||
572 | dout("ceph_x_update_authorizer service %u secret %llu < %llu\n", | ||
573 | au->service, au->secret_id, th->secret_id); | ||
574 | return ceph_x_build_authorizer(ac, th, au); | ||
575 | } | ||
576 | return 0; | ||
577 | } | ||
578 | |||
558 | static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, | 579 | static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, |
559 | struct ceph_authorizer *a, size_t len) | 580 | struct ceph_authorizer *a, size_t len) |
560 | { | 581 | { |
@@ -630,7 +651,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac, | |||
630 | 651 | ||
631 | th = get_ticket_handler(ac, peer_type); | 652 | th = get_ticket_handler(ac, peer_type); |
632 | if (!IS_ERR(th)) | 653 | if (!IS_ERR(th)) |
633 | remove_ticket_handler(ac, th); | 654 | memset(&th->validity, 0, sizeof(th->validity)); |
634 | } | 655 | } |
635 | 656 | ||
636 | 657 | ||
@@ -641,6 +662,7 @@ static const struct ceph_auth_client_ops ceph_x_ops = { | |||
641 | .build_request = ceph_x_build_request, | 662 | .build_request = ceph_x_build_request, |
642 | .handle_reply = ceph_x_handle_reply, | 663 | .handle_reply = ceph_x_handle_reply, |
643 | .create_authorizer = ceph_x_create_authorizer, | 664 | .create_authorizer = ceph_x_create_authorizer, |
665 | .update_authorizer = ceph_x_update_authorizer, | ||
644 | .verify_authorizer_reply = ceph_x_verify_authorizer_reply, | 666 | .verify_authorizer_reply = ceph_x_verify_authorizer_reply, |
645 | .destroy_authorizer = ceph_x_destroy_authorizer, | 667 | .destroy_authorizer = ceph_x_destroy_authorizer, |
646 | .invalidate_authorizer = ceph_x_invalidate_authorizer, | 668 | .invalidate_authorizer = ceph_x_invalidate_authorizer, |