forked from webmin/webmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsave_iface.cgi
executable file
·103 lines (98 loc) · 3.3 KB
/
save_iface.cgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/local/bin/perl
# save_ifaces.cgi
# Save network interfaces on which the DHCP server is started
require './dhcpd-lib.pl';
%access = &get_module_acl();
$access{'noconfig'} && &error($text{'iface_ecannot'});
&ReadParse();
# Save in config file
@iface = split(/\s+|\0/, $in{'iface'});
@iface || &error($text{'iface_enone'});
$iface = join(" ", @iface);
$config{'interfaces'} = join(" ", @iface);
&write_file("$module_config_directory/config", \%config);
if ($config{'interfaces_type'} eq 'mandrake') {
if (-r "/etc/conf.linuxconf") {
# Write to Mandrake linuxconf file
local $lref = &read_file_lines("/etc/conf.linuxconf");
for($i=0; $i<@$lref; $i++) {
$secline = $i if ($lref->[$i] =~ /\[dhcpd\]/);
$ifaceline = $i if ($lref->[$i] =~ /DHCP.interface/);
}
$line = "DHCP.interface $iface";
if (defined($ifaceline)) {
$lref->[$ifaceline] = $line;
}
elsif (defined($secline)) {
splice(@$lref, $secline+1, 0, $line);
}
else {
push(@$lref, "[dhcpd]", $line);
}
&flush_file_lines();
}
else {
# Write to sysconfig file
&read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
$dhcpd{'INTERFACES'} = $iface;
&write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
}
}
elsif ($config{'interfaces_type'} eq 'redhat') {
# Write to the Redhat environment file
&read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
$dhcpd{'DHCPDARGS'} = $iface;
&write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
}
elsif ($config{'interfaces_type'} eq 'suse') {
# Write to the SuSE/United environment file
&read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
$dhcpd{'DHCPD_INTERFACE'} = $iface;
&write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
}
elsif ($config{'interfaces_type'} eq 'debian') {
if (-r "/etc/default/isc-dhcp-server") {
# Write to Debian 6.0 environment file
&read_env_file("/etc/default/isc-dhcp-server", \%dhcpd);
$dhcpd{'INTERFACES'} = $iface;
&write_env_file("/etc/default/isc-dhcp-server", \%dhcpd);
}
elsif (-r "/etc/default/dhcp") {
# Write to Debian environment file
&read_env_file("/etc/default/dhcp", \%dhcpd);
$dhcpd{'INTERFACES'} = $iface;
&write_env_file("/etc/default/dhcp", \%dhcpd);
}
elsif (-r "/etc/default/dhcp3-server") {
# Write to Debian DHCPd 3 environment file
&read_env_file("/etc/default/dhcp3-server", \%dhcpd);
$dhcpd{'INTERFACES'} = $iface;
&write_env_file("/etc/default/dhcp3-server", \%dhcpd);
}
else {
# Write to the debian init script
$lref = &read_file_lines("/etc/init.d/dhcp");
for($i=0; $i<@$lref; $i++) {
if ($lref->[$i] =~ /INTERFACES\s*=\s*'([^']+)'/ ||
$lref->[$i] =~ /INTERFACES\s*=\s*"([^"]+)"/ ||
$lref->[$i] =~ /INTERFACES\s*=\s*(\S+)/) {
$lref->[$i] = "INTERFACES=\"$iface\"";
}
}
&flush_file_lines("/etc/init.d/dhcp");
}
}
elsif ($config{'interfaces_type'} eq 'caldera') {
# Interfaces are set in the Caldera daemons directory file
&read_env_file("/etc/sysconfig/daemons/dhcpd", \%dhcpd);
@other = grep { !/^(lo|[a-z]+\d+)$/ } split(/\s+/, $dhcpd{'OPTIONS'});
$dhcpd{'OPTIONS'} = join(" ", @other).($iface ? " $iface" : "");
&write_env_file("/etc/sysconfig/daemons/dhcpd", \%dhcpd);
}
elsif ($config{'interfaces_type'} eq 'gentoo') {
# Interfaces are set in a file on Gentoo
&read_env_file("/etc/conf.d/dhcp", \%dhcp);
$dhcp{'IFACE'} = $iface;
&write_env_file("/etc/conf.d/dhcp", \%dhcp);
}
&redirect("");