diff --git a/deps/license/keycheck.h b/deps/license/keycheck.h new file mode 100644 index 000000000..276761686 --- /dev/null +++ b/deps/license/keycheck.h @@ -0,0 +1,3 @@ +#pragma once + +bool FValidKey(const char *key, size_t cch); diff --git a/deps/license/libkey.a b/deps/license/libkey.a new file mode 100644 index 000000000..e56f1a40f Binary files /dev/null and b/deps/license/libkey.a differ diff --git a/src/Makefile b/src/Makefile index 4167fd79d..25f6606e2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -105,7 +105,7 @@ endif FINAL_CFLAGS=$(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) $(REDIS_CFLAGS) FINAL_CXXFLAGS=$(CXX_STD) $(WARN) $(OPT) $(DEBUG) $(CXXFLAGS) $(REDIS_CFLAGS) FINAL_LDFLAGS=$(LDFLAGS) $(REDIS_LDFLAGS) $(DEBUG) -FINAL_LIBS=-lm -lz -latomic +FINAL_LIBS=-lm -lz -latomic -L../deps/license/ -lkey -lcrypto DEBUG=-g -ggdb ifeq ($(uname_S),SunOS) @@ -163,8 +163,8 @@ endif endif endif # Include paths to dependencies -FINAL_CFLAGS+= -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -FINAL_CXXFLAGS+= -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -I../deps/rocksdb/include/ +FINAL_CFLAGS+= -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -I../deps/license/ +FINAL_CXXFLAGS+= -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src -I../deps/rocksdb/include/ -I../deps/license ifeq ($(MALLOC),tcmalloc) FINAL_CFLAGS+= -DUSE_TCMALLOC diff --git a/src/config.cpp b/src/config.cpp index d4e8ca188..40eefb5b8 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -35,6 +35,7 @@ #include #include #include +#include "keycheck.h" const char *KEYDB_SET_VERSION = KEYDB_REAL_VERSION; @@ -841,6 +842,10 @@ void loadServerConfigFromString(char *config) { if (!initializeStorageProvider(argv+1, argc-1, &err)) goto loaderr; } else if (!strcasecmp(argv[0],"enable-pro") && argc == 2) { + if (!FValidKey(argv[1], strlen(argv[1]))) { + err = "Invalid license key"; + goto loaderr; + } cserver.license_key = zstrdup(argv[1]); } else { err = "Bad directive or wrong number of arguments"; goto loaderr; diff --git a/src/server.cpp b/src/server.cpp index 3bc79918f..cbf4a7d70 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -61,6 +61,7 @@ #include #include #include "aelocker.h" +#include "keycheck.h" int g_fTestMode = false; @@ -1095,6 +1096,8 @@ void serverLog(int level, const char *fmt, ...) { static void checkTrialTimeout() { + if (cserver.license_key != nullptr && FValidKey(cserver.license_key, strlen(cserver.license_key))) + return; time_t curtime = time(NULL); int64_t elapsed = (int64_t)curtime - (int64_t)cserver.stat_starttime; int64_t remaining = (cserver.trial_timeout * 60L) - elapsed;