Skip to content

Commit

Permalink
ceph: renew auth tickets before they expire
Browse files Browse the repository at this point in the history
We were only requesting renewal after our tickets expire; do so before
that.  Most of the low-level logic for this was already there; just use
it.

Signed-off-by: Sage Weil <[email protected]>
  • Loading branch information
liewegas committed May 29, 2010
1 parent 09c4d6a commit a41359f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 1 deletion.
2 changes: 1 addition & 1 deletion fs/ceph/auth.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ int ceph_build_auth(struct ceph_auth_client *ac,
if (!ac->protocol)
return ceph_auth_build_hello(ac, msg_buf, msg_len);
BUG_ON(!ac->ops);
if (!ac->ops->is_authenticated(ac))
if (ac->ops->should_authenticate(ac))
return ceph_build_auth_request(ac, msg_buf, msg_len);
return 0;
}
Expand Down
6 changes: 6 additions & 0 deletions fs/ceph/auth.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ struct ceph_auth_client_ops {
*/
int (*is_authenticated)(struct ceph_auth_client *ac);

/*
* true if we should (re)authenticate, e.g., when our tickets
* are getting old and crusty.
*/
int (*should_authenticate)(struct ceph_auth_client *ac);

/*
* build requests and process replies during monitor
* handshake. if handle_reply returns -EAGAIN, we build
Expand Down
8 changes: 8 additions & 0 deletions fs/ceph/auth_none.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ static int is_authenticated(struct ceph_auth_client *ac)
return !xi->starting;
}

static int should_authenticate(struct ceph_auth_client *ac)
{
struct ceph_auth_none_info *xi = ac->private;

return xi->starting;
}

/*
* the generic auth code decode the global_id, and we carry no actual
* authenticate state, so nothing happens here.
Expand Down Expand Up @@ -98,6 +105,7 @@ static const struct ceph_auth_client_ops ceph_auth_none_ops = {
.reset = reset,
.destroy = destroy,
.is_authenticated = is_authenticated,
.should_authenticate = should_authenticate,
.handle_reply = handle_reply,
.create_authorizer = ceph_auth_none_create_authorizer,
.destroy_authorizer = ceph_auth_none_destroy_authorizer,
Expand Down
12 changes: 12 additions & 0 deletions fs/ceph/auth_x.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ static int ceph_x_is_authenticated(struct ceph_auth_client *ac)
return (ac->want_keys & xi->have_keys) == ac->want_keys;
}

static int ceph_x_should_authenticate(struct ceph_auth_client *ac)
{
struct ceph_x_info *xi = ac->private;
int need;

ceph_x_validate_tickets(ac, &need);
dout("ceph_x_should_authenticate want=%d need=%d have=%d\n",
ac->want_keys, need, xi->have_keys);
return need != 0;
}

static int ceph_x_encrypt_buflen(int ilen)
{
return sizeof(struct ceph_x_encrypt_header) + ilen + 16 +
Expand Down Expand Up @@ -620,6 +631,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
static const struct ceph_auth_client_ops ceph_x_ops = {
.name = "x",
.is_authenticated = ceph_x_is_authenticated,
.should_authenticate = ceph_x_should_authenticate,
.build_request = ceph_x_build_request,
.handle_reply = ceph_x_handle_reply,
.create_authorizer = ceph_x_create_authorizer,
Expand Down

0 comments on commit a41359f

Please sign in to comment.