X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ftincctl.c;h=a7f6185f0716b93164763854b43f8c5c774cffae;hb=2696ad2cca73aee13e38f740d5530dc33e4a92e6;hp=ebd2e1301887caca3d913f509726cfbdea136a2c;hpb=303dd1e70219a7542921f6e63d9391ab326d434f;p=tinc diff --git a/src/tincctl.c b/src/tincctl.c index ebd2e130..a7f6185f 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -76,7 +76,7 @@ static void usage(bool status) { " start Start tincd.\n" " stop Stop tincd.\n" " restart Restart tincd.\n" - " reload Reload configuration of running tincd.\n" + " reload Partially reload configuration of running tincd.\n" " pid Show PID of currently running tincd.\n" " generate-keys [bits] Generate new RSA and ECDSA public/private keypairs.\n" " generate-rsa-keys [bits] Generate a new RSA public/private keypair.\n" @@ -90,7 +90,6 @@ static void usage(bool status) { " purge Purge unreachable nodes\n" " debug N Set debug level\n" " retry Retry all outgoing connections\n" - " reload Partial reload of configuration\n" " disconnect NODE Close meta connection with NODE\n" #ifdef HAVE_CURSES " top Show real-time statistics\n" @@ -482,6 +481,41 @@ void pcap(int fd, FILE *out) { } } +#ifdef HAVE_MINGW +static bool remove_service(void) { + SC_HANDLE manager = NULL; + SC_HANDLE service = NULL; + SERVICE_STATUS status = {0}; + + manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if(!manager) { + fprintf(stderr, "Could not open service manager: %s\n", winerror(GetLastError())); + return false; + } + + service = OpenService(manager, identname, SERVICE_ALL_ACCESS); + + if(!service) { + fprintf(stderr, "Could not open %s service: %s\n", identname, winerror(GetLastError())); + return false; + } + + if(!ControlService(service, SERVICE_CONTROL_STOP, &status)) + fprintf(stderr, "Could not stop %s service: %s\n", identname, winerror(GetLastError())); + else + fprintf(stderr, "%s service stopped\n", identname); + + if(!DeleteService(service)) { + fprintf(stderr, "Could not remove %s service: %s\n", identname, winerror(GetLastError())); + return false; + } + + fprintf(stderr, "%s service removed\n", identname); + + return true; +} +#endif + int main(int argc, char *argv[], char *envp[]) { int fd; int result; @@ -622,11 +656,16 @@ int main(int argc, char *argv[], char *envp[]) { } if(!strcasecmp(argv[optind], "stop")) { +#ifndef HAVE_MINGW sendline(fd, "%d %d", CONTROL, REQ_STOP); if(!recvline(fd, line, sizeof line) || sscanf(line, "%d %d %d", &code, &req, &result) != 3 || code != CONTROL || req != REQ_STOP || result) { fprintf(stderr, "Could not stop tinc daemon\n"); return 1; } +#else + if(!remove_service()) + return 1; +#endif return 0; }