mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-11 11:35:54 +02:00
openvpn: Properly remove all RRDs after a connection is removed
This commit is contained in:
@@ -2370,10 +2370,9 @@ if ($confighash{$cgiparams{'KEY'}}[3] eq 'net') {
|
||||
|
||||
# CCD end
|
||||
|
||||
###
|
||||
### Delete all RRD's for client
|
||||
###
|
||||
# Delete RRDs
|
||||
system ("/usr/local/bin/openvpnctrl -drrd $confighash{$cgiparams{'KEY'}}[1]");
|
||||
|
||||
delete $confighash{$cgiparams{'KEY'}};
|
||||
my $temp2 = `/usr/bin/openssl ca -gencrl -out ${General::swroot}/ovpn/crls/cacrl.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
|
||||
&General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
|
||||
@@ -3068,6 +3067,10 @@ END
|
||||
unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem");
|
||||
unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
|
||||
delete $confighash{$cgiparams{'KEY'}};
|
||||
|
||||
# Delete RRD's for collectd
|
||||
system("/usr/local/bin/openvpnctrl", "-drrd", "$confighash{$cgiparams{'KEY'}}[1]", "&>/dev/null");
|
||||
|
||||
&General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
|
||||
#&writeserverconf();
|
||||
} else {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define _XOPEN_SOURCE 500
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -7,6 +8,7 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <fcntl.h>
|
||||
#include <ftw.h>
|
||||
#include "setuid.h"
|
||||
#include "netutil.h"
|
||||
#include "libsmooth.h"
|
||||
@@ -572,23 +574,44 @@ int killNet2Net(char *name) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int recursive_remove_callback(const char* fpath, const struct stat* sb, int typeflag, struct FTW* ftwbuf) {
|
||||
int rv = remove(fpath);
|
||||
if (rv)
|
||||
perror(fpath);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static int recursive_remove(const char* path) {
|
||||
return nftw(path, recursive_remove_callback, 64, FTW_DEPTH | FTW_PHYS);
|
||||
}
|
||||
|
||||
int deleterrd(char *name) {
|
||||
connection *conn = getConnections();
|
||||
|
||||
char rrd_file[STRING_SIZE];
|
||||
snprintf(rrd_file, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s/if_octets.rrd", name);
|
||||
|
||||
char rrd_dir[STRING_SIZE];
|
||||
snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s", name);
|
||||
|
||||
connection *conn = getConnections();
|
||||
while(conn) {
|
||||
/* Find only RW-Connections with the given name. */
|
||||
if (((strcmp(conn->type, "host") == 0) && (strcmp(conn->name, name) == 0))) {
|
||||
remove(rrd_file);
|
||||
remove(rrd_dir);
|
||||
return 0;
|
||||
if (strcmp(conn->name, name) != 0) {
|
||||
conn = conn->next;
|
||||
continue;
|
||||
}
|
||||
conn = conn->next;
|
||||
|
||||
// Handle RW connections
|
||||
if (strcmp(conn->type, "host") == 0) {
|
||||
snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s", name);
|
||||
|
||||
// Handle N2N connections
|
||||
} else if (strcmp(conn->type, "net") == 0) {
|
||||
snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s-n2n/", name);
|
||||
|
||||
// Unhandled connection type
|
||||
} else {
|
||||
conn = conn->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
return recursive_remove(rrd_dir);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user