summaryrefslogtreecommitdiff
path: root/cpp/managementgen
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2010-11-09 21:15:03 +0000
committerTed Ross <tross@apache.org>2010-11-09 21:15:03 +0000
commit4870a01b7976362d3836ba0d56291f01b7f2e6af (patch)
tree921b002956ec18c7fe5602b0641e9dd8395b7f98 /cpp/managementgen
parentd282da7e6f515ded59a76b4dfbc2bedab8f7f6d7 (diff)
downloadqpid-python-4870a01b7976362d3836ba0d56291f01b7f2e6af.tar.gz
QPID-2934 Feature to pass the authenticated userId to QMF agent method handlers for authorization
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1033232 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/managementgen')
-rwxr-xr-xcpp/managementgen/qmfgen/schema.py26
-rw-r--r--cpp/managementgen/qmfgen/templates/Class.h6
2 files changed, 22 insertions, 10 deletions
diff --git a/cpp/managementgen/qmfgen/schema.py b/cpp/managementgen/qmfgen/schema.py
index f01d5ee9b2..fdbc7c7be8 100755
--- a/cpp/managementgen/qmfgen/schema.py
+++ b/cpp/managementgen/qmfgen/schema.py
@@ -1228,12 +1228,12 @@ class SchemaClass:
inArgCount = inArgCount + 1
if methodCount == 0:
- stream.write ("string&, const string&, string& outStr")
+ stream.write ("string&, const string&, string& outStr, const string&")
else:
if inArgCount == 0:
- stream.write ("string& methodName, const string&, string& outStr")
+ stream.write ("string& methodName, const string&, string& outStr, const string& userId")
else:
- stream.write ("string& methodName, const string& inStr, string& outStr")
+ stream.write ("string& methodName, const string& inStr, string& outStr, const string& userId")
def genDoMapMethodArgs (self, stream, variables):
@@ -1248,16 +1248,16 @@ class SchemaClass:
if methodCount == 0:
stream.write ("string&," +
" const ::qpid::types::Variant::Map&," +
- " ::qpid::types::Variant::Map& outMap")
+ " ::qpid::types::Variant::Map& outMap, const string&")
else:
if inArgCount == 0:
stream.write ("string& methodName," +
" const ::qpid::types::Variant::Map&," +
- " ::qpid::types::Variant::Map& outMap")
+ " ::qpid::types::Variant::Map& outMap, const string& userId")
else:
stream.write ("string& methodName," +
" const ::qpid::types::Variant::Map& inMap," +
- " ::qpid::types::Variant::Map& outMap")
+ " ::qpid::types::Variant::Map& outMap, const string& userId")
def genHiLoStatResets (self, stream, variables):
for inst in self.statistics:
@@ -1367,8 +1367,13 @@ class SchemaClass:
arg.dir.lower () + "_" +\
arg.name, "inBuf") + ";\n")
- stream.write (" status = coreObject->ManagementMethod (METHOD_" +\
+ stream.write (" bool allow = coreObject->AuthorizeMethod(METHOD_" +\
+ method.getName().upper() + ", ioArgs, userId);\n")
+ stream.write (" if (allow)\n")
+ stream.write (" status = coreObject->ManagementMethod (METHOD_" +\
method.getName().upper() + ", ioArgs, text);\n")
+ stream.write (" else\n")
+ stream.write (" status = Manageable::STATUS_FORBIDDEN;\n")
stream.write (" outBuf.putLong (status);\n")
stream.write (" outBuf.putMediumString(::qpid::management::Manageable::StatusText (status, text));\n")
for arg in method.args:
@@ -1402,8 +1407,13 @@ class SchemaClass:
arg.name,
"inMap")
- stream.write (" status = coreObject->ManagementMethod (METHOD_" +\
+ stream.write (" bool allow = coreObject->AuthorizeMethod(METHOD_" +\
+ method.getName().upper() + ", ioArgs, userId);\n")
+ stream.write (" if (allow)\n")
+ stream.write (" status = coreObject->ManagementMethod (METHOD_" +\
method.getName().upper() + ", ioArgs, text);\n")
+ stream.write (" else\n")
+ stream.write (" status = Manageable::STATUS_FORBIDDEN;\n")
stream.write (" outMap[\"_status_code\"] = (uint32_t) status;\n")
stream.write (" outMap[\"_status_text\"] = ::qpid::management::Manageable::StatusText(status, text);\n")
for arg in method.args:
diff --git a/cpp/managementgen/qmfgen/templates/Class.h b/cpp/managementgen/qmfgen/templates/Class.h
index cdb31c4c9e..4bcd423a26 100644
--- a/cpp/managementgen/qmfgen/templates/Class.h
+++ b/cpp/managementgen/qmfgen/templates/Class.h
@@ -79,7 +79,8 @@ class /*MGEN:Class.NameCap*/ : public ::qpid::management::ManagementObject
void mapDecodeValues(const ::qpid::types::Variant::Map& map);
void doMethod(std::string& methodName,
const ::qpid::types::Variant::Map& inMap,
- ::qpid::types::Variant::Map& outMap);
+ ::qpid::types::Variant::Map& outMap,
+ const std::string& userId);
std::string getKey() const;
/*MGEN:IF(Root.GenQMFv1)*/
uint32_t writePropertiesSize() const;
@@ -88,7 +89,8 @@ class /*MGEN:Class.NameCap*/ : public ::qpid::management::ManagementObject
void writeStatistics(std::string& buf, bool skipHeaders = false);
void doMethod(std::string& methodName,
const std::string& inBuf,
- std::string& outBuf);
+ std::string& outBuf,
+ const std::string& userId);
/*MGEN:ENDIF*/
writeSchemaCall_t getWriteSchemaCall() { return writeSchema; }