From 2240fdd8c7763d169a6894cf702701823153e5bf Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Thu, 26 Oct 2017 09:10:02 -0400 Subject: [PATCH] [API CHANGE] Adjust the output structure for the "sysctllist" action in the system manager. The output now returns objects with value, type, and description of each sysctl instead of just the values. REST Request (example): ------------------------------- PUT /sysadm/systemmanager { "action" : "sysctllist" } WebSocket Request: ------------------------------- { "id" : "fooid", "namespace" : "sysadm", "args" : { "action" : "sysctllist" }, "name" : "systemmanager" } Response: ------------------------------- { "args": { "sysctllist": { "compat.ia32.maxdsiz": { "type": "unsigned long", "value": "536870912" }, "compat.ia32.maxssiz": { "type": "unsigned long", "value": "67108864" }, "compat.ia32.maxvmem": { "type": "unsigned long", "value": "0" }, "compat.linux.osname": { "description": "Linux kernel OS name", "type": "string", "value": "Linux" }, "compat.linux.osrelease": { "description": "Linux kernel OS release", "type": "string", "value": "2.6.32" }, "compat.linux.oss_version": { "description": "Linux OSS version", "type": "integer", "value": "198144" } } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 4 ++ src/server/library/sysadm-systemmanager.cpp | 47 +++++++++++++++++---- src/server/library/sysadm-systemmanager.h | 1 + 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index ebed74b..c6c0cb9 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -586,6 +586,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemMgmtRequest(const QJso ok = true; out->insert("reboot", sysadm::SysMgmt::systemReboot()); } + /*else if(act=="getsysctl"){ + ok = true; + out->insert("getsysctl", sysadm::SysMgmt::getSysctl(in_args.toObject())); + }*/ else if(act=="setsysctl"){ ok = true; out->insert("setsysctl", sysadm::SysMgmt::setSysctl(in_args.toObject())); diff --git a/src/server/library/sysadm-systemmanager.cpp b/src/server/library/sysadm-systemmanager.cpp index 57feae4..e8938a4 100644 --- a/src/server/library/sysadm-systemmanager.cpp +++ b/src/server/library/sysadm-systemmanager.cpp @@ -293,6 +293,26 @@ QJsonObject SysMgmt::procInfo() { return retObject; } +// Get a sysctl +QJsonObject SysMgmt::getSysctl(QJsonObject jsin) { + QJsonObject retObject; + + QStringList sysctl; + if(jsin.value("sysctl").isArray()){ sysctl = General::JsonArrayToStringList(jsin.value("sysctl").toArray()); } + else if(jsin.value("sysctl").isString()){ sysctl << jsin.value("sysctl").toString(); } + if ( sysctl.isEmpty() ) { + retObject.insert("error", "Missing required key 'sysctl'"); + return retObject; + } + + QStringList output = General::RunCommand("sysctl", sysctl).split("\n"); + for(int i=0; i