Linux mail.vriendennsm.nl 6.1.0-51-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.177-1 (2026-07-16) x86_64
Apache/2.4.68 (Debian)
Server IP : 217.154.75.17 & Your IP : 216.73.216.195
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
webmin /
net /
Delete
Unzip
Name
Size
Permission
Date
Action
images
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
lang
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
CHANGELOG
5.55
KB
-rw-r--r--
2026-07-17 21:17
acl_security.pl
3.08
KB
-rwxr-xr-x
2026-07-17 21:17
alpine-linux-lib.pl
754
B
-rw-r--r--
2026-07-17 21:17
apply.cgi
299
B
-rwxr-xr-x
2026-07-17 21:22
backup_config.pl
1005
B
-rwxr-xr-x
2026-07-17 21:17
cgi_args.pl
752
B
-rwxr-xr-x
2026-07-17 21:17
cobalt-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
coherent-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
config
48
B
-rw-r--r--
2026-07-17 21:17
config-ALL-linux
48
B
-rw-r--r--
2026-07-17 21:17
config-cygwin
82
B
-rw-r--r--
2026-07-17 21:17
config-freebsd
48
B
-rw-r--r--
2026-07-17 21:17
config-macos
48
B
-rw-r--r--
2026-07-17 21:17
config-netbsd
48
B
-rw-r--r--
2026-07-17 21:17
config-openbsd
48
B
-rw-r--r--
2026-07-17 21:17
config-solaris
79
B
-rw-r--r--
2026-07-17 21:17
config-syno-linux
48
B
-rw-r--r--
2026-07-17 21:17
config-unixware
48
B
-rw-r--r--
2026-07-17 21:17
config-windows
78
B
-rw-r--r--
2026-07-17 21:17
config.info
193
B
-rw-r--r--
2026-07-17 21:17
config.info.ca
241
B
-rw-r--r--
2026-07-17 21:17
config.info.cs
205
B
-rw-r--r--
2026-07-17 21:17
config.info.de
219
B
-rw-r--r--
2026-07-17 21:17
config.info.es
175
B
-rw-r--r--
2026-07-17 21:17
config.info.fa
255
B
-rw-r--r--
2026-07-17 21:17
config.info.fr
246
B
-rw-r--r--
2026-07-17 21:17
config.info.hu
0
B
-rw-r--r--
2026-07-17 21:17
config.info.ja
68
B
-rw-r--r--
2026-07-17 21:17
config.info.nl
197
B
-rw-r--r--
2026-07-17 21:17
config.info.no
208
B
-rw-r--r--
2026-07-17 21:17
config.info.pl
240
B
-rw-r--r--
2026-07-17 21:17
config.info.pt_BR
229
B
-rw-r--r--
2026-07-17 21:17
config.info.ru
361
B
-rw-r--r--
2026-07-17 21:17
config.info.sk
225
B
-rw-r--r--
2026-07-17 21:17
config.info.sv
42
B
-rw-r--r--
2026-07-17 21:17
config.info.tr
65
B
-rw-r--r--
2026-07-17 21:17
config.info.uk
87
B
-rw-r--r--
2026-07-17 21:17
config.info.zh
43
B
-rw-r--r--
2026-07-17 21:17
config.info.zh_TW
44
B
-rw-r--r--
2026-07-17 21:17
create_route.cgi
1004
B
-rwxr-xr-x
2026-07-17 21:22
cygwin-lib.pl
11.29
KB
-rwxr-xr-x
2026-07-17 21:17
debian-linux-lib.pl
31.63
KB
-rwxr-xr-x
2026-07-17 21:17
defaultacl
114
B
-rw-r--r--
2026-07-17 21:17
delete_aifcs.cgi
739
B
-rwxr-xr-x
2026-07-17 21:22
delete_bifcs.cgi
2.09
KB
-rwxr-xr-x
2026-07-17 21:22
delete_hosts.cgi
523
B
-rwxr-xr-x
2026-07-17 21:22
delete_ipnodes.cgi
542
B
-rwxr-xr-x
2026-07-17 21:22
delete_routes.cgi
458
B
-rwxr-xr-x
2026-07-17 21:22
dhcpcd-lib.pl
28.88
KB
-rw-r--r--
2026-07-17 21:17
edit_aifc.cgi
5.36
KB
-rwxr-xr-x
2026-07-17 21:22
edit_bifc.cgi
10.53
KB
-rwxr-xr-x
2026-07-17 21:22
edit_host.cgi
1.13
KB
-rwxr-xr-x
2026-07-17 21:22
edit_ipnode.cgi
1.04
KB
-rwxr-xr-x
2026-07-17 21:22
edit_range.cgi
1.34
KB
-rwxr-xr-x
2026-07-17 21:22
freebsd-lib.pl
19.22
KB
-rwxr-xr-x
2026-07-17 21:17
gentoo-linux-lib.pl
8.47
KB
-rwxr-xr-x
2026-07-17 21:17
ifupdown-lib.pl
3.17
KB
-rw-r--r--
2026-07-17 21:17
index.cgi
1.25
KB
-rwxr-xr-x
2026-07-17 21:22
interface_chooser.cgi
3.8
KB
-rwxr-xr-x
2026-07-17 21:22
linux-lib.pl
32.32
KB
-rwxr-xr-x
2026-07-17 21:17
list_dns.cgi
2.3
KB
-rwxr-xr-x
2026-07-17 21:22
list_hosts.cgi
1.36
KB
-rwxr-xr-x
2026-07-17 21:22
list_ifcs.cgi
7.96
KB
-rwxr-xr-x
2026-07-17 21:22
list_ipnodes.cgi
1.07
KB
-rwxr-xr-x
2026-07-17 21:22
list_routes.cgi
3.38
KB
-rwxr-xr-x
2026-07-17 21:22
log_parser.pl
1.39
KB
-rwxr-xr-x
2026-07-17 21:17
macos-lib.pl
11.58
KB
-rwxr-xr-x
2026-07-17 21:17
mandrake-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
mod_aifc.cgi
720
B
-rwxr-xr-x
2026-07-17 21:22
module.info
498
B
-rw-r--r--
2026-07-17 21:17
module.info.ar
0
B
-rw-r--r--
2026-07-17 21:17
module.info.ar.auto
170
B
-rw-r--r--
2026-07-17 21:17
module.info.bg
0
B
-rw-r--r--
2026-07-17 21:17
module.info.bg.auto
261
B
-rw-r--r--
2026-07-17 21:17
module.info.ca
127
B
-rw-r--r--
2026-07-17 21:17
module.info.ca.auto
25
B
-rw-r--r--
2026-07-17 21:17
module.info.cs
27
B
-rw-r--r--
2026-07-17 21:17
module.info.cs.auto
111
B
-rw-r--r--
2026-07-17 21:17
module.info.da
0
B
-rw-r--r--
2026-07-17 21:17
module.info.da.auto
129
B
-rw-r--r--
2026-07-17 21:17
module.info.de
121
B
-rw-r--r--
2026-07-17 21:17
module.info.de.auto
19
B
-rw-r--r--
2026-07-17 21:17
module.info.el
0
B
-rw-r--r--
2026-07-17 21:17
module.info.el.auto
229
B
-rw-r--r--
2026-07-17 21:17
module.info.es
30
B
-rw-r--r--
2026-07-17 21:17
module.info.es.auto
116
B
-rw-r--r--
2026-07-17 21:17
module.info.eu
0
B
-rw-r--r--
2026-07-17 21:17
module.info.eu.auto
142
B
-rw-r--r--
2026-07-17 21:17
module.info.fa
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fa.auto
194
B
-rw-r--r--
2026-07-17 21:17
module.info.fi
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fi.auto
145
B
-rw-r--r--
2026-07-17 21:17
module.info.fr
30
B
-rw-r--r--
2026-07-17 21:17
module.info.fr.auto
128
B
-rw-r--r--
2026-07-17 21:17
module.info.hr
0
B
-rw-r--r--
2026-07-17 21:17
module.info.hr.auto
148
B
-rw-r--r--
2026-07-17 21:17
module.info.hu
34
B
-rw-r--r--
2026-07-17 21:17
module.info.hu.auto
148
B
-rw-r--r--
2026-07-17 21:17
module.info.it
28
B
-rw-r--r--
2026-07-17 21:17
module.info.it.auto
112
B
-rw-r--r--
2026-07-17 21:17
module.info.ja
33
B
-rw-r--r--
2026-07-17 21:17
module.info.ja.auto
153
B
-rw-r--r--
2026-07-17 21:17
module.info.ko
28
B
-rw-r--r--
2026-07-17 21:17
module.info.ko.auto
105
B
-rw-r--r--
2026-07-17 21:17
module.info.ms
136
B
-rw-r--r--
2026-07-17 21:17
module.info.ms.auto
18
B
-rw-r--r--
2026-07-17 21:17
module.info.nl
29
B
-rw-r--r--
2026-07-17 21:17
module.info.nl.auto
105
B
-rw-r--r--
2026-07-17 21:17
module.info.no
31
B
-rw-r--r--
2026-07-17 21:17
module.info.no.auto
99
B
-rw-r--r--
2026-07-17 21:17
module.info.pl
122
B
-rw-r--r--
2026-07-17 21:17
module.info.pl.auto
19
B
-rw-r--r--
2026-07-17 21:17
module.info.pt
31
B
-rw-r--r--
2026-07-17 21:17
module.info.pt.auto
125
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR
34
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR.auto
131
B
-rw-r--r--
2026-07-17 21:17
module.info.ru
36
B
-rw-r--r--
2026-07-17 21:17
module.info.ru.auto
167
B
-rw-r--r--
2026-07-17 21:17
module.info.sk
28
B
-rw-r--r--
2026-07-17 21:17
module.info.sk.auto
113
B
-rw-r--r--
2026-07-17 21:17
module.info.sv
31
B
-rw-r--r--
2026-07-17 21:17
module.info.sv.auto
103
B
-rw-r--r--
2026-07-17 21:17
module.info.tr
30
B
-rw-r--r--
2026-07-17 21:17
module.info.tr.auto
130
B
-rw-r--r--
2026-07-17 21:17
module.info.uk
0
B
-rw-r--r--
2026-07-17 21:17
module.info.uk.auto
223
B
-rw-r--r--
2026-07-17 21:17
module.info.zh
21
B
-rw-r--r--
2026-07-17 21:17
module.info.zh.auto
90
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW
24
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW.auto
96
B
-rw-r--r--
2026-07-17 21:17
msc-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
net-detect.pl
3.47
KB
-rw-r--r--
2026-07-17 21:17
net-lib.pl
13.32
KB
-rwxr-xr-x
2026-07-17 21:17
netbsd-lib.pl
19.22
KB
-rwxr-xr-x
2026-07-17 21:17
netplan-lib.pl
26.1
KB
-rw-r--r--
2026-07-17 21:17
nm-lib.pl
18.13
KB
-rw-r--r--
2026-07-17 21:17
open-linux-lib.pl
7.2
KB
-rwxr-xr-x
2026-07-17 21:17
openbsd-lib.pl
12.61
KB
-rwxr-xr-x
2026-07-17 21:17
openmamba-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
pardus-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
rbac-mapping
180
B
-rw-r--r--
2026-07-17 21:17
rc.inet1
1.95
KB
-rw-r--r--
2026-07-17 21:17
redhat-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
save_aifc.cgi
6.04
KB
-rwxr-xr-x
2026-07-17 21:22
save_bifc.cgi
10.9
KB
-rwxr-xr-x
2026-07-17 21:22
save_dns.cgi
4.24
KB
-rwxr-xr-x
2026-07-17 21:22
save_host.cgi
1.18
KB
-rwxr-xr-x
2026-07-17 21:22
save_ipnode.cgi
1.26
KB
-rwxr-xr-x
2026-07-17 21:22
save_range.cgi
1.42
KB
-rwxr-xr-x
2026-07-17 21:22
save_routes.cgi
283
B
-rwxr-xr-x
2026-07-17 21:22
slackware-linux-9.1-ALL-lib.pl
7.85
KB
-rwxr-xr-x
2026-07-17 21:17
slackware-linux-lib.pl
6.71
KB
-rwxr-xr-x
2026-07-17 21:17
solaris-lib.pl
20.8
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-8.0-lib.pl
7.32
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-8.2-lib.pl
7.32
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-9.0-lib.pl
8.75
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-9.1-lib.pl
8.75
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-9.2-ALL-lib.pl
11.23
KB
-rwxr-xr-x
2026-07-17 21:17
suse-linux-lib.pl
9.08
KB
-rwxr-xr-x
2026-07-17 21:17
system_info.pl
2.42
KB
-rw-r--r--
2026-07-17 21:17
trustix-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
turbo-linux-lib.pl
33.11
KB
-rwxr-xr-x
2026-07-17 21:17
united-linux-lib.pl
7.32
KB
-rwxr-xr-x
2026-07-17 21:17
unixware-lib.pl
9.91
KB
-rwxr-xr-x
2026-07-17 21:17
windows-lib.pl
11.29
KB
-rwxr-xr-x
2026-07-17 21:17
Save
Rename
# cygwin-lib.pl # Networking functions for cygwin # # TODO: # * detect when netsh isn't available # * save domain list # * save domainname my $logfile = "/dev/null"; #my $logfile = "/tmp/debugwb"; #define variables that modify the behavior of the .cgi scripts #that are different than any other OS. $noos_support_add_ifcs = 1; #Windows doesn't supporting adding interfaces $noos_support_delete_ifcs = 1; #Windows doesn't supporting deleting interfaces $always_apply_ifcs = 1; #Changes made to interfaces are always applied $routes_active_now = 1; #Changes made to routes are always applied #Note: some changes Windows requires a reboot, some don't. #TODO2: determine which changes require a reboot. # active_interfaces() # Returns a list of currently ifconfig'd interfaces # ifc keys: 'name','fullname','virtual','address','netmask','broadcast', # 'ether','mtu','up','edit','index','dhcp' sub active_interfaces { local(@rv, @lines, $line); &open_execute_command(IFC, "ipconfig /all", 1, 1); while (<IFC>) { s/\r|\n//g; push(@lines, $_); } close(IFC); #Need to get the list of boottime interfaces, because ipconfig /all #doesn't return ipaddr if cable is disconnected my @bootifs = boot_interfaces(); my %ifc = (); foreach $line (@lines) { if ($line =~ /Ethernet adapter (.*):/) { my $name = $1; if (defined($ifc{'name'})) { #save the previous one $ifc{'index'} = scalar(@rv); local ($a1, $a2, $a3, $a4) = ($1, $2, $3, $4); if ($ifc{'address'}) { $ifc{'netmask'} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $ifc{'broadcast'} = sprintf("%d.%d.%d.%d", ($a1 | ~int($1))&0xff, ($a2 | ~int($2))&0xff, ($a3 | ~int($3))&0xff, ($a4 | ~int($4))&0xff); } my %tmp = %ifc; push(@rv, \%tmp); } %ifc = (); $ifc{'name'} = $ifc{'fullname'} = $name; } elsif ($line =~ /Media State.*: (.*)/) { $ifc{'up'} = ($1 !~ /Disconnected/); foreach (@bootifs) { if ($_->{'name'} eq $ifc{'name'}) { $ifc{'dhcp'} = $_->{'dhcp'}; $ifc{'address'} = $_->{'address'}; $ifc{'netmask'} = $_->{'netmask'}; } } } elsif ($line =~ /Description.*: (.*) \#(\d+)\s*$/) { $ifc{'desc'} = $1; $ifc{'index'} = $2; } elsif ($line =~ /Description.*: (.*)$/) { $ifc{'desc'} = $1; chop($ifc{'desc'}); $ifc{'num'} = 1; } elsif ($line =~ /Physical Address.*: (.+)$/) { $ifc{'ether'} = $1; $ifc{'ether'} =~ s/-/:/g; } elsif ($line =~ /IP Address.*: (.+)$/) { $ifc{'address'} = $1; $ifc{'up'} = 1 if ! defined $ifc{'up'}; } elsif ($line =~ /Subnet Mask.*: (.+)$/) { $ifc{'netmask'} = $1; } elsif ($line =~ /Default Gateway.*: (.+)$/) { #this is used for the router subroutines below $ifc{'gateway'} = $1; } elsif ($line =~ /DHCP Enabled.*: (.+)$/) { $ifc{'dhcp'} = ($1 =~ /Yes/); } } if (defined($ifc{'name'})) { #save the last one $ifc{'index'} = scalar(@rv); local ($a1, $a2, $a3, $a4) = ($1, $2, $3, $4); if ($ifc{'address'}) { $ifc{'netmask'} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $ifc{'broadcast'} = sprintf("%d.%d.%d.%d", ($a1 | ~int($1))&0xff, ($a2 | ~int($2))&0xff, ($a3 | ~int($3))&0xff, ($a4 | ~int($4))&0xff); } my %tmp = %ifc; push(@rv, \%tmp); } return @rv; } # activate_interface(&details) # Create or modify an interface sub activate_interface { save_interface($@); #Windows doesn't support adding or removing interfaces } # apply_interface(&details) # Save changes to an interface active now sub apply_interface { save_interface($@); } # deactivate_interface(&details) # Deactivate an interface sub deactivate_interface { #TODO2: determine how to deactivate an interface } # boot_interfaces() # Returns a list of interfaces brought up at boot time sub boot_interfaces { my @rv = (); #It doesn't seem to really help to display the loopback since #there's no mechanism in Windows to edit it. # push(@rv, { 'name' => 'lo0', # 'fullname' => 'lo0', # 'address' => '127.0.0.1', # 'netmask' => '255.0.0.0', # 'up' => 1, # 'edit' => 0 }); my (@lines, $l); &open_execute_command(IFC, "netsh interface ip dump", 1); while (<IFC>) { s/\r|\n//g; push(@lines, $_); } close(IFC); #my %ifc = (); foreach $l (@lines) { #TODO2: handle this message: #"Cannot access configuration. # Connection UI or someone else is accessing it." if ($l =~ /^set address name = "(.*)" source = dhcp/) { local %ifc; $ifc{'fullname'} = $ifc{'name'} = $1; $ifc{'index'} = scalar(@rv); $ifc{'edit'}++; $ifc{'dhcp'} = 1; $ifc{'up'} = 1; push(@rv, \%ifc); } elsif ($l =~ /^set address name = "(.*)" source = static addr = ([\d\.]+) mask = ([\d\.]+)/) { local %ifc; $ifc{'fullname'} = $ifc{'name'} = $1; $ifc{'address'} = $2; $ifc{'netmask'} = $3; $ifc{'index'} = scalar(@rv); $ifc{'edit'}++; $ifc{'address'} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; local ($a1, $a2, $a3, $a4) = ($1, $2, $3, $4); $ifc{'netmask'} =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; $ifc{'broadcast'} = sprintf("%d.%d.%d.%d", ($a1 | ~int($1))&0xff, ($a2 | ~int($2))&0xff, ($a3 | ~int($3))&0xff, ($a4 | ~int($4))&0xff); $ifc{'dhcp'} = 0; $ifc{'up'} = 1; push(@rv, \%ifc); } elsif ($l =~ /^set address name = "(.*)" gateway = ([\d\.]+) gwmetric = (\d)/) { foreach (@rv) { if ($_->{'name'} eq $1) { $_->{'gateway'} = $2; $_->{'gwmetric'} = $3; } } } } return @rv; } # save_interface(&details) # Create or update a boot-time interface sub save_interface { my $ifc = $_[0]; my $cmd = "netsh interface ip set address name = \"" . "$ifc->{'name'}\" source = "; if ($ifc->{'dhcp'}) { $cmd .= "dhcp"; } else { $cmd .= "static addr = $ifc->{'address'} mask = $ifc->{'netmask'}"; } system_logged("$cmd >$logfile 2>&1"); } # delete_interface(&details) # Delete a boot-time interface sub delete_interface { #Windows doesn't support adding or removing interfaces } # iface_type(name) # Returns a human-readable interface type name sub iface_type { #TODO2 #return "Fast Ethernet" if #return "Token Ring" if #return "PPP" if return "Loopback" if $_[0] =~ /^lo0$/; return "Ethernet"; } # iface_hardware(name) # Does some interface have an editable hardware address sub iface_hardware { #TODO2: PPP return $_[0] !~ /^(lo\d)$/; } # can_edit(what) # Can some boot-time interface parameter be edited? sub can_edit { return $_[0] =~ /^(dhcp|netmask)$/; } sub can_broadcast_def { return 0; } # valid_boot_address(address) # Is some address valid for a bootup interface sub valid_boot_address { return &to_ipaddress($_[0]) ? 1 : 0; } # get_dns_config() # Returns a hashtable containing keys nameserver, domain, order sub get_dns_config { my @lines = (); my $dns = {'domain' => []}; my $i = 0; if (&open_execute_command(CMD, "ipconfig /all", 1)) { my $doing_domain = 0; while (<CMD>) { s/[\n\r]//g; if ($doing_domain) { if (/(Ethernet adapter|:)/) { $doing_domain = 0; } elsif (/^\s*([^:]+\.[^:]+)$/) { push(@{$dns->{"domain"}}, $1); } } if (/Primary DNS Suffix.*: (.*)/) { push(@{$dns->{"domain"}}, $1); } elsif (/DNS Suffix Search List.*: (.*)/) { $doing_domain = 1; push(@{$dns->{"domain"}}, $1); } elsif (/^Ethernet adapter (.*):/) { $dns->{"name"}[$i++] = $1; } } close(CMD); } if (&open_execute_command(CMD, "netsh interface ip show dns", 1)) { my $doing_nameserver = 0; my $i = -1; my $key = "nameserver"; while (<CMD>) { s/\r|\n//g; if ($doing_nameserver) { if (/(Configuration for interface|:)/) { $doing_nameserver = 0; } elsif (/^\s*([\d\.]+)/) { push(@{$dns->{$key}}, $1); } } if (/Configuration for interface "(.*)"/) { $dns->{'name'}[++$i] = $1; $key = "nameserver"; $key .= $i if $i > 0; } elsif (/Statically Configured DNS Servers:\s*([\d\.]+)/) { push(@{$dns->{$key}}, $1); $doing_nameserver = 1; } } close(CMD); } return $dns; } # save_dns_config(&config) # Configures the DNS settings sub save_dns_config { my $dns = $_[0]; for ($i=0; $i < @{$dns->{'name'}}; $i++) { my $key = "nameserver"; $key .= $i if $i > 0; if (@{$dns->{$key}}) { my $cmd_fmt = "netsh interface ip %s dns name = \"" . $dns->{'name'}[$i] . "\"%s addr = %s"; my $addr = pop(@{$dns->{$key}}); my $cmd = sprintf($cmd_fmt, "set", " source = static", $addr); &system_logged("$cmd >$logfile 2>&1"); #add the new ones (any old list of adds was erased by the set cmd) foreach (@{$dns->{$key}}) { $cmd = sprintf($cmd_fmt, "add", "", $_); &system_logged("$cmd >$logfile 2>&1"); } } else { #set it to be obtained automatically my $cmd = "netsh interface ip set dns name = \"" . $dns->{'name'}[$i] . "\" source = dhcp"; &system_logged("$cmd >$logfile 2>&1"); #any old list of adds was erased by the set cmd } } #TODO: support saving the domain list #if ($_[0]->{'domain'}) { } $max_dns_servers = 16; #more is possible, but this is realistic # order_input(&dns) # Returns HTML for selecting the name resolution order sub order_input { #TODO2 } # parse_order(&dns) # Parses the form created by order_input() sub parse_order { #TODO2 } # get_hostname() sub get_hostname { return &get_system_hostname(); } # save_hostname(name) sub save_hostname { &system_logged("hostname $_[0] >/dev/null 2>&1"); &get_system_hostname(undef, undef, 2); # clear cache } # get_domainname() sub get_domainname { #TODO: determine how to get return ""; } # save_domainname(domain) sub save_domainname { #TODO: determine how to set } sub routing_config_files { return map { $_->{'file'} } &boot_interfaces(); } sub routing_input { # show default router(s) input my @if = boot_interfaces(); my $i = 0; foreach (@if) { next if $_->{'address'} eq "127.0.0.1"; my $none_or_dhcp = defined($ifc{'gateway'}) ? 0 : 1; my $desc = $_->{'name'} . ($_->{'dhcp'}? "" : " ($_->{'address'})"); print &ui_table_row("$desc $text{'routes_default'}", &ui_radio("gateway${i}_def", $none_or_dhcp, [ [ 1, $text{'routes_none'} ], [ 0, $text{'routes_gateway'}." ". &ui_textbox("gateway$i", $_->{'gateway'}, 15)." ". $text{'routes_gwmetric'}." ". &ui_textbox("gwmetric$i", $_->{'gwmetric'}, 4) ] ]). &ui_hidden("ifname${i}", $_->{'name'})); $i++; } } sub parse_routing { my $i = 0; my @if = boot_interfaces(); while (defined($in{"gateway${i}_def"})) { my $name = $in{"ifname$i"}; my $gateway = $in{"gateway$i"}; my $gwmetric = $in{"gwmetric$i"}; foreach (@if) { if ($_->{'name'} eq $name) { if (! $in{"gateway${i}_def"}) { if ($gateway != $_->{'gateway'} || $gwmetric != $_->{'gwmetric'}) { &check_ipaddress($gateway) || &error(&text('routes_egateway', &html_escape($gateway))); my $cmd = "netsh interface ip set address name = \"" . $_->{'name'} . "\" gateway = $gateway " . "gwmetric = $gwmetric"; system_logged("$cmd > $logfile 2>&1"); } } else { if (defined($_->{'gateway'})) { my $cmd = "netsh interface ip delete address name = \"" . $_->{'name'} . "\" gateway = $_->{'gateway'}"; system_logged("$cmd > $logfile 2>&1"); } } } } $i++; } } # supports_address6([&iface]) # Returns 1 if managing IPv6 interfaces is supported sub supports_address6 { local ($iface) = @_; return 0; } 1;