summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Tanous <ed.tanous@intel.com>2019-03-25 22:25:26 +0300
committerEd Tanous <ed.tanous@intel.com>2019-03-25 22:25:26 +0300
commitb01bf2991955ef267ce2be8e7a18eac984990de8 (patch)
treef34f5fe0ce9c786ddee196f5082e46090c0ccfcf
parent6ea007a2faec52ad62680015d2a3f00371a1e351 (diff)
downloadbmcweb-b01bf2991955ef267ce2be8e7a18eac984990de8.tar.xz
Revert "bmcweb: Fix a bunch of warnings"
This reverts commit 6ea007a2faec52ad62680015d2a3f00371a1e351. Reason for revert: Reports of bmcweb seg faults. Change-Id: I408f1bb29c2f8e427a6621cdaac8c31b847ebf06
-rw-r--r--CMakeLists.txt2
-rw-r--r--crow/include/crow/http_connection.h11
-rw-r--r--crow/include/crow/http_request.h2
-rw-r--r--crow/include/crow/http_server.h8
-rw-r--r--crow/include/crow/logging.h1
-rw-r--r--crow/include/crow/query_string.h25
-rw-r--r--crow/include/crow/routing.h127
-rw-r--r--crow/include/crow/timer_queue.h9
-rw-r--r--crow/include/crow/utility.h36
-rw-r--r--include/dbus_monitor.hpp2
-rw-r--r--include/dbus_utility.hpp7
-rw-r--r--include/openbmc_dbus_rest.hpp9
-rw-r--r--include/pam_authenticate.hpp2
-rw-r--r--include/persistent_data_middleware.hpp4
-rw-r--r--include/sessions.hpp10
-rw-r--r--include/ssl_key_handler.hpp97
-rw-r--r--redfish-core/include/privileges.hpp10
-rw-r--r--redfish-core/lib/ethernet.hpp56
-rw-r--r--redfish-core/lib/log_services.hpp26
-rw-r--r--redfish-core/lib/managers.hpp6
-rw-r--r--redfish-core/lib/power.hpp5
-rw-r--r--redfish-core/lib/sensors.hpp16
-rw-r--r--redfish-core/lib/thermal.hpp2
23 files changed, 249 insertions, 224 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3bedfe7836..1300c23573 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,7 +60,7 @@ set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror")
+set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -Wall")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-rtti")
diff --git a/crow/include/crow/http_connection.h b/crow/include/crow/http_connection.h
index d7598bd168..c02f4ec1e3 100644
--- a/crow/include/crow/http_connection.h
+++ b/crow/include/crow/http_connection.h
@@ -345,7 +345,7 @@ class Connection
};
ctx = detail::Context<Middlewares...>();
- req->middlewareContext = static_cast<void*>(&ctx);
+ req->middlewareContext = (void*)&ctx;
req->ioService = &adaptor.get_executor().context();
detail::middlewareCallHelper<
0, decltype(ctx), decltype(*middlewares), Middlewares...>(
@@ -388,13 +388,14 @@ class Connection
needToCallAfterHandlers = false;
// call all afterHandler of middlewares
- detail::afterHandlersCallHelper<
- static_cast<int>(sizeof...(Middlewares) - 1), decltype(ctx),
- decltype(*middlewares)>(*middlewares, ctx, *req, res);
+ detail::afterHandlersCallHelper<((int)sizeof...(Middlewares) - 1),
+ decltype(ctx),
+ decltype(*middlewares)>(
+ *middlewares, ctx, *req, res);
}
// auto self = this->shared_from_this();
- res.completeRequestHandler = [] {};
+ res.completeRequestHandler = res.completeRequestHandler = [] {};
if (!adaptor.lowest_layer().is_open())
{
diff --git a/crow/include/crow/http_request.h b/crow/include/crow/http_request.h
index fa12c26e92..0ba02664de 100644
--- a/crow/include/crow/http_request.h
+++ b/crow/include/crow/http_request.h
@@ -27,7 +27,7 @@ struct Request
{
}
- boost::beast::http::verb method() const
+ const boost::beast::http::verb method() const
{
return req.method();
}
diff --git a/crow/include/crow/http_server.h b/crow/include/crow/http_server.h
index eace64fcfe..75b49a463f 100644
--- a/crow/include/crow/http_server.h
+++ b/crow/include/crow/http_server.h
@@ -121,17 +121,17 @@ class Server
boost::asio::deadline_timer timer(*ioService);
timer.expires_from_now(boost::posix_time::seconds(1));
- std::function<void(const boost::system::error_code& ec)> fHandler;
- fHandler = [&](const boost::system::error_code& ec) {
+ std::function<void(const boost::system::error_code& ec)> handler;
+ handler = [&](const boost::system::error_code& ec) {
if (ec)
{
return;
}
timerQueue.process();
timer.expires_from_now(boost::posix_time::seconds(1));
- timer.async_wait(fHandler);
+ timer.async_wait(handler);
};
- timer.async_wait(fHandler);
+ timer.async_wait(handler);
if (tickFunction && tickInterval.count() > 0)
{
diff --git a/crow/include/crow/logging.h b/crow/include/crow/logging.h
index 0d24940820..9da47b733a 100644
--- a/crow/include/crow/logging.h
+++ b/crow/include/crow/logging.h
@@ -30,7 +30,6 @@ class ILogHandler
{
public:
virtual void log(std::string message, LogLevel level) = 0;
- virtual ~ILogHandler(){};
};
class CerrLogHandler : public ILogHandler
diff --git a/crow/include/crow/query_string.h b/crow/include/crow/query_string.h
index b38d0ed1be..553960eb6f 100644
--- a/crow/include/crow/query_string.h
+++ b/crow/include/crow/query_string.h
@@ -19,16 +19,16 @@ int qsStrncmp(const char* s, const char* qs, size_t n);
* Also decodes the value portion of the k/v pair *in-place*. In a future
* enhancement it will also have a compile-time option of sorting qs_kv
* alphabetically by key. */
-size_t qsParse(char* qs, char* qs_kv[], size_t qs_kv_size);
+int qsParse(char* qs, char* qs_kv[], int qs_kv_size);
/* Used by qs_parse to decode the value portion of a k/v pair */
-size_t qsDecode(char* qs);
+int qsDecode(char* qs);
/* Looks up the value according to the key on a pre-processed query string
* A future enhancement will be a compile-time option to look up the key
* in a pre-sorted qs_kv array via a binary search. */
// char * qs_k2v(const char * key, char * qs_kv[], int qs_kv_size);
-char* qsK2v(const char* key, char* const* qs_kv, size_t qs_kv_size, size_t nth);
+char* qsK2v(const char* key, char* const* qs_kv, int qs_kv_size, int nth);
/* Non-destructive lookup of value, based on key. User provides the
* destinaton string and length. */
@@ -127,9 +127,9 @@ inline int qsStrncmp(const char* s, const char* qs, size_t n)
}
}
-inline size_t qsParse(char* qs, char* qs_kv[], size_t qs_kv_size)
+inline int qsParse(char* qs, char* qs_kv[], int qs_kv_size)
{
- size_t i, j;
+ int i, j;
char* substrPtr;
for (i = 0; i < qs_kv_size; i++)
@@ -184,9 +184,9 @@ inline size_t qsParse(char* qs, char* qs_kv[], size_t qs_kv_size)
return i;
}
-inline size_t qsDecode(char* qs)
+inline int qsDecode(char* qs)
{
- size_t i = 0, j = 0;
+ int i = 0, j = 0;
while (BMCWEB_QS_ISQSCHR(qs[j]))
{
@@ -217,10 +217,10 @@ inline size_t qsDecode(char* qs)
return i;
}
-inline char* qsK2v(const char* key, char* const* qs_kv, size_t qs_kv_size,
- size_t nth = 0)
+inline char* qsK2v(const char* key, char* const* qs_kv, int qs_kv_size,
+ int nth = 0)
{
- size_t i;
+ int i;
size_t keyLen, skip;
keyLen = strlen(key);
@@ -353,8 +353,7 @@ class QueryString
keyValuePairs.resize(maxKeyValuePairsCount);
- size_t count =
- qsParse(&url[0], &keyValuePairs[0], maxKeyValuePairsCount);
+ int count = qsParse(&url[0], &keyValuePairs[0], maxKeyValuePairsCount);
keyValuePairs.resize(count);
}
@@ -392,7 +391,7 @@ class QueryString
std::string plus = name + "[]";
char* element = nullptr;
- size_t count = 0;
+ int count = 0;
while (1)
{
element = qsK2v(plus.c_str(), keyValuePairs.data(),
diff --git a/crow/include/crow/routing.h b/crow/include/crow/routing.h
index d7e3fd33f0..746e115894 100644
--- a/crow/include/crow/routing.h
+++ b/crow/include/crow/routing.h
@@ -63,8 +63,7 @@ class BaseRule
}
protected:
- uint32_t methodsBitfield{
- 1 << static_cast<int>(boost::beast::http::verb::get)};
+ uint32_t methodsBitfield{1 << (int)boost::beast::http::verb::get};
std::string rule;
std::string nameStr;
@@ -363,33 +362,29 @@ template <typename T> struct RuleParameterTraits
using self_t = T;
WebSocketRule& websocket()
{
- self_t* s = static_cast<self_t*>(this);
- auto p = new WebSocketRule(s->rule);
- s->ruleToUpgrade.reset(p);
+ auto p = new WebSocketRule(((self_t*)this)->rule);
+ ((self_t*)this)->ruleToUpgrade.reset(p);
return *p;
}
self_t& name(std::string name) noexcept
{
- self_t* s = static_cast<self_t*>(this);
- s->nameStr = std::move(name);
- return *s;
+ ((self_t*)this)->nameStr = std::move(name);
+ return (self_t&)*this;
}
self_t& methods(boost::beast::http::verb method)
{
- self_t* s = static_cast<self_t*>(this);
- s->methodsBitfield = 1 << static_cast<int>(method);
- return *s;
+ ((self_t*)this)->methodsBitfield = 1 << (int)method;
+ return (self_t&)*this;
}
template <typename... MethodArgs>
self_t& methods(boost::beast::http::verb method, MethodArgs... args_method)
{
- self_t* s = static_cast<self_t*>(this);
methods(args_method...);
- s->methodsBitfield |= 1 << static_cast<int>(method);
- return *s;
+ ((self_t*)this)->methodsBitfield |= 1 << (int)method;
+ return (self_t&)*this;
}
};
@@ -586,7 +581,7 @@ class Trie
struct Node
{
unsigned ruleIndex{};
- std::array<unsigned, static_cast<int>(ParamType::MAX)> paramChildrens{};
+ std::array<unsigned, (int)ParamType::MAX> paramChildrens{};
boost::container::flat_map<std::string, unsigned> children;
bool isSimpleNode() const
@@ -680,15 +675,14 @@ class Trie
route_indexes.push_back(child->ruleIndex);
}
findRouteIndexes(req_url, route_indexes, child,
- pos + static_cast<unsigned>(fragment.size()));
+ pos + fragment.size());
}
else
{
if (req_url.compare(pos, fragment.size(), fragment) == 0)
{
- findRouteIndexes(
- req_url, route_indexes, child,
- pos + static_cast<unsigned>(fragment.size()));
+ findRouteIndexes(req_url, route_indexes, child,
+ pos + fragment.size());
}
}
}
@@ -719,7 +713,7 @@ class Trie
}
};
- if (node->paramChildrens[static_cast<int>(ParamType::INT)])
+ if (node->paramChildrens[(int)ParamType::INT])
{
char c = req_url[pos];
if ((c >= '0' && c <= '9') || c == '+' || c == '-')
@@ -731,18 +725,17 @@ class Trie
if (errno != ERANGE && eptr != req_url.data() + pos)
{
params->intParams.push_back(value);
- auto ret = find(
- req_url,
- &nodes[node->paramChildrens[static_cast<int>(
- ParamType::INT)]],
- static_cast<unsigned>(eptr - req_url.data()), params);
+ auto ret =
+ find(req_url,
+ &nodes[node->paramChildrens[(int)ParamType::INT]],
+ eptr - req_url.data(), params);
updateFound(ret);
params->intParams.pop_back();
}
}
}
- if (node->paramChildrens[static_cast<int>(ParamType::UINT)])
+ if (node->paramChildrens[(int)ParamType::UINT])
{
char c = req_url[pos];
if ((c >= '0' && c <= '9') || c == '+')
@@ -754,18 +747,17 @@ class Trie
if (errno != ERANGE && eptr != req_url.data() + pos)
{
params->uintParams.push_back(value);
- auto ret = find(
- req_url,
- &nodes[node->paramChildrens[static_cast<int>(
- ParamType::UINT)]],
- static_cast<unsigned>(eptr - req_url.data()), params);
+ auto ret =
+ find(req_url,
+ &nodes[node->paramChildrens[(int)ParamType::UINT]],
+ eptr - req_url.data(), params);
updateFound(ret);
params->uintParams.pop_back();
}
}
}
- if (node->paramChildrens[static_cast<int>(ParamType::DOUBLE)])
+ if (node->paramChildrens[(int)ParamType::DOUBLE])
{
char c = req_url[pos];
if ((c >= '0' && c <= '9') || c == '+' || c == '-' || c == '.')
@@ -778,18 +770,17 @@ class Trie
params->doubleParams.push_back(value);
auto ret = find(
req_url,
- &nodes[node->paramChildrens[static_cast<int>(
- ParamType::DOUBLE)]],
- static_cast<unsigned>(eptr - req_url.data()), params);
+ &nodes[node->paramChildrens[(int)ParamType::DOUBLE]],
+ eptr - req_url.data(), params);
updateFound(ret);
params->doubleParams.pop_back();
}
}
}
- if (node->paramChildrens[static_cast<int>(ParamType::STRING)])
+ if (node->paramChildrens[(int)ParamType::STRING])
{
- unsigned epos = pos;
+ size_t epos = pos;
for (; epos < req_url.size(); epos++)
{
if (req_url[epos] == '/')
@@ -800,27 +791,26 @@ class Trie
{
params->stringParams.emplace_back(
req_url.substr(pos, epos - pos));
- auto ret = find(req_url,
- &nodes[node->paramChildrens[static_cast<int>(
- ParamType::STRING)]],
- epos, params);
+ auto ret =
+ find(req_url,
+ &nodes[node->paramChildrens[(int)ParamType::STRING]],
+ epos, params);
updateFound(ret);
params->stringParams.pop_back();
}
}
- if (node->paramChildrens[static_cast<int>(ParamType::PATH)])
+ if (node->paramChildrens[(int)ParamType::PATH])
{
- unsigned epos = static_cast<unsigned>(req_url.size());
+ size_t epos = req_url.size();
if (epos != pos)
{
params->stringParams.emplace_back(
req_url.substr(pos, epos - pos));
- auto ret = find(req_url,
- &nodes[node->paramChildrens[static_cast<int>(
- ParamType::PATH)]],
- epos, params);
+ auto ret = find(
+ req_url, &nodes[node->paramChildrens[(int)ParamType::PATH]],
+ epos, params);
updateFound(ret);
params->stringParams.pop_back();
}
@@ -833,9 +823,7 @@ class Trie
if (req_url.compare(pos, fragment.size(), fragment) == 0)
{
- auto ret =
- find(req_url, child,
- pos + static_cast<unsigned>(fragment.size()), params);
+ auto ret = find(req_url, child, pos + fragment.size(), params);
updateFound(ret);
}
}
@@ -870,16 +858,12 @@ class Trie
{
if (url.compare(i, x.name.size(), x.name) == 0)
{
- if (!nodes[idx]
- .paramChildrens[static_cast<size_t>(x.type)])
+ if (!nodes[idx].paramChildrens[(int)x.type])
{
auto newNodeIdx = newNode();
- nodes[idx]
- .paramChildrens[static_cast<size_t>(x.type)] =
- newNodeIdx;
+ nodes[idx].paramChildrens[(int)x.type] = newNodeIdx;
}
- idx = nodes[idx]
- .paramChildrens[static_cast<size_t>(x.type)];
+ idx = nodes[idx].paramChildrens[(int)x.type];
i += x.name.size();
break;
}
@@ -904,15 +888,15 @@ class Trie
}
private:
- void debugNodePrint(Node* n, unsigned level)
+ void debugNodePrint(Node* n, int level)
{
- for (size_t i = 0; i < static_cast<size_t>(ParamType::MAX); i++)
+ for (int i = 0; i < (int)ParamType::MAX; i++)
{
if (n->paramChildrens[i])
{
BMCWEB_LOG_DEBUG << std::string(
2 * level, ' ') /*<< "("<<n->paramChildrens[i]<<") "*/;
- switch (static_cast<ParamType>(i))
+ switch ((ParamType)i)
{
case ParamType::INT:
BMCWEB_LOG_DEBUG << "<int>";
@@ -966,7 +950,7 @@ class Trie
unsigned newNode()
{
nodes.resize(nodes.size() + 1);
- return static_cast<unsigned>(nodes.size() - 1);
+ return nodes.size() - 1;
}
std::vector<Node> nodes;
@@ -1007,14 +991,13 @@ class Router
std::unique_ptr<BaseRule> ruleObject)
{
rules.emplace_back(std::move(ruleObject));
- trie.add(rule, static_cast<unsigned>(rules.size() - 1));
+ trie.add(rule, rules.size() - 1);
// directory case:
// request to `/about' url matches `/about/' rule
if (rule.size() > 2 && rule.back() == '/')
{
- trie.add(rule.substr(0, rule.size() - 1),
- static_cast<unsigned>(rules.size() - 1));
+ trie.add(rule.substr(0, rule.size() - 1), rules.size() - 1);
}
}
@@ -1073,12 +1056,12 @@ class Router
return;
}
- if ((rules[ruleIndex]->getMethods() &
- (1 << static_cast<uint32_t>(req.method()))) == 0)
+ if ((rules[ruleIndex]->getMethods() & (1 << (uint32_t)req.method())) ==
+ 0)
{
BMCWEB_LOG_DEBUG << "Rule found but method mismatch: " << req.url
<< " with " << req.methodString() << "("
- << static_cast<uint32_t>(req.method()) << ") / "
+ << (uint32_t)req.method() << ") / "
<< rules[ruleIndex]->getMethods();
res = Response(boost::beast::http::status::not_found);
res.end();
@@ -1086,7 +1069,7 @@ class Router
}
BMCWEB_LOG_DEBUG << "Matched rule (upgrade) '" << rules[ruleIndex]->rule
- << "' " << static_cast<uint32_t>(req.method()) << " / "
+ << "' " << (uint32_t)req.method() << " / "
<< rules[ruleIndex]->getMethods();
// any uncaught exceptions become 500s
@@ -1151,12 +1134,12 @@ class Router
return;
}
- if ((rules[ruleIndex]->getMethods() &
- (1 << static_cast<uint32_t>(req.method()))) == 0)
+ if ((rules[ruleIndex]->getMethods() & (1 << (uint32_t)req.method())) ==
+ 0)
{
BMCWEB_LOG_DEBUG << "Rule found but method mismatch: " << req.url
<< " with " << req.methodString() << "("
- << static_cast<uint32_t>(req.method()) << ") / "
+ << (uint32_t)req.method() << ") / "
<< rules[ruleIndex]->getMethods();
res = Response(boost::beast::http::status::not_found);
res.end();
@@ -1164,7 +1147,7 @@ class Router
}
BMCWEB_LOG_DEBUG << "Matched rule '" << rules[ruleIndex]->rule << "' "
- << static_cast<uint32_t>(req.method()) << " / "
+ << (uint32_t)req.method() << " / "
<< rules[ruleIndex]->getMethods();
// any uncaught exceptions become 500s
diff --git a/crow/include/crow/timer_queue.h b/crow/include/crow/timer_queue.h
index 556fdb3c30..bf1e084a00 100644
--- a/crow/include/crow/timer_queue.h
+++ b/crow/include/crow/timer_queue.h
@@ -22,11 +22,10 @@ class TimerQueue
void cancel(int k)
{
- int index = k - step;
-
- if (index < static_cast<int>(dq.size()))
+ unsigned int index = static_cast<unsigned int>(k - step);
+ if (index < dq.size())
{
- dq[static_cast<size_t>(index)].second = nullptr;
+ dq[index].second = nullptr;
}
}
@@ -34,7 +33,7 @@ class TimerQueue
{
dq.push_back(
std::make_pair(std::chrono::steady_clock::now(), std::move(f)));
- int ret = step + static_cast<int>(dq.size()) - 1;
+ int ret = step + dq.size() - 1;
BMCWEB_LOG_DEBUG << "timer add inside: " << this << ' ' << ret;
return ret;
diff --git a/crow/include/crow/utility.h b/crow/include/crow/utility.h
index 5c7a7f6265..a07c0415af 100644
--- a/crow/include/crow/utility.h
+++ b/crow/include/crow/utility.h
@@ -524,7 +524,7 @@ struct function_traits<std::function<r(Args...)>>
};
inline static std::string base64encode(
- const uint8_t* data, size_t size,
+ const char* data, size_t size,
const char* key =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
{
@@ -533,36 +533,36 @@ inline static std::string base64encode(
auto it = ret.begin();
while (size >= 3)
{
- *it++ = key[(*data & 0xFC) >> 2];
- uint8_t h = static_cast<uint8_t>((*data++ & 0x03) << 4);
- *it++ = key[h | ((*data & 0xF0) >> 4)];
- h = static_cast<uint8_t>((*data++ & 0x0F) << 2);
- *it++ = key[h | ((*data & 0xC0) >> 6)];
- *it++ = key[*data++ & 0x3F];
+ *it++ = key[(((unsigned char)*data) & 0xFC) >> 2];
+ unsigned char h = (((unsigned char)*data++) & 0x03) << 4;
+ *it++ = key[h | ((((unsigned char)*data) & 0xF0) >> 4)];
+ h = (((unsigned char)*data++) & 0x0F) << 2;
+ *it++ = key[h | ((((unsigned char)*data) & 0xC0) >> 6)];
+ *it++ = key[((unsigned char)*data++) & 0x3F];
size -= 3;
}
if (size == 1)
{
- *it++ = key[(*data & 0xFC) >> 2];
- uint8_t h = static_cast<uint8_t>((*data++ & 0x03) << 4);
+ *it++ = key[(((unsigned char)*data) & 0xFC) >> 2];
+ unsigned char h = (((unsigned char)*data++) & 0x03) << 4;
*it++ = key[h];
*it++ = '=';
*it++ = '=';
}
else if (size == 2)
{
- *it++ = key[(*data & 0xFC) >> 2];
- uint8_t h = static_cast<uint8_t>((*data++ & 0x03) << 4);
- *it++ = key[h | ((*data & 0xF0) >> 4)];
- h = static_cast<uint8_t>((*data++ & 0x0F) << 2);
+ *it++ = key[(((unsigned char)*data) & 0xFC) >> 2];
+ unsigned char h = (((unsigned char)*data++) & 0x03) << 4;
+ *it++ = key[h | ((((unsigned char)*data) & 0xF0) >> 4)];
+ h = (((unsigned char)*data++) & 0x0F) << 2;
*it++ = key[h];
*it++ = '=';
}
return ret;
}
-inline static std::string base64encodeUrlsafe(const uint8_t* data, size_t size)
+inline static std::string base64encodeUrlsafe(const char* data, size_t size)
{
return base64encode(
data, size,
@@ -669,14 +669,10 @@ inline bool base64Decode(const std::string_view input, std::string& output)
inline void escapeHtml(std::string& data)
{
- if (data.empty())
- {
- return;
- }
std::string buffer;
- // less than 10% of characters should be larger, so reserve a buffer of the
+ // less than 5% of characters should be larger, so reserve a buffer of the
// right size
- buffer.reserve(data.size() * 11 / 10);
+ buffer.reserve(data.size() * 1.05);
for (size_t pos = 0; pos != data.size(); ++pos)
{
switch (data[pos])
diff --git a/include/dbus_monitor.hpp b/include/dbus_monitor.hpp
index cddafc8c06..1b82697f7a 100644
--- a/include/dbus_monitor.hpp
+++ b/include/dbus_monitor.hpp
@@ -150,7 +150,7 @@ template <typename... Middlewares> void requestRoutes(Crow<Middlewares...>& app)
nlohmann::json::iterator paths = j.find("paths");
if (paths != j.end())
{
- size_t interfaceCount = thisSession.interfaces.size();
+ int interfaceCount = thisSession.interfaces.size();
if (interfaceCount == 0)
{
interfaceCount = 1;
diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp
index 947bc86eaf..e45bb9ac50 100644
--- a/include/dbus_utility.hpp
+++ b/include/dbus_utility.hpp
@@ -48,8 +48,8 @@ inline bool getNthStringFromPath(const std::string& path, int index,
std::string& result)
{
int count = 0;
- std::string::const_iterator first = path.begin();
- std::string::const_iterator last = path.end();
+ auto first = path.begin();
+ auto last = path.end();
for (auto it = path.begin(); it < path.end(); it++)
{
// skip first character as it's either a leading slash or the first
@@ -80,8 +80,7 @@ inline bool getNthStringFromPath(const std::string& path, int index,
{
first++;
}
- result = path.substr(static_cast<size_t>(first - path.begin()),
- static_cast<size_t>(last - first));
+ result = path.substr(first - path.begin(), last - first);
return true;
}
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index e59692020b..ab35bb2efc 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -570,9 +570,8 @@ int convertJsonToDbus(sd_bus_message *m, const std::string &arg_type,
{
return -1;
}
- r = sd_bus_message_append_basic(
- m, argCode[0],
- reinterpret_cast<const void *>(stringValue->c_str()));
+ r = sd_bus_message_append_basic(m, argCode[0],
+ (void *)stringValue->c_str());
if (r < 0)
{
return r;
@@ -738,13 +737,13 @@ int convertJsonToDbus(sd_bus_message *m, const std::string &arg_type,
}
nlohmann::json::const_iterator it = j->begin();
- for (const std::string &argCode2 : dbusArgSplit(arg_type))
+ for (const std::string &argCode : dbusArgSplit(arg_type))
{
if (it == j->end())
{
return -1;
}
- r = convertJsonToDbus(m, argCode2, *it);
+ r = convertJsonToDbus(m, argCode, *it);
if (r < 0)
{
return r;
diff --git a/include/pam_authenticate.hpp b/include/pam_authenticate.hpp
index 1469aef728..f211a29ec7 100644
--- a/include/pam_authenticate.hpp
+++ b/include/pam_authenticate.hpp
@@ -25,7 +25,7 @@ inline int pamFunctionConversation(int numMsg, const struct pam_message** msg,
std::strcpy(pass, appPass);
*resp = reinterpret_cast<pam_response*>(
- calloc(static_cast<size_t>(numMsg), sizeof(struct pam_response)));
+ calloc(numMsg, sizeof(struct pam_response)));
if (resp == nullptr)
{
diff --git a/include/persistent_data_middleware.hpp b/include/persistent_data_middleware.hpp
index 4cd75e889d..b384f02304 100644
--- a/include/persistent_data_middleware.hpp
+++ b/include/persistent_data_middleware.hpp
@@ -24,7 +24,7 @@ class Middleware
{
// todo(ed) should read this from a fixed location somewhere, not CWD
static constexpr const char* filename = "bmcweb_persistent_data.json";
- uint64_t jsonRevision = 1;
+ int jsonRevision = 1;
public:
struct Context
@@ -58,7 +58,7 @@ class Middleware
void readData()
{
std::ifstream persistentFile(filename);
- uint64_t fileRevision = 0;
+ int fileRevision = 0;
if (persistentFile.is_open())
{
// call with exceptions disabled
diff --git a/include/sessions.hpp b/include/sessions.hpp
index d55b1992d4..6bc1c99f04 100644
--- a/include/sessions.hpp
+++ b/include/sessions.hpp
@@ -119,22 +119,22 @@ class SessionStore
// https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Session_ID_Entropy
std::string sessionToken;
sessionToken.resize(20, '0');
- std::uniform_int_distribution<size_t> dist(0, alphanum.size() - 1);
- for (size_t i = 0; i < sessionToken.size(); ++i)
+ std::uniform_int_distribution<int> dist(0, alphanum.size() - 1);
+ for (int i = 0; i < sessionToken.size(); ++i)
{
sessionToken[i] = alphanum[dist(rd)];
}
// Only need csrf tokens for cookie based auth, token doesn't matter
std::string csrfToken;
csrfToken.resize(20, '0');
- for (size_t i = 0; i < csrfToken.size(); ++i)
+ for (int i = 0; i < csrfToken.size(); ++i)
{
csrfToken[i] = alphanum[dist(rd)];
}
std::string uniqueId;
uniqueId.resize(10, '0');
- for (size_t i = 0; i < uniqueId.size(); ++i)
+ for (int i = 0; i < uniqueId.size(); ++i)
{
uniqueId[i] = alphanum[dist(rd)];
}
@@ -205,7 +205,7 @@ class SessionStore
{
return needWrite;
}
- long getTimeoutInSeconds() const
+ int getTimeoutInSeconds() const
{
return std::chrono::seconds(timeoutInMinutes).count();
};
diff --git a/include/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
index 133d40da5f..34a7c04409 100644
--- a/include/ssl_key_handler.hpp
+++ b/include/ssl_key_handler.hpp
@@ -17,7 +17,9 @@
namespace ensuressl
{
static void initOpenssl();
-static EVP_PKEY *createKey();
+static void cleanupOpenssl();
+static EVP_PKEY *createRsaKey();
+static EVP_PKEY *createEcKey();
static void handleOpensslError();
inline bool verifyOpensslKeyCert(const std::string &filepath)
@@ -108,7 +110,7 @@ inline void generateSslCertificate(const std::string &filepath)
// EVP_PKEY *pRsaPrivKey = create_rsa_key();
std::cerr << "Generating EC key\n";
- EVP_PKEY *pRsaPrivKey = createKey();
+ EVP_PKEY *pRsaPrivKey = createEcKey();
if (pRsaPrivKey != nullptr)
{
std::cerr << "Generating x509 Certificate\n";
@@ -175,16 +177,9 @@ inline void generateSslCertificate(const std::string &filepath)
// cleanup_openssl();
}
-EVP_PKEY *createKey()
+
+EVP_PKEY *createRsaKey()
{
- EVP_PKEY *pKey = NULL;
- pKey = EVP_PKEY_new();
- if (pKey == nullptr)
- {
- handleOpensslError();
- return nullptr;
- }
-#if BMCWEB_RSA_KEY
RSA *pRSA = NULL;
#if OPENSSL_VERSION_NUMBER < 0x00908000L
pRSA = RSA_generate_key(2048, RSA_3, NULL, NULL);
@@ -192,54 +187,60 @@ EVP_PKEY *createKey()
RSA_generate_key_ex(pRSA, 2048, NULL, NULL);
#endif
- if ((pRSA != nullptr) || EVP_PKEY_assign_RSA(pKey, pRSA) != 1)
+ EVP_PKEY *pKey = EVP_PKEY_new();
+ if ((pRSA != nullptr) && (pKey != nullptr) &&
+ EVP_PKEY_assign_RSA(pKey, pRSA))
+ {
+ /* pKey owns pRSA from now */
+ if (RSA_check_key(pRSA) <= 0)
+ {
+ fprintf(stderr, "RSA_check_key failed.\n");
+ handleOpensslError();
+ EVP_PKEY_free(pKey);
+ pKey = NULL;
+ }
+ }
+ else
{
handleOpensslError();
if (pRSA != nullptr)
{
RSA_free(pRSA);
+ pRSA = NULL;
}
if (pKey != nullptr)
{
EVP_PKEY_free(pKey);
+ pKey = NULL;
}
- return nullptr;
}
+ return pKey;
+}
- /* pKey owns pRSA from now */
- if (RSA_check_key(pRSA) != 1)
- {
- fprintf(stderr, "RSA_check_key failed.\n");
- handleOpensslError();
- EVP_PKEY_free(pKey);
- return nullptr;
- }
+EVP_PKEY *createEcKey()
+{
+ EVP_PKEY *pKey = NULL;
+ int eccgrp = 0;
+ eccgrp = OBJ_txt2nid("prime256v1");
-#else
- int eccgrp = OBJ_txt2nid("prime256v1");
EC_KEY *myecc = EC_KEY_new_by_curve_name(eccgrp);
- if (myecc == nullptr)
+ if (myecc != nullptr)
{
- handleOpensslError();
- return nullptr;
- }
-
- EC_KEY_set_asn1_flag(myecc, OPENSSL_EC_NAMED_CURVE);
- if (EC_KEY_generate_key(myecc) != 1)
- {
- handleOpensslError();
- EC_KEY_free(myecc);
- return nullptr;
- }
-
- if (EVP_PKEY_assign_EC_KEY(pKey, myecc) != 1)
- {
- handleOpensslError();
- EC_KEY_free(myecc);
- return nullptr;
+ EC_KEY_set_asn1_flag(myecc, OPENSSL_EC_NAMED_CURVE);
+ EC_KEY_generate_key(myecc);
+ pKey = EVP_PKEY_new();
+ if (pKey != nullptr)
+ {
+ if (EVP_PKEY_assign_EC_KEY(pKey, myecc))
+ {
+ /* pKey owns pRSA from now */
+ if (EC_KEY_check_key(myecc) <= 0)
+ {
+ fprintf(stderr, "EC_check_key failed.\n");
+ }
+ }
+ }
}
-
-#endif
return pKey;
}
@@ -252,6 +253,16 @@ void initOpenssl()
#endif
}
+void cleanupOpenssl()
+{
+ CRYPTO_cleanup_all_ex_data();
+ ERR_free_strings();
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ ERR_remove_thread_state(0);
+#endif
+ EVP_cleanup();
+}
+
void handleOpensslError()
{
ERR_print_errors_fp(stderr);
diff --git a/redfish-core/include/privileges.hpp b/redfish-core/include/privileges.hpp
index 15e1af4a06..3b20c9fda8 100644
--- a/redfish-core/include/privileges.hpp
+++ b/redfish-core/include/privileges.hpp
@@ -34,10 +34,10 @@ constexpr std::array<const char*, 5> basePrivileges{
"Login", "ConfigureManager", "ConfigureComponents", "ConfigureSelf",
"ConfigureUsers"};
-constexpr const size_t basePrivilegeCount = basePrivileges.size();
+constexpr const int basePrivilegeCount = basePrivileges.size();
/** @brief Max number of privileges per type */
-constexpr const size_t maxPrivilegeCount = 32;
+constexpr const int maxPrivilegeCount = 32;
/** @brief A vector of all privilege names and their indexes */
static const std::vector<std::string> privilegeNames{basePrivileges.begin(),
@@ -96,7 +96,7 @@ class Privileges
*/
bool setSinglePrivilege(const char* privilege)
{
- for (size_t searchIndex = 0; searchIndex < privilegeNames.size();
+ for (int searchIndex = 0; searchIndex < privilegeNames.size();
searchIndex++)
{
if (privilege == privilegeNames[searchIndex])
@@ -136,8 +136,8 @@ class Privileges
{
std::vector<const std::string*> activePrivileges;
- size_t searchIndex = 0;
- size_t endIndex = basePrivilegeCount;
+ int searchIndex = 0;
+ int endIndex = basePrivilegeCount;
if (type == PrivilegeType::OEM)
{
searchIndex = basePrivilegeCount - 1;
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index b9920187b7..476e03aff2 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -302,8 +302,7 @@ inline void
boost::container::flat_set<IPv4AddressData>::iterator,
bool>
it = ipv4_config.insert(
- {objpath.first.str.substr(ipv4PathStart.size()), "",
- "", "", "", "", LinkType::Local});
+ {objpath.first.str.substr(ipv4PathStart.size())});
IPv4AddressData &ipv4_address = *it.first;
for (auto &property : interface.second)
{
@@ -479,6 +478,45 @@ inline bool ipv4VerifyIpAndGetBitcount(const std::string &ip,
}
/**
+ * @brief Changes IPv4 address type property (Address, Gateway)
+ *
+ * @param[in] ifaceId Id of interface whose IP should be modified
+ * @param[in] ipIdx Index of IP in input array that should be modified
+ * @param[in] ipHash DBus Hash id of modified IP
+ * @param[in] name Name of field in JSON representation
+ * @param[in] newValue New value that should be written
+ * @param[io] asyncResp Response object that will be returned to client
+ *
+ * @return true if give IP is valid and has been sent do D-Bus, false
+ * otherwise
+ */
+inline void changeIPv4AddressProperty(
+ const std::string &ifaceId, int ipIdx, const std::string &ipHash,
+ const std::string &name, const std::string &newValue,
+ const std::shared_ptr<AsyncResp> asyncResp)
+{
+ auto callback = [asyncResp, ipIdx, name{std::string(name)},
+ newValue{std::move(newValue)}](
+ const boost::system::error_code ec) {
+ if (ec)
+ {
+ messages::internalError(asyncResp->res);
+ }
+ else
+ {
+ asyncResp->res.jsonValue["IPv4Addresses"][ipIdx][name] = newValue;
+ }
+ };
+
+ crow::connections::systemBus->async_method_call(
+ std::move(callback), "xyz.openbmc_project.Network",
+ "/xyz/openbmc_project/network/" + ifaceId + "/ipv4/" + ipHash,
+ "org.freedesktop.DBus.Properties", "Set",
+ "xyz.openbmc_project.Network.IP", name,
+ std::variant<std::string>(newValue));
+}
+
+/**
* @brief Changes IPv4 address origin property
*
* @param[in] ifaceId Id of interface whose IP should be modified
@@ -492,7 +530,7 @@ inline bool ipv4VerifyIpAndGetBitcount(const std::string &ip,
* @return true if give IP is valid and has been sent do D-Bus, false
* otherwise
*/
-inline void changeIPv4Origin(const std::string &ifaceId, size_t ipIdx,
+inline void changeIPv4Origin(const std::string &ifaceId, int ipIdx,
const std::string &ipHash,
const std::string &newValue,
const std::string &newValueDbus,
@@ -532,8 +570,7 @@ inline void changeIPv4Origin(const std::string &ifaceId, size_t ipIdx,
*
* @return None
*/
-inline void changeIPv4SubnetMaskProperty(const std::string &ifaceId,
- size_t ipIdx,
+inline void changeIPv4SubnetMaskProperty(const std::string &ifaceId, int ipIdx,
const std::string &ipHash,
const std::string &newValueStr,
uint8_t &newValue,
@@ -600,8 +637,9 @@ inline void deleteIPv4(const std::string &ifaceId, const std::string &ipHash,
*
* @return None
*/
-inline void createIPv4(const std::string &ifaceId, uint8_t subnetMask,
- const std::string &gateway, const std::string &address,
+inline void createIPv4(const std::string &ifaceId, unsigned int ipIdx,
+ uint8_t subnetMask, const std::string &gateway,
+ const std::string &address,
std::shared_ptr<AsyncResp> asyncResp)
{
auto createIpHandler = [asyncResp](const boost::system::error_code ec) {
@@ -1061,7 +1099,6 @@ class EthernetInterface : public Node
if (gateway)
{
if (!ipv4VerifyIpAndGetBitcount(*gateway))
-
{
messages::propertyValueFormatError(asyncResp->res, *gateway,
pathString + "/Gateway");
@@ -1161,7 +1198,8 @@ class EthernetInterface : public Node
continue;
}
- createIPv4(ifaceId, entryIdx, *gateway, *address, asyncResp);
+ createIPv4(ifaceId, entryIdx, prefixLength, *gateway, *address,
+ asyncResp);
nlohmann::json &ipv4AddressJson =
asyncResp->res.jsonValue["IPv4Addresses"][entryIdx];
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index b07d6b1296..61cbd9e03d 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -46,8 +46,8 @@ static int getJournalMetadata(sd_journal *journal,
size_t length = 0;
int ret = 0;
// Get the metadata from the requested field of the journal entry
- ret = sd_journal_get_data(journal, field.data(),
- reinterpret_cast<const void **>(&data), &length);
+ ret = sd_journal_get_data(journal, field.data(), (const void **)&data,
+ &length);
if (ret < 0)
{
return ret;
@@ -70,7 +70,7 @@ static int getJournalMetadata(sd_journal *journal,
{
return ret;
}
- contents = static_cast<int>(strtol(metadata.data(), nullptr, base));
+ contents = strtol(metadata.data(), nullptr, base);
return ret;
}
@@ -215,12 +215,12 @@ static bool getTimestampFromID(crow::Response &res, const std::string &entryID,
{
index = std::stoul(std::string(indexStr), &pos);
}
- catch (std::invalid_argument &)
+ catch (std::invalid_argument)
{
messages::resourceMissingAtURI(res, entryID);
return false;
}
- catch (std::out_of_range &)
+ catch (std::out_of_range)
{
messages::resourceMissingAtURI(res, entryID);
return false;
@@ -237,12 +237,12 @@ static bool getTimestampFromID(crow::Response &res, const std::string &entryID,
{
timestamp = std::stoull(std::string(tsStr), &pos);
}
- catch (std::invalid_argument &)
+ catch (std::invalid_argument)
{
messages::resourceMissingAtURI(res, entryID);
return false;
}
- catch (std::out_of_range &)
+ catch (std::out_of_range)
{
messages::resourceMissingAtURI(res, entryID);
return false;
@@ -382,8 +382,8 @@ static int fillEventLogEntryJson(const std::string &bmcLogEntryID,
{
continue;
}
- unsigned long argNum = std::strtoul(field.data(), nullptr, 10);
- if (argNum == 0 || argNum > std::numeric_limits<size_t>::max())
+ int argNum = std::strtoul(field.data(), nullptr, 10);
+ if (argNum == 0)
{
continue;
}
@@ -392,7 +392,7 @@ static int fillEventLogEntryJson(const std::string &bmcLogEntryID,
// Make sure we have enough space in messageArgs
if (argNum > messageArgs.size())
{
- messageArgs.resize(static_cast<size_t>(argNum));
+ messageArgs.resize(argNum);
}
messageArgs[argNum - 1] = std::string(field);
}
@@ -482,7 +482,7 @@ class EventLogEntryCollection : public Node
std::unique_ptr<sd_journal, decltype(&sd_journal_close)> journal(
journalTmp, sd_journal_close);
journalTmp = nullptr;
- long entryCount = 0;
+ uint64_t entryCount = 0;
SD_JOURNAL_FOREACH(journal.get())
{
// Look for only journal entries that contain a REDFISH_MESSAGE_ID
@@ -803,7 +803,7 @@ class BMCJournalLogEntryCollection : public Node
std::unique_ptr<sd_journal, decltype(&sd_journal_close)> journal(
journalTmp, sd_journal_close);
journalTmp = nullptr;
- long entryCount = 0;
+ uint64_t entryCount = 0;
SD_JOURNAL_FOREACH(journal.get())
{
entryCount++;
@@ -1094,7 +1094,7 @@ class CPULogEntry : public Node
messages::internalError(asyncResp->res);
return;
}
- const int logId = std::atoi(params[0].c_str());
+ const uint8_t logId = std::atoi(params[0].c_str());
auto getStoredLogCallback = [asyncResp, logId](
const boost::system::error_code ec,
const std::variant<std::string> &resp) {
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 0aa4478d28..f9c2f38072 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -785,10 +785,10 @@ static CreatePIDRet createPidInterface(
for (auto& step : *steps)
{
double target;
- double out;
+ double output;
if (!redfish::json_util::readJson(step, response->res, "Target",
- target, "Output", out))
+ target, "Output", output))
{
BMCWEB_LOG_ERROR << "Line:" << __LINE__
<< ", Illegal Property "
@@ -796,7 +796,7 @@ static CreatePIDRet createPidInterface(
return CreatePIDRet::fail;
}
readings.emplace_back(target);
- outputs.emplace_back(out);
+ outputs.emplace_back(output);
}
output["Reading"] = std::move(readings);
output["Output"] = std::move(outputs);
diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp
index 78f1d8aecd..b1df101462 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -38,8 +38,9 @@ class Power : public Node
}
private:
- std::vector<const char*> typeList = {"/xyz/openbmc_project/sensors/voltage",
- "/xyz/openbmc_project/sensors/power"};
+ std::initializer_list<const char*> typeList = {
+ "/xyz/openbmc_project/sensors/voltage",
+ "/xyz/openbmc_project/sensors/power"};
void doGet(crow::Response& res, const crow::Request& req,
const std::vector<std::string>& params) override
{
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 51895eedb9..bbed0479a1 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -49,7 +49,7 @@ class SensorsAsyncResp
{
public:
SensorsAsyncResp(crow::Response& response, const std::string& chassisId,
- const std::vector<const char*> types,
+ const std::initializer_list<const char*> types,
const std::string& subNode) :
res(response),
chassisId(chassisId), types(types), chassisSubNode(subNode)
@@ -539,11 +539,11 @@ void objectInterfacesToJson(
auto interfaceProperties = interfacesDict.find(std::get<0>(p));
if (interfaceProperties != interfacesDict.end())
{
- auto valIt = interfaceProperties->second.find(std::get<1>(p));
- if (valIt != interfaceProperties->second.end())
+ auto valueIt = interfaceProperties->second.find(std::get<1>(p));
+ if (valueIt != interfaceProperties->second.end())
{
- const SensorVariant& valueVariant = valIt->second;
- nlohmann::json& jValueIt = sensor_json[std::get<2>(p)];
+ const SensorVariant& valueVariant = valueIt->second;
+ nlohmann::json& valueIt = sensor_json[std::get<2>(p)];
// Attempt to pull the int64 directly
const int64_t* int64Value = std::get_if<int64_t>(&valueVariant);
@@ -566,11 +566,11 @@ void objectInterfacesToJson(
temp = temp * std::pow(10, scaleMultiplier);
if (forceToInt)
{
- jValueIt = static_cast<int64_t>(temp);
+ valueIt = static_cast<int64_t>(temp);
}
else
{
- jValueIt = temp;
+ valueIt = temp;
}
}
}
@@ -985,7 +985,7 @@ void getChassisData(std::shared_ptr<SensorsAsyncResp> SensorsAsyncResp)
*/
void setSensorOverride(crow::Response& res, const crow::Request& req,
const std::vector<std::string>& params,
- const std::vector<const char*> typeList,
+ const std::initializer_list<const char*> typeList,
const std::string& chassisSubNode)
{
diff --git a/redfish-core/lib/thermal.hpp b/redfish-core/lib/thermal.hpp
index 58e7cd445a..f266c40c19 100644
--- a/redfish-core/lib/thermal.hpp
+++ b/redfish-core/lib/thermal.hpp
@@ -37,7 +37,7 @@ class Thermal : public Node
}
private:
- std::vector<const char*> typeList = {
+ std::initializer_list<const char*> typeList = {
"/xyz/openbmc_project/sensors/fan_tach",
"/xyz/openbmc_project/sensors/temperature",
"/xyz/openbmc_project/sensors/fan_pwm"};