3 # Save network interfaces on which the DHCP server is started
5 require './dhcpd-lib.pl';
6 %access = &get_module_acl();
7 $access{'noconfig'} && &error($text{'iface_ecannot'});
11 @iface = split(/\s+|\0/, $in{'iface'});
12 @iface || &error($text{'iface_enone'});
13 $iface = join(" ", @iface);
14 $config{'interfaces'} = join(" ", @iface);
15 &write_file("$module_config_directory/config", \%config);
17 if ($config{'interfaces_type'} eq 'mandrake') {
18 if (-r "/etc/conf.linuxconf") {
19 # Write to Mandrake linuxconf file
20 local $lref = &read_file_lines("/etc/conf.linuxconf");
21 for($i=0; $i<@$lref; $i++) {
22 $secline = $i if ($lref->[$i] =~ /\[dhcpd\]/);
23 $ifaceline = $i if ($lref->[$i] =~ /DHCP.interface/);
25 $line = "DHCP.interface $iface";
26 if (defined($ifaceline)) {
27 $lref->[$ifaceline] = $line;
29 elsif (defined($secline)) {
30 splice(@$lref, $secline+1, 0, $line);
33 push(@$lref, "[dhcpd]", $line);
38 # Write to sysconfig file
39 &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
40 $dhcpd{'INTERFACES'} = $iface;
41 &write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
44 elsif ($config{'interfaces_type'} eq 'redhat') {
45 # Write to the Redhat environment file
46 &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
47 $dhcpd{'DHCPDARGS'} = $iface;
48 &write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
50 elsif ($config{'interfaces_type'} eq 'suse') {
51 # Write to the SuSE/United environment file
52 &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
53 $dhcpd{'DHCPD_INTERFACE'} = $iface;
54 &write_env_file("/etc/sysconfig/dhcpd", \%dhcpd);
56 elsif ($config{'interfaces_type'} eq 'debian') {
57 if (-r "/etc/default/isc-dhcp-server") {
58 # Write to Debian 6.0 environment file
59 &read_env_file("/etc/default/isc-dhcp-server", \%dhcpd);
60 $dhcpd{'INTERFACES'} = $iface;
61 &write_env_file("/etc/default/isc-dhcp-server", \%dhcpd);
63 elsif (-r "/etc/default/dhcp") {
64 # Write to Debian environment file
65 &read_env_file("/etc/default/dhcp", \%dhcpd);
66 $dhcpd{'INTERFACES'} = $iface;
67 &write_env_file("/etc/default/dhcp", \%dhcpd);
69 elsif (-r "/etc/default/dhcp3-server") {
70 # Write to Debian DHCPd 3 environment file
71 &read_env_file("/etc/default/dhcp3-server", \%dhcpd);
72 $dhcpd{'INTERFACES'} = $iface;
73 &write_env_file("/etc/default/dhcp3-server", \%dhcpd);
76 # Write to the debian init script
77 $lref = &read_file_lines("/etc/init.d/dhcp");
78 for($i=0; $i<@$lref; $i++) {
79 if ($lref->[$i] =~ /INTERFACES\s*=\s*'([^']+)'/ ||
80 $lref->[$i] =~ /INTERFACES\s*=\s*"([^"]+)"/ ||
81 $lref->[$i] =~ /INTERFACES\s*=\s*(\S+)/) {
82 $lref->[$i] = "INTERFACES=\"$iface\"";
85 &flush_file_lines("/etc/init.d/dhcp");
88 elsif ($config{'interfaces_type'} eq 'caldera') {
89 # Interfaces are set in the Caldera daemons directory file
90 &read_env_file("/etc/sysconfig/daemons/dhcpd", \%dhcpd);
91 @other = grep { !/^(lo|[a-z]+\d+)$/ } split(/\s+/, $dhcpd{'OPTIONS'});
92 $dhcpd{'OPTIONS'} = join(" ", @other).($iface ? " $iface" : "");
93 &write_env_file("/etc/sysconfig/daemons/dhcpd", \%dhcpd);
95 elsif ($config{'interfaces_type'} eq 'gentoo') {
96 # Interfaces are set in a file on Gentoo
97 &read_env_file("/etc/conf.d/dhcp", \%dhcp);
98 $dhcp{'IFACE'} = $iface;
99 &write_env_file("/etc/conf.d/dhcp", \%dhcp);