diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index 5cf7de2..efc73ec 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -1877,11 +1877,12 @@ int agent_LoadCertificates(MeshAgentHostContainer *agent) { #if defined(WIN32) // No cert in this .db file. Try to load or generate a root certificate from a Windows crypto provider. This can be TPM backed which is great. - if (wincrypto_open(FALSE) == 0) + // However, if we don't have the second cert created, we need to regen the root... + if (wincrypto_open(FALSE) == 0 && ILibSimpleDataStore_Get(agent->masterDb, "SelfNodeTlsCert", NULL, 0) != 0) { char* str = NULL; int l; - + do { // Finish off work with our own certificate l = wincrypto_getcert(&str); diff --git a/meshservice/ServiceMain.c b/meshservice/ServiceMain.c index 5f9bfd1..5f83911 100644 --- a/meshservice/ServiceMain.c +++ b/meshservice/ServiceMain.c @@ -717,28 +717,26 @@ void fullinstall(int uninstallonly, char* proxy, int proxylen, char* tag, int ta setup2[setup2len + 2] = 0; remove(setup2); - if (uninstallonly != 0) { - // Remove "[Executable].tag" file - if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 259) return; - memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); - memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "tag", 4); - setup2[setup2len] = 0; - remove(setup2); + // Remove "[Executable].tag" file + if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 259) return; + memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); + memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "tag", 4); + setup2[setup2len] = 0; + remove(setup2); - // Remove "[Executable].log" file - if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 259) return; - memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); - memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "log", 4); - setup2[setup2len] = 0; - remove(setup2); + // Remove "[Executable].log" file + if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 259) return; + memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); + memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "log", 4); + setup2[setup2len] = 0; + remove(setup2); - // Remove "[Executable].db" file - if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 256) return; - memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); - memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "db", 3); - setup2[setup2len] = 0; - remove(setup2); - } + // Remove "[Executable].db" file + if ((setup2len = (int)strnlen_s(targetexe, _MAX_PATH + 40)) < 4 || setup2len > 256) return; + memcpy_s(setup2, sizeof(setup2), targetexe, setup2len); + memcpy_s(setup2 + (setup2len - 3), sizeof(setup2) - setup2len - 3, "db", 3); + setup2[setup2len] = 0; + remove(setup2); // Remove the folder. targetexe[targetexelen - 14] = 0;