]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
auth: de-globalize AuthClientHandler and friends
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 14 Jun 2011 19:01:44 +0000 (12:01 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Mon, 20 Jun 2011 23:22:27 +0000 (16:22 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/auth/AuthClientHandler.cc
src/auth/AuthClientHandler.h
src/auth/cephx/CephxClientHandler.cc
src/auth/cephx/CephxClientHandler.h
src/auth/none/AuthNoneClientHandler.h
src/mon/MonClient.cc

index 5c11a2d01e45c118e57456484fd62008a42d5ac2..5b02a258469b792782fe529c8606c61165d30147 100644 (file)
 #include "cephx/CephxClientHandler.h"
 #include "none/AuthNoneClientHandler.h"
 
-AuthClientHandler *get_auth_client_handler(int proto, RotatingKeyRing *rkeys)
+AuthClientHandler *get_auth_client_handler(CephContext *cct, int proto,
+                                          RotatingKeyRing *rkeys)
 {
   switch (proto) {
   case CEPH_AUTH_CEPHX:
-    return new CephxClientHandler(rkeys);
+    return new CephxClientHandler(cct, rkeys);
   case CEPH_AUTH_NONE:
-    return new AuthNoneClientHandler(rkeys);
+    return new AuthNoneClientHandler(cct, rkeys);
   default:
     return NULL;
   }
index 9fd49d8b134c77561c1c1d3022d3315fd20b79e0..5592c9ae0654dd079d188f73c7c857eb427460e1 100644 (file)
 
 #include "common/Timer.h"
 
+class CephContext;
 class MAuthReply;
 class AuthClientHandler;
 class RotatingKeyRing;
 
 class AuthClientHandler {
 protected:
+  CephContext *cct;
   EntityName name;
   uint64_t global_id;
   uint32_t want;
@@ -36,7 +38,8 @@ protected:
   uint32_t need;
 
 public:
-  AuthClientHandler() : want(CEPH_ENTITY_TYPE_AUTH), have(0), need(0) {}
+  AuthClientHandler(CephContext *cct_) 
+    : cct(cct_), want(CEPH_ENTITY_TYPE_AUTH), have(0), need(0) {}
   virtual ~AuthClientHandler() {}
 
   void init(EntityName& n) { name = n; }
@@ -79,7 +82,8 @@ public:
 };
 
 
-extern AuthClientHandler *get_auth_client_handler(int proto, RotatingKeyRing *rkeys);
+extern AuthClientHandler *get_auth_client_handler(CephContext *cct,
+                                     int proto, RotatingKeyRing *rkeys);
 
 #endif
 
index fa9b705d91076ce35450e529b1da65810decba48..2328bd7df91f08c26b2d0f33e0e534df661cb203 100644 (file)
 
 int CephxClientHandler::build_request(bufferlist& bl)
 {
-  dout(10) << "build_request" << dendl;
+  ldout(cct, 10) << "build_request" << dendl;
 
-  dout(10) << "validate_tickets: want=" << want << " need=" << need << " have=" << have << dendl;
+  ldout(cct, 10) << "validate_tickets: want=" << want << " need=" << need << " have=" << have << dendl;
   validate_tickets();
 
-  dout(10) << "want=" << want << " need=" << need << " have=" << have << dendl;
+  ldout(cct, 10) << "want=" << want << " need=" << need << " have=" << have << dendl;
 
   CephXTicketHandler& ticket_handler = tickets.get_handler(CEPH_ENTITY_TYPE_AUTH);
 
@@ -54,18 +54,18 @@ int CephxClientHandler::build_request(bufferlist& bl)
     req.old_ticket = ticket_handler.ticket;
 
     if (req.old_ticket.blob.length()) {
-      dout(20) << "old ticket len=" << req.old_ticket.blob.length() << dendl;
+      ldout(cct, 20) << "old ticket len=" << req.old_ticket.blob.length() << dendl;
     }
 
     ::encode(req, bl);
 
-    dout(10) << "get auth session key: client_challenge " << req.client_challenge << dendl;
+    ldout(cct, 10) << "get auth session key: client_challenge " << req.client_challenge << dendl;
     return 0;
   }
 
   if (need) {
     /* get service tickets */
-    dout(10) << "get service keys: want=" << want << " need=" << need << " have=" << have << dendl;
+    ldout(cct, 10) << "get service keys: want=" << want << " need=" << need << " have=" << have << dendl;
 
     CephXRequestHeader header;
     header.request_type = CEPHX_GET_PRINCIPAL_SESSION_KEY;
@@ -86,7 +86,7 @@ int CephxClientHandler::build_request(bufferlist& bl)
 
 int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
 {
-  dout(10) << "handle_response ret = " << ret << dendl;
+  ldout(cct, 10) << "handle_response ret = " << ret << dendl;
   
   if (ret < 0)
     return ret; // hrm!
@@ -95,7 +95,7 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
     CephXServerChallenge ch;
     ::decode(ch, indata);
     server_challenge = ch.server_challenge;
-    dout(10) << " got initial server challenge " << server_challenge << dendl;
+    ldout(cct, 10) << " got initial server challenge " << server_challenge << dendl;
     starting = false;
 
     tickets.invalidate_ticket(CEPH_ENTITY_TYPE_AUTH);
@@ -108,15 +108,15 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
   switch (header.request_type) {
   case CEPHX_GET_AUTH_SESSION_KEY:
     {
-      dout(10) << " get_auth_session_key" << dendl;
+      ldout(cct, 10) << " get_auth_session_key" << dendl;
       CryptoKey secret;
       keyring->get_master(secret);
        
       if (!tickets.verify_service_ticket_reply(secret, indata)) {
-       dout(0) << "could not verify service_ticket reply" << dendl;
+       ldout(cct, 0) << "could not verify service_ticket reply" << dendl;
        return -EPERM;
       }
-      dout(10) << " want=" << want << " need=" << need << " have=" << have << dendl;
+      ldout(cct, 10) << " want=" << want << " need=" << need << " have=" << have << dendl;
       validate_tickets();
       if (need)
        ret = -EAGAIN;
@@ -128,10 +128,10 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
   case CEPHX_GET_PRINCIPAL_SESSION_KEY:
     {
       CephXTicketHandler& ticket_handler = tickets.get_handler(CEPH_ENTITY_TYPE_AUTH);
-      dout(10) << " get_principal_session_key session_key " << ticket_handler.session_key << dendl;
+      ldout(cct, 10) << " get_principal_session_key session_key " << ticket_handler.session_key << dendl;
   
       if (!tickets.verify_service_ticket_reply(ticket_handler.session_key, indata)) {
-        dout(0) << "could not verify service_ticket reply" << dendl;
+        ldout(cct, 0) << "could not verify service_ticket reply" << dendl;
         return -EPERM;
       }
       validate_tickets();
@@ -143,7 +143,7 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
 
   case CEPHX_GET_ROTATING_KEY:
     {
-      dout(10) << " get_rotating_key" << dendl;
+      ldout(cct, 10) << " get_rotating_key" << dendl;
       if (rotating_secrets) {
        RotatingSecrets secrets;
        CryptoKey secret_key;
@@ -151,14 +151,14 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
        if (decode_decrypt(secrets, secret_key, indata) == 0) {
          rotating_secrets->set_secrets(secrets);
        } else {
-         dout(0) << "could not set rotating key: decode_decrypt failed" << dendl;
+         ldout(cct, 0) << "could not set rotating key: decode_decrypt failed" << dendl;
        }
       }
     }
     break;
 
   default:
-   dout(0) << " unknown request_type " << header.request_type << dendl;
+   ldout(cct, 0) << " unknown request_type " << header.request_type << dendl;
    assert(0);
   }
   return ret;
@@ -168,14 +168,14 @@ int CephxClientHandler::handle_response(int ret, bufferlist::iterator& indata)
 
 AuthAuthorizer *CephxClientHandler::build_authorizer(uint32_t service_id)
 {
-  dout(10) << "build_authorizer for service " << ceph_entity_type_name(service_id) << dendl;
+  ldout(cct, 10) << "build_authorizer for service " << ceph_entity_type_name(service_id) << dendl;
   return tickets.build_authorizer(service_id);
 }
 
 
 bool CephxClientHandler::build_rotating_request(bufferlist& bl)
 {
-  dout(10) << "build_rotating_request" << dendl;
+  ldout(cct, 10) << "build_rotating_request" << dendl;
   CephXRequestHeader header;
   header.request_type = CEPHX_GET_ROTATING_KEY;
   ::encode(header, bl);
@@ -191,7 +191,7 @@ bool CephxClientHandler::need_tickets()
 {
   validate_tickets();
 
-  dout(20) << "need_tickets: want=" << want << " need=" << need << " have=" << have << dendl;
+  ldout(cct, 20) << "need_tickets: want=" << want << " need=" << need << " have=" << have << dendl;
 
   return (need != 0);
 }
index ee331c4dfea328a707a5376a9d5eb38e87f2629d..ba46a1833821184120ea524a6a74c0f2e74f5a82 100644 (file)
@@ -18,6 +18,8 @@
 #include "../AuthClientHandler.h"
 #include "CephxProtocol.h"
 
+class CephContext;
+
 class CephxClientHandler : public AuthClientHandler {
   bool starting;
   
@@ -31,11 +33,14 @@ class CephxClientHandler : public AuthClientHandler {
   KeyRing *keyring;
 
 public:
-  CephxClientHandler(RotatingKeyRing *rsecrets) :
-    authorizer(0),
-    tickets(&g_ceph_context),
-    rotating_secrets(rsecrets),
-    keyring(rsecrets->get_keyring())
+  CephxClientHandler(CephContext *cct_, RotatingKeyRing *rsecrets) 
+    : AuthClientHandler(cct_),
+      starting(false),
+      server_challenge(0),
+      authorizer(0),
+      tickets(&g_ceph_context),
+      rotating_secrets(rsecrets),
+      keyring(rsecrets->get_keyring())
   {
     reset();
   }
index df3e671829f0d519240bcfac5a36b1f29dc44354..1770c253bdaa18ebc2a1658d3f9e3ebfda91e46b 100644 (file)
 #include "../AuthClientHandler.h"
 #include "AuthNoneProtocol.h"
 
+class CephContext;
+
 class AuthNoneClientHandler : public AuthClientHandler {
 public:
-  AuthNoneClientHandler(RotatingKeyRing *rkeys) {}
+  AuthNoneClientHandler(CephContext *cct_, RotatingKeyRing *rkeys) 
+    : AuthClientHandler(cct_) {}
 
   void reset() { }
 
index b73fd10dc3d3eadbb064da8dd75f5552822fe4d5..2466e45c3bfecf5b01d3b05ae6c8590334c98c22 100644 (file)
@@ -433,7 +433,7 @@ void MonClient::handle_auth(MAuthReply *m)
   if (state == MC_STATE_NEGOTIATING) {
     if (!auth || (int)m->protocol != auth->get_protocol()) {
       delete auth;
-      auth = get_auth_client_handler(m->protocol, rotating_secrets);
+      auth = get_auth_client_handler(&g_ceph_context, m->protocol, rotating_secrets);
       if (!auth) {
        m->put();
        return;