Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev

This commit is contained in:
Adam Ierymenko 2021-06-04 18:52:23 -04:00
commit c769e282fb
No known key found for this signature in database
GPG key ID: C8877CF2D7A5D7F3

View file

@ -418,8 +418,8 @@ void PostgreSQL::initializeNetworks()
fprintf(stderr, "Initializing Networks...\n"); fprintf(stderr, "Initializing Networks...\n");
auto c = _pool->borrow(); auto c = _pool->borrow();
pqxx::work w{*c->c}; pqxx::work w{*c->c};
pqxx::result r = w.exec_params("SELECT id, EXTRACT(EPOCH FROM creation_time AT TIME ZONE 'UTC')*1000 as creation_time, capabilities, " pqxx::result r = w.exec_params("SELECT id, (EXTRACT(EPOCH FROM creation_time AT TIME ZONE 'UTC')*1000)::bigint as creation_time, capabilities, "
"enable_broadcast, EXTRACT(EPOCH FROM last_modified AT TIME ZONE 'UTC')*1000 AS last_modified, mtu, multicast_limit, name, private, remote_trace_level, " "enable_broadcast, (EXTRACT(EPOCH FROM last_modified AT TIME ZONE 'UTC')*1000)::bigint AS last_modified, mtu, multicast_limit, name, private, remote_trace_level, "
"remote_trace_target, revision, rules, tags, v4_assign_mode, v6_assign_mode, sso_enabled FROM ztc_network " "remote_trace_target, revision, rules, tags, v4_assign_mode, v6_assign_mode, sso_enabled FROM ztc_network "
"WHERE deleted = false AND controller_id = $1", _myAddressStr); "WHERE deleted = false AND controller_id = $1", _myAddressStr);
@ -436,26 +436,26 @@ void PostgreSQL::initializeNetworks()
config["id"] = nwid; config["id"] = nwid;
config["nwid"] = nwid; config["nwid"] = nwid;
try { if (!row[1].is_null()) {
config["creationTime"] = row[1].as<int64_t>(); config["creationTime"] = row[1].as<int64_t>();
} catch (std::exception &e) { } else {
config["creationTime"] = 0ULL; config["creationTime"] = 0ULL;
} }
config["capabilities"] = row[2].as<std::string>(); config["capabilities"] = row[2].as<std::string>();
config["enableBroadcast"] = row[3].as<bool>(); config["enableBroadcast"] = row[3].as<bool>();
try { if (!row[4].is_null()) {
config["lastModified"] = row[4].as<uint64_t>(); config["lastModified"] = row[4].as<uint64_t>();
} catch (std::exception &e) { } else {
config["lastModified"] = 0ULL; config["lastModified"] = 0ULL;
} }
try { if (!row[5].is_null()) {
config["mtu"] = row[5].as<int>(); config["mtu"] = row[5].as<int>();
} catch (std::exception &e) { } else {
config["mtu"] = 2800; config["mtu"] = 2800;
} }
try { if (!row[6].is_null()) {
config["multicastLimit"] = row[6].as<int>(); config["multicastLimit"] = row[6].as<int>();
} catch (std::exception &e) { } else {
config["multicastLimit"] = 64; config["multicastLimit"] = 64;
} }
config["name"] = row[7].as<std::string>(); config["name"] = row[7].as<std::string>();
@ -472,9 +472,9 @@ void PostgreSQL::initializeNetworks()
config["remoteTraceTarget"] = nullptr; config["remoteTraceTarget"] = nullptr;
} }
try { if (!row[11].is_null()) {
config["revision"] = row[11].as<uint64_t>(); config["revision"] = row[11].as<uint64_t>();
} catch (std::exception &e) { } else {
config["revision"] = 0ULL; config["revision"] = 0ULL;
//fprintf(stderr, "Error converting revision: %s\n", PQgetvalue(res, i, 11)); //fprintf(stderr, "Error converting revision: %s\n", PQgetvalue(res, i, 11));
} }
@ -575,6 +575,8 @@ void PostgreSQL::initializeNetworks()
void PostgreSQL::initializeMembers() void PostgreSQL::initializeMembers()
{ {
std::string memberId;
std::string networkId;
try { try {
std::unordered_map<std::string, std::string> networkMembers; std::unordered_map<std::string, std::string> networkMembers;
@ -596,6 +598,9 @@ void PostgreSQL::initializeMembers()
json empty; json empty;
json config; json config;
memberId = "";
networkId = "";
initMember(config); initMember(config);
if (row[0].is_null()) { if (row[0].is_null()) {
@ -605,8 +610,8 @@ void PostgreSQL::initializeMembers()
if (row[1].is_null()) { if (row[1].is_null()) {
fprintf(stderr, "Null NetworkID?!?\n"); fprintf(stderr, "Null NetworkID?!?\n");
} }
std::string memberId = row[0].as<std::string>(); memberId = row[0].as<std::string>();
std::string networkId = row[1].as<std::string>(); networkId = row[1].as<std::string>();
config["id"] = memberId; config["id"] = memberId;
config["nwid"] = networkId; config["nwid"] = networkId;
@ -623,29 +628,29 @@ void PostgreSQL::initializeMembers()
} }
config["creationTime"] = row[5].as<uint64_t>(); config["creationTime"] = row[5].as<uint64_t>();
config["identity"] = row[6].as<std::string>(); config["identity"] = row[6].as<std::string>();
try { if (!row[7].is_null()) {
config["lastAuthorizedTime"] = row[7].as<uint64_t>(); config["lastAuthorizedTime"] = row[7].as<uint64_t>();
} catch(std::exception &e) { } else {
config["lastAuthorizedTime"] = 0ULL; config["lastAuthorizedTime"] = 0ULL;
//fprintf(stderr, "Error updating last auth time (member): %s\n", PQgetvalue(res, i, 7)); //fprintf(stderr, "Error updating last auth time (member): %s\n", PQgetvalue(res, i, 7));
} }
try { if (!row[8].is_null()) {
config["lastDeauthorizedTime"] = row[8].as<uint64_t>(); config["lastDeauthorizedTime"] = row[8].as<uint64_t>();
} catch( std::exception &e) { } else {
config["lastDeauthorizedTime"] = 0ULL; config["lastDeauthorizedTime"] = 0ULL;
//fprintf(stderr, "Error updating last deauth time (member): %s\n", PQgetvalue(res, i, 8)); //fprintf(stderr, "Error updating last deauth time (member): %s\n", PQgetvalue(res, i, 8));
} }
try { if (!row[9].is_null()) {
config["remoteTraceLevel"] = row[9].as<int>(); config["remoteTraceLevel"] = row[9].as<int>();
} catch (std::exception &e) { } else {
config["remoteTraceLevel"] = 0; config["remoteTraceLevel"] = 0;
} }
if (!config["remoteTraceTarget"].is_null()) { if (!row[10].is_null()) {
config["remoteTraceTarget"] = row[10].as<std::string>(); config["remoteTraceTarget"] = row[10].as<std::string>();
} else { } else {
config["remoteTraceTarget"] = ""; config["remoteTraceTarget"] = "";
} }
if (config["tags"].is_null()) { if (row[11].is_null()) {
config["tags"] = json::array(); config["tags"] = json::array();
} else { } else {
try { try {
@ -654,32 +659,31 @@ void PostgreSQL::initializeMembers()
config["tags"] = json::array(); config["tags"] = json::array();
} }
} }
try { if (!row[12].is_null()) {
config["vMajor"] = row[12].as<int>(); config["vMajor"] = row[12].as<int>();
} catch(std::exception &e) { } else {
config["vMajor"] = -1; config["vMajor"] = -1;
} }
try { if (!row[13].is_null()) {
config["vMinor"] = row[13].as<int>(); config["vMinor"] = row[13].as<int>();
} catch (std::exception &e) { } else {
config["vMinor"] = -1; config["vMinor"] = -1;
} }
try { if (!row[14].is_null()) {
config["vRev"] = row[14].as<int>(); config["vRev"] = row[14].as<int>();
} catch (std::exception &e) { } else {
config["vRev"] = -1; config["vRev"] = -1;
} }
try { if (!row[15].is_null()) {
config["vProto"] = row[15].as<int>(); config["vProto"] = row[15].as<int>();
} catch (std::exception &e) { } else {
config["vProto"] = -1; config["vProto"] = -1;
} }
config["noAutoAssignIps"] = row[16].as<bool>(); config["noAutoAssignIps"] = row[16].as<bool>();
try { if (!row[17].is_null()) {
config["revision"] = row[17].as<uint64_t>(); config["revision"] = row[17].as<uint64_t>();
} catch (std::exception &e) { } else {
config["revision"] = 0ULL; config["revision"] = 0ULL;
//fprintf(stderr, "Error updating revision (member): %s\n", PQgetvalue(res, i, 17));
} }
config["ssoExempt"] = row[18].as<bool>(); config["ssoExempt"] = row[18].as<bool>();
@ -692,9 +696,11 @@ void PostgreSQL::initializeMembers()
"WHERE e.network_id = $1 AND e.member_id = $2 AND n.sso_enabled = TRUE " "WHERE e.network_id = $1 AND e.member_id = $2 AND n.sso_enabled = TRUE "
"ORDER BY e.authentication_expiry_time LIMIT 1", networkId, memberId); "ORDER BY e.authentication_expiry_time LIMIT 1", networkId, memberId);
if (authRes.size() == 1) { if (authRes.size() == 1 && !authRes.at(0)[0].is_null()) {
// there is an expiry time record // there is an expiry time record
config["authenticationExpiryTime"] = authRes.at(0)[0].as<int64_t>(); config["authenticationExpiryTime"] = authRes.at(0)[0].as<int64_t>();
} else {
config["authenticationExpiryTime"] = 0;
} }
config["objtype"] = "member"; config["objtype"] = "member";
@ -728,7 +734,7 @@ void PostgreSQL::initializeMembers()
} catch (sw::redis::Error &e) { } catch (sw::redis::Error &e) {
fprintf(stderr, "ERROR: Error initializing members (redis): %s\n", e.what()); fprintf(stderr, "ERROR: Error initializing members (redis): %s\n", e.what());
} catch (std::exception &e) { } catch (std::exception &e) {
fprintf(stderr, "ERROR: Error initializing members: %s\n", e.what()); fprintf(stderr, "ERROR: Error initializing member: %s-%s %s\n", networkId.c_str(), memberId.c_str(), e.what());
exit(-1); exit(-1);
} }
} }