openvpnctrl: Support killing only the roadwarrior server.

This commit is contained in:
Michael Tremer
2011-06-25 17:57:57 +02:00
parent 39877197d6
commit 2bcff894ac

View 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);