License server memory validation
This commit is contained in:
parent
240052da3a
commit
8e4d52ddd2
@ -1 +1 @@
|
||||
Subproject commit 9f4f5e72a7fc35d0c9e7faf1678cd168daf90ab9
|
||||
Subproject commit f7d60a93a2c2c5a1e4cd87717d89f014a74e97ef
|
@ -198,6 +198,10 @@ bool LicenseServer::handleServerValidation(shared_ptr<ConnectedClient> &client,
|
||||
}
|
||||
}
|
||||
this->manager->logRequest(remote_license->key(), client->unique_identifier, client->address(), pkt.info().version(), response.valid());
|
||||
} else if(pkt.has_memory_valid() && !pkt.memory_valid()) {
|
||||
response.set_invalid_reason("server memory seems to be invalid");
|
||||
response.set_valid(false);
|
||||
logError(LOG_GENERAL, "Server {} has patched license memory!", client->address());
|
||||
} else {
|
||||
response.set_valid(true);
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ message ServerValidation {
|
||||
required bool license_info = 2;
|
||||
optional bytes license = 3;
|
||||
optional ServerInfo info = 4; //Change somewhere to required but its currently for legacy support
|
||||
optional bool memory_valid = 5;
|
||||
}
|
||||
|
||||
message LicenseResponse {
|
||||
|
@ -517,7 +517,7 @@ vector<string> config::parseConfig(const std::string& path) {
|
||||
}
|
||||
}
|
||||
|
||||
auto currentVersion = strobf("TeaSpeak ").string() + build::version()->string(true);
|
||||
auto currentVersion = config::server::default_version();
|
||||
if(currentVersion != config::server::DefaultServerVersion) {
|
||||
auto ref = config::server::DefaultServerVersion;
|
||||
try {
|
||||
|
@ -7,8 +7,10 @@
|
||||
#undef byte
|
||||
#endif
|
||||
#include <spdlog/common.h>
|
||||
#include <misc/strobf.h>
|
||||
#include "geo/GeoLocation.h"
|
||||
#include "../../license/shared/include/license/license.h"
|
||||
#include "build.h"
|
||||
|
||||
namespace YAML {
|
||||
class Node;
|
||||
@ -108,6 +110,12 @@ namespace ts::config {
|
||||
}
|
||||
|
||||
extern ssize_t max_virtual_server;
|
||||
|
||||
__attribute__((always_inline)) inline std::string default_version() { return strobf("TeaSpeak ").string() + build::version()->string(true); }
|
||||
__attribute__((always_inline)) inline bool check_server_version_with_license() {
|
||||
auto currentVersion = config::server::default_version();
|
||||
return currentVersion == DefaultServerVersion || (license->isPremium() && license->isValid());
|
||||
}
|
||||
}
|
||||
|
||||
namespace voice {
|
||||
|
@ -381,7 +381,7 @@ bool ConnectedClient::notifyClientLeftView(
|
||||
std::shared_ptr<ConnectedClient> invoker,
|
||||
bool lock_channel_tree) {
|
||||
assert(!lock_channel_tree); /* not supported yet! */
|
||||
assert(client && client->getClientId() != 0);
|
||||
assert(client && client != this && client->getClientId() != 0);
|
||||
assert(client->currentChannel || &*client == this);
|
||||
|
||||
if(client != this) {
|
||||
|
@ -177,6 +177,10 @@ void VoiceBridge::handle_media_stream(const std::shared_ptr<rtc::Channel> &undef
|
||||
if(!stream) return;
|
||||
this->_audio_channel = stream;
|
||||
|
||||
for(const auto& ex : stream->list_extensions()) {
|
||||
debugMessage(0, "{} | {}", ex->name, ex->id);
|
||||
}
|
||||
|
||||
stream->register_local_extension("urn:ietf:params:rtp-hdrext:ssrc-audio-level");
|
||||
for(const auto& codec : stream->list_codecs()) {
|
||||
if(codec->type == rtc::codec::Codec::OPUS) {
|
||||
|
@ -172,6 +172,9 @@ void LicenseService::handle_check_succeeded() {
|
||||
} else {
|
||||
logMessage(LOG_INSTANCE, strobf("Instance integrity has been validated.").string());
|
||||
}
|
||||
|
||||
if(!config::server::check_server_version_with_license())
|
||||
handle_check_fail(strobf("memory invalid").string());
|
||||
}
|
||||
|
||||
{
|
||||
@ -191,9 +194,10 @@ void LicenseService::handle_check_fail(const std::string &error) {
|
||||
this->timings.last_succeeded.time_since_epoch().count() == 0 ? this->timings.failed_count < 32 : /* About 12hours */
|
||||
this->timings.failed_count < 82 /* about 36 hours */
|
||||
);
|
||||
if(config::license->isPremium() && !soft_license_check) {
|
||||
const auto invalid_memory = !config::server::check_server_version_with_license();
|
||||
if(invalid_memory || (config::license->isPremium() && !soft_license_check)) {
|
||||
logCritical(LOG_INSTANCE, strobf("Failed to validate license:").string());
|
||||
logCritical(LOG_INSTANCE, error);
|
||||
logCritical(LOG_INSTANCE, invalid_memory ? strobf("invalid memory").string() : error);
|
||||
logCritical(LOG_INSTANCE, strobf("Stopping server!").string());
|
||||
ts::server::shutdownInstance();
|
||||
} else {
|
||||
@ -305,11 +309,11 @@ void LicenseService::send_license_validate_request() {
|
||||
request.set_licensed(false);
|
||||
request.set_license_info(false);
|
||||
}
|
||||
request.set_memory_valid(config::server::check_server_version_with_license());
|
||||
request.mutable_info()->set_uname(this->license_request_data->info.uname);
|
||||
request.mutable_info()->set_version(this->license_request_data->info.version);
|
||||
request.mutable_info()->set_timestamp(this->license_request_data->info.timestamp.count());
|
||||
request.mutable_info()->set_unique_id(this->license_request_data->info.unique_id);
|
||||
|
||||
this->client_send_message(::license::protocol::PACKET_CLIENT_SERVER_VALIDATION, request);
|
||||
}
|
||||
|
||||
|
2
shared
2
shared
@ -1 +1 @@
|
||||
Subproject commit fab6aa90954bc85efad8a0b5a3608cb408202a17
|
||||
Subproject commit e1e946ca359f65fff5e19583ff1c9711a3143460
|
Loading…
Reference in New Issue
Block a user