Viewing file: edit_iface.cgi (3.45 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl # edit_ifaces.cgi # Display network interfaces on which the DHCP server is started
require './dhcpd-lib.pl'; %access = &get_module_acl(); $access{'noconfig'} && &error($text{'iface_ecannot'});
# Get the interface if ($config{'interfaces_type'} eq 'mandrake') { if (-r "/etc/conf.linuxconf") { # Older mandrake's init script uses a linuxconf setting open(FILE, "/etc/conf.linuxconf"); while(<FILE>) { if (/DHCP.interface\s+(.*)/) { $iface = $1; } } close(FILE); } else { # Newer use Redhat-style sysconfig file &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd); $iface = $dhcpd{'INTERFACES'}; } } elsif ($config{'interfaces_type'} eq 'redhat') { # Redhat's init script uses an environment file &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd); $iface = $dhcpd{'DHCPDARGS'}; } elsif ($config{'interfaces_type'} eq 'suse') { # SuSE and United use an environment file too &read_env_file("/etc/sysconfig/dhcpd", \%dhcpd); $iface = $dhcpd{'DHCPD_INTERFACE'}; } elsif ($config{'interfaces_type'} eq 'debian') { if (-r "/etc/default/isc-dhcp-server") { # Debian 6+ uses a new environment file &read_env_file("/etc/default/isc-dhcp-server", \%dhcpd); $iface = $dhcpd{'INTERFACES'}; } elsif (-r "/etc/default/dhcp") { # New debian uses an environment file &read_env_file("/etc/default/dhcp", \%dhcpd); $iface = $dhcpd{'INTERFACES'}; } elsif (-r "/etc/default/dhcp3-server") { # DHCPd 3 uses a different environment file &read_env_file("/etc/default/dhcp3-server", \%dhcpd); $iface = $dhcpd{'INTERFACES'}; } else { # Old debian has the interface set in the 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+)/) { $iface = $1; } } } } elsif ($config{'interfaces_type'} eq 'caldera') { # Interfaces are set in the Caldera daemons directory file &read_env_file("/etc/sysconfig/daemons/dhcpd", \%dhcpd); @iface = grep { /^(lo|[a-z]+\d+)$/ } split(/\s+/, $dhcpd{'OPTIONS'}); $iface = join(" ", @iface); } elsif ($config{'interfaces_type'} eq 'gentoo') { # Interfaces are set in a file on Gentoo &read_env_file("/etc/conf.d/dhcp", \%dhcp); $iface = $dhcp{'IFACE'}; } elsif ($config{'interfaces_type'} eq 'freebsd') { # From FreeBSD rc.conf file &foreign_require("init"); my $rcconf = &init::get_rc_conf(); my ($c) = grep { $_->{'name'} eq 'dhcpd_ifaces' } @$rcconf; if ($c) { $iface = $c->{'value'}; } } else { # Just use the configuration $iface = $config{'interfaces'}; }
&ui_print_header(undef, $text{'iface_title'}, ""); print "$text{'iface_desc'}<p>\n"; print "<form action=save_iface.cgi>\n"; print "<table><tr>\n"; print "<td valign=top><b>$text{'iface_listen'}</b></td>\n"; if (&foreign_check("net")) { %got = map { $_, 1 } split(/\s+/, $iface); &foreign_require("net", "net-lib.pl"); @ifaces = grep { $_->{'virtual'} eq '' } &net::active_interfaces(); $sz = scalar(@ifaces); print "<td><select name=iface multiple size=$sz>\n"; foreach $i (@ifaces) { $n = $i->{'fullname'}; printf "<option value=%s %s>%s (%s)\n", $n, $got{$n} ? 'selected' : '', $n, &net::iface_type($n); } print "</select></td>\n"; } else { print "<td><input name=iface size=30 value='$iface'></td>\n"; } print "</tr></table>\n"; print "<input type=submit value='$text{'save'}'></form>\n";
&ui_print_footer("", $text{'listl_return'});
|