Author: rajith
Date: Thu Feb 18 18:23:54 2010
New Revision: 911509

URL: http://svn.apache.org/viewvc?rev=911509&view=rev
Log:
This is related to QPID-2413 
Added a mechanism to catch the lexical cast errors and print an error message.
I also fixed up some formatting as well.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/acl/Acl.cpp
    qpid/trunk/qpid/cpp/src/qpid/acl/AclData.cpp
    qpid/trunk/qpid/cpp/src/qpid/acl/AclData.h

Modified: qpid/trunk/qpid/cpp/src/qpid/acl/Acl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/acl/Acl.cpp?rev=911509&r1=911508&r2=911509&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/acl/Acl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/acl/Acl.cpp Thu Feb 18 18:23:54 2010
@@ -60,7 +60,7 @@
         if (mgmtObject!=0) mgmtObject->set_enforcingAcl(0);
     }
     QPID_LOG(info, "ACL Plugin loaded");
-          if (mgmtObject!=0) mgmtObject->set_enforcingAcl(1);
+       if (mgmtObject!=0) mgmtObject->set_enforcingAcl(1);
 }
 
    bool Acl::authorise(const std::string& id, const Action& action, const 
ObjectType& objType, const std::string& name, std::map<Property, std::string>* 
params)
@@ -130,6 +130,7 @@
 
       data = d;
          transferAcl = data->transferAcl; // any transfer ACL
+      data->aclSource = aclFile; 
          if (mgmtObject!=0){
              mgmtObject->set_transferAcl(transferAcl?1:0);
                  mgmtObject->set_policyFile(aclFile);

Modified: qpid/trunk/qpid/cpp/src/qpid/acl/AclData.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/acl/AclData.cpp?rev=911509&r1=911508&r2=911509&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/acl/AclData.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/acl/AclData.cpp Thu Feb 18 18:23:54 2010
@@ -24,7 +24,7 @@
 namespace qpid {
 namespace acl {
 
-AclData::AclData():decisionMode(qpid::acl::DENY),transferAcl(false)
+AclData::AclData():decisionMode(qpid::acl::DENY),transferAcl(false),aclSource("UNKNOWN")
 {
        for (unsigned int cnt=0; cnt< qpid::acl::ACTIONSIZE; cnt++){
            actionList[cnt]=0;
@@ -95,14 +95,40 @@
                                                                 << 
AclHelper::getPropertyStr(pMItr->first) << "'");
                                                }else if ( pMItr->first == 
acl::PROP_MAXQUEUECOUNT || pMItr->first == acl::PROP_MAXQUEUESIZE ) {
                                                       if ( pMItr->first == 
paramItr->first ) {
-                                                          uint64_t aclMax = 
boost::lexical_cast<uint64_t>(pMItr->second);
-                                                          uint64_t paramMax = 
boost::lexical_cast<uint64_t>(paramItr->second);
+
+                                                          uint64_t aclMax = 0;
+                                                          uint64_t paramMax = 
0;
+
+                                                          try{                 
     
+                                                              aclMax = 
boost::lexical_cast<uint64_t>(pMItr->second);
+                                                          }catch(const 
boost::bad_lexical_cast& e){
+                                                              match = false;  
+                                                              
QPID_LOG(error,"Error evaluating rule. " << 
+                                                              "Illegal value 
given in ACL source <" << aclSource <<
+                                                              "> for property 
'" <<  
+                                                              
AclHelper::getPropertyStr(pMItr->first) << "' : " << 
+                                                              
boost::lexical_cast<std::string>(pMItr->second));
+                                                              break;  
+                                                          } 
+                                        
+                                                          try{
+                                                              paramMax = 
boost::lexical_cast<uint64_t>(paramItr->second);
+                                                          }catch(const 
boost::bad_lexical_cast& e){
+                                                              match = false;
+                                                              
QPID_LOG(error,"Error evaluating rule. " <<
+                                                              "Illegal value 
given in lookup for property '" <<  
+                                                              
AclHelper::getPropertyStr(pMItr->first) << "' : " << 
+                                                              
boost::lexical_cast<std::string>(paramItr->second));
+                                                              break;           
                                                     
+                                                          } 
+
                                                           QPID_LOG(debug, 
"ACL: Numeric comparison for property " <<
                                                                    
AclHelper::getPropertyStr(paramItr->first)  <<
                                                                    " (value 
given in lookup = " << 
                                                                    
boost::lexical_cast<std::string>(paramItr->second) << 
                                                                    ", value 
give in rule = " <<
-                                                                   
boost::lexical_cast<std::string>(pMItr->second) << " )");  
+                                                                   
boost::lexical_cast<std::string>(pMItr->second) << " )");
+
                                                           if (( aclMax ) && ( 
paramMax == 0 || paramMax > aclMax)){
                                                               match = 
decisionMode == qpid::acl::ALLOW ;
                                                               QPID_LOG(debug, 
"ACL: Limit exceeded and match=" << 
@@ -110,8 +136,8 @@
                                                               " as decision 
mode is " << AclHelper::getAclResultStr(decisionMode));
                                                           }
                                                       }
-                                                }else if 
(matchProp(pMItr->second, paramItr->second)) {
-                                                       QPID_LOG(debug, "ACL: 
the pair("
+                        }else if (matchProp(pMItr->second, paramItr->second)) {
+                            QPID_LOG(debug, "ACL: the pair("
                                                                 << 
AclHelper::getPropertyStr(paramItr->first) << "," << paramItr->second
                                                                 << ") given in 
lookup matched the pair("
                                                                 << 
AclHelper::getPropertyStr(pMItr->first) << "," << pMItr->second << ") given in 
the rule"); 
@@ -121,8 +147,7 @@
                                                                 << ") given in 
lookup doesn't match the pair("
                                                                 << 
AclHelper::getPropertyStr(pMItr->first) << "," << pMItr->second << ") given in 
the rule");
                                                        match = false;
-                  
-                                                } 
+                        } 
                                        }
                                }
                                if (match)

Modified: qpid/trunk/qpid/cpp/src/qpid/acl/AclData.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/acl/AclData.h?rev=911509&r1=911508&r2=911509&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/acl/AclData.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/acl/AclData.h Thu Feb 18 18:23:54 2010
@@ -64,9 +64,10 @@
   
    // Action*[] -> Object*[] -> map<user -> set<Rule> >
    aclAction* actionList[qpid::acl::ACTIONSIZE];
-   qpid::acl::AclResult decisionMode;  // determines if the rule set is an 
deny or accept basis. 
+   qpid::acl::AclResult decisionMode;  // determines if the rule set is a deny 
or allow mode. 
    bool transferAcl;
-  
+   std::string aclSource; 
+   
    AclResult lookup(const std::string& id, const Action& action, const 
ObjectType& objType, const std::string& name, std::map<Property, std::string>* 
params=0);
    AclResult lookup(const std::string& id, const Action& action, const 
ObjectType& objType, const std::string& ExchangeName, const std::string& 
RoutingKey);
    AclResult getACLResult(bool logOnly, bool log);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to