3 # Create, update or delete an address pool
5 require './dhcpd-lib.pl';
6 require './params-lib.pl';
8 &lock_file($config{'dhcpd_conf'});
10 if ($in{'sidx'} ne "") {
11 $sha = $conf->[$in{'sidx'}];
12 $sub = $sha->{'members'}->[$in{'uidx'}];
16 $sub = $conf->[$in{'uidx'}];
20 $pool = { 'name' => 'pool',
25 $pool = $sub->{'members'}->[$in{'idx'}];
29 %access = &get_module_acl();
30 &error_setup($text{'eacl_aviol'});
31 &error("$text{'eacl_np'} $text{'eacl_pus'}") if !&can('rw', \%access, $sub);
35 # Delete this pool from it's subnet
36 &save_directive($sub, [ $pool ], [ ], 0);
40 for($i=0; defined($low = $in{"range_low_$i"}); $i++) {
42 $hi = $in{"range_hi_$i"}; $dyn = $in{"range_dyn_$i"};
43 &check_ipaddress($low) ||
44 &error("'$low' $text{'ssub_invalidipr'}");
45 !$hi || &check_ipaddress($hi) ||
46 &error("'$hi' $text{'ssub_invalidipr'}");
47 $rng = { 'name' => 'range',
48 'values' => [ ($dyn ? "dynamic-bootp" : ()),
49 $low, ($hi ? $hi : ()) ] };
52 &save_directive($pool, "range", \@rng, 1);
53 if($in{'failover_peer'}) {
54 !&check_domain($in{'failover_peer'}) ||
55 &error("'$in{'failover_peer'}' $text{'ssub_invalidfopeer'}");
56 $in{'failover_peer'} = "\"$in{'failover_peer'}\"";
57 push(@failover_peer, { 'name' => 'failover peer',
58 'values' => [ $in{'failover_peer'} ] });
60 &save_directive($pool, "failover", \@failover_peer, 1);
62 $in{'allow'} =~ s/\r//g;
63 foreach $a (split(/\n/, $in{'allow'})) {
64 push(@allow, { 'name' => 'allow', 'values' => [ $a ] });
66 &save_directive($pool, "allow", \@allow, 1);
67 $in{'deny'} =~ s/\r//g;
68 foreach $a (split(/\n/, $in{'deny'})) {
69 push(@deny, { 'name' => 'deny', 'values' => [ $a ] });
71 &save_directive($pool, "deny", \@deny, 1);
72 &parse_params($pool, 0);
74 # Save or create the pool
76 &save_directive($sub, [ ], [ $pool ], $indent);
79 &save_directive($sub, [ $pool ], [ $pool ], $indent);
83 &unlock_file($config{'dhcpd_conf'});
84 if ($sub->{'name'} eq 'subnet') {
85 &webmin_log('modify', 'subnet',
86 "$sub->{'values'}->[0]/$sub->{'values'}->[2]", \%in);
87 &redirect("edit_subnet.cgi?sidx=$in{'sidx'}&idx=$in{'uidx'}");
90 &webmin_log('modify', 'shared', $sub->{'values'}->[0], \%in);
91 &redirect("edit_shared.cgi?idx=$in{'uidx'}");