msg = _get_new_msg();
if (!msg)
return -ENOMEM;
- bufferlist& bl = _get_msg_bl(msg);
-
- CephXPremable pre;
- dout(0) << "pre=" << id << dendl;
- pre.trans_id = id;
- ::encode(pre, bl);
int ret = _build_request();
Message *AuthClientAuthenticateHandler::_get_new_msg()
{
MAuth *m = new MAuth;
-
+ m->trans_id = id;
return m;
}
Message *AuthClientAuthorizeHandler::_get_new_msg()
{
MAuthorize *m = new MAuthorize;
-
+ m->trans_id = id;
return m;
}
return id;
}
-int AuthClientHandler::handle_response(Message *response)
+int AuthClientHandler::handle_response(int trans_id, Message *response)
{
- bufferlist bl;
- int ret;
-
MAuthReply* m = (MAuthReply *)response;
- bl = m->result_bl;
- ret = m->result;
-
- CephXPremable pre;
- bufferlist::iterator iter = bl.begin();
- ::decode(pre, iter);
+ int ret = m->result;
lock.Lock();
- AuthClientProtocolHandler *handler = _get_proto_handler(pre.trans_id);
+ AuthClientProtocolHandler *handler = _get_proto_handler(trans_id);
lock.Unlock();
- dout(0) << "AuthClientHandler::handle_response(): got response " << *response << " trans_id=" << pre.trans_id << " handler=" << handler << dendl;
+ dout(0) << "AuthClientHandler::handle_response(): got response " << *response << " trans_id=" << trans_id << " handler=" << handler << dendl;
if (!handler)
return -EINVAL;
+ bufferlist::iterator iter = m->result_bl.begin();
return handler->handle_response(ret, iter);
}
return (want & have) == have;
}
- int handle_response(Message *response);
+ int handle_response(int trans_id, Message *response);
int start_session(AuthClient *client, double timeout);
int send_session_request(AuthClient *client, AuthClientProtocolHandler *handler, double timeout);
}
-struct CephXPremable {
- uint32_t trans_id;
-
- void encode(bufferlist& bl) const {
- ::encode(trans_id, bl);
- }
-
- void decode(bufferlist::iterator& bl) {
- ::decode(trans_id, bl);
- }
-};
-WRITE_CLASS_ENCODER(CephXPremable)
-
/*
Ceph X-Envelope protocol
*/
#include "messages/PaxosServiceMessage.h"
struct MAuth : public PaxosServiceMessage {
+ __u64 trans_id;
bufferlist auth_payload;
MAuth() : PaxosServiceMessage(CEPH_MSG_AUTH, 0) { }
const char *get_type_name() { return "auth"; }
+ void print(ostream& out) {
+ out << "auth(" << trans_id << " " << auth_payload.length() << " bytes)";
+ }
void decode_payload() {
bufferlist::iterator p = payload.begin();
paxos_decode(p);
+ ::decode(trans_id, p);
::decode(auth_payload, p);
}
void encode_payload() {
paxos_encode();
+ ::encode(trans_id, payload);
::encode(auth_payload, payload);
}
bufferlist& get_auth_payload() { return auth_payload; }
#include "msg/Message.h"
struct MAuthReply : public Message {
+ __u64 trans_id;
__s32 result;
cstring result_msg;
bufferlist result_bl;
- MAuthReply(bufferlist *bl = NULL, int r = 0, const char *msg = 0) :
+ MAuthReply() : Message(CEPH_MSG_AUTH_REPLY), trans_id(0), result(0) {}
+ MAuthReply(__u64 tid, bufferlist *bl = NULL, int r = 0, const char *msg = 0) :
Message(CEPH_MSG_AUTH_REPLY),
- result(r),
+ trans_id(tid), result(r),
result_msg(msg) {
if (bl)
result_bl = *bl;
const char *get_type_name() { return "auth_reply"; }
void print(ostream& o) {
char buf[80];
- o << "auth_reply(" << result << " " << strerror_r(-result, buf, sizeof(buf));
+ o << "auth_reply(" << trans_id << " " << result << " " << strerror_r(-result, buf, sizeof(buf));
if (result_msg.length())
o << ": " << result_msg;
o << ")";
void decode_payload() {
bufferlist::iterator p = payload.begin();
+ ::decode(trans_id, p);
::decode(result, p);
::decode(result_bl, p);
::decode(result_msg, p);
}
void encode_payload() {
+ ::encode(trans_id, payload);
::encode(result, payload);
::encode(result_bl, payload);
::encode(result_msg, payload);
#include "msg/Message.h"
struct MAuthorize : public Message {
+ __u64 trans_id;
bufferlist auth_payload;
MAuthorize() : Message(CEPH_MSG_AUTHORIZE) { }
const char *get_type_name() { return "authorize"; }
+ void print(ostream& out) {
+ out << "authorize(" << trans_id << ")";
+ }
void decode_payload() {
bufferlist::iterator p = payload.begin();
+ ::decode(trans_id, p);
::decode(auth_payload, p);
}
void encode_payload() {
+ ::encode(trans_id, payload);
::encode(auth_payload, payload);
}
bufferlist& get_auth_payload() { return auth_payload; }
bufferlist response_bl;
bufferlist::iterator indata = m->auth_payload.begin();
- CephXPremable pre;
- ::decode(pre, indata);
- dout(0) << "CephXPremable id=" << pre.trans_id << dendl;
- ::encode(pre, response_bl);
-
// set up handler?
if (!s->auth_handler) {
set<__u32> supported;
return true;
}
}
- MAuthReply *reply = new MAuthReply(&response_bl, ret);
+ MAuthReply *reply = new MAuthReply(m->trans_id, &response_bl, ret);
mon->messenger->send_message(reply, m->get_orig_source_inst());
return true;
}
void MonClient::handle_auth(MAuthReply *m)
{
- int ret = auth.handle_response(m);
+ int ret = auth.handle_response(m->trans_id, m);
delete m;
if (ret == -EAGAIN) {
bufferlist response_bl;
bufferlist::iterator indata = m->auth_payload.begin();
- CephXPremable pre;
- ::decode(pre, indata);
- dout(0) << "CephXPremable id=" << pre.trans_id << dendl;
- ::encode(pre, response_bl);
-
// handle the request
try {
ret = do_authorize(indata, response_bl);
ret = -EINVAL;
dout(0) << "caught error when trying to handle authorize request, probably malformed request" << dendl;
}
- MAuthReply *reply = new MAuthReply(&response_bl, ret);
+ MAuthReply *reply = new MAuthReply(m->trans_id, &response_bl, ret);
messenger->send_message(reply, m->get_orig_source_inst());
}