int CephxClientHandler::build_request(bufferlist& bl)
{
- dout(10) << "build_request state " << state << dendl;
-
- switch (state == STATE_START) {
- return 0;
- }
+ dout(10) << "build_request" << dendl;
validate_tickets();
int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
{
- dout(10) << "handle_response ret = " << ret << " state " << state << dendl;
+ dout(10) << "handle_response ret = " << ret << dendl;
if (ret < 0)
return ret; // hrm!
- if (state == STATE_START) {
+ if (starting) {
CephXServerChallenge ch;
::decode(ch, indata);
server_challenge = ch.server_challenge;
dout(10) << " got initial server challenge " << server_challenge << dendl;
- state = STATE_GETTING_MON_KEY;
+ starting = false;
return -EAGAIN;
}
}
dout(10) << " want=" << want << " need=" << need << " have=" << have << dendl;
validate_tickets();
- if (need) {
- state = STATE_GETTING_SESSION_KEYS;
+ if (need)
ret = -EAGAIN;
- } else {
- state = STATE_DONE;
+ else
ret = 0;
- }
}
break;
dout(0) << "could not verify service_ticket reply" << dendl;
return -EPERM;
}
- if (want == have) {
- state = STATE_DONE;
+ if (want == have)
ret = 0;
- }
}
break;
#include "CephxProtocol.h"
class CephxClientHandler : public AuthClientHandler {
- enum {
- STATE_START,
- STATE_GETTING_MON_KEY,
- STATE_GETTING_SESSION_KEYS,
- STATE_DONE
- } state;
+ bool starting;
/* envelope protocol parameters */
uint64_t server_challenge;
void reset() {
delete authorizer;
authorizer = 0;
- state = STATE_START;
+ starting = true;
}
int build_request(bufferlist& bl);
int handle_response(int ret, bufferlist::iterator& iter);
get_random_bytes((char *)&server_challenge, sizeof(server_challenge));
if (!server_challenge)
server_challenge = 1; // always non-zero.
- dout(10) << "start_session server_challenge " << server_challenge << dendl;
+ dout(10) << "start_session server_challenge " << hex << server_challenge << dec << dendl;
CephXServerChallenge ch;
ch.server_challenge = server_challenge;