]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/commitdiff
openvpnctrl: Support killing only the roadwarrior server.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Jun 2011 15:57:57 +0000 (17:57 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Jun 2011 15:57:57 +0000 (17:57 +0200)
src/misc-progs/openvpnctrl.c

index 847a3e2a6748f03eb227d14d44a4f2e8d2033b3d..68bbe2fff5e874c33180f2bb0a05f42aceb183ee 100644 (file)
@@ -368,12 +368,16 @@ void setFirewallRules(void) {
 void stopDaemon(void) {
        char command[STRING_SIZE];
 
-       snprintf(command, STRING_SIZE - 1, "/bin/killall openvpn");
-       executeCommand(command);
+       int pid = readPidFile("/var/run/openvpn.pid");
+       if (pid == NULL) {
+               exit(1);
+       }
+
+       fprintf(stderr, "Killing PID %d.\n", pid);
+       kill(pid, SIGTERM);
+
        snprintf(command, STRING_SIZE - 1, "/bin/rm -f /var/run/openvpn.pid");
        executeCommand(command);
-       snprintf(command, STRING_SIZE-1, "/sbin/modprobe -r tun");
-       executeCommand(command);
 }
 
 void startDaemon(void) {
@@ -429,6 +433,20 @@ void startNet2Net(char *name) {
        executeCommand(command);
 }
 
+int readPidFile(const char *pidfile) {
+       FILE *fp = fopen(pidfile, "r");
+       if (fp == NULL) {
+               fprintf(stderr, "PID file not found: '%s'\n", pidfile);
+               exit(1);
+       }
+
+       int pid = NULL;
+       fscanf(fp, "%d", &pid);
+       fclose(fp);
+
+       return pid;
+}
+
 void killNet2Net(char *name) {
        connection *conn = NULL;
        connection *conn_iter;
@@ -451,17 +469,11 @@ void killNet2Net(char *name) {
        char pidfile[STRING_SIZE];
        snprintf(&pidfile, STRING_SIZE - 1, "/var/run/%sn2n.pid", conn->name);
 
-       FILE *fp = fopen(pidfile, "r");
-       if (fp == NULL) {
-               fprintf(stderr, "Could not determine PID for connection '%s'.\n", conn->name);
-               fprintf(stderr, "PID file not found: '%s'\n", pidfile);
+       int pid = readPidFile(pidfile);
+       if (pid == NULL) {
                exit(1);
        }
 
-       int pid;
-       fscanf(fp, "%d", &pid);
-       fclose(fp);
-
        fprintf(stderr, "Killing PID %d.\n", pid);
        kill(pid, SIGTERM);