1 |
diff -urN smeserver-wireguard-1.0.old/root/etc/e-smith/events/actions/wireguard-network smeserver-wireguard-1.0/root/etc/e-smith/events/actions/wireguard-network |
2 |
--- smeserver-wireguard-1.0.old/root/etc/e-smith/events/actions/wireguard-network 2021-10-27 04:15:11.000000000 +0100 |
3 |
+++ smeserver-wireguard-1.0/root/etc/e-smith/events/actions/wireguard-network 2021-11-24 10:54:47.552659023 +0000 |
4 |
@@ -24,6 +24,12 @@ |
5 |
my $ip = $block->base; |
6 |
my $mask = $block->mask; |
7 |
|
8 |
+#First delete any already there. |
9 |
+my @wg = $netdb->get_all_by_prop(Wireguard=>"wg0"); |
10 |
+foreach my $netwg (@wg) { |
11 |
+ $netwg->delete(); |
12 |
+} |
13 |
+# and then create one from the wireguard server ip |
14 |
my $iswg=$netdb->get($ip); |
15 |
unless ($iswg) { |
16 |
$netdb->new_record("$ip",{ type => "network", |
17 |
@@ -35,4 +41,3 @@ |
18 |
exit; |
19 |
} |
20 |
|
21 |
- |
22 |
diff -urN smeserver-wireguard-1.0.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/wireguard.pm smeserver-wireguard-1.0/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/wireguard.pm |
23 |
--- smeserver-wireguard-1.0.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/wireguard.pm 2021-11-24 09:43:05.057196197 +0000 |
24 |
+++ smeserver-wireguard-1.0/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/wireguard.pm 2021-11-25 09:18:50.980936582 +0000 |
25 |
@@ -441,13 +441,18 @@ |
26 |
); |
27 |
|
28 |
$cdb->get('wg-quick@wg0')->merge_props(%props) |
29 |
- or $msg = "Error occurred while modifying pseudonym in database."; |
30 |
- |
31 |
- # Untaint before use in system() |
32 |
- ($ip) = ($ip =~ /(\d+\.+\d+\.+\d+\.+\d+\.+\/\d+\.+)/); |
33 |
- system( "/sbin/e-smith/signal-event", "wireguard-conf-modify", "$ip",) |
34 |
- == 0 or $msg = "Error occurred while modifying wireguard conf."; |
35 |
+ or $msg = "Error occurred while modifying server details."; |
36 |
|
37 |
+ # Test Ip is inside CIDR |
38 |
+ if (!test_for_private_ip($ip,$mask)) {$msg = "IP must be in private range";} |
39 |
+ #else {$msg = "Ip is inside range $ip / $mask";} |
40 |
+ |
41 |
+ unless ($msg eq "OK"){ |
42 |
+ # Untaint before use in system() |
43 |
+ ($ip) = ($ip =~ /(\d+\.+\d+\.+\d+\.+\d+\.+\/\d+\.+)/); |
44 |
+ system( "/sbin/e-smith/signal-event", "wireguard-conf-modify", "$ip",) |
45 |
+ == 0 or $msg = "Error occurred while modifying wireguard conf."; |
46 |
+ } |
47 |
if ($msg eq "OK") |
48 |
{ |
49 |
$q->delete('ip'); |
50 |
@@ -612,4 +617,15 @@ |
51 |
return $ip; |
52 |
} |
53 |
|
54 |
+sub test_for_private_ip { |
55 |
+ use NetAddr::IP; |
56 |
+ $_ = shift; |
57 |
+ my $mask = shift; |
58 |
+ return unless /(\d+\.\d+\.\d+\.\d+)/; |
59 |
+ my $iprange = NetAddr::IP->new($1,"$mask"); |
60 |
+ return unless $iprange; |
61 |
+ return ($iprange->first()->is_rfc1918() and $iprange->last()->is_rfc1918()); |
62 |
+} |
63 |
+ |
64 |
+ |
65 |
1; |