From c2270445d31cf55cb1bce49104742841af8051fe Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 30 Oct 2014 15:22:55 +0100 Subject: [PATCH] Use VariableUtility for "pki ticket" fixes #7443 --- lib/cli/CMakeLists.txt | 2 +- lib/cli/pkiticketcommand.cpp | 10 ++++- lib/cli/variablegetcommand.cpp | 20 ++------- lib/cli/variablelistcommand.cpp | 30 +------------ lib/cli/variableutility.cpp | 77 +++++++++++++++++++++++++++++++++ lib/cli/variableutility.hpp | 48 ++++++++++++++++++++ 6 files changed, 139 insertions(+), 48 deletions(-) create mode 100644 lib/cli/variableutility.cpp create mode 100644 lib/cli/variableutility.hpp diff --git a/lib/cli/CMakeLists.txt b/lib/cli/CMakeLists.txt index d16ec9d5b..dd72801c6 100644 --- a/lib/cli/CMakeLists.txt +++ b/lib/cli/CMakeLists.txt @@ -25,7 +25,7 @@ set(cli_SOURCES pkinewcacommand.cpp pkinewcertcommand.cpp pkisigncsrcommand.cpp pkirequestcommand.cpp pkisavecertcommand.cpp pkiticketcommand.cpp pkiutility.cpp repositorycommitcommand.cpp repositoryobjectcommand.cpp repositoryutility.cpp - variablegetcommand.cpp variablelistcommand.cpp + variablegetcommand.cpp variablelistcommand.cpp variableutility.cpp ) if(ICINGA2_UNITY_BUILD) diff --git a/lib/cli/pkiticketcommand.cpp b/lib/cli/pkiticketcommand.cpp index bd7998e09..820aaf2e4 100644 --- a/lib/cli/pkiticketcommand.cpp +++ b/lib/cli/pkiticketcommand.cpp @@ -19,6 +19,7 @@ #include "cli/pkiticketcommand.hpp" #include "cli/pkiutility.hpp" +#include "cli/variableutility.hpp" #include "base/logger.hpp" #include @@ -57,10 +58,15 @@ int PKITicketCommand::Run(const boost::program_options::variables_map& vm, const return 1; } - if (!vm.count("salt")) { + String salt = VariableUtility::GetVariable("TicketSalt"); + + if (vm.count("salt")) + salt = vm["salt"].as(); + + if (salt.IsEmpty()) { Log(LogCritical, "cli", "Ticket salt (--salt) must be specified."); return 1; } - return PkiUtility::GenTicket(vm["cn"].as(), vm["salt"].as(), std::cout); + return PkiUtility::GenTicket(vm["cn"].as(), salt, std::cout); } diff --git a/lib/cli/variablegetcommand.cpp b/lib/cli/variablegetcommand.cpp index d204f550f..98a31d136 100644 --- a/lib/cli/variablegetcommand.cpp +++ b/lib/cli/variablegetcommand.cpp @@ -18,6 +18,7 @@ ******************************************************************************/ #include "cli/variablegetcommand.hpp" +#include "cli/variableutility.hpp" #include "base/logger.hpp" #include "base/application.hpp" #include "base/convert.hpp" @@ -84,24 +85,9 @@ int VariableGetCommand::Run(const boost::program_options::variables_map& vm, con return 1; } - std::fstream fp; - fp.open(varsfile.CStr(), std::ios_base::in); + Value value = VariableUtility::GetVariable(ap[0]); - StdioStream::Ptr sfp = make_shared(&fp, false); - - String message; - - while (NetString::ReadStringFromStream(sfp, &message)) { - Dictionary::Ptr variable = JsonDecode(message); - - if (variable->Get("name") == ap[0]) { - std::cout << variable->Get("value") << "\n"; - break; - } - } - - sfp->Close(); - fp.close(); + std::cout << value << "\n"; return 0; } diff --git a/lib/cli/variablelistcommand.cpp b/lib/cli/variablelistcommand.cpp index e3c0bbfe1..8ea15024d 100644 --- a/lib/cli/variablelistcommand.cpp +++ b/lib/cli/variablelistcommand.cpp @@ -18,14 +18,11 @@ ******************************************************************************/ #include "cli/variablelistcommand.hpp" +#include "cli/variableutility.hpp" #include "base/logger.hpp" #include "base/application.hpp" #include "base/convert.hpp" #include "base/dynamicobject.hpp" -#include "base/dynamictype.hpp" -#include "base/json.hpp" -#include "base/netstring.hpp" -#include "base/stdiostream.hpp" #include "base/debug.hpp" #include "base/objectlock.hpp" #include "base/console.hpp" @@ -66,31 +63,8 @@ int VariableListCommand::Run(const boost::program_options::variables_map& vm, co return 1; } - std::fstream fp; - fp.open(varsfile.CStr(), std::ios_base::in); - - StdioStream::Ptr sfp = make_shared(&fp, false); - unsigned long variables_count = 0; - - String message; - - while (NetString::ReadStringFromStream(sfp, &message)) { - PrintVariable(std::cout, message); - variables_count++; - } - - sfp->Close(); - fp.close(); - - Log(LogNotice, "cli") - << "Parsed " << variables_count << " variables."; + VariableUtility::PrintVariables(std::cout); return 0; } -void VariableListCommand::PrintVariable(std::ostream& fp, const String& message) -{ - Dictionary::Ptr variable = JsonDecode(message); - - std::cout << variable->Get("name") << " = " << variable->Get("value") << "\n"; -} diff --git a/lib/cli/variableutility.cpp b/lib/cli/variableutility.cpp new file mode 100644 index 000000000..2919cb796 --- /dev/null +++ b/lib/cli/variableutility.cpp @@ -0,0 +1,77 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org) * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software Foundation * + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ******************************************************************************/ + +#include "cli/variableutility.hpp" +#include "base/logger.hpp" +#include "base/application.hpp" +#include "base/utility.hpp" +#include "base/stdiostream.hpp" +#include "base/netstring.hpp" +#include "base/json.hpp" +#include "remote/jsonrpc.hpp" +#include + +using namespace icinga; + +Value VariableUtility::GetVariable(const String& name) +{ + String varsfile = Application::GetVarsPath(); + + std::fstream fp; + fp.open(varsfile.CStr(), std::ios_base::in); + + StdioStream::Ptr sfp = make_shared(&fp, false); + + String message; + + while (NetString::ReadStringFromStream(sfp, &message)) { + Dictionary::Ptr variable = JsonDecode(message); + + if (variable->Get("name") == name) { + return variable->Get("value"); + } + } + + return Empty; +} + +void VariableUtility::PrintVariables(std::ostream& outfp) +{ + String varsfile = Application::GetVarsPath(); + + std::fstream fp; + fp.open(varsfile.CStr(), std::ios_base::in); + + StdioStream::Ptr sfp = make_shared(&fp, false); + unsigned long variables_count = 0; + + String message; + + while (NetString::ReadStringFromStream(sfp, &message)) { + Dictionary::Ptr variable = JsonDecode(message); + outfp << variable->Get("name") << " = " << variable->Get("value") << "\n"; + variables_count++; + } + + sfp->Close(); + fp.close(); + + Log(LogNotice, "cli") + << "Parsed " << variables_count << " variables."; +} diff --git a/lib/cli/variableutility.hpp b/lib/cli/variableutility.hpp new file mode 100644 index 000000000..48dc4ea32 --- /dev/null +++ b/lib/cli/variableutility.hpp @@ -0,0 +1,48 @@ +/****************************************************************************** + * Icinga 2 * + * Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org) * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software Foundation * + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ******************************************************************************/ + +#ifndef VARIABLEUTILITY_H +#define VARIABLEUTILITY_H + +#include "base/i2-base.hpp" +#include "base/dictionary.hpp" +#include "base/string.hpp" +#include + +namespace icinga +{ + +/** + * @ingroup cli + */ +class VariableUtility +{ +public: + static Value GetVariable(const String& name); + static void PrintVariables(std::ostream& outfp); + +private: + VariableUtility(void); + + +}; + +} + +#endif /* VARIABLEUTILITY_H */