X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ftincctl.c;h=5ba71613fd4f0cc4529ebddd6f2db0b2b1d938d8;hb=d32226bc14428864df08beccb3cf4f8a472f2eef;hp=cd2d3d8eab8806a42e01822548d4ea969660a2a5;hpb=696dc2ad9743c62e56a6d21addb8c4e8efbffec1;p=tinc diff --git a/src/tincctl.c b/src/tincctl.c index cd2d3d8e..5ba71613 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -722,19 +722,20 @@ static bool remove_service(void) { SC_HANDLE manager = NULL; SC_HANDLE service = NULL; SERVICE_STATUS status = {0}; + bool success = false; manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(!manager) { fprintf(stderr, "Could not open service manager: %s\n", winerror(GetLastError())); - return false; + goto exit; } service = OpenService(manager, identname, SERVICE_ALL_ACCESS); if(!service) { fprintf(stderr, "Could not open %s service: %s\n", identname, winerror(GetLastError())); - return false; + goto exit; } if(!ControlService(service, SERVICE_CONTROL_STOP, &status)) { @@ -745,12 +746,26 @@ static bool remove_service(void) { if(!DeleteService(service)) { fprintf(stderr, "Could not remove %s service: %s\n", identname, winerror(GetLastError())); - return false; + goto exit; } - fprintf(stderr, "%s service removed\n", identname); + success = true; - return true; +exit: + + if(service) { + CloseServiceHandle(service); + } + + if(manager) { + CloseServiceHandle(manager); + } + + if(success) { + fprintf(stderr, "%s service removed\n", identname); + } + + return success; } #endif @@ -1013,7 +1028,7 @@ static int cmd_start(int argc, char *argv[]) { #endif // Pass all log messages from the umbilical to stderr. - // A nul-byte right before closure means tincd started succesfully. + // A nul-byte right before closure means tincd started successfully. bool failure = true; char buf[1024]; ssize_t len; @@ -1859,7 +1874,7 @@ static int cmd_config(int argc, char *argv[]) { } } - /* Change "add" into "set" for variables that do not allow multiple occurences. + /* Change "add" into "set" for variables that do not allow multiple occurrences. Turn on warnings when it seems variables might be removed unintentionally. */ if(action == 1 && !(variables[i].type & VAR_MULTIPLE)) {