]> granicus.if.org Git - icinga2/commitdiff
API: Fix requested attrs/joins/meta type errors in object query response 5497/head
authorStefar77 <Stefar77@users.noreply.github.com>
Fri, 11 Aug 2017 14:20:47 +0000 (16:20 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Fri, 11 Aug 2017 14:23:29 +0000 (16:23 +0200)
fixes #5377

Signed-off-by: Michael Friedrich <michael.friedrich@icinga.com>
lib/remote/objectqueryhandler.cpp

index 836e4510a3913f4b7928e88496bc9e07c11ca1bc..db731396a521b539c7e29e57f1b91633c5752dbc 100644 (file)
@@ -123,9 +123,32 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
        qd.Types.insert(type->GetName());
        qd.Permission = "objects/query/" + type->GetName();
 
-       Array::Ptr uattrs = params->Get("attrs");
-       Array::Ptr ujoins = params->Get("joins");
-       Array::Ptr umetas = params->Get("meta");
+       Array::Ptr uattrs, ujoins, umetas;
+
+       try {
+               uattrs = params->Get("attrs");
+       } catch (const std::exception&) {
+               HttpUtility::SendJsonError(response, 400,
+                    "Invalid type for 'attrs' attribute specified. Array type is required.", Empty);
+                return true;
+       }
+
+       try {
+               ujoins = params->Get("joins");
+       } catch (const std::exception&) {
+               HttpUtility::SendJsonError(response, 400,
+                    "Invalid type for 'joins' attribute specified. Array type is required.", Empty);
+                return true;
+       }
+
+       try {
+               umetas = params->Get("meta");
+       } catch (const std::exception&) {
+               HttpUtility::SendJsonError(response, 400,
+                    "Invalid type for 'meta' attribute specified. Array type is required.", Empty);
+               return true;
+       }
+
        bool allJoins = HttpUtility::GetLastParameter(params, "all_joins");
 
        params->Set("type", type->GetName());