1 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-openvpn-s2s-0.1/root/etc/e-smith/events/actions/openvpn-s2s-delete-networks mezzanine_patched_smeserver-openvpn-s2s-0.1/root/etc/e-smith/events/actions/openvpn-s2s-delete-networks |
2 |
--- smeserver-openvpn-s2s-0.1/root/etc/e-smith/events/actions/openvpn-s2s-delete-networks 2010-10-16 17:56:47.000000000 +0200 |
3 |
+++ mezzanine_patched_smeserver-openvpn-s2s-0.1/root/etc/e-smith/events/actions/openvpn-s2s-delete-networks 2010-10-16 23:47:20.000000000 +0200 |
4 |
@@ -20,18 +20,37 @@ |
5 |
#---------------------------------------------------------------------- |
6 |
|
7 |
use strict; |
8 |
+use esmith::ConfigDB; |
9 |
use esmith::NetworksDB; |
10 |
use esmith::event; |
11 |
|
12 |
my $db = esmith::NetworksDB->open || die "Couldn't open netwoks db\n"; |
13 |
+my $ovpndb = esmith::ConfigDB->open_ro('openvpn-s2s') || die "Couldn't open openvpn-s2s db\n"; |
14 |
my @nets = $db->networks; |
15 |
+my @vpnnets = (); |
16 |
+my $vpnnet; |
17 |
+ |
18 |
+# buils a list of network used by a VPN daemon |
19 |
+foreach my $vpn ($ovpndb->get_all_by_prop(type=>'server'), |
20 |
+ $ovpndb->get_all_by_prop(type=>'client')){ |
21 |
+ $vpnnet = $vpn->prop('RemoteNetworks') || ''; |
22 |
+ if ($vpnnet ne ''){ |
23 |
+ my ($vpnnet,undef) = split(/\//, $vpnnet); |
24 |
+ push @vpnnets, $vpnnet; |
25 |
+ } |
26 |
+ push @vpnnets, $vpn->prop('RemoteIP'); |
27 |
+} |
28 |
|
29 |
foreach my $net (@nets){ |
30 |
my $key = $net->key; |
31 |
my $vpn = $db->get_prop($key,"VPN") || ''; |
32 |
+ |
33 |
if ($vpn ne ''){ |
34 |
- $db->set_prop($key, type=>'network-deleted'); |
35 |
- event_signal("network-delete","$key"); |
36 |
+ unless (grep{ $_ eq $key} @vpnnets){ |
37 |
+ $db->set_prop($key, type=>'network-deleted'); |
38 |
+ event_signal("network-delete","$key"); |
39 |
+ $db->get($key)->delete; |
40 |
+ } |
41 |
} |
42 |
} |
43 |
|
44 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-openvpn-s2s-0.1/root/etc/openvpn/s2s/bin/up mezzanine_patched_smeserver-openvpn-s2s-0.1/root/etc/openvpn/s2s/bin/up |
45 |
--- smeserver-openvpn-s2s-0.1/root/etc/openvpn/s2s/bin/up 2010-10-16 17:56:47.000000000 +0200 |
46 |
+++ mezzanine_patched_smeserver-openvpn-s2s-0.1/root/etc/openvpn/s2s/bin/up 2010-10-16 23:55:50.000000000 +0200 |
47 |
@@ -25,12 +25,22 @@ |
48 |
net="route_network_$N" |
49 |
mask="route_netmask_$N" |
50 |
if [ ! -z "${!net}" ]; then |
51 |
- /sbin/e-smith/db networks set ${!net} network Mask ${!mask} Router $ifconfig_remote VPN $vpnid |
52 |
- /sbin/e-smith/signal-event network-create ${!net} |
53 |
+ db=$(/sbin/e-smith/db networks getprop ${!net} VPN) |
54 |
+ if [ ! -z $db ]; then |
55 |
+ # if the network already exists in the DB, just push the route |
56 |
+ /sbin/route add -net $net netmask $mask gw $ifconfig_remote |
57 |
+ else |
58 |
+ /sbin/e-smith/db networks set ${!net} network Mask ${!mask} Router $ifconfig_remote VPN $vpnid |
59 |
+ /sbin/e-smith/signal-event network-create ${!net} |
60 |
+ fi |
61 |
fi |
62 |
done |
63 |
|
64 |
-# In any cas, create a local network for the VPN itself |
65 |
-/sbin/e-smith/db networks set $ifconfig_remote network Mask 255.255.255.255 VPN $vpnid |
66 |
-/sbin/e-smith/signal-event network-create $ifconfig_remote |
67 |
+ |
68 |
+# Check route for the VPN itself |
69 |
+db=$(/sbin/e-smith/db networks getprop $ifconfig_remote VPN) |
70 |
+if [ -z $db ]; then |
71 |
+ /sbin/e-smith/db networks set $ifconfig_remote network Mask 255.255.255.255 VPN $vpnid |
72 |
+ /sbin/e-smith/signal-event network-create $ifconfig_remote |
73 |
+fi |
74 |
|