]> granicus.if.org Git - icinga2/commitdiff
Fix: API queries on non-existant objects cause exception
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 4 Feb 2016 21:40:01 +0000 (22:40 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 4 Feb 2016 21:40:01 +0000 (22:40 +0100)
fixes #11088

lib/remote/actionshandler.cpp
lib/remote/deleteobjecthandler.cpp
lib/remote/modifyobjecthandler.cpp
lib/remote/objectqueryhandler.cpp
lib/remote/statushandler.cpp
lib/remote/typequeryhandler.cpp

index 9b8968a7d1377c85c4c573246bb6b930560133ff..1ab952327fd88c81672e99a410256d7d2e2c5061 100644 (file)
@@ -64,8 +64,8 @@ bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& reques
                try {
                        objs = FilterUtility::GetFilterTargets(qd, params, user);
                } catch (const std::exception& ex) {
-                       HttpUtility::SendJsonError(response, 400,
-                           "Type/Filter was required but not provided or was invalid.",
+                       HttpUtility::SendJsonError(response, 404,
+                           "No objects found.",
                            HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
                        return true;
                }
index 0e9c39ad185c6bdb85f42d63ab7d9adb7ab53292..efdeb1facb0ec890c5627cef7f11730af6320a7e 100644 (file)
@@ -61,7 +61,16 @@ bool DeleteObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
                params->Set(attr, request.RequestUrl->GetPath()[3]);
        }
 
-       std::vector<Value> objs = FilterUtility::GetFilterTargets(qd, params, user);
+       std::vector<Value> objs;
+
+       try {
+               objs = FilterUtility::GetFilterTargets(qd, params, user);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 404,
+                   "No objects found.",
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
+               return true;
+       }
 
        bool cascade = HttpUtility::GetLastParameter(params, "cascade");
 
index a91fdb33664807ca4ebaea1bcb9f50cb06a18e5e..f648a19f23090a55d7c8f95e5727639557e3c73e 100644 (file)
@@ -59,7 +59,16 @@ bool ModifyObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
                params->Set(attr, request.RequestUrl->GetPath()[3]);
        }
 
-       std::vector<Value> objs = FilterUtility::GetFilterTargets(qd, params, user);
+       std::vector<Value> objs;
+
+       try {
+               objs = FilterUtility::GetFilterTargets(qd, params, user);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 404,
+                   "No objects found.",
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
+               return true;
+       }
 
        Dictionary::Ptr attrs = params->Get("attrs");
 
index e19d7f29c5d7d9acaead75ac7108fc358a2753d0..ef6c937a48f237d700ab754739f60f31c86e2526 100644 (file)
@@ -142,7 +142,16 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
                params->Set(attr, request.RequestUrl->GetPath()[3]);
        }
 
-       std::vector<Value> objs = FilterUtility::GetFilterTargets(qd, params, user);
+       std::vector<Value> objs;
+
+       try {
+               objs = FilterUtility::GetFilterTargets(qd, params, user);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 404,
+                   "No objects found.",
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
+               return true;
+       }
 
        Array::Ptr results = new Array();
        results->Reserve(objs.size());
index 08a293ee092f383bfc0e042470356a0f97f0e173..cce71fbef25c11a53fe112d4256e116499bb8705 100644 (file)
@@ -92,7 +92,16 @@ bool StatusHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request
        if (request.RequestUrl->GetPath().size() >= 3)
                params->Set("status", request.RequestUrl->GetPath()[2]);
 
-       std::vector<Value> objs = FilterUtility::GetFilterTargets(qd, params, user);
+       std::vector<Value> objs;
+
+       try {
+               objs = FilterUtility::GetFilterTargets(qd, params, user);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 404,
+                   "No objects found.",
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
+               return true;
+       }
 
        Array::Ptr results = Array::FromVector(objs);
 
index 12931639eaa4dc9b40695e54d1dac44abaee7098..ba8e5225c71567fd88329685e4bf598746aef00f 100644 (file)
@@ -97,7 +97,16 @@ bool TypeQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& requ
        if (request.RequestUrl->GetPath().size() >= 3)
                params->Set("name", request.RequestUrl->GetPath()[2]);
 
-       std::vector<Value> objs = FilterUtility::GetFilterTargets(qd, params, user);
+       std::vector<Value> objs;
+
+       try {
+               objs = FilterUtility::GetFilterTargets(qd, params, user);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 404,
+                   "No objects found.",
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
+               return true;
+       }
 
        Array::Ptr results = new Array();