diff options
Diffstat (limited to 'perl-install/network')
-rw-r--r-- | perl-install/network/activefw.pm | 151 | ||||
-rw-r--r-- | perl-install/network/adsl.pm | 407 | ||||
-rw-r--r-- | perl-install/network/adsl_consts.pm | 969 | ||||
-rw-r--r-- | perl-install/network/drakfirewall.pm | 216 | ||||
-rw-r--r-- | perl-install/network/ethernet.pm | 158 | ||||
-rw-r--r-- | perl-install/network/ipsec.pm | 801 | ||||
-rw-r--r-- | perl-install/network/isdn.pm | 201 | ||||
-rw-r--r-- | perl-install/network/isdn_consts.pm | 452 | ||||
-rw-r--r-- | perl-install/network/modem.pm | 243 | ||||
-rw-r--r-- | perl-install/network/netconnect.pm | 1613 | ||||
-rw-r--r-- | perl-install/network/network.pm | 684 | ||||
-rw-r--r-- | perl-install/network/nfs.pm | 69 | ||||
-rw-r--r-- | perl-install/network/shorewall.pm | 173 | ||||
-rw-r--r-- | perl-install/network/smb.pm | 217 | ||||
-rw-r--r-- | perl-install/network/smbnfs.pm | 45 | ||||
-rw-r--r-- | perl-install/network/test.pm | 158 | ||||
-rw-r--r-- | perl-install/network/tools.pm | 304 |
17 files changed, 0 insertions, 6861 deletions
diff --git a/perl-install/network/activefw.pm b/perl-install/network/activefw.pm deleted file mode 100644 index 5ddd696d2..000000000 --- a/perl-install/network/activefw.pm +++ /dev/null @@ -1,151 +0,0 @@ -package activefw; - -use Net::DBus; -use Net::DBus::Binding::Watch; -use Gtk2::Helper; -use POSIX qw(strftime); -use Socket; - -sub new { - my ($type, $filter) = @_; - - my $bus = Net::DBus->system; - my $con = $bus->{connection}; - - $con->add_filter($filter); - $con->add_match("type='signal',interface='com.mandrakesoft.activefirewall'"); - - set_DBus_watch($con); - $con->dispatch; - - my $o = bless { - bus => $bus, - daemon => $daemon - }, $type; - - $o->find_daemon; - - $o; -} - -sub find_daemon { - my ($o) = @_; - my $service = $o->{bus}->get_service("com.mandrakesoft.activefirewall.daemon"); - $o->{daemon} = $service->get_object("/com/mandrakesoft/activefirewall", "com.mandrakesoft.activefirewall.daemon"); -} - -sub set_DBus_watch { - my ($con) = @_; - $con->set_watch_callbacks(sub { - my ($con, $watch) = @_; - my $flags = $watch->get_flags; - if ($flags & &Net::DBus::Binding::Watch::READABLE) { - Gtk2::Helper->add_watch($watch->get_fileno, 'in', sub { - $watch->handle(&Net::DBus::Binding::Watch::READABLE); - $con->dispatch; - 1; - }); - } - #- do nothing for WRITABLE watch, we dispatch when needed - }, undef, undef); #- do nothing when watch is disabled or toggled yet -} - -sub dispatch { - my ($o) = @_; - $o->{bus}{connection}->dispatch; -} - -sub call_method { - my ($o, $method, @args) = @_; - my @ret; - eval { - @ret = $o->{daemon}->$method(@args); - }; - if ($@) { - print "($method) exception: $@\n"; - $o->dispatch; - return; - } - @ret; -} - -sub blacklist { - my ($o, $seq, $blacklist) = @_; - $o->call_method('Blacklist', - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $seq), - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $blacklist)); -} - -sub unblacklist { - my ($o, $addr) = @_; - $o->call_method('UnBlacklist', - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $addr)); -} - -sub whitelist { - my ($o, $addr) = @_; - $o->call_method('Whitelist', - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $addr)); -} - -sub unwhitelist { - my ($o, $addr) = @_; - $o->call_method('UnWhitelist', - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $addr)); -} - -sub get_interactive { - my ($o) = @_; - $o->call_method('GetMode'); -} - -sub set_interactive { - my ($o, $mode) = @_; - $o->call_method('SetMode', - Net::DBus::Binding::Value->new(&Net::DBus::Binding::Message::TYPE_UINT32, $mode)); -} - -sub get_reports { - my ($o) = @_; - $o->call_method('GetReports'); -} - -sub get_blacklist { - my ($o) = @_; - $o->call_method('GetBlacklist'); -} - -sub get_whitelist { - my ($o) = @_; - $o->call_method('GetWhitelist'); -} - -sub format_date { - my ($timestamp) = @_; - strftime("%c", localtime($timestamp)); -} - -sub get_service { - my ($port) = @_; - getservbyport($port, undef) || $port; -} - -sub get_ip_address { - my ($addr) = @_; - inet_ntoa(pack('N', $addr)); -} - -sub resolve_address { - my ($ip_addr) = @_; - #- try to resolve address, timeout after 2 seconds - my $hostname; - eval { - local $SIG{ALRM} = sub { die "ALARM" }; - alarm 2; - $hostname = gethostbyaddr(inet_aton($ip_addr), AF_INET); - alarm 0; - }; - $hostname || $ip_addr; -} - -1; diff --git a/perl-install/network/adsl.pm b/perl-install/network/adsl.pm deleted file mode 100644 index 9748e16d0..000000000 --- a/perl-install/network/adsl.pm +++ /dev/null @@ -1,407 +0,0 @@ -package network::adsl; # $Id$ - -use common; -use run_program; -use network::tools; -use network::ethernet; -use modules; -use vars qw(@ISA @EXPORT); - -@ISA = qw(Exporter); -@EXPORT = qw(adsl_conf_backend); - - -sub get_wizard { - my ($wiz) = @_; - my $netc = $wiz->{var}{netc}; - - my %l = ( - 'pppoe' => N("use PPPoE"), - 'pptp' => N("use PPTP"), - 'dhcp' => N("use DHCP"), - 'speedtouch' => N("Alcatel Speedtouch USB") . if_($netc->{autodetect}{adsl}{speedtouch}, N(" - detected")), - 'sagem' => N("Sagem (using PPPoA) USB") . if_($netc->{autodetect}{adsl}{sagem}, N(" - detected")), - 'sagem_dhcp' => N("Sagem (using DHCP) USB") . if_($netc->{autodetect}{adsl}{sagem}, N(" - detected")), - # 'eci' => N("ECI Hi-Focus"), # this one needs eci agreement - ); - - $wiz->{var}{adsl} = { - connection_list => \%l, - type => "", - }; - add2hash($wiz->{pages}, - { - adsl_old => { - name => N("Connect to the Internet") . "\n\n" . - N("The most common way to connect with adsl is pppoe. -Some connections use PPTP, a few use DHCP. -If you do not know, choose 'use PPPoE'"), - data => [ - { - label => N("ADSL connection type:"), val => \$wiz->{var}{adsl}{type}, list => [ sort values %l ] }, - ], - pre => sub { - $wiz->{var}{adsl}{type} = $l{sagem}; # debug - $wiz->{var}{adsl}{type} ||= find { $netc->{autodetect}{adsl}{$_} } keys %l; - print "\n\ntype is «$wiz->{var}{adsl}{type}»\n\n"; - }, - post => sub { - $wiz->{var}{adsl}{type} = find { $l{$_} eq $wiz->{var}{adsl}{type} } keys %l; - my $adsl = $wiz->{var}{adsl}{connection}; - my $type = $wiz->{var}{adsl}{type}; - my $netcnx = $wiz->{var}{netcnx}; - $netcnx->{type} = "adsl_$type"; - - $netcnx->{"adsl_$type"} = {}; - $netcnx->{"adsl_$type"}{vpivci} = '' if $type =~ /eci|speedtouch/; - return 'ethernet' if $type eq 'dhcp'; - adsl_probe_info($adsl, $netc, $type); - # my ($adsl, $netc, $intf, $adsl_type) = @_; - # ask_info2($adsl, $netc); - return "hw_account"; - }, - }, - }); -} - -sub adsl_probe_info { - my ($adsl, $netc, $adsl_type, $o_adsl_modem) = @_; - my $pppoe_file = "$::prefix/etc/ppp/pppoe.conf"; - my %pppoe_conf; %pppoe_conf = getVarsFromSh($pppoe_file) if (! defined $adsl_type || $adsl_type eq 'pppoe') && -f $pppoe_file; - my $login = $pppoe_conf{USER}; - foreach (qw(/etc/ppp/peers/ppp0 /etc/ppp/options /etc/ppp/options.adsl)) { - ($login) = map { if_(/^user\s+"([^"]+)"/, $1) } cat_("$::prefix/$_") if !$login && -r "$::prefix/$_"; - } - my $passwd = passwd_by_login($login); - if (!$netc->{vpi} && !$netc->{vci} && member($o_adsl_modem, qw(eci speedtouch))) { - ($netc->{vpi}, $netc->{vci}) = - (map { if_(/^.*-vpi\s+(\d+)\s+-vci\s+(\d+)/, map { sprintf("%x", $_) } $1, $2) } cat_("$::prefix/etc/ppp/peers/ppp0")); - } - $pppoe_conf{DNS1} ||= ''; - $pppoe_conf{DNS2} ||= ''; - add2hash($netc, { dnsServer2 => $pppoe_conf{DNS1}, dnsServer3 => $pppoe_conf{DNS2}, DOMAINNAME2 => '' }); - add2hash($adsl, { login => $login, passwd => $passwd, passwd2 => '' }); -} - -sub adsl_detect() { - my $adsl = {}; - require detect_devices; - @{$adsl->{bewan}} = detect_devices::getBewan(); - @{$adsl->{speedtouch}} = detect_devices::getSpeedtouch(); - @{$adsl->{sagem}} = detect_devices::getSagem(); - @{$adsl->{eci}} = detect_devices::getECI(); - return $adsl; -} - -sub sagem_set_parameters { - my ($netc) = @_; - my %l = map { $_ => sprintf("%08s", $netc->{$_}) } qw(vci vpi Encapsulation); - foreach my $cfg_file (qw(/etc/analog/adiusbadsl.conf /etc/eagle-usb/eagle-usb.conf)) { - substInFile { - s/Linetype=.*\n/Linetype=0000000A\n/; #- use CMVs - s/VCI=.*\n/VCI=$l{vci}\n/; - s/VPI=.*\n/VPI=$l{vpi}\n/; - s/Encapsulation=.*\n/Encapsulation=$l{Encapsulation}\n/; - s/STATIC_IP=.*\n//; - s!</eaglectrl>!STATIC_IP=$netc->{static_ip}\n</eaglectrl>! if $netc->{static_ip}; - #- TODO: add ISP info, $netc->{provider_id} - } "$::prefix$cfg_file"; - } - #- create CMV symlinks for both POTS and ISDN lines - foreach my $type (qw(p i)) { - my $cmv; - my ($country) = $netc->{provider_id} =~ /^([a-zA-Z]+)\d+$/; - #- try to find a CMV for this specific ISP - $cmv = "$::prefix/etc/eagle-usb/CMVe${type}$netc->{provider_id}.txt" if $netc->{provider_id}; - #- if not found, try to found a CMV for the country - -f $cmv or $cmv = "$::prefix/etc/eagle-usb/CMVe${type}${country}.txt"; - #- fallback on the generic CMV if no other matched - -f $cmv or $cmv = "$::prefix/etc/eagle-usb/CMVe${type}WO.txt"; - symlinkf($cmv, "$::prefix/etc/eagle-usb/CMVe${type}.txt"); - } - #- remove this otherwise eaglectrl won't start - unlink("$::prefix/etc/eagle-usb/eagle-usb_must_be_configured"); -} - -sub adsl_conf_backend { - my ($in, $modules_conf, $adsl, $netc, $intf, $adsl_device, $adsl_type, $o_netcnx) = @_; - # FIXME: should not be needed: - defined $o_netcnx and $netc->{adsltype} = $o_netcnx->{type}; - $netc->{adsltype} ||= "adsl_$adsl_type"; - $adsl_type eq 'pptp' and $adsl_device = 'pptp_modem'; - $adsl_type eq 'capi' and $adsl_device = 'capi_modem'; - my $bewan_module; - $bewan_module = $o_netcnx->{bus} eq 'PCI' ? 'unicorn_pci_atm' : 'unicorn_usb_atm' if $adsl_device eq "bewan"; - - # all supported modems came with their own pppoa module, so no need for "plugin pppoatm.so" - my %modems = ( - bewan => { - start => qq( -modprobe pppoatm -# ActivationMode=1 -modprobe $bewan_module -# wait for the modem to be set up: -sleep 10 -), - stop => qq(modprobe -r $bewan_module), - plugin => { - pppoa => "pppoatm.so " . join('.', hex($netc->{vpi}), hex($netc->{vci})) - }, - ppp_options => qq( -lock -ipparam ppp0 -default-asyncmap -hide-password -noaccomp -nobsdcomp -nodeflate -novj novjccomp -lcp-echo-interval 20 -lcp-echo-failure 3 -sync -), - }, - - speedtouch => - { - modules => [ qw(speedtch) ], - start => '/usr/bin/speedtouch-start --nocall', - overide_script => 1, - server => { - pppoa => qq("/usr/sbin/pppoa3 -c") - }, - plugin => { - pppoa => "pppoatm.so " . join('.', hex($netc->{vpi}), hex($netc->{vci})), - }, - ppp_options => qq( -sync -noaccomp), - aliases => [ - ['char-major-108', 'ppp_generic'], - ['tty-ldisc-3', 'ppp_async'], - ['tty-ldisc-13', 'n_hdlc'], - ['tty-ldisc-14', 'ppp_synctty'], - ['ppp-compress-21', 'bsd_comp'], - ['ppp-compress-24', 'ppp_deflate'], - ['ppp-compress-26', 'ppp_deflate'] - ], - }, - sagem => - { - modules => [ qw(eagle-usb) ], - start => '/sbin/eaglectrl -d', - stop => "/usr/bin/killall pppoa", - get_intf => '/sbin/eaglectrl -i', - server => { - pppoa => q("/sbin/fctStartAdsl -t 1 -i"), - }, - ppp_options => qq( -mru 1492 -mtu 1492 -nobsdcomp -nodeflate -noaccomp -am -novjccomp), - aliases => [ - ['char-major-108', 'ppp_generic'], - ['tty-ldisc-3', 'ppp_async'], - ['tty-ldisc-13', 'n_hdlc'], - ['tty-ldisc-14', 'ppp_synctty'] - ], - }, - eci => - { - start => '/usr/bin/startmodem', - server => { - pppoe => qq("/usr/bin/pppoeci -v 1 -vpi $netc->{vpi} -vci $netc->{vci}"), - }, - ppp_options => qq( -noipdefault -sync -noaccomp -linkname eciadsl -noauth -lcp-echo-interval 0) - }, - pptp_modem => - { - server => { - pptp => qq("/usr/sbin/pptp 10.0.0.138 --nolaunchpppd"), - }, - }, - capi_modem => - { - ppp_options => qq( -connect /bin/true -ipcp-accept-remote -ipcp-accept-local - -sync -noauth -lcp-echo-interval 5 -lcp-echo-failure 3 -lcp-max-configure 50 -lcp-max-terminate 2 - -noccp -noipx -mru 1492 -mtu 1492), - plugin => { - capi => qq(capiplugin.so -avmadsl) - }, - }, - ); - - - if ($adsl_type =~ /^pp|^capi$/) { - mkdir_p("$::prefix/etc/ppp"); - $in->do_pkgs->install('ppp') if !$>; - my %packages = ( - pppoa => [ qw(ppp-pppoatm) ], - pppoe => [ qw(ppp-pppoe rp-pppoe) ], - pptp => [ qw(pptp-linux) ], - capi => [ qw(isdn4k-utils) ], #- capi4linux service - ); - $in->do_pkgs->install(@{$packages{$adsl_type}}) if !$>; - output("$::prefix/etc/ppp/options", - $adsl_device eq "bewan" ? - qq(lock -ipparam ppp0 -noipdefault -noauth -default-asyncmap -defaultroute -hide-password -noaccomp -noccp -nobsdcomp -nodeflate -nopcomp -novj novjccomp -lcp-echo-interval 20 -lcp-echo-failure 3 -sync -persist -user $adsl->{login} -name $adsl->{login} -usepeerdns -) - : - qq(lock -noipdefault -persist -noauth -usepeerdns -defaultroute) - ); - - my $pty_option = $modems{$adsl_device}{server}{$adsl_type} && "pty $modems{$adsl_device}{server}{$adsl_type}"; - my $plugin = $modems{$adsl_device}{plugin}{$adsl_type} && "plugin $modems{$adsl_device}{plugin}{$adsl_type}"; - my $noipdefault = $adsl_type eq 'pptp' ? '' : 'noipdefault'; - output("$::prefix/etc/ppp/peers/ppp0", -qq(noauth -$noipdefault -$modems{$adsl_device}{ppp_options} -kdebug 1 -nopcomp -noccp -novj -holdoff 4 -maxfail 25 -persist -usepeerdns -defaultroute -$pty_option -$plugin -user "$adsl->{login}" -)); - - write_secret_backend($adsl->{login}, $adsl->{passwd}); - - if ($netc->{NET_DEVICE} =~ /^eth/) { - my $net_device = $netc->{NET_DEVICE}; - $intf->{$net_device} = { - DEVICE => $net_device, - BOOTPROTO => 'none', - NETMASK => '255.255.255.0', - NETWORK => '10.0.0.0', - BROADCAST => '10.0.0.255', - ONBOOT => 'yes', - }; - } - - if ($adsl_type eq 'pppoe') { - if (-f "$::prefix/etc/ppp/pppoe.conf") { - my $net_device = $modems{$adsl_device}{get_intf} ? "`$modems{$adsl_device}{get_intf}`" : $netc->{NET_DEVICE}; - substInFile { - s/ETH=.*\n/ETH=$net_device\n/; - s/USER=.*\n/USER=$adsl->{login}\n/; - s/DNS1=.*\n/DNS1=$netc->{dnsServer2}\n/; - s/DNS2=.*\n/DNS2=$netc->{dnsServer3}\n/; - } "$::prefix/etc/ppp/pppoe.conf"; - } else { - log::l("can not find pppoe.conf, make sure the rp-pppoe package is installed"); - } - } - -# pppoe => { -# # we do not call directly pppd, rp-pppoe take care of "plugin rp-pppoe.so" peers option and the like -# connect => "LC_ALL=C LANG=C LANGUAGE=C LC_MESSAGES=C /usr/sbin/adsl-start", -# disconnect => qq(/usr/sbin/adsl-stop -# /usr/bin/killall pppoe pppd\n), -# }, - - } - - #- FIXME: - #- ppp0 and ippp0 are hardcoded - my $kind = $adsl_type eq 'pppoe' ? 'xDSL' : 'ADSL'; - my $metric = network::tools::get_default_metric("adsl"); #- FIXME, do not override if already set - output_with_perm("$::prefix/etc/sysconfig/network-scripts/ifcfg-ppp0", 0705, qq(DEVICE=ppp0 -ONBOOT=no -TYPE=$kind -METRIC=$metric -)) unless member($adsl_type, qw(manual dhcp)); - - #- remove file used with sagem for dhcp/static connections - unlink("$::prefix/etc/sysconfig/network-scripts/ifcfg-sagem"); - - #- set vpi, vci and encapsulation parameters for sagem - if ($adsl_device eq 'sagem') { - $netc->{static_ip} = $intf->{sagem}{IPADDR} if $adsl_type eq 'manual'; - sagem_set_parameters($netc); - } - - #- set aliases - if (exists $modems{$adsl_device}{aliases}) { - $modules_conf->set_alias($_->[0], $_->[1]) foreach @{$modems{$adsl_device}{aliases}}; - $::isStandalone and $modules_conf->write; - } - #- remove the "speedtch off" alias that was written by Mandrakelinux 10.0 - $adsl_device eq 'speedtouch' and $modules_conf->remove_alias('speedtch'); - - if ($adsl_type eq "capi") { - require network::isdn; - network::isdn::setup_capi_conf($adsl->{capi}); - services::stop("isdn4linux"); - services::do_not_start_service_on_boot("isdn4linux"); - services::start_service_on_boot("capi4linux"); - services::start("capi4linux"); - - #- install and run drdsl for dsl connections, once capi driver is loaded - $in->do_pkgs->ensure_is_installed_if_available("drdsl", "/usr/sbin/drdsl"); - run_program::rooted($::prefix, "/usr/sbin/drdsl"); - } - - #- load modules and run modem-specific start programs - #- useful during install, or in case the packages have been installed after the device has been plugged - my @modules = (@{$modems{$adsl_device}{modules}}, map { $_->[1] } @{$modems{$adsl_device}{aliases}}); - @modules or @modules = qw(ppp_synctty ppp_async ppp_generic n_hdlc); #- required for pppoe/pptp connections - @modules && eval { modules::load(@modules) } - or log::l("failed to load " . join(',', @modules), " modules: $@"); - $modems{$adsl_device}{start} and run_program::rooted($::prefix, $modems{$adsl_device}{start}); -} - -1; diff --git a/perl-install/network/adsl_consts.pm b/perl-install/network/adsl_consts.pm deleted file mode 100644 index 93b6dba33..000000000 --- a/perl-install/network/adsl_consts.pm +++ /dev/null @@ -1,969 +0,0 @@ -package network::adsl_consts; # $Id$ - -# This should probably be splitted out into ldetect-lst as some provider db - -use vars qw(@ISA @EXPORT); -use common; -use utf8; - -@ISA = qw(Exporter); -@EXPORT = qw(@adsl_data); - -# Originally from : -# http://www.eagle-usb.org/article.php3?id_article=23 -# http://www.sagem.com/web-modems/download/support-fast1000-fr.htm -# http://perso.wanadoo.fr/michel-m/protocolesfai.htm - -our %adsl_data = ( - ## format chosen is the following : - # country|provider => { VPI, VCI_hexa, ... } all parameters - # country is automagically translated into LANG with N function - # provider is kept "as-is", not translated - # provider_id is used by eagleconfig to identify an ISP (I use ISO_3166-1) - # see http://en.wikipedia.org/wiki/ISO_3166-1 - # url_tech : technical URL providing info about ISP - # vpi : virtual path identifier - # vci : virtual channel identifier (in hexa below !!) - # Encapsulation: - # 1=PPPoE LLC, 2=PPPoE VCmux (never used ?) - # 3=RFC1483/2684 Routed IP LLC, - # 4=RFC1483/2684 Routed IP (IPoA VCmux) - # 5 RFC2364 PPPoA LLC, - # 6 RFC2364 PPPoA VCmux - # see http://faq.eagle-usb.org/wakka.php?wiki=AdslDescription - # dns are provided for when !usepeerdns in peers config file - # dnsServer2 dnsServer3 : main DNS - # dnsServers_text : string with any valid DNS (when more than 2) - # DOMAINNAME2 : used for search key in /etc/resolv.conf - # method : PPPoA, pppoe, static or dhcp - # methods_all : all methods for connection with this ISP (when more than 1) - # modem : model of modem provided by ISP or tested with ISP - # please forward updates to http://forum.eagle-usb.org - # try to order alphabetically by country (in English) / ISP (local language) - - N("Algeria") . "|Wanadoo" => - { - provider_id => 'DZ01', - vpi => 0, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - dnsServer2 => '82.101.136.29', - dnsServer3 => '82.101.136.206', - }, - - N("Argentina") . "|Speedy" => - { - provider_id => 'AR01', - vpi => 1, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - dnsServer2 => '200.51.254.238', - dnsServer3 => '200.51.209.22', - }, - - N("Austria") . "|Any" => - { - provider_id => 'AT00', - vpi => 8, - vci => 30, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Austria") . "|AON" => - { - provider_id => 'AT01', - vpi => 1, - vci => 20, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Austria") . "|Telstra" => - { - provider_id => 'AT02', - vpi => 8, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Belgium") . "|ADSL Office" => - { - provider_id => 'BE04', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("Belgium") . "|Tiscali BE" => - { - provider_id => 'BE01', - vpi => 8, - vci => 23, - Encapsulation => 6, - method => 'pppoa', - dnsServer2 => '212.35.2.1', - dnsServer3 => '212.35.2.2', - DOMAINNAME2 => 'tiscali.be', - }, - - N("Belgium") . "|Belgacom" => - { - provider_id => 'BE03', - vpi => 8, - vci => 23, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Belgium") . "|Turboline" => - { - provider_id => 'BE02', - vpi => 8, - vci => 23, - Encapsulation => 5, - method => 'pppoa', - }, - - N("Brazil") . "|Speedy/Telefonica" => - { - provider_id => 'BR01', - vpi => 8, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - dnsServer2 => '200.204.0.10', - dnsServer3 => '200.204.0.138', - }, - - N("Brazil") . "|Velox/Telemar" => - { - provider_id => 'BR02', - vpi => 0, - vci => 21, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Brazil") . "|Turbo/Brasil Telecom" => - { - provider_id => 'BR03', - vpi => 0, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Brazil") . "|Rio Grande do Sul (RS)" => - { - provider_id => 'BR04', - vpi => 1, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Bulgaria") . "|BTK ISDN" => - { - provider_id => 'BG02', - vpi => 1, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Bulgaria") . "|BTK POTS" => - { - provider_id => 'BG01', - vpi => 0, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Beijing" => - { - provider_id => 'CN01', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Changchun" => - { - provider_id => 'CN02', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Harbin" => - { - provider_id => 'CN03', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Jilin" => - { - provider_id => 'CN04', - vpi => 0, - vci => 27, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Lanzhou" => - { - provider_id => 'CN05', - vpi => 0, - vci => 20, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Tianjin" => - { - provider_id => 'CN06', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Xi'an" => - { - provider_id => 'CN07', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Chongqing" => - { - provider_id => 'CN08', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Fujian" => - { - provider_id => 'CN09', - vpi => 0, - vci => 0xc8, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Guangxi" => - { - provider_id => 'CN10', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Guangzhou" => - { - provider_id => 'CN11', - vpi => 8, - vci => 20, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Hangzhou" => - { - provider_id => 'CN12', - vpi => 0, - vci => 20, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Netcom|Hunan" => - { - provider_id => 'CN13', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Nanjing" => - { - provider_id => 'CN14', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Shanghai" => - { - provider_id => 'CN15', - vpi => 8, - vci => 51, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Shenzhen" => - { - provider_id => 'CN16', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Urumqi" => - { - provider_id => 'CN17', - vpi => 0, - vci => 20, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Wuhan" => - { - provider_id => 'CN18', - vpi => 0, - vci => 20, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Yunnan" => - { - provider_id => 'CN19', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("China") . "|China Telecom|Zhuhai" => - { - provider_id => 'CN20', - vpi => 0, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("Czech Republic") . "|Cesky Telecom" => - { - provider_id => 'CZ01', - url_tech => 'http://www.telecom.cz/domacnosti/internet/pristupove_sluzby/broadband/vse_o_kz_a_moznostech_instalace.php', - vpi => 8, - vci => 48, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Denmark") . "|Any" => - { - provider_id => 'DK01', - vpi => 0, - vci => 65, - method => 'pppoe', - Encapsulation => 3, - }, - - N("Finland") . "|Sonera" => - { - provider_id => 'FI01', - vpi => 0, - vci => 64, - Encapsulation => 3, - method => 'pppoe', - }, - - N("France") . "|Free non dégroupé 512/128 & 1024/128" => - { - provider_id => 'FR01', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '213.228.0.23', - dnsServer3 => '212.27.32.176', - method => 'pppoa', - DOMAINNAME2 => 'free.fr', - }, - - N("France") . "|Free dégroupé 1024/256 (mini)" => - { - provider_id => 'FR04', - vpi => 8, - vci => 24, - Encapsulation => 4, - dnsServer2 => '213.228.0.23', - dnsServer3 => '212.27.32.176', - method => 'dhcp', - DOMAINNAME2 => 'free.fr', - }, - - N("France") . "|n9uf tel9com 512 & dégroupé 1024" => - { - provider_id => 'FR05', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '212.30.93.108', - dnsServer3 => '212.203.124.146', - method => 'pppoa', - }, - - N("France") . "|Cegetel non dégroupé 512 IP/ADSL et dégroupé" => - { - provider_id => 'FR08', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '212.94.174.85', - dnsServer3 => '212.94.174.86', - method => 'pppoa', - }, - - N("France") . "|Club-Internet" => - { - provider_id => 'FR06', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '194.117.200.10', - dnsServer3 => '194.117.200.15', - method => 'pppoa', - DOMAINNAME2 => 'club-internet.fr', - }, - - N("France") . "|Wanadoo" => - { - provider_id => 'FR09', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '80.10.246.2', - dnsServer3 => '80.10.246.129', - method => 'pppoa', - DOMAINNAME2 => 'wanadoo.fr', - }, - - N("France") . "|Télé2" => - { - provider_id => 'FR02', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '212.151.136.242', - dnsServer3 => '130.244.127.162', - method => 'pppoa', - }, - - N("France") . "|Tiscali.fr 128k" => - { - provider_id => 'FR03', - vpi => 8, - vci => 23, - Encapsulation => 5, - dnsServer2 => '213.36.80.1', - dnsServer3 => '213.36.80.2', - method => 'pppoa', - }, - - N("France") . "|Tiscali.fr 512k" => - { - provider_id => 'FR07', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '213.36.80.1', - dnsServer3 => '213.36.80.2', - method => 'pppoa', - }, - - N("Germany") . "|Deutsche Telekom (DT)" => - { - provider_id => 'DE01', - vpi => 1, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Germany") . "|1&1" => - { - provider_id => 'DE02', - vpi => 1, - vci => 20, - Encapsulation => 1, - dnsServer2 => '195.20.224.234', - dnsServer3 => '194.25.2.129', - method => 'pppoe', - }, - - N("Greece") . "|Any" => - { - provider_id => 'GR01', - vpi => 8, - vci => 23, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Hungary") . "|Matav" => - { - provider_id => 'HU01', - vpi => 1, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Ireland") . "|Any" => - { - provider_id => 'IE01', - vpi => 8, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Israel") . "|Bezeq" => - { - provider_id => 'IL01', - vpi => 8, - vci => 30, - Encapsulation => 6, - dnsServer2 => '192.115.106.10', - dnsServer3 => '192.115.106.11', - method => 'pppoa', - }, - - N("Italy") . "|Libero.it" => - { - provider_id => 'IT04', - url_tech => 'http://internet.libero.it/assistenza/adsl/installazione_ass.phtml', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '193.70.192.25', - dnsServer3 => '193.70.152.25', - method => 'pppoa', - }, - - N("Italy") . "|Telecom Italia" => - { - provider_id => 'IT01', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '195.20.224.234', - dnsServer3 => '194.25.2.129', - method => 'pppoa', - }, - - N("Italy") . "|Telecom Italia/Office Users (ADSL Smart X)" => - { - provider_id => 'IT02', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'manual', - }, - - N("Italy") . "|Tiscali.it, Alice" => - { - provider_id => 'IT03', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '195.20.224.234', - dnsServer3 => '194.25.2.129', - method => 'pppoa', - }, - - N("Lithuania") . "|Lietuvos Telekomas" => - { - provider_id => 'LT01', - vpi => 8, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Morocco") . "|Maroc Telecom" => - { - provider_id => 'MA01', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '212.217.0.1', - dnsServer3 => '212.217.0.12', - method => 'pppoa', - }, - - N("Netherlands") . "|KPN" => - { - provider_id => 'NL01', - vpi => 8, - vci => 30, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Netherlands") . "|Eager Telecom" => - { - provider_id => 'NL02', - vpi => 0, - vci => 21, - Encapsulation => 3, - method => 'dhcp', - }, - - N("Netherlands") . "|Tiscali" => - { - provider_id => 'NL03', - vpi => 0, - vci => 22, - Encapsulation => 3, - method => 'dhcp', - }, - - N("Netherlands") . "|Versatel" => - { - provider_id => 'NL04', - vpi => 0, - vci => 20, - Encapsulation => 3, - method => 'dhcp', - }, - - N("Norway") . "|Bluecom" => - { - method => 'dhcp', - }, - - N("Norway") . "|Firstmile" => - { - method => 'dhcp', - }, - - N("Norway") . "|NextGenTel" => - { - method => 'dhcp', - }, - - N("Norway") . "|SSC" => - { - method => 'dhcp', - }, - - N("Norway") . "|Tele2" => - { - method => 'dhcp', - }, - - N("Norway") . "|Telenor ADSL" => - { - method => 'PPPoE', - }, - - N("Norway") . "|Tiscali" => - { - vpi => 8, - vci => 35, - method => 'dhcp', - }, - - N("Poland") . "|Telekomunikacja Polska (TPSA/neostrada)" => - { - provider_id => 'PL01', - vpi => 0, - vci => 23, - Encapsulation => 6, - dnsServer2 => '194.204.152.34', - dnsServer3 => '217.98.63.164', - method => 'pppoa', - }, - - N("Poland") . "|Netia neostrada" => - { - provider_id => 'PL02', - url_tech => 'http://www.netia.pl/?o=d&s=210', - vpi => 8, - vci => 23, - Encapsulation => 1, - dnsServer2 => '195.114.181.130', - dnsServer3 => '195.114.161.61', - method => 'pppoe', - }, - - N("Portugal") . "|PT" => - { - provider_id => 'PT01', - vpi => 0, - vci => 23, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Russia") . "|MTU-Intel" => - { - provider_id => 'RU01', - url_tech => 'http://stream.ru/s-requirements', - vpi => 1, - vci => 50, - Encapsulation => 1, - dnsServer2 => '212.188.4.10', - dnsServer3 => '195.34.32.116', - method => 'pppoe', - }, - - N("Slovenia") . "|SiOL" => - { - provider_id => 'SL01', - vpi => 1, - vci => 20, - method => 'pppoe', - Encapsulation => 1, - dnsServer2 => '193.189.160.11', - dnsServer3 => '193.189.160.12', - DOMAINNAME2 => 'siol.net', - }, - - N("Spain") . "|Telefónica IP dinámica" => - { - provider_id => 'ES01', - vpi => 8, - vci => 20, - Encapsulation => 1, - dnsServer2 => '80.58.32.33', - dnsServer3 => '80.58.0.97', - method => 'pppoe', - }, - - N("Spain") . "|Telefónica ip fija" => - { - provider_id => 'ES02', - vpi => 8, - vci => 20, - Encapsulation => 3, - method => 'static', - dnsServer2 => '80.58.32.33', - dnsServer3 => '80.58.0.97', - }, - - N("Spain") . "|Wanadoo/Eresmas Retevision" => - { - provider_id => 'ES03', - vpi => 8, - vci => 23, - Encapsulation => 6, - dnsServer2 => '80.58.0.33', - dnsServer3 => '80.58.32.97', - method => 'pppoa', - }, - - N("Spain") . "|Wanadoo PPPoE" => - { - provider_id => 'ES04', - vpi => 8, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Spain") . "|Wanadoo ip fija" => - { - provider_id => 'ES05', - vpi => 8, - vci => 20, - Encapsulation => 3, - method => 'static', - }, - - N("Spain") . "|Tiscali" => - { - provider_id => 'ES06', - vpi => 1, - vci => 20, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Spain") . "|Arrakis" => - { - provider_id => 'ES07', - vpi => 0, - vci => 23, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Spain") . "|Auna" => - { - provider_id => 'ES08', - vpi => 0, - vci => 23, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Spain") . "|Communitel" => - { - provider_id => 'ES09', - vpi => 0, - vci => 21, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Spain") . "|Euskatel" => - { - provider_id => 'ES10', - vpi => 8, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Spain") . "|Uni2" => - { - provider_id => 'ES11', - vpi => 1, - vci => 21, - Encapsulation => 6, - method => 'pppoa', - }, - - N("Spain") . "|Ya.com PPPoE" => - { - provider_id => 'ES12', - vpi => 8, - vci => 20, - Encapsulation => 1, - method => 'pppoe', - }, - - N("Spain") . "|Ya.com static" => - { - provider_id => 'ES13', - vpi => 8, - vci => 20, - Encapsulation => 3, - method => 'static', - }, - - N("Sweden") . "|Telia" => - { - provider_id => 'SE01', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("Switzerland") . "|Any" => - { - provider_id => 'CH01', - vpi => 8, - vci => 23, - Encapsulation => 3, - method => 'pppoe', - }, - - N("Switzerland") . "|BlueWin / Swisscom" => - { - provider_id => 'CH02', - vpi => 8, - vci => 23, - Encapsulation => 5, - dnsServer2 => '195.186.4.108', - dnsServer3 => '195.186.4.109', - method => 'pppoa', - }, - - N("Switzerland") . "|Tiscali.ch" => - { - provider_id => 'CH03', - vpi => 8, - vci => 23, - Encapsulation => 1, - method => 'pppoa', - }, - - N("Thailand") . "|Asianet" => - { - provider_id => 'TH01', - vpi => 0, - vci => 64, - Encapsulation => 1, - dnsServer2 => '203.144.225.242', - dnsServer3 => '203.144.225.72', - method => 'pppoe', - }, - - N("Tunisia") . "|Planet.tn" => - { - provider_id => 'TH01', - url_tech => 'http://www.planet.tn/', - vpi => 0, - vci => 23, - Encapsulation => 5, - dnsServer2 => '193.95.93.77', - dnsServer3 => '193.95.66.10', - method => 'pppoe', - }, - - N("United Arab Emirates") . "|Etisalat" => - { - provider_id => 'AE01', - vpi => 0, - vci => 32, - Encapsulation => 5, - dnsServer2 => '213.42.20.20', - dnsServer3 => '195.229.241.222', - method => 'pppoa', - }, - - N("United Kingdom") . "|Tiscali UK " => - { - provider_id => 'UK01', - vpi => 0, - vci => 26, - Encapsulation => 6, - dnsServer2 => '212.74.112.66', - dnsServer3 => '212.74.112.67', - method => 'pppoa', - }, - - N("United Kingdom") . "|British Telecom " => - { - provider_id => 'UK02', - vpi => 0, - vci => 26, - Encapsulation => 6, - dnsServer2 => '194.74.65.69', - dnsServer3 => '194.72.9.38', - method => 'pppoa', - }, - - ); - - -1; diff --git a/perl-install/network/drakfirewall.pm b/perl-install/network/drakfirewall.pm deleted file mode 100644 index 7b36d4de0..000000000 --- a/perl-install/network/drakfirewall.pm +++ /dev/null @@ -1,216 +0,0 @@ -package network::drakfirewall; # $Id$ - -use strict; -use diagnostics; - -use network::shorewall; -use common; - -my @all_servers = -( - { - name => N_("Web Server"), - pkg => 'apache apache-mod_perl boa', - ports => '80/tcp 443/tcp', - }, - { - name => N_("Domain Name Server"), - pkg => 'bind', - ports => '53/tcp 53/udp', - }, - { - name => N_("SSH server"), - pkg => 'openssh-server', - ports => '22/tcp', - }, - { - name => N_("FTP server"), - pkg => 'ftp-server-krb5 wu-ftpd proftpd pure-ftpd', - ports => '20/tcp 21/tcp', - }, - { - name => N_("Mail Server"), - pkg => 'sendmail postfix qmail', - ports => '25/tcp', - }, - { - name => N_("POP and IMAP Server"), - pkg => 'imap courier-imap-pop', - ports => '109/tcp 110/tcp 143/tcp', - }, - { - name => N_("Telnet server"), - pkg => 'telnet-server-krb5', - ports => '23/tcp', - hide => 1, - }, - { - name => N_("Windows Files Sharing (SMB)"), - pkg => 'samba-server', - ports => '137/tcp 137/udp 138/tcp 138/udp 139/tcp 139/udp 445/tcp 445/udp 1024:1100/tcp 1024:1100/udp', - hide => 1, - }, - { - name => N_("CUPS server"), - pkg => 'cups', - ports => '631/tcp 631/udp', - hide => 1, - }, - { - name => N_("Echo request (ping)"), - ports => '8/icmp', - force_default_selection => 0, - }, - { - name => N_("BitTorrent"), - ports => '6881:6999/tcp', - hide => 1, - pkg => 'bittorrent bittorrent-shadowsclient', - }, -); - -sub port2server { - my ($port) = @_; - find { - any { $port eq $_ } split(' ', $_->{ports}); - } @all_servers; -} - -sub check_ports_syntax { - my ($ports) = @_; - foreach (split ' ', $ports) { - my ($nb, $range, $nb2) = m!^(\d+)(:(\d+))?/(tcp|udp|icmp)$! or return $_; - foreach my $port ($nb, if_($range, $nb2)) { - 1 <= $port && $port <= 65535 or return $_; - } - $nb < $nb2 or return $_ if $range; - } - ''; -} - -sub to_ports { - my ($servers, $unlisted) = @_; - join(' ', (map { $_->{ports} } @$servers), if_($unlisted, $unlisted)); -} - -sub from_ports { - my ($ports) = @_; - - my @l; - my @unlisted; - foreach (split ' ', $ports) { - if (my $s = port2server($_)) { - push @l, $s; - } else { - push @unlisted, $_; - } - } - [ uniq(@l) ], join(' ', @unlisted); -} - -sub default_from_pkgs { - my ($do_pkgs) = @_; - my @pkgs = $do_pkgs->are_installed(map { split ' ', $_->{pkg} } @all_servers); - [ grep { - my $s = $_; - exists $s->{force_default_selection} ? - $s->{force_default_selection} : - any { member($_, @pkgs) } split(' ', $s->{pkg}); - } @all_servers ]; -} - -sub default_ports { - my ($do_pkgs) = @_; - to_ports(default_from_pkgs($do_pkgs), ''); -} - -sub get_ports() { - my $shorewall = network::shorewall::read() or return; - $shorewall->{ports}; -} - -sub set_ports { - my ($do_pkgs, $disabled, $ports, $o_in) = @_; - - my $shorewall = network::shorewall::read($o_in) or return; - - if (!$disabled || -x "$::prefix/sbin/shorewall") { - $do_pkgs->ensure_binary_is_installed('shorewall', 'shorewall', $::isInstall) or return; - - $shorewall->{disabled} = $disabled; - $shorewall->{ports} = $ports; - log::l($disabled ? "disabling shorewall" : "configuring shorewall to allow ports: $ports"); - network::shorewall::write($shorewall); - } -} - -sub get_conf { - my ($in, $disabled, $o_ports) = @_; - - my $possible_servers = default_from_pkgs($in->do_pkgs); - $_->{hide} = 0 foreach @$possible_servers; - - if ($o_ports) { - $disabled, from_ports($o_ports); - } elsif (my $shorewall = network::shorewall::read()) { - $shorewall->{disabled}, from_ports($shorewall->{ports}); - } else { - $in->ask_okcancel('', N("drakfirewall configurator - -This configures a personal firewall for this Mandrakelinux machine. -For a powerful and dedicated firewall solution, please look to the -specialized MandrakeSecurity Firewall distribution."), 1) or return; - - $in->ask_okcancel('', N("drakfirewall configurator - -Make sure you have configured your Network/Internet access with -drakconnect before going any further."), 1) or return; - - $disabled, $possible_servers, ''; - } -} - -sub choose { - my ($in, $disabled, $servers, $unlisted) = @_; - - $_->{on} = 0 foreach @all_servers; - $_->{on} = 1 foreach @$servers; - my @l = grep { $_->{on} || !$_->{hide} } @all_servers; - - $in->ask_from_({ - messages => N("Which services would you like to allow the Internet to connect to?"), - advanced_messages => N("You can enter miscellaneous ports. -Valid examples are: 139/tcp 139/udp 600:610/tcp 600:610/udp. -Have a look at /etc/services for information."), - callbacks => { - complete => sub { - if (my $invalid_port = check_ports_syntax($unlisted)) { - $in->ask_warn('', N("Invalid port given: %s. -The proper format is \"port/tcp\" or \"port/udp\", -where port is between 1 and 65535. - -You can also give a range of ports (eg: 24300:24350/udp)", $invalid_port)); - return 1; - } - }, - } }, - [ - { text => N("Everything (no firewall)"), val => \$disabled, type => 'bool' }, - (map { { text => translate($_->{name}), val => \$_->{on}, type => 'bool', disabled => sub { $disabled } } } @l), - { label => N("Other ports"), val => \$unlisted, advanced => 1, disabled => sub { $disabled } } - ]) or return; - - $disabled, to_ports([ grep { $_->{on} } @l ], $unlisted); -} - -sub main { - my ($in, $disabled) = @_; - - ($disabled, my $servers, my $unlisted) = get_conf($in, $disabled) or return; - - ($disabled, my $ports) = choose($in, $disabled, $servers, $unlisted) or return; - - set_ports($in->do_pkgs, $disabled, $ports, $in) or return; - - ($disabled, $ports); -} diff --git a/perl-install/network/ethernet.pm b/perl-install/network/ethernet.pm deleted file mode 100644 index 615d6c809..000000000 --- a/perl-install/network/ethernet.pm +++ /dev/null @@ -1,158 +0,0 @@ -package network::ethernet; # $Id$ - -use c; -use network::network; -use modules; -use modules::interactive; -use detect_devices; -use common; -use run_program; -use network::tools; - -our @dhcp_clients = qw(dhclient dhcpcd pump dhcpxd); - -sub install_dhcp_client { - my ($in, $ethntf) = @_; - my %packages = ( - "dhclient" => "dhcp-client", - ); - my $client = $ethntf->{DHCP_CLIENT}; - #- use default dhcp client if none is provided - $client ||= $dhcp_clients[0]; - $client = $packages{$client} if exists $packages{$client}; - $in->do_pkgs->install($client); -} - -sub write_ether_conf { - my ($in, $modules_conf, $netcnx, $netc, $intf) = @_; - configureNetwork2($in, $modules_conf, $::prefix, $netc, $intf); - $netc->{NETWORKING} = "yes"; - if ($netc->{GATEWAY} || any { $_->{BOOTPROTO} =~ /dhcp/ } values %$intf) { - $netcnx->{type} = 'lan'; - $netcnx->{NET_DEVICE} = $netc->{NET_DEVICE} = ''; - $netcnx->{NET_INTERFACE} = 'lan'; #$netc->{NET_INTERFACE}; - } - $::isStandalone and $modules_conf->write; - 1; -} - - -sub mapIntfToDevice { - my ($interface) = @_; - my $hw_addr = c::getHwIDs($interface); - return {} if $hw_addr =~ /^usb/; - my ($bus, $slot, $func) = map { hex($_) } ($hw_addr =~ /([0-9a-f]+):([0-9a-f]+)\.([0-9a-f]+)/); - $hw_addr && (every { defined $_ } $bus, $slot, $func) ? - grep { $_->{pci_bus} == $bus && $_->{pci_device} == $slot && $_->{pci_function} == $func } detect_devices::probeall() : {}; -} - - -# return list of [ intf_name, module, device_description ] tuples such as: -# [ "eth0", "3c59x", "3Com Corporation|3c905C-TX [Fast Etherlink]" ] -# -# this function try several method in order to get interface's driver and description in order to support both: -# - hotplug managed devices (USB, firewire) -# - special interfaces (IP aliasing, VLAN) -sub get_eth_cards { - my ($modules_conf) = @_; - my @all_cards = detect_devices::getNet(); - - my @devs = detect_devices::pcmcia_probe(); - my $saved_driver; - # compute device description and return (interface, driver, description) tuples: - return map { - my $interface = $_; - my $description; - # 1) get interface's driver through ETHTOOL ioctl: - my ($a, $detected_through_ethtool); - $a = c::getNetDriver($interface); - if ($a) { - $detected_through_ethtool = 1; - } else { - # 2) get interface's driver through module aliases: - $a = $modules_conf->get_alias($interface); - } - - # workaround buggy drivers that returns a bogus driver name for the GDRVINFO command of the ETHTOOL ioctl: - my %fixes = ( - "p80211_prism2_cs" => 'prism2_cs', - "p80211_prism2_pci" => 'prism2_pci', - "p80211_prism2_usb" => 'prism2_usb', - "ip1394" => "eth1394", - "DL2K" => "dl2k", - "hostap" => undef, #- should be either "hostap_plx", "hostap_pci" or "hostap_cs" - ); - $a = $fixes{$a} if exists $fixes{$a}; - - # 3) try to match a PCMCIA device for device description: - if (my $b = find { $_->{device} eq $interface } @devs) { # PCMCIA case - $a = $b->{driver}; - $description = $b->{description}; - } else { - # 4) try to lookup a device by hardware address for device description: - # maybe should have we try sysfs first for robustness? - ($description) = (mapIntfToDevice($interface))[0]->{description}; - } - # 5) try to match a device through sysfs for driver & device description: - # (eg: ipw2100 driver for intel centrino do not support ETHTOOL) - if (!$description) { - my $drv = readlink("/sys/class/net/$interface/driver"); - if ($drv && $drv =~ s!.*/!!) { - $a = $drv if $detected_through_ethtool; - my %l; - my %sysfs_fields = (id => "device", subid => "subsystem_device", vendor => "vendor", subvendor => "subsystem_vendor"); - $l{$_} = hex(chomp_(cat_("/sys/class/net/$interface/device/" . $sysfs_fields{$_}))) foreach keys %sysfs_fields; - my @cards = grep { my $dev = $_; every { $dev->{$_} eq $l{$_} } keys %l } detect_devices::probeall(); - $description = $cards[0]{description} if @cards == 1; - } - } - # 6) try to match a device by driver for device description: - # (eg: madwifi, ndiswrapper, ...) - if (!$description) { - my @cards = grep { $_->{driver} eq ($a || $saved_driver) } detect_devices::probeall(); - $description = $cards[0]{description} if @cards == 1; - } - $a and $saved_driver = $a; # handle multiple cards managed by the same driver - [ $interface, $saved_driver, if_($description, $description) ]; - } @all_cards; -} - -sub get_eth_cards_names { - my (@all_cards) = @_; - map { $_->[0] => join(': ', $_->[0], $_->[2]) } @all_cards; -} - -#- returns (link_type, mac_address) -sub get_eth_card_mac_address { - my ($intf) = @_; - `LC_ALL= LANG= $::prefix/sbin/ip -o link show $intf 2>/dev/null` =~ m|.*link/(\S+)\s([0-9a-z:]+)\s|; -} - -#- write interfaces MAC address in iftab -sub update_iftab() { - foreach my $intf (detect_devices::getNet()) { - my ($link_type, $mac_address) = get_eth_card_mac_address($intf) or next; - my $descriptor = ${{ ether => 'mac', ieee1394 => 'mac_ieee1394' }}{$link_type} or next; - substInFile { - s/^$intf\s+.*\n//; - s/^.*\s+$mac_address\n//; - $_ .= qq($intf\t$descriptor $mac_address\n) if eof; - } "$::prefix/etc/iftab"; - } -} - -# automatic net aliases configuration -sub configure_eth_aliases { - my ($modules_conf) = @_; - my @pcmcia_interfaces = map { $_->{device} } detect_devices::pcmcia_probe(); - foreach my $card (get_eth_cards($modules_conf)) { - if (member($card->[0], @pcmcia_interfaces)) { - #- do not write aliases for pcmcia cards, or cardmgr will not be loaded - $modules_conf->remove_alias($card->[0]); - } else { - $modules_conf->set_alias($card->[0], $card->[1]); - } - } -} - -1; diff --git a/perl-install/network/ipsec.pm b/perl-install/network/ipsec.pm deleted file mode 100644 index c0ee6e2fb..000000000 --- a/perl-install/network/ipsec.pm +++ /dev/null @@ -1,801 +0,0 @@ -package network::ipsec; - - - -use detect_devices; -use network::netconnect; -use run_program; -use common; -use log; -use Data::Dumper; - -#- debugg functions ---------- -sub recreate_ipsec_conf { - my ($ipsec, $kernel_version) = @_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - print "$ipsec->{$key1}\n" if ! $ipsec->{$key1}{1}; - foreach my $key2 (ikeys %{$ipsec->{$key1}}) { - if ($ipsec->{$key1}{$key2}[0] =~ m/^#/) { - print "\t$ipsec->{$key1}{$key2}[0]\n"; - } elsif ($ipsec->{$key1}{$key2}[0] =~ m/(conn|config|version)/) { - print "$ipsec->{$key1}{$key2}[0] $ipsec->{$key1}{$key2}[1]\n"; - } else { - print "\t$ipsec->{$key1}{$key2}[0]=$ipsec->{$key1}{$key2}[1]\n"; - }; - } - } - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (! $ipsec->{$key1}{command}) { - print "$ipsec->{$key1}\n"; - } else { - print $ipsec->{$key1}{command} . " " . - $ipsec->{$key1}{src_range} . " " . - $ipsec->{$key1}{dst_range} . " " . - $ipsec->{$key1}{upperspec} . " " . - $ipsec->{$key1}{flag} . " " . - $ipsec->{$key1}{direction} . " " . - $ipsec->{$key1}{ipsec} . "\n\t" . - $ipsec->{$key1}{protocol} . "/" . - $ipsec->{$key1}{mode} . "/" . - $ipsec->{$key1}{src_dest} . "/" . - $ipsec->{$key1}{level} . ";\n" - }; - } - } -} - -sub recreate_racoon_conf { - my ($racoon) = @_; - my $in_a_section = "n"; - my $in_a_proposal_section = "n"; - foreach my $key1 (ikeys %$racoon) { - if ($in_a_proposal_section eq "y") { - print "\t}\n}\n$racoon->{$key1}\n" if ! $racoon->{$key1}{1}; - } elsif ($in_a_section eq "y") { - print "}\n$racoon->{$key1}\n" if ! $racoon->{$key1}{1}; - } else { - print "$racoon->{$key1}\n" if ! $racoon->{$key1}{1}; - }; - $in_a_section = "n"; - $in_a_proposal_section = "n"; - foreach my $key2 (ikeys %{$racoon->{$key1}}) { - if ($racoon->{$key1}{$key2}[0] =~ /^path/) { - print "$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1] $racoon->{$key1}{$key2}[2];\n"; - } elsif ($racoon->{$key1}{$key2}[0] =~ /^remote/) { - $in_a_section = "y"; - $in_a_proposal_section = "n"; - print "$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1] {\n"; - } elsif ($racoon->{$key1}{$key2}[0] =~ /^sainfo/) { - $in_a_section = "y"; - $in_a_proposal_section = "n"; - if ($racoon->{$key1}{$key2}[2] && $racoon->{$key1}{$key2}[5]) { - print "$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1] $racoon->{$key1}{$key2}[2] $racoon->{$key1}{$key2}[3] $racoon->{$key1}{$key2}[4] $racoon->{$key1}{$key2}[5] $racoon->{$key1}{$key2}[6] {\n"; - } else { - print "$racoon->{$key1}{$key2}[0] anonymous {\n"; - } - } elsif ($racoon->{$key1}{$key2}[0] =~ /^proposal /) { - $in_a_proposal_section = "y"; - print "\t$racoon->{$key1}{$key2}[0] {\n"; - } elsif ($in_a_section eq "y" && $racoon->{$key1}{$key2}[0] =~ /^certificate_type/) { - print "\t$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1] $racoon->{$key1}{$key2}[2] $racoon->{$key1}{$key2}[3];\n"; - } elsif ($in_a_section eq "y" && $racoon->{$key1}{$key2}[0] =~ /^#/) { - print "\t$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1]\n"; - } elsif ($in_a_section eq "y") { - print "\t$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1];\n"; - } elsif ($in_a_proposal_section eq "y" && $racoon->{$key1}{$key2}[0] =~ /^#/) { - print "\t\t$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1]\n"; - } elsif ($in_a_proposal_section eq "y") { - print "\t\t$racoon->{$key1}{$key2}[0] $racoon->{$key1}{$key2}[1];\n"; - } - } - } - -print "}\n"; -} - -sub recreate_ipsec_conf1_k24 { - my ($ipsec) = @_; - foreach my $key1 (ikeys %$ipsec) { - print "$key1-->$ipsec->{$key1}\n" if ! $ipsec->{$key1}{1}; - foreach my $key2 (ikeys %{$ipsec->{$key1}}) { - if ($ipsec->{$key1}{$key2}[0] =~ m/^#/) { - print "\t$key2-->$ipsec->{$key1}{$key2}[0]\n"; - } elsif ($ipsec->{$key1}{$key2}[0] =~ m/(conn|config|version)/) { - print "$key1-->$key2-->$ipsec->{$key1}{$key2}[0] $ipsec->{$key1}{$key2}[1]\n"; - } else { - print "\t$key2-->$ipsec->{$key1}{$key2}[0]=$ipsec->{$key1}{$key2}[1]\n"; - }; - } - } -} -#- end of debug functions -------- - -sub sys { system(@_) == 0 or log::l("[drakvpn] Warning, sys failed for $_[0]") } - -sub start_daemons () { - return if $::testing; - log::explanations("Starting daemons"); - if (-e "/etc/rc.d/init.d/ipsec") { - system("/etc/rc.d/init.d/ipsec status >/dev/null") == 0 and sys("/etc/rc.d/init.d/ipsec stop"); - sys("/etc/rc.d/init.d/$_ start >/dev/null"), sys("/sbin/chkconfig --level 345 $_ on") foreach 'ipsec'; - } else { - - }; - sys("/etc/rc.d/init.d/$_ start >/dev/null"), sys("/sbin/chkconfig --level 345 $_ on") foreach 'shorewall'; -} - -sub stop_daemons () { - return if $::testing; - log::explanations("Stopping daemons"); - if (-e "/etc/rc.d/init.d/ipsec") { - foreach (qw(ipsec)) { - system("/etc/rc.d/init.d/$_ status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/$_ stop"); - }; - sys("/sbin/chkconfig --level 345 $_ off") && -e "/etc/rc.d/init.d/$_" foreach 'ipsec'; - }; - system("/etc/rc.d/init.d/shorewall status >/dev/null 2>/dev/null") == 0 and sys("/etc/rc.d/init.d/shorewall stop >/dev/null"); - -} - -sub set_config_file { - my ($file, @l) = @_; - - my $done; - substInFile { - if (!$done && (/^#LAST LINE/ || eof)) { - $_ = join('', map { join("\t", @$_) . "\n" } @l) . $_; - $done = 1; - } else { - $_ = '' if /^[^#]/; - } - } "$::prefix/$file"; -} - -sub get_config_file { - my ($file) = @_; - map { [ split ' ' ] } grep { !/^#/ } cat_("$::prefix/$file"); -} - - -#------------------------------------------------------------------- -#---------------------- configure racoon_conf ----------------------- -#------------------------------------------------------------------- - -sub read_racoon_conf { - my ($racoon_conf) = @_; - my %conf; - my $nb = 0; #total number - my $i = 0; #nb within a section - my $in_a_section = "n"; - my @line1; - my $line = ""; - local $_; - open(my $LIST, "< $racoon_conf"); - while (<$LIST>) { - chomp($_); - $line = $_; - $in_a_section = "n" if $line =~ /}/ && $line !~ /^#/; - $line =~ s/^\s+|\s*;|\s*{//g if $line !~ /^#/; - $line =~ /(.*)#(.*)/ if $line !~ /^#/; #- define before and after comment -# print "--line-->$line\n"; - my $data_part = $1; - my $comment_part = "#".$2; - if ($data_part) { - $data_part =~ s/,//g; -# print "@@".$data_part."->".$comment_part."\n"; - @line1 = split /\s+/,$data_part; - @line1 = (@line1, $comment_part) if $comment_part; - } else { - @line1 = split /\s+/,$line; - } - if (!$line && $in_a_section eq "n") { - $nb++; - put_in_hash(\%conf, { $nb => $line }); - $in_a_section = "n"; - } elsif (!$line && $in_a_section eq "y") { - put_in_hash($conf{$nb} ||= {}, { $i => [ '' ] }); - $i++; - } elsif ($line =~ /^path/) { - $i=1; - $nb++; - put_in_hash($conf{$nb} ||= {}, { $i => [@line1] }); - $in_a_section = "n"; - $i++; - } elsif ($line =~ /^#|^{|^}/) { - if ($in_a_section eq "y") { - put_in_hash($conf{$nb} ||= {}, { $i => [$line] }); - $i++; - } else { - $nb++; - put_in_hash(\%conf, { $nb => $line }); - $in_a_section = "n"; - }; - } elsif ($line =~ /^sainfo|^remote|^listen|^timer|^padding/ && $in_a_section eq "n") { - $i=1; - $nb++; - put_in_hash($conf{$nb} ||= {}, { $i => [@line1] }); - $in_a_section = "y"; - $i++; - } elsif ($line eq "proposal" && $in_a_section eq "y") { - $i=1; - $nb++; - put_in_hash($conf{$nb} ||= {}, { $i => [@line1] }); - $in_a_section = "y"; - $i++; - } else { - put_in_hash($conf{$nb} ||= {}, { $i => [@line1] }); - $i++; - }; - }; - -\%conf; -} - -sub display_racoon_conf { - my ($racoon) = @_; - my $display = ""; - my $prefix_to_simple_line = ""; - my $pt; - foreach my $key1 (ikeys %$racoon) { - if (!$racoon->{$key1}{1}) { - $display .= $prefix_to_simple_line . $racoon->{$key1} . "\n"; - $prefix_to_simple_line = ""; - } else { - foreach my $key2 (ikeys %{$racoon->{$key1}}) { - if ($key2 > 1) { - $pt = $racoon->{$key1}{$key2-1}[0]; - } else { - $pt = $racoon->{$key1}{1}[0]; - }; - my $t = $racoon->{$key1}{1}[0]; - my $f = $racoon->{$key1}{$key2}[0]; - my $list_length = scalar @{$racoon->{$key1}{$key2}}; - my $already_read = 0; - my $line = ""; - - if ($racoon->{$key1}{$key2}[0] eq "sainfo" && !$racoon->{$key1}{$key2}[2]) { - $line = "sainfo anonymous"; - } else { - for (my $i = 0; $i <= $list_length-1; $i++) { - - my $c = $racoon->{$key1}{$key2}[$i]; - my $n = $racoon->{$key1}{$key2}[$i+1]; - - if ($c =~ /^path|^log|^timer|^listen|^padding|^remote|^proposal|^sainfo/) { - $line .= "$c "; - } elsif ($i == $list_length-2 && $n =~ /^#/) { - $line .= "$c; "; - } elsif ($i == $list_length-1) { - if ($f =~ /^#|^$|^timer|^listen|^padding|^remote|^proposal\s+|^sainfo/) { - $line .= $c; - } elsif ($c =~ /^#/) { - $line .= "\t$c"; - } else { - $line .= "$c;"; - } - } else { - $line .= "$c "; - } - - $already_read = 1; - } - } - - if ($f =~ /^timer|^listen|^padding|^remote|^sainfo/) { - $line .= " {"; - $prefix_to_simple_line = ""; - } elsif ($f eq "proposal") { - $line = "\t" . $line . " {"; - } elsif ($t eq "proposal") { - $line = "\t\t" . $line if $line ne "proposal"; - $prefix_to_simple_line = "\t"; - } else { - $line = "\t" . $line if $t !~ /^path|^log/; - $prefix_to_simple_line = ""; - } - $display .= "$line\n"; - } - } - } - -$display; - -} - -sub write_racoon_conf { - my ($racoon_conf, $racoon) = @_; - my $display = ""; - my $prefix_to_simple_line = ""; - my $pt; - foreach my $key1 (ikeys %$racoon) { - if (!$racoon->{$key1}{1}) { - $display .= $prefix_to_simple_line . $racoon->{$key1} . "\n"; - $prefix_to_simple_line = ""; - } else { - foreach my $key2 (ikeys %{$racoon->{$key1}}) { - if ($key2 > 1) { - $pt = $racoon->{$key1}{$key2-1}[0]; - } else { - $pt = $racoon->{$key1}{1}[0]; - }; - my $t = $racoon->{$key1}{1}[0]; - my $f = $racoon->{$key1}{$key2}[0]; - my $list_length = scalar @{$racoon->{$key1}{$key2}}; - my $already_read = 0; - my $line = ""; - - if ($racoon->{$key1}{$key2}[0] eq "sainfo" && !$racoon->{$key1}{$key2}[2]) { - $line = "sainfo anonymous"; - } else { - for (my $i = 0; $i <= $list_length-1; $i++) { - - my $c = $racoon->{$key1}{$key2}[$i]; - my $n = $racoon->{$key1}{$key2}[$i+1]; - - if ($c =~ /^path|^log|^timer|^listen|^padding|^remote|^proposal|^sainfo/) { - $line .= "$c "; - } elsif ($i == $list_length-2 && $n =~ /^#/) { - $line .= "$c; "; - } elsif ($i == $list_length-1) { - if ($f =~ /^#|^$|^timer|^listen|^padding|^remote|^proposal\s+|^sainfo/) { - $line .= $c; - } elsif ($c =~ /^#/) { - $line .= "\t$c"; - } else { - $line .= "$c;"; - } - } else { - $line .= "$c "; - } - - $already_read = 1; - } - } - - if ($f =~ /^timer|^listen|^padding|^remote|^sainfo/) { - $line .= " {"; - $prefix_to_simple_line = ""; - } elsif ($f eq "proposal") { - $line = "\t" . $line . " {"; - } elsif ($t eq "proposal") { - $line = "\t\t" . $line if $line ne "proposal"; - $prefix_to_simple_line = "\t"; - } else { - $line = "\t" . $line if $t !~ /^path|^log/; - $prefix_to_simple_line = ""; - } - $display .= "$line\n"; - } - } - } - -open(my $ADD, "> $racoon_conf") or die "Can not open the $racoon_conf file for writing"; - print $ADD "$display\n"; - -} - -sub get_section_names_racoon_conf { - my ($racoon) = @_; - my @section_names; - - foreach my $key1 (ikeys %$racoon) { - if (!$racoon->{$key1}{1}) { - next; - } else { - my $list_length = scalar @{$racoon->{$key1}{1}}; - my $section_title = ""; - my $separator = ""; - for (my $i = 0; $i <= $list_length-1; $i++) { - my $s = $racoon->{$key1}{1}[$i]; - if ($s !~ /^#|^proposal/) { - $section_title .= $separator . $s; - $separator = " "; - }; - } - push(@section_names, $section_title) if $section_title ne ""; - } - } - - @section_names; - -} - -sub add_section_racoon_conf { - my ($new_section, $racoon) = @_; - put_in_hash($racoon, { max(keys %$racoon) + 1 => '' }); - put_in_hash($racoon, { max(keys %$racoon) + 1 => $new_section }); - put_in_hash($racoon, { max(keys %$racoon) + 1 => '}' }) if $new_section->{1}[0] !~ /^path|^remote/; - put_in_hash($racoon, { max(keys %$racoon) + 1 => '' }) if $new_section->{1}[0] =~ /^proposal/; - put_in_hash($racoon, { max(keys %$racoon) + 1 => '}' }) if $new_section->{1}[0] =~ /^proposal/; -} - -sub matched_section_key_number_racoon_conf { - my ($section_name, $racoon) = @_; - foreach my $key1 (ikeys %$racoon) { - if (!$racoon->{$key1}{1}) { - next; - } else { - my $list_length = scalar @{$racoon->{$key1}{1}}; - my $section_title = ""; - my $separator = ""; - for (my $i = 0; $i <= $list_length-1; $i++) { - my $s = $racoon->{$key1}{1}[$i]; - if ($s !~ /^#|^proposal/) { - $section_title .= $separator . $s; - $separator = " "; - }; - }; - if ($section_title eq $section_name) { - return $key1; - }; - } - } - -} - -sub already_existing_section_racoon_conf { - my ($section_name, $racoon, $racoon_conf) = @_; - if (-e $racoon_conf) { - foreach my $key1 (ikeys %$racoon) { - if (!$racoon->{$key1}{1}) { - next; - } elsif (find { - my $list_length = scalar @{$racoon->{$key1}{1}}; - my $section_title = ""; - my $separator = ""; - for (my $i = 0; $i <= $list_length-1; $i++) { - my $s = $racoon->{$key1}{1}[$i]; - if ($s !~ /^#|^proposal/) { - $section_title .= $separator . $s; - $separator = " "; - }; - } - - $section_title eq $section_name; - - } ikeys %{$racoon->{$key1}}) { - - return "already existing"; - } - } - } - -} - -sub remove_section_racoon_conf { - my ($section_name, $racoon, $k) = @_; - if ($section_name =~ /^remote/) { - - delete $racoon->{$k} if $k > 1 && !$racoon->{$k-1}; - my $closing_curly_bracket = 0; - while ($closing_curly_bracket < 2) { - print "-->$k\n"; - $closing_curly_bracket++ if $racoon->{$k} eq "}"; - delete $racoon->{$k}; - $k++; - } - - } elsif ($section_name =~ /^path/) { - - delete $racoon->{$k}; - delete $racoon->{$k+1} if $racoon->{$k+1}{1} eq ""; - - } else { - - delete $racoon->{$k}; - delete $racoon->{$k+1} if $racoon->{$k+1}{1} eq ""; - delete $racoon->{$k+2} if $racoon->{$k+2}{1} eq ""; #- remove assoc } - - } - -} - -#------------------------------------------------------------------- -#---------------------- configure ipsec_conf ----------------------- -#------------------------------------------------------------------- - -sub read_ipsec_conf { - my ($ipsec_conf, $kernel_version) = @_; - my %conf; - my $nb = 0; #total number - my $i = 0; #nb within a connexion - my $in_a_conn = "n"; - my $line = ""; - my @line1; - local $_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - open(my $LIST, "< $ipsec_conf"); #or die "Can not open the $ipsec_conf file for reading"; - while (<$LIST>) { - chomp($_); - $line = $_; - $line =~ s/^\s+//; - if (!$line) { - $nb++; - put_in_hash(\%conf, { $nb => $line }); - $in_a_conn = "n"; - } elsif ($line =~ /^#/) { - if ($in_a_conn eq "y") { - put_in_hash($conf{$nb} ||= {}, { $i => [$line] }); - $i++; - } else { - $nb++; - put_in_hash(\%conf, { $nb => $line }); - $in_a_conn = "n"; - }; - } elsif ($line =~ /^conn|^config|^version/ && $in_a_conn eq "n") { - @line1 = split /\s+/,$line; - $i=1; - $nb++; - put_in_hash($conf{$nb} ||= {}, { $i => [$line1[0], $line1[1]] }); - $in_a_conn = "y" if $line !~ /^version/; - $i++; - } elsif ($line =~ /^conn|^config|^version/ && $in_a_conn eq "y") { - @line1 = split /\s+/,$line; - $i=1; - $nb++; - put_in_hash($conf{$nb} ||= {}, { $i => [$line1[0], $line1[1]] }); - $i++; - } else { - @line1 = split /=/,$line; - put_in_hash($conf{$nb} ||= {}, { $i => [$line1[0], $line1[1]] }); - $i++; - }; - }; - - } else { - #- kernel 2.6 part ------------------------------- - my @mylist; - my $myline = ""; - open(my $LIST, "< $ipsec_conf"); #or die "Can not open the $ipsec_conf file for reading"; - while (<$LIST>) { - chomp($_); - $myline = $_; - $myline =~ s/^\s+//; - $myline =~ s/;$//; - if ($myline =~ /^spdadd/) { - @mylist = split /\s+/,$myline; - $in_a_conn = "y"; - $nb++; - next; - } elsif ($in_a_conn eq "y") { - @mylist = (@mylist, split '\s+|/',$myline); - put_in_hash(\%conf, { $nb => { command => $mylist[0], - src_range => $mylist[1], - dst_range => $mylist[2], - upperspec => $mylist[3], - flag => $mylist[4], - direction => $mylist[5], - ipsec => $mylist[6], - protocol => $mylist[7], - mode => $mylist[8], - src_dest => $mylist[9], - level => $mylist[10] } }); - $in_a_conn = "n"; - } else { - $nb++; - put_in_hash(\%conf, { $nb => $myline }); - }; - }; - - }; - - \%conf; -} - -sub write_ipsec_conf { - my ($ipsec_conf, $ipsec, $kernel_version) = @_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - open(my $ADD, "> $ipsec_conf") or die "Can not open the $ipsec_conf file for writing"; - foreach my $key1 (ikeys %$ipsec) { - print $ADD "$ipsec->{$key1}\n" if ! $ipsec->{$key1}{1}; - foreach my $key2 (ikeys %{$ipsec->{$key1}}) { - if ($ipsec->{$key1}{$key2}[0] =~ m/^#/) { - print $ADD "\t$ipsec->{$key1}{$key2}[0]\n"; - } elsif ($ipsec->{$key1}{$key2}[0] =~ m/(^conn|^config|^version)/) { - print $ADD "$ipsec->{$key1}{$key2}[0] $ipsec->{$key1}{$key2}[1]\n"; - } else { - print $ADD "\t$ipsec->{$key1}{$key2}[0]=$ipsec->{$key1}{$key2}[1]\n" if $ipsec->{$key1}{$key2}[0] && $ipsec->{$key1}{$key2}[1]; - }; - } - } - } else { - #- kernel 2.6 part ------------------------------- - my $display = ""; - foreach my $key1 (ikeys %$ipsec) { - if (! $ipsec->{$key1}{command}) { - $display .= "$ipsec->{$key1}\n"; - } else { - $display .= $ipsec->{$key1}{command} . " " . - $ipsec->{$key1}{src_range} . " " . - $ipsec->{$key1}{dst_range} . " " . - $ipsec->{$key1}{upperspec} . " " . - $ipsec->{$key1}{flag} . " " . - $ipsec->{$key1}{direction} . " " . - $ipsec->{$key1}{ipsec} . "\n\t" . - $ipsec->{$key1}{protocol} . "/" . - $ipsec->{$key1}{mode} . "/" . - $ipsec->{$key1}{src_dest} . "/" . - $ipsec->{$key1}{level} . ";\n" - }; - } - open(my $ADD, "> $ipsec_conf") or die "Can not open the $ipsec_conf file for writing"; - print $ADD $display; - } -} - -sub display_ipsec_conf { - my ($ipsec, $kernel_version) = @_; - my $display = ""; - - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - $display .= "$ipsec->{$key1}\n" if ! $ipsec->{$key1}{1}; - foreach my $key2 (ikeys %{$ipsec->{$key1}}) { - if ($ipsec->{$key1}{$key2}[0] =~ m/^#/) { - $display .= "\t$ipsec->{$key1}{$key2}[0]\n"; - } elsif ($ipsec->{$key1}{$key2}[0] =~ m/(^conn|^config|^version)/) { - $display .= "$ipsec->{$key1}{$key2}[0] $ipsec->{$key1}{$key2}[1]\n"; - } else { - $display .= "\t$ipsec->{$key1}{$key2}[0]=$ipsec->{$key1}{$key2}[1]\n"; - }; - } - } - - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (! $ipsec->{$key1}{command}) { - $display .= "$ipsec->{$key1}\n"; - } else { - $display .= $ipsec->{$key1}{command} . " " . - $ipsec->{$key1}{src_range} . " " . - $ipsec->{$key1}{dst_range} . " " . - $ipsec->{$key1}{upperspec} . " " . - $ipsec->{$key1}{flag} . " " . - $ipsec->{$key1}{direction} . " " . - $ipsec->{$key1}{ipsec} . "\n\t" . - $ipsec->{$key1}{protocol} . "/" . - $ipsec->{$key1}{mode} . "/" . - $ipsec->{$key1}{src_dest} . "/" . - $ipsec->{$key1}{level} . ";\n"; - } - } - - } - - $display; - -} - -sub get_section_names_ipsec_conf { - my ($ipsec, $kernel_version) = @_; - my @section_names; - - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - foreach my $key2 (ikeys %{$ipsec->{$key1}}) { - if ($ipsec->{$key1}{$key2}[0] =~ m/(^conn|^config|^version)/) { - push(@section_names, "$ipsec->{$key1}{$key2}[0] $ipsec->{$key1}{$key2}[1]"); - }; - } - } - - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if ($ipsec->{$key1}{command} =~ m/(^spdadd)/) { - push(@section_names, "$ipsec->{$key1}{src_range} $ipsec->{$key1}{dst_range}"); - }; - } - } - - @section_names; - -} - -sub remove_section_ipsec_conf { - my ($section_name, $ipsec, $kernel_version) = @_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = $ipsec->{$key1}{$_}[0]; - $s !~ /^#/ && $s =~ m/(^conn|^config|^version)/ && - $section_name eq "$s $ipsec->{$key1}{$_}[1]"; - } ikeys %{$ipsec->{$key1}}) { - delete $ipsec->{$key1}; - } - } - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = "$ipsec->{$key1}{src_range} $ipsec->{$key1}{dst_range}"; - $s !~ /^#/ && $ipsec->{$key1}{src_range} && $section_name eq $s; - } ikeys %{$ipsec->{$key1}}) { - delete $ipsec->{$key1-1}; - delete $ipsec->{$key1}; - } - } - } -} - -sub add_section_ipsec_conf { - my ($new_section, $ipsec) = @_; - put_in_hash($ipsec, { max(keys %$ipsec) + 1 => '' }); - put_in_hash($ipsec, { max(keys %$ipsec) + 1 => $new_section }); -} - -sub already_existing_section_ipsec_conf { - my ($section_name, $ipsec, $kernel_version) = @_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = $ipsec->{$key1}{$_}[0]; - $s !~ /^#/ && $s =~ m/(^conn|^config|^version)/ && - $section_name eq "$s $ipsec->{$key1}{$_}[1]"; - } ikeys %{$ipsec->{$key1}}) { - return "already existing"; - } - } - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = "$ipsec->{$key1}{src_range} $ipsec->{$key1}{dst_range}"; - $s !~ /^#/ && $ipsec->{$key1}{src_range} && - $section_name eq $s; - } ikeys %{$ipsec->{$key1}}) { - return "already existing"; - } - } - }; - return "no"; -} - -#- returns the reference to the dynamical list for editing -sub dynamic_list { - my ($number, $ipsec) = @_; - my @list = map { { label => $ipsec->{$number}{$_}[0] . "=", - val => \$ipsec->{$number}{$_}[1] } } ikeys %{$ipsec->{$number}}; - - @list; -} - -#- returns the hash key number of $section_name -sub matched_section_key_number_ipsec_conf { - my ($section_name, $ipsec, $kernel_version) = @_; - if ($kernel_version < 2.5) { - #- kernel 2.4 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = $ipsec->{$key1}{$_}[0]; - $s !~ /^#/ && $s =~ m/(^conn|^config|^version)/ && - $section_name eq "$s $ipsec->{$key1}{$_}[1]"; - } ikeys %{$ipsec->{$key1}}) { - return $key1; - } - } - } else { - #- kernel 2.6 part ------------------------------- - foreach my $key1 (ikeys %$ipsec) { - if (find { - my $s = "$ipsec->{$key1}{src_range} $ipsec->{$key1}{dst_range}"; - $s !~ /^#/ && $ipsec->{$key1}{src_range} && - $section_name eq $s; - } ikeys %{$ipsec->{$key1}}) { - return $key1; - } - } - } -} -1 diff --git a/perl-install/network/isdn.pm b/perl-install/network/isdn.pm deleted file mode 100644 index e405be5fb..000000000 --- a/perl-install/network/isdn.pm +++ /dev/null @@ -1,201 +0,0 @@ -package network::isdn; # $Id$ - -use strict; -use network::isdn_consts; -use common; -use any; -use modules; -use run_program; -use log; -use network::tools; -use MDK::Common::Globals "network", qw($in); -use MDK::Common::File; -use services; -use list_modules; - - -sub write_config { - my ($isdn) = @_; - $in->do_pkgs->install('isdn4net', if_($isdn->{speed} =~ /128/, 'ibod'), 'isdn4k-utils'); - - output_with_perm("$::prefix/etc/isdn/profile/link/myisp", 0600, - qq( -I4L_USERNAME="$isdn->{login}" -I4L_SYSNAME="" -I4L_LOCALMSN="$isdn->{phone_in}" -I4L_REMOTE_OUT="$isdn->{phone_out}" -I4L_DIALMODE="$isdn->{dialing_mode}" -) . if_($isdn->{speed} =~ /128/, 'SLAVE="ippp1" -')); - output "$::prefix/etc/isdn/profile/card/mycard", - qq( -I4L_MODULE="$isdn->{driver}" -I4L_TYPE="$isdn->{type}" -I4L_IRQ="$isdn->{irq}" -I4L_MEMBASE="$isdn->{mem}" -I4L_PORT="$isdn->{io}" -I4L_IO0="$isdn->{io0}" -I4L_IO1="$isdn->{io1}" -I4L_ID="HiSax" -I4L_FIRMWARE="$isdn->{firmware}" -I4L_PROTOCOL="$isdn->{protocol}" -); - - output "$::prefix/etc/ppp/ioptions", - "lock -usepeerdns -defaultroute -"; - - services::stop("isdn4linux"); #- to be stopped before capi is loaded - if ($isdn->{driver} eq "capidrv") { - setup_capi_conf(get_capi_card($isdn)); - services::start_service_on_boot("capi4linux"); - services::start("capi4linux"); - } else { - services::stop("capi4linux"); - services::do_not_start_service_on_boot("capi4linux"); - } - services::start_service_on_boot("isdn4linux"); - services::start("isdn4linux"); - - write_secret_backend($isdn->{login}, $isdn->{passwd}); - - 1; -} - - -sub setup_capi_conf { - my ($capi_card) = @_; - - $in->do_pkgs->ensure_is_installed('isdn4k-utils', "/etc/rc.d/init.d/capi4linux"); #- capi4linux service - is_module_installed($capi_card->{driver}) or $in->do_pkgs->install(@{$capi_card->{packages}}); - if ($capi_card->{firmware} && ! -f "$::prefix/usr/lib/isdn/$capi_card->{firmware}") { - $in->do_pkgs->install("$capi_card->{driver}-firmware"); - } - - #- stop capi4linux before new config is written so that it can unload the driver - services::stop("capi4linux"); - - my $capi_conf; - my $firmware = $capi_card->{firmware} || '-'; - if ($capi_card->{driver} eq "fcclassic") { - $capi_conf = "fcclassic - - 0x300 5 - -\n# adjust IRQ and IO !! ^^^^^ ^^^\n"; - } elsif ($capi_card->{driver} eq "fcpnp") { - $capi_conf = "fcpnp - - 0x300 5 - -\n# adjust IRQ and IO !! ^^^^^ ^^^\n"; - } else { - $capi_conf = "$capi_card->{driver} $firmware - - - - -\n"; - } - output("$::prefix/etc/capi.conf", $capi_conf); -} - -sub read_config { - my ($isdn) = @_; - - my %match = (I4L_USERNAME => 'login', - I4L_LOCALMSN => 'phone_in', - I4L_REMOTE_OUT => 'phone_out', - I4L_DIALMODE => 'dialing_mode', - I4L_MODULE => 'driver', - I4L_TYPE => 'type', - I4L_IRQ => 'irq', - I4L_MEMBASE => 'mem', - I4L_PORT => 'io', - I4L_IO0 => 'io0', - I4L_IO1 => 'io1', - I4L_FIRMWARE => 'firmware'); - foreach ('link/myisp', 'card/mycard') { - my %conf = getVarsFromSh("$::prefix/etc/isdn/profile/$_"); - foreach (keys %conf) { - $isdn->{$match{$_}} = $conf{$_} if $match{$_} && $conf{$_}; - } - } - - $isdn->{passwd} = network::tools::passwd_by_login($isdn->{login}); - #$isdn->{description} = ''; - #$isdn->{vendor} = ''; - #$isdn->{passwd2} = ''; -} - -my $file = "$ENV{SHARE_PATH}/ldetect-lst/isdn.db"; -$file = "$::prefix$file" if !-e $file; - -sub get_info_providers_backend { - my ($isdn, $_netc, $name) = @_; - $name eq N("Unlisted - edit manually") and return; - foreach (catMaybeCompressed($file)) { - chop; - my ($name_, $phone, $real, $dns1, $dns2) = split '=>'; - if ($name eq $name_) { - @$isdn{qw(user_name phone_out DOMAINNAME2 dnsServer3 dnsServer2)} = - ((split(/\|/, $name_))[2], $phone, $real, $dns1, $dns2); - } - } -} - -sub read_providers_backend() { map { /(.*?)=>/ } catMaybeCompressed($file) } - - -sub detect_backend { - my ($modules_conf) = @_; - my @isdn; - require detect_devices; - each_index { - my $c = $_; - my $isdn = { map { $_ => $c->{$_} } qw(description vendor id driver card_type type) }; - $isdn->{intf_id} = $::i; - $isdn->{$_} = sprintf("%0x", $isdn->{$_}) foreach 'vendor', 'id'; - $isdn->{card_type} = $c->{bus} eq 'USB' ? 'usb' : 'pci'; - $isdn->{description} =~ s/.*\|//; -# $c->{options} !~ /id=HiSax/ && $isdn->{driver} eq "hisax" and $c->{options} .= " id=HiSax"; - if ($c->{options} !~ /protocol=/ && $isdn->{protocol} =~ /\d/) { - $modules_conf->set_options($c->{driver}, $c->{options} . " protocol=" . $isdn->{protocol}); - } - $c->{options} =~ /protocol=(\d)/ and $isdn->{protocol} = $1; - push @isdn, $isdn; - } modules::probe_category('network/isdn'); - \@isdn; -} - -sub get_cards_by_type { - my ($isdn_type) = @_; - grep { $_->{card} eq $isdn_type } @isdndata; -} - - -sub get_cards() { - my %buses = ( - isa => N("ISA / PCMCIA") . "/" . N("I do not know"), - pci => N("PCI"), - usb => N("USB"), - ); - # pmcia alias (we should really split up pcmcia from isa in isdn db): - $buses{pcmcia} = $buses{isa}; - - map { $buses{$_->{card}} . "|" . $_->{description} => $_ } @isdndata; -} - - -sub is_module_installed { - my ($driver) = @_; - find { m!/\Q$driver\E\.k?o! } cat_($::prefix . '/lib/modules/' . c::kernel_version() . '/modules.dep'); -} - - -sub get_capi_card { - my ($isdn) = @_; - - my $capi_card = find { - hex($isdn->{vendor}) == $_->{vendor} && hex($isdn->{id}) == $_->{id}; - } @isdn_capi or return; - - #- check if the capi driver is available - unless (is_module_installed($capi_card->{driver}) || ($capi_card->{packages} = $in->do_pkgs->check_kernel_module_packages("$capi_card->{driver}-kernel"))) { - log::explanations("a capi driver ($capi_card->{driver}) exists to replace $isdn->{driver}, but it is not installed and no packages provide it"); - return; - } - - $capi_card; -} - -1; diff --git a/perl-install/network/isdn_consts.pm b/perl-install/network/isdn_consts.pm deleted file mode 100644 index a828a9385..000000000 --- a/perl-install/network/isdn_consts.pm +++ /dev/null @@ -1,452 +0,0 @@ -package network::isdn_consts; # $Id$ -use vars qw(@ISA @EXPORT); -@ISA = qw(Exporter); -@EXPORT = qw(@isdndata @isdn_capi); - -our @isdndata = - ( - { description => "Teles|16.0", #1 irq, mem, io - driver => 'hisax', - type => '1', - irq => '5', - mem => '0xd000', - io => '0xd80', - card => 'isa', - }, - { description => "Teles|8.0", #2 irq, mem - driver => 'hisax', - type => '2', - irq => '9', - mem => '0xd800', - card => 'isa', - }, - { description => "Teles|16.3 (ISA non PnP)", #3 irq, io - driver => 'hisax', - type => '3', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Teles|16.3c (ISA PnP)", #14 irq, io - driver => 'hisax', - type => '14', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Creatix/Teles|Generic (ISA PnP)", #4 irq, io0 (ISAC), io1 (HSCX) - driver => 'hisax', - type => '4', - irq => '5', - io0 => '0x0000', - io1 => '0x0000', - card => 'isa', - }, - { description => "Teles|generic", #21 no parameter - driver => 'hisax', - type => '21', - card => 'pci', - }, - { description => "Teles|16.3 (PCMCIA)", #8 irq, io - driver => 'hisax', - type => '8', - irq => '', - io => '0x', - card => 'isa', - }, - { description => "Teles|S0Box", #25 irq, io (of the used lpt port) - driver => 'hisax', - type => '25', - irq => '7', - io => '0x378', - card => 'isa', - }, - { description => "ELSA|PCC/PCF cards", #6 io or nothing for autodetect (the io is required only if you have n>1 ELSA|card) - driver => 'hisax', - type => '6', - io => "", - card => 'isa', - }, - { description => "ELSA|Quickstep 1000", #7 irq, io (from isapnp setup) - driver => 'hisax', - type => '7', - irq => '5', - io => '0x300', - card => 'isa', - }, - { description => "ELSA|Quickstep 1000", #18 no parameter - driver => 'hisax', - type => '18', - card => 'pci', - }, - { description => "ELSA|Quickstep 3000", #18 no parameter - driver => 'hisax', - type => '18', - card => 'pci', - }, - { description => "ELSA|generic (PCMCIA)", #10 irq, io (set with card manager) - driver => 'hisax', - type => '10', - irq => '', - io => '0x', - card => 'isa', - }, - { description => "ELSA|MicroLink (PCMCIA)", #10 irq, io (set with card manager) - driver => 'elsa_cs', - card => 'isa', - }, - { description => "ITK|ix1-micro Rev.2", #9 irq, io - driver => 'hisax', - type => '9', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Eicon.Diehl|Diva (ISA PnP)", #11 irq, io - driver => 'hisax', - type => '11', - irq => '9', - io => '0x180', - card => 'isa', - }, - { description => "Eicon.Diehl|Diva 20", #11 no parameter - driver => 'hisax', - type => '11', - card => 'pci', - }, - { description => "Eicon.Diehl|Diva 20PRO", #11 no parameter - driver => 'hisax', - type => '11', - card => 'pci', - }, - { description => "Eicon.Diehl|Diva 20_U", #11 no parameter - driver => 'hisax', - type => '11', - card => 'pci', - }, - { description => "Eicon.Diehl|Diva 20PRO_U", #11 no parameter - driver => 'hisax', - type => '11', - card => 'pci', - }, - { description => "ASUS|COM ISDNLink", #12 irq, io (from isapnp setup) - driver => 'hisax', - type => '12', - irq => '5', - io => '0x200', - card => 'isa', - }, - { description => "ASUS|COM ISDNLink", - driver => 'hisax', - type => '35', - card => 'pci', - }, - { description => "DynaLink|Any", - driver => 'hisax', - type => '12', - card => 'pci', - }, - { description => "DynaLink|IS64PH, ASUSCOM", #36 - driver => 'hisax', - type => '36', - card => 'pci', - }, - { description => "HFC|2BS0 based cards", #13 irq, io - driver => 'hisax', - type => '13', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "HFC|2BDS0", #35 none - driver => 'hisax', - type => '35', - card => 'pci', - }, - { description => "HFC|2BDS0 S+, SP (PCMCIA)", #37 irq,io (pcmcia must be set with cardmgr) - driver => 'hisax', - type => '37', - card => 'isa', - }, - { description => "Sedlbauer|Speed Card", #15 irq, io - driver => 'hisax', - type => '15', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Sedlbauer|PC/104", #15 irq, io - driver => 'hisax', - type => '15', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Sedlbauer|Speed Card", #15 no parameter - driver => 'hisax', - type => '15', - card => 'pci', - }, - { description => "Sedlbauer|Speed Star (PCMCIA)", #22 irq, io (set with card manager) - driver => 'sedlbauer_cs', - card => 'isa', - }, - { description => "Sedlbauer|Speed Fax+ (ISA Pnp)", #28 irq, io (from isapnp setup) - driver => 'hisax', - type => '28', - irq => '9', - io => '0xd80', - card => 'isa', - firmware => '/usr/lib/isdn/ISAR.BIN', - }, - { description => "Sedlbauer|Speed Fax+", #28 no parameter - driver => 'hisax', - type => '28', - card => 'pci', - firmware => '/usr/lib/isdn/ISAR.BIN', - }, - { description => "USR|Sportster internal", #16 irq, io - driver => 'hisax', - type => '16', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Generic|MIC card", #17 irq, io - driver => 'hisax', - type => '17', - irq => '9', - io => '0xd80', - card => 'isa', - }, - { description => "Compaq|ISDN S0 card", #19 irq, io0, io1, io (from isapnp setup io=IO2) - driver => 'hisax', - type => '19', - irq => '5', - io => '0x0000', - io0 => '0x0000', - io1 => '0x0000', - card => 'isa', - }, - { description => "Generic|NETjet card", #20 no parameter - driver => 'hisax', - type => '20', - card => 'pci', - }, - { description => "Dr. Neuhaus|Niccy (ISA PnP)", #24 irq, io0, io1 (from isapnp setup) - driver => 'hisax', - type => '24', - irq => '5', - io0 => '0x0000', - io1 => '0x0000', - card => 'isa', - }, - { description => "Dr. Neuhaus|Niccy", ##24 no parameter - driver => 'hisax', - type => '24', - card => 'pci', - }, - { description => "AVM|A1 (Fritz) (ISA non PnP)", #5 irq, io - driver => 'hisax', - type => '5', - irq => '10', - io => '0x300', - card => 'isa', - }, - { description => "AVM|ISA Pnp generic", #27 irq, io (from isapnp setup) - driver => 'hisax', - type => '27', - irq => '5', - io => '0x300', - card => 'isa', - }, - { description => "AVM|A1 (Fritz) (PCMCIA)", #26 irq, io (set with card manager) - driver => 'hisax', - type => '26', - irq => '', - card => 'isa', - }, - { description => "AVM|PCI (Fritz!)", #27 no parameter - driver => 'hisax', - type => '27', - card => 'pci', - }, - { description => "AVM|B1", - driver => 'b1pci', - card => 'pci', - }, - { description => "Siemens|I-Surf 1.0 (ISA Pnp)", #29 irq, io, memory (from isapnp setup) - driver => 'hisax', - type => '29', - irq => '9', - io => '0xd80', - mem => '0xd000', - card => 'isa', - }, - { description => "ACER|P10 (ISA Pnp)", #30 irq, io (from isapnp setup) - driver => 'hisax', - type => '30', - irq => '5', - io => '0x300', - card => 'isa', - }, - { description => "HST|Saphir (ISA Pnp)", #31 irq, io - driver => 'hisax', - type => '31', - irq => '5', - io => '0x300', - card => 'isa', - }, - { description => "Telekom|A4T", #32 none - driver => 'hisax', - type => '32', - card => 'pci', - }, - { description => "Scitel|Quadro", #33 subcontroller (4*S0, subctrl 1...4) - driver => 'hisax', - type => '33', - card => 'pci', - }, - { description => "Gazel|ISDN cards", #34 irq,io - driver => 'hisax', - type => '34', - irq => '5', - io => '0x300', - card => 'isa', - }, - { description => "Gazel|Gazel ISDN cards", #34 none - driver => 'hisax', - type => '34', - card => 'pci', - }, - { description => "Winbond|W6692 and Winbond based cards", #36 none - driver => 'hisax', - type => '36', - card => 'pci', - }, - { description => "BeWAN|R834", - driver => 'hisax_st5481', - type => '99', - card => 'usb', - }, - { description => "Gazel|128", - driver => 'hisax_st5481', - type => '99', - card => 'usb', - }, - ); - -#- cards than can be used with capi drivers -our @isdn_capi = - ( - { - vendor => 0x1131, - id => 0x5402, - description => 'AVM Audiovisuelles|Fritz DSL ISDN/DSL Adapter', - bus => 'PCI', - driver => 'fcdsl', - firmware => 'fdslbase.bin' - }, - { - vendor => 0x1244, - id => 0x0a00, - description => 'AVM Audiovisuelles|A1 ISDN Adapter [Fritz] CAPI', - bus => 'PCI', - driver => 'fcpci' - }, - { - vendor => 0x1244, - id => 0x0e00, - description => 'AVM Audiovisuelles|A1 ISDN Adapter [Fritz] CAPI', - bus => 'PCI', - driver => 'fcpci' - }, - { - vendor => 0x1244, - id => 0x0f00, - description => 'AVM Audiovisuelles|Fritz DSL ISDN/DSL Adapter', - bus => 'PCI', - driver => 'fcdsl', - firmware => 'fdslbase.bin' - }, - { - vendor => 0x1244, - id => 0x2700, - description => 'AVM Audiovisuelles|Fritz!Card DSL SL', - bus => 'PCI', - driver => 'fcdslsl', - firmware => 'fdssbase.bin' - }, - { - vendor => 0x1244, - id => 0x2900, - description => 'AVM Audiovisuelles|Fritz DSL Ver. 2.0', - bus => 'PCI', - driver => 'fcdsl2', - firmware => 'fds2base.bin' - }, - { - vendor => 0x057c, - id => 0x0c00, - description => 'AVM GmbH|FritzCard USB ISDN TA', - bus => 'USB', - driver => 'fcusb' - }, - { - vendor => 0x057c, - id => 0x1000, - description => 'AVM GmbH|FritzCard USB 2 Ver. 2.0 ISDN TA', - bus => 'USB', - driver => 'fcusb2', - firmware => 'fus2base.frm' - }, - { - vendor => 0x057c, - id => 0x1900, - description => 'AVM GmbH|FritzCard USB 2 Ver. 3.0 ISDN TA', - bus => 'USB', - driver => 'fcusb2', - firmware => 'fus3base.frm' - }, - { - vendor => 0x057c, - id => 0x2000, - description => 'AVM GmbH|Fritz X USB ISDN TA', - bus => 'USB', - driver => 'fxusb' - }, - { - vendor => 0x057c, - id => 0x2300, - description => 'AVM GmbH|FtitzCard USB DSL ISDN TA/ DSL Modem', - bus => 'USB', - driver => 'fcdslusb', - firmware => 'fdsubase.frm' - }, - { - vendor => 0x057c, - id => 0x2800, - description => 'AVM GmbH|Fritz X USB OEM ISDN TA', - bus => 'USB', - driver => 'fxusb_CZ' - }, - { - vendor => 0x057c, - id => 0x3000, - description => 'AVM GmbH|FtitzCard USB DSL SL USB', - bus => 'USB', - driver => 'fcdslusba', - firmware => 'fdlabase.frm' - }, - { - vendor => 0x057c, - id => 0x3500, - description => 'AVM GmbH|FtitzCard USB DSL SL USB Analog', - bus => 'USB', - driver => 'fcdslslusb', - firmware => 'fdlubase.frm', - }, - ); - - -1; diff --git a/perl-install/network/modem.pm b/perl-install/network/modem.pm deleted file mode 100644 index 62dcd6a99..000000000 --- a/perl-install/network/modem.pm +++ /dev/null @@ -1,243 +0,0 @@ -package network::modem; # $Id$ - -use strict; -use common; -use any; -use modules; -use detect_devices; -use mouse; -use network::tools; - -sub first_modem { - my ($netc) = @_; - return "/mnt/root" if $::isInstall; - first(grep { $_->{device} =~ m!^/dev! } values %{$netc->{autodetect}{modem}}); -} - -sub get_user_home() { - my $home; - if ($ENV{USER} ne "root") { - #- kdesu case - my $user = find { $_->[0] eq $ENV{USER} } list_passwd(); - $home = $user->[7] if $user; - } - $home ||= $ENV{HOME}; #- consolehelper case - $home; -} - -sub ppp_read_conf { - my ($netcnx, $netc) = @_; - my $modem = $netcnx->{$netcnx->{type}} ||= {}; - if (my $detected_modem = first_modem($netc)) { - $modem->{device} ||= $detected_modem->{device}; - } - $modem->{device} ||= '/dev/modem'; - my %l = getVarsFromSh(get_user_home() . "/.kde/share/config/kppprc"); - add2hash(\%l, getVarsFromSh("$::prefix/usr/share/config/kppprc")); - $l{Authentication} = 4 if $l{Authentication} !~ /\d/; - $modem->{$_} ||= $l{$_} foreach qw(Authentication Gateway IPAddr SubnetMask); - $modem->{connection} ||= $l{Name}; - $modem->{domain} ||= $l{Domain}; - ($modem->{dns1}, $modem->{dns2}) = split(',', $l{DNS}); - - foreach (cat_("/etc/sysconfig/network-scripts/chat-ppp0")) { - /.*ATDT(\d*)/ and $modem->{phone} ||= $1; - } - foreach (cat_("/etc/sysconfig/network-scripts/ifcfg-ppp0")) { - /NAME=(['"]?)(.*)\1/ and $modem->{login} ||= $2; - /^METRIC=(.*)/ and $modem->{METRIC} = $1; - } - $modem->{login} ||= $l{Username}; - my $secret = network::tools::read_secret_backend(); - foreach (@$secret) { - $modem->{passwd} ||= $_->{passwd} if $_->{login} eq $modem->{login}; - } - #my $secret = network::tools::read_secret_backend(); - #my @cnx_list = map { $_->{server} } @$secret; - $modem->{$_} ||= '' foreach qw(connection phone login passwd auth domain dns1 dns2); - $modem->{auto_gateway} ||= defined $modem->{Gateway} && $modem->{Gateway} ne '0.0.0.0' ? N("Manual") : N("Automatic"); - $modem->{auto_ip} ||= defined $modem->{IPAddr} && $modem->{IPAddr} ne '0.0.0.0' ? N("Manual") : N("Automatic"); - $modem->{auto_dns} ||= $modem->{dns1} || $modem->{dns2} ? N("Manual") : N("Automatic"); - - $modem; -} - -#-----modem conf -sub ppp_configure { - my ($in, $modem) = @_; - $modem or return; - $in->do_pkgs->install('ppp') if !$::testing; - $in->do_pkgs->install('kdenetwork-kppp') if !$::testing && $in->do_pkgs->is_installed('kdebase'); - - if ($modem->{device} ne "/dev/modem") { - my $dev = $modem->{device}; - $dev =~ s!^/dev/!!; - any::devfssymlinkf({ device => $dev }, 'modem'); - #- add a specific udev script in addition to the udev rules file - #- (ttySL0 is a symlink, udev will not be called when it's created) - my $udev_conf = "$::prefix/etc/udev/conf.d/modem.conf"; - output_p($udev_conf, "ln -sf $dev /dev/modem\n"); - chmod 0755, $udev_conf; - } - - my %toreplace = map { $_ => $modem->{$_} } qw(Authentication AutoName connection dns1 dns2 domain IPAddr login passwd phone SubnetMask); - $toreplace{phone} =~ s/\D//g; - if ($modem->{auto_dns} ne N("Automatic")) { - $toreplace{dnsserver} = join ',', map { $modem->{$_} } "dns1", "dns2"; - $toreplace{dnsserver} .= $toreplace{dnsserver} && ','; - } - - #- using peerdns or dns1,dns2 avoid writing a /etc/resolv.conf file. - $toreplace{peerdns} = "yes"; - - $toreplace{connection} ||= 'DialupConnection'; - $toreplace{domain} ||= 'localdomain'; - $toreplace{intf} ||= 'ppp0'; - $toreplace{papname} = $toreplace{login} if member($modem->{Authentication}, 1, 3, 4); - - # handle static/dynamic settings: - if ($modem->{auto_ip} eq N("Automatic")) { - $toreplace{$_} = '0.0.0.0' foreach qw(IPAddr SubnetMask); - } else { - $toreplace{$_} = $modem->{$_} foreach qw(IPAddr SubnetMask); - } - $toreplace{Gateway} = $modem->{auto_gateway} eq N("Automatic") ? '0.0.0.0' : $modem->{Gateway}; - - $toreplace{METRIC} = defined($modem->{METRIC}) ? $modem->{METRIC} : network::tools::get_default_metric("modem"); - - #- build ifcfg-ppp0. - my $various = <<END; -DEVICE="$toreplace{intf}" -ONBOOT="no" -USERCTL="no" -MODEMPORT="/dev/modem" -LINESPEED="115200" -PERSIST="yes" -DEFABORT="yes" -DEBUG="yes" -INITSTRING="ATZ" -DEFROUTE="yes" -HARDFLOWCTL="yes" -ESCAPECHARS="no" -PPPOPTIONS="" -PAPNAME="$toreplace{papname}" -REMIP="" -NETMASK="" -IPADDR="" -MRU="" -MTU="" -DISCONNECTTIMEOUT="5" -RETRYTIMEOUT="60" -BOOTPROTO="none" -PEERDNS="$toreplace{peerdns}" -METRIC=$toreplace{METRIC} -END - output("$::prefix/etc/sysconfig/network-scripts/ifcfg-ppp0", - $various, - if_($modem->{auto_dns} ne N("Automatic"), map { qq(DNS$_=$toreplace{"dns$_"}\n) } grep { $toreplace{"dns$_"} } 1..2)); - - #- build chat-ppp0. - my @chat = <<END; -'ABORT' 'BUSY' -'ABORT' 'ERROR' -'ABORT' 'NO CARRIER' -'ABORT' 'NO DIALTONE' -'ABORT' 'Invalid Login' -'ABORT' 'Login incorrect' -'' 'ATZ' -END - if ($modem->{special_command}) { - push @chat, <<END; -'OK' '$modem->{special_command}' -END - } - push @chat, <<END; -'OK' 'ATDT$toreplace{phone}' -'TIMEOUT' '120' -'CONNECT' '' -END - if (member($modem->{Authentication}, 0, 2)) { - push @chat, <<END; -'ogin:--ogin:' '$toreplace{login}' -'ord:' '$toreplace{passwd}' -END - } - push @chat, <<END; -'TIMEOUT' '5' -'~--' '' -END - my $chat_file = "$::prefix/etc/sysconfig/network-scripts/chat-ppp0"; - output_with_perm($chat_file, 0600, @chat); - - write_secret_backend($toreplace{login}, $toreplace{passwd}); - - #- install kppprc file according to used configuration. - mkdir_p("$::prefix/usr/share/config"); - - $toreplace{$_->[0]} = $modem->{$_->[0]} || $_->[1] foreach [ 'Timeout', 60 ], [ 'UseLockFile', 1 ], [ 'Enter', 'CR' ], [ 'Volume', 0 ], - [ 'BusyWait', 0 ], [ 'FlowControl', 'CRTSCTS' ], [ 'Speed', 115200 ]; - output($modem->{kppprc} || "$::prefix/usr/share/config/kppprc", c::to_utf8(<<END)); -# KDE Config File - -[Account0] -ExDNSDisabled=0 -AutoName=$toreplace{AutoName} -ScriptArguments= -AccountingEnabled=0 -DialString=ATDT -Phonenumber=$toreplace{phone} -IPAddr=$toreplace{IPAddr} -Domain=$toreplace{domain} -Name=$toreplace{connection} -VolumeAccountingEnabled=0 -pppdArguments= -Password=$toreplace{passwd} -BeforeDisconnect= -Command= -ScriptCommands= -Authentication=$toreplace{Authentication} -DNS=$toreplace{dnsserver} -SubnetMask=$toreplace{SubnetMask} -AccountingFile= -DefaultRoute=1 -Username=$toreplace{login} -Gateway=$toreplace{Gateway} -StorePassword=1 -DisconnectCommand= - -[Modem] -BusyWait=$toreplace{BusyWait} -Enter=$toreplace{Enter} -FlowControl=$toreplace{FlowControl} -Volume=$toreplace{Volume} -Timeout=$toreplace{Timeout} -UseCDLine=0 -UseLockFile=$toreplace{UseLockFile} -Device=/dev/modem -Speed=$toreplace{Speed} - -[Graph] -InBytes=0,0,255 -Text=0,0,0 -Background=255,255,255 -Enabled=true -OutBytes=255,0,0 - -[General] -QuitOnDisconnect=0 -ShowLogWindow=0 -DisconnectOnXServerExit=1 -DefaultAccount=$toreplace{connection} -iconifyOnConnect=1 -Hint_QuickHelp=0 -AutomaticRedial=0 -PPPDebug=0 -NumberOfAccounts=1 -ShowClock=1 -DockIntoPanel=0 -pppdTimeout=30 -END - network::network::proxy_configure($::o->{miscellaneous}); -} - -1; diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm deleted file mode 100644 index a3f50cfe8..000000000 --- a/perl-install/network/netconnect.pm +++ /dev/null @@ -1,1613 +0,0 @@ -package network::netconnect; # $Id$ - -use strict; -use common; -use log; -use detect_devices; -use run_program; -use modules; -use any; -use fs; -use mouse; -use network::network; -use network::tools; -use MDK::Common::Globals "network", qw($in); - -sub detect { - my ($modules_conf, $auto_detect, $o_class) = @_; - my %l = ( - isdn => sub { - require network::isdn; - $auto_detect->{isdn} = network::isdn::detect_backend($modules_conf); - }, - lan => sub { # ethernet - require network::ethernet; - modules::load_category($modules_conf, list_modules::ethernet_categories()); - $auto_detect->{lan} = { map { $_->[0] => $_->[1] } network::ethernet::get_eth_cards($modules_conf) }; - }, - adsl => sub { - require network::adsl; - $auto_detect->{adsl} = network::adsl::adsl_detect(); - }, - modem => sub { - $auto_detect->{modem} = { map { $_->{description} || "$_->{MANUFACTURER}|$_->{DESCRIPTION} ($_->{device})" => $_ } detect_devices::getModem($modules_conf) }; - }, - ); - $l{$_}->() foreach $o_class || keys %l; - return; -} - -sub init_globals { - my ($in) = @_; - MDK::Common::Globals::init(in => $in); -} - -sub detect_timezone() { - my %tmz2country = ( - 'Europe/Paris' => N("France"), - 'Europe/Amsterdam' => N("Netherlands"), - 'Europe/Rome' => N("Italy"), - 'Europe/Brussels' => N("Belgium"), - 'America/New_York' => N("United States"), - 'Europe/London' => N("United Kingdom") - ); - my %tm_parse = MDK::Common::System::getVarsFromSh("$::prefix/etc/sysconfig/clock"); - my @country; - foreach (keys %tmz2country) { - if ($_ eq $tm_parse{ZONE}) { - unshift @country, $tmz2country{$_}; - } else { push @country, $tmz2country{$_} } - } - \@country; -} - -# load sub category's wizard pages into main wizard data structure -sub get_subwizard { - my ($wiz, $type) = @_; - my %net_conf_callbacks = (adsl => sub { require network::adsl; &network::adsl::get_wizard }, - #cable => sub { require network::ethernet; &network::ethernet::get_wizard }, - #isdn => sub { require network::isdn; &network::isdn::get_wizard }, - #lan => sub { require network::ethernet; &network::ethernet::get_wizard }, - #modem => sub { require network::modem; &network::modem::get_wizard }, - ); - $net_conf_callbacks{$type}->($wiz); -} - -# configuring all network devices -sub real_main { - my ($netcnx, $in, $modules_conf, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) = @_; - my $netc = $o_netc ||= {}; - my $mouse = $o_mouse ||= {}; - my $intf = $o_intf ||= {}; - my $first_time = $o_first_time || 0; - my ($network_configured, $cnx_type, $type, @all_cards, %eth_intf, %all_eth_intf); - my (%connections, @connection_list, $is_wireless); - my ($modem, $modem_name, $modem_conf_read, $modem_dyn_dns, $modem_dyn_ip); - my $cable_no_auth; - my ($adsl_type, @adsl_devices, $adsl_failed, $adsl_answer, %adsl_cards, %adsl_data, $adsl_data, $adsl_provider, $adsl_old_provider); - my ($ntf_name, $gateway_ex, $up, $need_restart_network); - my ($isdn, $isdn_name, $isdn_type, %isdn_cards, @isdn_dial_methods); - my $my_isdn = join('', N("Manual choice"), " (", N("Internal ISDN card"), ")"); - my ($ndiswrapper_driver, $ndiswrapper_inf_file); - my ($module, $auto_ip, $protocol, $onboot, $needhostname, $peerdns, $peeryp, $peerntpd, $hotplug, $track_network_id); # lan config - my $success = 1; - my $ethntf = {}; - my $db_path = "/usr/share/apps/kppp/Provider"; - my (%countries, @isp, $country, $provider, $old_provider); - my $config = {}; - eval(cat_("$::prefix/etc/sysconfig/drakconnect")); - - my %wireless_mode = (N("Ad-hoc") => "Ad-hoc", - N("Managed") => "Managed", - N("Master") => "Master", - N("Repeater") => "Repeater", - N("Secondary") => "Secondary", - N("Auto") => "Auto", - ); - my %l10n_lan_protocols = ( - static => N("Manual configuration"), - dhcp => N("Automatic IP (BOOTP/DHCP)"), - if_(0, - dhcp_zeroconf => N("Automatic IP (BOOTP/DHCP/Zeroconf)"), - ) - ); - my $_w = N("Protocol for the rest of the world"); - my %isdn_protocols = ( - 2 => N("European protocol (EDSS1)"), - 3 => N("Protocol for the rest of the world\nNo D-Channel (leased lines)"), - ); - - network::tools::remove_initscript(); - - init_globals($in); - - read_net_conf($netcnx, $netc, $intf); - - $netc->{autodetect} = {}; - - my $lan_detect = sub { - detect($modules_conf, $netc->{autodetect}, 'lan'); - require network::ethernet; - modules::interactive::load_category($in, $modules_conf, list_modules::ethernet_categories(), !$::expert, 0); - @all_cards = network::ethernet::get_eth_cards($modules_conf); - %all_eth_intf = network::ethernet::get_eth_cards_names(@all_cards); #- needed not to loose GATEWAYDEV - require list_modules; #- FIXME: check if useful - %eth_intf = map { $_->[0] => join(': ', $_->[0], $_->[2]) } - grep { to_bool($is_wireless) == c::isNetDeviceWirelessAware($_->[0]) } @all_cards; - }; - - my $find_lan_module = sub { - if (my $dev = find { $_->{device} eq $ethntf->{DEVICE} } detect_devices::pcmcia_probe()) { # PCMCIA case - $module = $dev->{driver}; - } elsif ($dev = find { $_->[0] eq $ethntf->{DEVICE} } @all_cards) { - $module = $dev->[1]; - } else { $module = "" } - }; - - my $is_hotplug_blacklisted = sub { - bool2yesno(member($module, qw(b44 forcedeth madwifi_pci via-velocity)) || - $is_wireless || - find { $_->{device} eq $ntf_name } detect_devices::pcmcia_probe()); - }; - - my %adsl_descriptions = ( - speedtouch => N("Alcatel speedtouch USB modem"), - sagem => N("Sagem USB modem"), - bewan => N("Bewan modem"), - eci => N("ECI Hi-Focus modem"), # this one needs eci agreement - ); - - my %adsl_types = ( - dhcp => N("Dynamic Host Configuration Protocol (DHCP)"), - manual => N("Manual TCP/IP configuration"), - pptp => N("Point to Point Tunneling Protocol (PPTP)"), - pppoe => N("PPP over Ethernet (PPPoE)"), - pppoa => N("PPP over ATM (PPPoA)"), - capi => N("DSL over CAPI"), - ); - - my %encapsulations = ( - 1 => N("Bridged Ethernet LLC"), - 2 => N("Bridged Ethernet VC"), - 3 => N("Routed IP LLC"), - 4 => N("Routed IP VC"), - 5 => N("PPPoA LLC"), - 6 => N("PPPoA VC"), - ); - - my %ppp_auth_methods = ( - 0 => N("Script-based"), - 1 => N("PAP"), - 2 => N("Terminal-based"), - 3 => N("CHAP"), - 4 => N("PAP/CHAP"), - ); - - my $offer_to_connect = sub { - return "ask_connect_now" if $netc->{internet_cnx_choice} eq 'adsl' && !member($adsl_type, qw(manual dhcp)); - return "ask_connect_now" if member($netc->{internet_cnx_choice}, qw(modem isdn isdn_external)); - return "end"; - }; - - my $after_start_on_boot_step = sub { - if ($netc->{internet_cnx_choice} && exists $netc->{internet_cnx}{$netc->{internet_cnx_choice}}) { - $netcnx->{type} = $netc->{internet_cnx}{$netc->{internet_cnx_choice}}{type}; - } else { - undef $netc->{NET_DEVICE}; - } - if ($netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp)) && member($ntf_name, qw(sagem speedtouch))) { - #- we may need to write sagem specific parameters and load corresponding modules/programs (sagem/speedtouch) - network::adsl::adsl_conf_backend($in, $modules_conf, $netcnx, $netc, $intf, $ntf_name, $adsl_type, $netcnx); - } - network::network::configureNetwork2($in, $modules_conf, $::prefix, $netc, $intf); - $network_configured = 1; - return "restart" if $need_restart_network && !$::isInstall && !$::expert; - return $offer_to_connect->(); - }; - - my $goto_start_on_boot_ifneeded = sub { - return $after_start_on_boot_step->() if $netcnx->{type} eq "lan"; - return "isdn_dial_on_boot" if $netcnx->{type} =~ /isdn/; - return "network_on_boot"; - }; - - my $save_cnx = sub { - if (keys %$config) { - require Data::Dumper; - output("$::prefix/etc/sysconfig/drakconnect", Data::Dumper->Dump([ $config ], [ '$p' ])); - } - return "allow_user_ctl"; - }; - - my $handle_multiple_cnx = sub { - $need_restart_network = member($netcnx->{type}, qw(cable lan)) || $netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp)); - my $nb = keys %{$netc->{internet_cnx}}; - if (1 < $nb) { - return "multiple_internet_cnx"; - } else { - $netc->{internet_cnx_choice} = $nb == 1 ? (keys %{$netc->{internet_cnx}})[0] : $netcnx->{type}; - return $save_cnx->(); - } - }; - - my $delete_gateway_settings = sub { - my ($device) = @_; - #- delete gateway settings if gateway device is invalid or matches the reconfigured device - if (!$netc->{GATEWAYDEV} || !exists $eth_intf{$netc->{GATEWAYDEV}} || $netc->{GATEWAYDEV} eq $device) { - delete $netc->{GATEWAY}; - delete $netc->{GATEWAYDEV}; - } - }; - - use locale; - set_l10n_sort(); - - # main wizard: - my $wiz; - $wiz = - { - defaultimage => "drakconnect.png", - name => N("Network & Internet Configuration"), - pages => { - welcome => - { - pre => sub { - # keep b/c of translations in case they can be reused somewhere else: - my @_a = (N("(detected on port %s)", 'toto'), - #-PO: here, "(detected)" string will be appended to eg "ADSL connection" - N("(detected %s)", 'toto'), N("(detected)")); - my @connections = - ([ N("Modem connection"), "modem" ], - [ N("ISDN connection"), "isdn" ], - [ N("ADSL connection"), "adsl" ], - [ N("Cable connection"), "cable" ], - [ N("LAN connection"), "lan" ], - [ N("Wireless connection"), "lan" ], - ); - - foreach (@connections) { - my ($string, $type) = @$_; - $connections{$string} = $type; - } - @connection_list = { val => \$cnx_type, type => 'list', list => [ map { $_->[0] } @connections ], }; - }, - if_(!$::isInstall, no_back => 1), - name => N("Choose the connection you want to configure"), - interactive_help_id => 'configureNetwork', - data => \@connection_list, - post => sub { - $is_wireless = $cnx_type eq N("Wireless connection"); - #- why read again the net_conf here? - read_net_conf($netcnx, $netc, $intf) if $::isInstall; # :-( - $type = $netcnx->{type} = $connections{$cnx_type}; - return $type; - }, - }, - - prepare_detection => - { - name => N("We are now going to configure the %s connection.\n\n\nPress \"%s\" to continue.", - translate($type), N("Next")), - post => $handle_multiple_cnx, - }, - - - hw_account => - { - name => N("Connection Configuration") . "\n\n" . - N("Please fill or check the field below"), - data => sub { - [ - (map { - my ($dstruct, $field, $item) = @$_; - $item->{val} = \$dstruct->{$field}; - if__(exists $dstruct->{$field}, $item); - } ([ $netcnx, "irq", { label => N("Card IRQ") } ], - [ $netcnx, "mem", { label => N("Card mem (DMA)") } ], - [ $netcnx, "io", { label => N("Card IO") } ], - [ $netcnx, "io0", { label => N("Card IO_0") } ], - [ $netcnx, "io1", { label => N("Card IO_1") } ], - [ $isdn, "phone_in", { label => N("Your personal phone number") } ], - [ $netc, "DOMAINNAME2", { label => N("Provider name (ex provider.net)") } ], - [ $isdn, "phone_out", { label => N("Provider phone number") } ], - [ $netc, "dnsServer2", { label => N("Provider DNS 1 (optional)") } ], - [ $netc, "dnsServer3", { label => N("Provider DNS 2 (optional)") } ], - [ $isdn, "dialing_mode", { label => N("Dialing mode"), list => ["auto", "manual"] } ], - [ $isdn, "speed", { label => N("Connection speed"), list => ["64 Kb/s", "128 Kb/s"] } ], - [ $netcnx, "huptimeout", { label => N("Connection timeout (in sec)") } ], #unused? - ) - ), - ({ label => N("Account Login (user name)"), val => \$isdn->{login} }, - { label => N("Account Password"), val => \$isdn->{passwd}, hidden => 1 }, - ) - ]; - }, - post => sub { - network::isdn::write_config($isdn); - $netc->{$_} = 'ippp0' foreach 'NET_DEVICE', 'NET_INTERFACE'; - $handle_multiple_cnx->(); - }, - }, - - cable => - { - pre => sub { - $cable_no_auth = sub { $netc->{bpalogin} eq N("None") }; - }, - name => N("Cable: account options"), - data => sub { - [ - { label => N("Authentication"), type => "list", val => \$netc->{bpalogin}, list => [ N("None"), N("Use BPALogin (needed for Telstra)") ] }, - { label => N("Account Login (user name)"), val => \$netcnx->{login}, disabled => $cable_no_auth }, - { label => N("Account Password"), val => \$netcnx->{passwd}, hidden => 1, disabled => $cable_no_auth }, - ]; - }, - post => sub { - if ($cable_no_auth->()) { - if (-f "$::prefix/etc/rc.d/init.d/bpalogin") { - require services; - services::stop("bpalogin"); - services::do_not_start_service_on_boot("bpalogin"); - } - } else { - if ($in->do_pkgs->install("bpalogin")) { - substInFile { - s/username\s+.*\n/username $netcnx->{login}\n/; - s/password\s+.*\n/password $netcnx->{passwd}\n/; - } "$::prefix/etc/bpalogin.conf"; - require services; - services::start_service_on_boot("bpalogin"); - services::restart("bpalogin"); - } - } - $auto_ip = 1; - return "lan"; - } - }, - - isdn => - { - pre=> sub { - detect($modules_conf, $netc->{autodetect}, 'isdn'); - %isdn_cards = map { $_->{description} => $_ } @{$netc->{autodetect}{isdn}}; - }, - name => N("Select the network interface to configure:"), - data => sub { - [ { label => N("Net Device"), type => "list", val => \$isdn_name, allow_empty_list => 1, - list => [ $my_isdn, N("External ISDN modem"), keys %isdn_cards ] } ]; - }, - post => sub { - # !intern_pci: - # data => [ { val => \$isdn_type, type => "list", list => [ , ], } ], - # post => sub { - if ($isdn_name eq $my_isdn) { - return "isdn_ask"; - } elsif ($isdn_name eq N("External ISDN modem")) { - detect($modules_conf, $netc->{autodetect}, 'modem'); - $netcnx->{type} = $netc->{isdntype} = 'isdn_external'; - $netcnx->{isdn_external}{device} = network::modem::first_modem($netc); - network::isdn::read_config($netcnx->{isdn_external}); - #- FIXME: seems to be specific to ZyXEL Adapter Omni.net/TA 128/Elite 2846i - #- it does not even work with TA 128 modems - #- http://bugs.mandrakelinux.com/query.php?bug=1033 - $netcnx->{isdn_external}{special_command} = 'AT&F&O2B40'; - require network::modem; - $modem = $netcnx->{isdn_external}; - return "modem"; - } - - $netc->{isdntype} = 'isdn_internal'; - # FIXME: some of these should be taken from isdn db - $netcnx->{isdn_internal} = $isdn = { map { $_ => $isdn_cards{$isdn_name}{$_} } qw(description vendor id card_type driver type mem io io0 io1 irq firmware) }; - - if ($isdn->{id}) { - log::explanations("found isdn card : $isdn->{description}; vendor : $isdn->{vendor}; id : $isdn->{id}; driver : $isdn->{driver}\n"); - $isdn->{description} =~ s/\|/ -- /; - } - - network::isdn::read_config($isdn); - $isdn->{driver} = $isdn_cards{$isdn_name}{driver}; #- do not let config overwrite default driver - - #- let the user choose hisax or capidrv if both are available - $isdn->{driver} ne "capidrv" && network::isdn::get_capi_card($isdn) and return "isdn_driver"; - return "isdn_protocol"; - }, - }, - - - isdn_ask => - { - pre => sub { - %isdn_cards = network::isdn::get_cards(); - }, - name => N("Select a device!"), - data => sub { [ { label => N("Net Device"), val => \$isdn_name, type => 'list', separator => '|', list => [ keys %isdn_cards ], allow_empty_list => 1 } ] }, - pre2 => sub { - my ($label) = @_; - - #- ISDN card already detected - goto isdn_ask_step_3; - - isdn_ask_step_1: - my $e = $in->ask_from_list_(N("ISDN Configuration"), - $label . "\n" . N("What kind of card do you have?"), - [ N_("ISA / PCMCIA"), N_("PCI"), N_("USB"), N_("I do not know") ] - ) or return; - isdn_ask_step_1b: - if ($e =~ /PCI/) { - $isdn->{card_type} = 'pci'; - } elsif ($e =~ /USB/) { - $isdn->{card_type} = 'usb'; - } else { - $in->ask_from_list_(N("ISDN Configuration"), - N(" -If you have an ISA card, the values on the next screen should be right.\n -If you have a PCMCIA card, you have to know the \"irq\" and \"io\" of your card. -"), - [ N_("Continue"), N_("Abort") ]) eq 'Continue' or goto isdn_ask_step_1; - $isdn->{card_type} = 'isa'; - } - - isdn_ask_step_2: - $e = $in->ask_from_listf(N("ISDN Configuration"), - N("Which of the following is your ISDN card?"), - sub { $_[0]{description} }, - [ network::isdn::get_cards_by_type($isdn->{card_type}) ]) or goto($isdn->{card_type} =~ /usb|pci/ ? 'isdn_ask_step_1' : 'isdn_ask_step_1b'); - $e->{$_} and $isdn->{$_} = $e->{$_} foreach qw(driver type mem io io0 io1 irq firmware); - - }, - post => sub { - $netcnx->{isdn_internal} = $isdn = $isdn_cards{$isdn_name}; - return "isdn_protocol"; - } - }, - - - isdn_driver => - { - pre => sub { - $isdn_name = "capidrv"; - }, - name => N("A CAPI driver is available for this modem. This CAPI driver can offer more capabilities than the free driver (like sending faxes). Which driver do you want to use?"), - data => sub { [ - { label => N("Driver"), type => "list", val => \$isdn_name, - list => [ $isdn->{driver}, "capidrv" ] } - ] }, - post => sub { - $isdn->{driver} = $isdn_name; - return "isdn_protocol"; - } - }, - - - isdn_protocol => - { - name => N("ISDN Configuration") . "\n\n" . N("Which protocol do you want to use?"), - data => [ - { label => N("Protocol"), type => "list", val => \$isdn_type, - list => [ keys %isdn_protocols ], format => sub { $isdn_protocols{$_[0]} } } - ], - post => sub { - $isdn->{protocol} = $isdn_type; - return "isdn_db"; - } - }, - - - isdn_db => - { - name => N("ISDN Configuration") . "\n\n" . N("Select your provider.\nIf it is not listed, choose Unlisted."), - data => sub { - [ { label => N("Provider:"), type => "list", val => \$provider, separator => '|', - list => [ N("Unlisted - edit manually"), network::isdn::read_providers_backend() ] } ]; - }, - post => sub { - network::isdn::get_info_providers_backend($isdn, $netc, $provider); - $isdn->{huptimeout} = 180; - $isdn->{$_} ||= '' foreach qw(phone_in phone_out dialing_mode login passwd passwd2 idl speed); - add2hash($netc, { dnsServer2 => '', dnsServer3 => '', DOMAINNAME2 => '' }); - return "hw_account"; - }, - }, - - - no_supported_winmodem => - { - name => N("Warning") . "\n\n" . N("Your modem is not supported by the system. -Take a look at http://www.linmodems.org"), - end => 1, - }, - - - modem => - { - pre => sub { - require network::modem; - detect($modules_conf, $netc->{autodetect}, 'modem'); - }, - name => N("Select the modem to configure:"), - data => sub { - [ { label => N("Modem"), type => "list", val => \$modem_name, allow_empty_list => 1, - list => [ keys %{$netc->{autodetect}{modem}}, N("Manual choice") ], } ]; - }, - post => sub { - $modem ||= $netcnx->{modem} ||= {}; - return 'choose_serial_port' if $modem_name eq N("Manual choice"); - $ntf_name = $netc->{autodetect}{modem}{$modem_name}{device} || $netc->{autodetect}{modem}{$modem_name}{description}; - - return "ppp_provider" if $ntf_name =~ m!^/dev/!; - return "choose_serial_port" if !$ntf_name; - - my $type; - - my %pkgs2path = ( - hcfpcimodem => "/usr/sbin/hcfpciconfig", - hsflinmodem => "/usr/sbin/hsfconfig", - ltmodem => "/etc/devfs/conf.d/ltmodem.conf", - slmodem => "/usr/sbin/slmodemd", - ); - - my %devices = (ltmodem => '/dev/ttyS14', - hsflinmodem => '/dev/ttySHSF0', - slmodem => '/dev/ttySL0' - ); - - if (my $driver = $netc->{autodetect}{modem}{$modem_name}{driver}) { - $driver =~ /^Hcf:/ and $type = "hcfmodem"; - $driver =~ /^Hsf:/ and $type = "hsfmodem"; - $driver =~ /^LT:/ and $type = "ltmodem"; - #- we need a better agreement to use list_modules::category2modules('network/slmodem') - member($driver, qw(slamr slusb)) and $type = "slmodem"; - if ($type && (my $packages = $in->do_pkgs->check_kernel_module_packages("$type-kernel", if_(! -f $pkgs2path{$type}, $type)))) { - if ($in->do_pkgs->install(@$packages)) { - # start slmodemd when installing it (thus preventing the average user to have to restart - # his machine in order to get a working connection): - system("service slmodemd start") if $::isStandalone && $type eq 'slmodem'; - } - $modem->{device} = $devices{$type} || '/dev/modem'; - return "ppp_provider"; - } - } - - return "no_supported_winmodem"; - }, - }, - - choose_serial_port => - { - pre => sub { - $modem->{device} ||= readlink "$::prefix/dev/modem"; - }, - name => N("Please choose which serial port your modem is connected to."), - interactive_help_id => 'selectSerialPort', - data => sub { - [ { val => \$modem->{device}, format => \&mouse::serial_port2text, type => "list", - list => [ grep { $_ ne $o_mouse->{device} } (mouse::serial_ports(), grep { -e $_ } '/dev/modem', '/dev/ttySL0', '/dev/ttyS14',) ] } ]; - }, - post => sub { - $ntf_name = $modem->{device}; - return 'ppp_provider'; - }, - }, - - - ppp_provider => - { - pre => sub { - network::modem::ppp_read_conf($netcnx, $netc) if !$modem_conf_read; - $modem_conf_read = 1; - $in->do_pkgs->ensure_is_installed('kdenetwork-kppp-provider', $db_path); - my $p_db_path = "$::prefix$db_path"; - @isp = map { - my $country = $_; - map { - s!$p_db_path/$country!!; - s/%([0-9]{3})/chr(int($1))/eg; - $countries{$country} ||= translate($country); - join('', $countries{$country}, $_); - } grep { !/.directory$/ } glob_("$p_db_path/$country/*"); - } map { s!$p_db_path/!!o; s!_! !g; $_ } glob_("$p_db_path/*"); - $old_provider = $provider; - }, - name => N("Select your provider:"), - data => sub { - [ { label => N("Provider:"), type => "list", val => \$provider, separator => '/', - list => [ N("Unlisted - edit manually"), @isp ] } ]; - }, - post => sub { - if ($provider ne N("Unlisted - edit manually")) { - ($country, $provider) = split('/', $provider); - $country = { reverse %countries }->{$country}; - my %l = getVarsFromSh("$::prefix$db_path/$country/$provider"); - if (defined $old_provider && $old_provider ne $provider) { - $modem->{connection} = $l{Name}; - $modem->{phone} = $l{Phonenumber}; - $modem->{$_} = $l{$_} foreach qw(Authentication AutoName Domain Gateway IPAddr SubnetMask); - ($modem->{dns1}, $modem->{dns2}) = split(',', $l{DNS}); - } - } - return "ppp_account"; - }, - }, - - - ppp_account => - { - name => N("Dialup: account options"), - data => sub { - [ - { label => N("Connection name"), val => \$modem->{connection} }, - { label => N("Phone number"), val => \$modem->{phone} }, - { label => N("Login ID"), val => \$modem->{login} }, - { label => N("Password"), val => \$modem->{passwd}, hidden => 1 }, - { label => N("Authentication"), val => \$modem->{Authentication}, - list => [ sort keys %ppp_auth_methods ], format => sub { $ppp_auth_methods{$_[0]} } }, - ]; - }, - next => "ppp_ip", - }, - - - ppp_ip => - { - pre => sub { - $modem_dyn_ip = sub { $modem->{auto_ip} eq N("Automatic") }; - }, - name => N("Dialup: IP parameters"), - data => sub { - [ - { label => N("IP parameters"), type => "list", val => \$modem->{auto_ip}, list => [ N("Automatic"), N("Manual") ] }, - { label => N("IP address"), val => \$modem->{IPAddr}, disabled => $modem_dyn_ip }, - { label => N("Subnet mask"), val => \$modem->{SubnetMask}, disabled => $modem_dyn_ip }, - ]; - }, - next => "ppp_dns", - }, - - - ppp_dns => - { - pre => sub { - $modem_dyn_dns = sub { $modem->{auto_dns} eq N("Automatic") }; - }, - name => N("Dialup: DNS parameters"), - data => sub { - [ - { label => N("DNS"), type => "list", val => \$modem->{auto_dns}, list => [ N("Automatic"), N("Manual") ] }, - { label => N("Domain name"), val => \$modem->{domain}, disabled => $modem_dyn_dns }, - { label => N("First DNS Server (optional)"), val => \$modem->{dns1}, disabled => $modem_dyn_dns }, - { label => N("Second DNS Server (optional)"), val => \$modem->{dns2}, disabled => $modem_dyn_dns }, - { text => N("Set hostname from IP"), val => \$modem->{AutoName}, type => 'bool', disabled => $modem_dyn_dns }, - ]; - }, - next => "ppp_gateway", - }, - - - ppp_gateway => - { - name => N("Dialup: IP parameters"), - data => sub { - [ - { label => N("Gateway"), type => "list", val => \$modem->{auto_gateway}, list => [ N("Automatic"), N("Manual") ] }, - { label => N("Gateway IP address"), val => \$modem->{Gateway}, - disabled => sub { $modem->{auto_gateway} eq N("Automatic") } }, - ]; - }, - post => sub { - network::modem::ppp_configure($in, $modem); - $netc->{$_} = 'ppp0' foreach 'NET_DEVICE', 'NET_INTERFACE'; - $handle_multiple_cnx->(); - }, - }, - - - adsl => - { - pre => sub { - get_subwizard($wiz, 'adsl'); - $lan_detect->(); - @adsl_devices = keys %eth_intf; - - detect($modules_conf, $netc->{autodetect}, 'adsl'); - %adsl_cards = (); - foreach my $modem_type (keys %{$netc->{autodetect}{adsl}}) { - foreach my $modem (@{$netc->{autodetect}{adsl}{$modem_type}}) { - my $name = join(': ', $adsl_descriptions{$modem_type}, $modem->{description}); - $adsl_cards{$name} = [ $modem_type, $modem ]; - } - } - push @adsl_devices, keys %adsl_cards; - - detect($modules_conf, $netc->{autodetect}, 'isdn'); - if (my @isdn_modems = @{$netc->{autodetect}{isdn}}) { - require network::isdn; - %isdn_cards = map { $_->{description} => $_ } grep { $_->{driver} =~ /dsl/i } map { network::isdn::get_capi_card($_) } @isdn_modems; - push @adsl_devices, keys %isdn_cards; - } - }, - name => N("ADSL configuration") . "\n\n" . N("Select the network interface to configure:"), - data => [ { label => N("Net Device"), type => "list", val => \$ntf_name, allow_empty_list => 1, - list => \@adsl_devices, format => sub { $eth_intf{$_[0]} || $_[0] } } ], - post => sub { - my %packages = ( - 'eci' => [ 'eciadsl', 'missing' ], - 'sagem' => [ 'eagle-usb', "/sbin/eaglectrl" ], - 'speedtouch' => [ 'speedtouch', "/usr/sbin/modem_run" ], - ); - return 'adsl_unsupported_eci' if $ntf_name eq 'eci'; - if (exists $adsl_cards{$ntf_name}) { - my $modem; - ($ntf_name, $modem) = @{$adsl_cards{$ntf_name}}; - # FIXME: check that the package installation succeeds, else retry or abort - $in->do_pkgs->ensure_is_installed(@{$packages{$ntf_name}}) if $packages{$ntf_name}; - if ($ntf_name eq 'speedtouch') { - $in->do_pkgs->ensure_is_installed_if_available('speedtouch_mgmt', "/usr/share/speedtouch/mgmt.o"); - return 'adsl_speedtouch_firmware' if ! -e "$::prefix/usr/share/speedtouch/mgmt.o"; - } - $netcnx->{bus} = $modem->{bus} if $ntf_name eq 'bewan'; - if ($ntf_name eq 'bewan' && !$::testing) { - if (my $unicorn_packages = $in->do_pkgs->check_kernel_module_packages('unicorn-kernel', 'unicorn')) { - $in->do_pkgs->install(@$unicorn_packages); - } - } - } - if (exists($isdn_cards{$ntf_name})) { - require network::isdn; - $netcnx->{capi} = $isdn_cards{$ntf_name}; - $adsl_type = "capi"; - return 'adsl_account'; - } - return 'adsl_provider'; - }, - }, - - - adsl_provider => - { - pre => sub { - require network::adsl_consts; - %adsl_data = %network::adsl_consts::adsl_data; - $adsl_old_provider = $adsl_provider; - }, - name => N("Please choose your ADSL provider"), - data => sub { - [ { label => N("Provider:"), type => "list", val => \$adsl_provider, separator => '|', - list => [ sort(N("Unlisted - edit manually"), keys %adsl_data) ], sort => 0 } ]; - }, - post => sub { - $adsl_type = 'pppoa' if member($ntf_name, qw(bewan speedtouch)); - if ($adsl_provider ne N("Unlisted - edit manually")) { - $adsl_data = $adsl_data{$adsl_provider}; - if ($adsl_provider ne $adsl_old_provider) { - $netc->{$_} = $adsl_data->{$_} foreach qw(DOMAINNAME2 Encapsulation vpi vci provider_id); - $adsl_type = $adsl_data->{method}; - } - } - return 'adsl_protocol'; - }, - }, - - - adsl_speedtouch_firmware => - { - name => N("You need the Alcatel microcode. -You can provide it now via a floppy or your windows partition, -or skip and do it later."), - data => [ { label => "", val => \$adsl_answer, type => "list", - list => [ N("Use a floppy"), N("Use my Windows partition"), N("Do it later") ], } - ], - post => sub { - my $destination = "$::prefix/usr/share/speedtouch/"; - my ($file, $source, $mounted); - if ($adsl_answer eq N("Use a floppy")) { - $mounted = 1; - $file = 'mgmt.o'; - ($source, $adsl_failed) = network::tools::use_floppy($in, $file); - } elsif ($adsl_answer eq N("Use my Windows partition")) { - ($source, $adsl_failed) = network::tools::use_windows($file = 'alcaudsl.sys'); - } - return "adsl_no_firmawre" if $adsl_answer eq N("Do it later"); - - my $_b = $mounted && before_leaving { fs::umount('/mnt') }; - if (!$adsl_failed) { - if (-e "$source/$file") { - cp_af("$source/$file", $destination) if !$::testing; - } else { - $adsl_failed = N("Firmware copy failed, file %s not found", $file); - } - } - log::explanations($adsl_failed || "Firmware copy $file in $destination succeeded"); - -e "$destination/alcaudsl.sys" and rename "$destination/alcaudsl.sys", "$destination/mgmt.o"; - - # kept translations b/c we may want to reuse it later: - my $_msg = N("Firmware copy succeeded"); - return $adsl_failed ? 'adsl_copy_firmware_failled' : 'adsl_provider'; - }, - }, - - - adsl_copy_firmware_failled => - { - name => sub { $adsl_failed }, - next => 'adsl_provider', - }, - - - "adsl_no_firmawre" => - { - name => N("You need the Alcatel microcode. -Download it at: -%s -and copy the mgmt.o in /usr/share/speedtouch", 'http://www.speedtouch.com/supuser.htm'), - next => "adsl_provider", - }, - - - adsl_protocol => - { - pre => sub { - # preselect right protocol for ethernet though connections: - if (!exists $adsl_descriptions{$ntf_name}) { - $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name }; - $adsl_type ||= $ethntf->{BOOTPROTO} || "dhcp"; - #- FIXME: use static instead of manual as key in %adsl_types - $adsl_type = "manual" if $adsl_type eq "static"; - #- pppoa shouldn't be selected by default for ethernet devices, fallback on pppoe - $adsl_type = "pppoe" if $adsl_type eq "pppoa"; - } - }, - name => N("Connect to the Internet") . "\n\n" . - N("The most common way to connect with adsl is pppoe. -Some connections use PPTP, a few use DHCP. -If you do not know, choose 'use PPPoE'"), - data => [ - { text => N("ADSL connection type:"), val => \$adsl_type, type => "list", - list => [ sort { $adsl_types{$a} cmp $adsl_types{$b} } keys %adsl_types ], - format => sub { $adsl_types{$_[0]} }, - }, - ], - post => sub { - my $real_interface = $ntf_name; - $netcnx->{type} = 'adsl'; - # blacklist bogus driver, enable ifplugd support else: - $find_lan_module->(); - $ethntf->{MII_NOT_SUPPORTED} ||= $is_hotplug_blacklisted->(); - if ($ntf_name eq "sagem" && member($adsl_type, qw(manual dhcp))) { - #- "fctStartAdsl -i" builds ifcfg-ethX from ifcfg-sagem and echoes ethX - #- it auto-detects dhcp/static modes thanks to encapsulation setting - $ethntf = $intf->{sagem} ||= {}; - $ethntf->{DEVICE} = "`/usr/sbin/fctStartAdsl -i`"; - $ethntf->{MII_NOT_SUPPORTED} = "yes"; - } - if ($ntf_name eq "speedtouch" && member($adsl_type, qw(manual dhcp))) { - #- use ATMARP with the atm0 interface - $real_interface = "atm0"; - $ethntf = $intf->{$real_interface} ||= {}; - $ethntf->{DEVICE} = $real_interface; - $ethntf->{ATM_ADDR} = join('.', hex($netc->{vpi}), hex($netc->{vci})); - $ethntf->{MII_NOT_SUPPORTED} = "yes"; - } - #- delete gateway settings if gateway device is invalid or if reconfiguring the gateway interface - exists $intf->{$real_interface} and $delete_gateway_settings->($real_interface); - # process static/dhcp ethernet devices: - if (exists($intf->{$real_interface}) && member($adsl_type, qw(manual dhcp))) { - $ethntf->{TYPE} = "ADSL"; - $auto_ip = $adsl_type eq 'dhcp'; - return 'lan_intf'; - } - return 'adsl_account'; - }, - }, - - - adsl_account => - { - pre => sub { - network::adsl::adsl_probe_info($netcnx, $netc, $adsl_type, $ntf_name); - $netc->{NET_DEVICE} = member($adsl_type, 'pppoe', 'pptp') ? $ntf_name : 'ppp0'; - $netc->{NET_INTERFACE} = 'ppp0'; - }, - name => N("Connection Configuration") . "\n\n" . - N("Please fill or check the field below"), - data => sub { - [ - if_(0, { label => N("Provider name (ex provider.net)"), val => \$netc->{DOMAINNAME2} }), - { label => N("First DNS Server (optional)"), val => \$netc->{dnsServer2} }, - { label => N("Second DNS Server (optional)"), val => \$netc->{dnsServer3} }, - { label => N("Account Login (user name)"), val => \$netcnx->{login} }, - { label => N("Account Password"), val => \$netcnx->{passwd}, hidden => 1 }, - if_($adsl_type ne "capi", - { label => N("Virtual Path ID (VPI):"), val => \$netc->{vpi}, advanced => 1 }, - { label => N("Virtual Circuit ID (VCI):"), val => \$netc->{vci}, advanced => 1 } - ), - if_($ntf_name eq "sagem", - { label => N("Encapsulation:"), val => \$netc->{Encapsulation}, list => [ keys %encapsulations ], - format => sub { $encapsulations{$_[0]} }, advanced => 1, - }, - ), - ]; - }, - post => sub { - $netc->{internet_cnx_choice} = 'adsl'; - network::adsl::adsl_conf_backend($in, $modules_conf, $netcnx, $netc, $intf, $ntf_name, $adsl_type, $netcnx); #FIXME - $config->{adsl} = { kind => $ntf_name, protocol => $adsl_type }; - $handle_multiple_cnx->(); - }, - }, - - - adsl_unsupported_eci => - { - name => N("The ECI Hi-Focus modem cannot be supported due to binary driver distribution problem. - -You can find a driver on http://eciadsl.flashtux.org/"), - end => 1, - }, - - - lan => - { - pre => $lan_detect, - name => N("Select the network interface to configure:"), - data => sub { - [ { label => N("Net Device"), type => "list", val => \$ntf_name, list => [ (sort keys %eth_intf), N_("Manually load a driver"), if_($is_wireless, N_("Use a Windows driver (with ndiswrapper)")) ], - allow_empty_list => 1, format => sub { translate($eth_intf{$_[0]} || $_[0]) } } ]; - }, - post => sub { - if ($ntf_name eq "Manually load a driver") { - require network::ethernet; - modules::interactive::load_category__prompt($in, $modules_conf, list_modules::ethernet_categories()); - return 'lan'; - } elsif ($ntf_name eq "Use a Windows driver (with ndiswrapper)") { - return 'ndiswrapper'; - } - $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name }; - $::isInstall && $netc->{NET_DEVICE} eq $ethntf->{DEVICE} ? 'lan_alrd_cfg' : 'lan_protocol'; - }, - }, - - lan_alrd_cfg => - { - name => N("WARNING: this device has been previously configured to connect to the Internet. -Modifying the fields below will override this configuration. -Do you really want to reconfigure this device?"), - type => "yesorno", - default => "no", - post => sub { - my ($res) = @_; - return $res ? "lan_protocol" : "alrd_end"; - } - }, - - - alrd_end => - { - name => N("Congratulations, the network and Internet configuration is finished. - -"), - end => 1, - }, - - - lan_protocol => - { - pre => sub { - $find_lan_module->(); - my $intf_type = member($module, list_modules::category2modules('network/gigabit')) ? "ethernet_gigabit" : "ethernet"; - defined($ethntf->{METRIC}) or $ethntf->{METRIC} = network::tools::get_default_metric($intf_type); - - $protocol = $l10n_lan_protocols{defined $auto_ip ? ($auto_ip ? 'dhcp' : 'static') : $ethntf->{BOOTPROTO}} || 0; - }, - name => sub { - my $_msg = N("Zeroconf hostname resolution"); - N("Configuring network device %s (driver %s)", $ethntf->{DEVICE}, $module) . "\n\n" . - N("The following protocols can be used to configure an ethernet connection. Please choose the one you want to use"); - }, - data => sub { - [ { val => \$protocol, type => "list", list => [ sort values %l10n_lan_protocols ] } ]; - }, - post => sub { - $auto_ip = $protocol ne $l10n_lan_protocols{static} || 0; - return 'lan_intf'; - }, - }, - - - # FIXME: is_install: no return for each card "last step" because of manual popping - # better construct an hash of { current_netintf => next_step } which next_step = last_card ? next_eth_step : next_card ? - lan_intf => - { - pre => sub { - $onboot = $ethntf->{ONBOOT} ? $ethntf->{ONBOOT} =~ /yes/ : bool2yesno(!member($ethntf->{DEVICE}, - map { $_->{device} } detect_devices::pcmcia_probe())); - $needhostname = $ethntf->{NEEDHOSTNAME} !~ /no/; - $peerdns = $ethntf->{PEERDNS} !~ /no/; - $peeryp = $ethntf->{PEERYP} =~ /yes/; - $peerntpd = $ethntf->{PEERNTPD} =~ /yes/; - # blacklist bogus driver, enable ifplugd support else: - $ethntf->{MII_NOT_SUPPORTED} ||= $is_hotplug_blacklisted->(); - $hotplug = !text2bool($ethntf->{MII_NOT_SUPPORTED}); - $track_network_id = $::isStandalone && $ethntf->{HWADDR} || detect_devices::isLaptop(); - delete $ethntf->{NETWORK}; - delete $ethntf->{BROADCAST}; - delete $ethntf->{TYPE} if $netcnx->{type} ne 'adsl' || !member($adsl_type, qw(manual dhcp)); - $ethntf->{DHCP_CLIENT} ||= (find { -x "$::prefix/sbin/$_" } qw(dhclient dhcpcd pump dhcpxd)); - }, - name => sub { join('', - N("Configuring network device %s (driver %s)", $ethntf->{DEVICE}, $module), - if_(!$auto_ip, "\n\n" . N("Please enter the IP configuration for this machine. -Each item should be entered as an IP address in dotted-decimal -notation (for example, 1.2.3.4).")), - ) }, - data => sub { - [ $auto_ip ? - ( - { text => N("Assign host name from DHCP address"), val => \$needhostname, type => "bool" }, - { label => N("DHCP host name"), val => \$ethntf->{DHCP_HOSTNAME} }, - ) - : - ( - { label => N("IP address"), val => \$ethntf->{IPADDR}, disabled => sub { $auto_ip } }, - { label => N("Netmask"), val => \$ethntf->{NETMASK}, disabled => sub { $auto_ip } }, - ), - { text => N("Track network card id (useful for laptops)"), val => \$track_network_id, type => "bool" }, - if_(!$is_wireless, - { text => N("Network Hotplugging"), val => \$hotplug, type => "bool" }), - if_($netcnx->{type} eq "lan", - { text => N("Start at boot"), val => \$onboot, type => "bool" }, - ), - if_($auto_ip, - { label => N("DHCP client"), val => \$ethntf->{DHCP_CLIENT}, - list => \@network::ethernet::dhcp_clients, advanced => 1 }, - { label => N("DHCP timeout (in seconds)"), val => \$ethntf->{DHCP_TIMEOUT}, advanced => 1 }, - { text => N("Get DNS servers from DHCP"), val => \$peerdns, type => "bool", advanced => 1 }, - { text => N("Get YP servers from DHCP"), val => \$peeryp, type => "bool", advanced => 1 }, - { text => N("Get NTPD servers from DHCP"), val => \$peerntpd, type => "bool", advanced => 1 }, - ), - ]; - }, - complete => sub { - $ethntf->{BOOTPROTO} = $auto_ip ? "dhcp" : "static"; - $netc->{DHCP} = $auto_ip; - return 0 if $auto_ip; - if (!is_ip($ethntf->{IPADDR})) { - $in->ask_warn(N("Error"), N("IP address should be in format 1.2.3.4")); - return 1, 0; - } - if (!is_ip($ethntf->{NETMASK})) { - $in->ask_warn(N("Error"), N("Netmask should be in format 255.255.224.0")); - return 1, 1; - } - if (is_ip_forbidden($ethntf->{IPADDR})) { - $in->ask_warn(N("Error"), N("Warning: IP address %s is usually reserved!", $ethntf->{IPADDR})); - return 1, 0; - } - #- test if IP address is already used (do not test for sagem DSL devices since it may use many ifcfg files) - if ($ntf_name ne "sagem" && find { $_->{DEVICE} ne $ethntf->{DEVICE} && $_->{IPADDR} eq $ethntf->{IPADDR} } values %$intf) { - $in->ask_warn(N("Error"), N("%s already in use\n", $ethntf->{IPADDR})); - return 1, 0; - } - }, - focus_out => sub { - $ethntf->{NETMASK} ||= netmask($ethntf->{IPADDR}) unless $ethntf->{NETMASK}; - }, - post => sub { - $ethntf->{ONBOOT} = bool2yesno($onboot); - $ethntf->{NEEDHOSTNAME} = bool2yesno($needhostname); - $ethntf->{PEERDNS} = bool2yesno($peerdns); - $ethntf->{PEERYP} = bool2yesno($peeryp); - $ethntf->{PEERNTPD} = bool2yesno($peerntpd); - $ethntf->{MII_NOT_SUPPORTED} = bool2yesno(!$hotplug); - $ethntf->{HWADDR} = $track_network_id or delete $ethntf->{HWADDR}; - #- FIXME: special case for sagem where $ethntf->{DEVICE} is the result of a command - #- we can't always use $ntf_name because of some USB DSL modems - $netc->{$_} = $ntf_name eq "sagem" ? "sagem" : $ethntf->{DEVICE} foreach qw(NET_DEVICE NET_INTERFACE); - if ($auto_ip) { - #- delete gateway settings if gateway device is invalid or if reconfiguring the gateway interface to dhcp - $delete_gateway_settings->($ntf_name); - } - return $is_wireless ? "wireless" : "static_hostname"; - }, - }, - - ndiswrapper => - { - data => sub { - [ { label => N("Choose an ndiswrapper driver"), type => "list", val => \$ndiswrapper_driver, - list => [ N("Install a new driver"), N("Use already installed driver (%s)", join(", ", network::tools::ndiswrapper_installed_drivers())) ] } ]; - }, - complete => sub { - if ($in->do_pkgs->ensure_is_installed_if_available('ndiswrapper', '/usr/sbin/ndiswrapper')) { - $in->ask_warn(N("Error"), N("Could not install the %s package!", 'ndiswrapper')); - return 1; - } - if ($ndiswrapper_driver eq N("Install a new driver")) { - if ($ndiswrapper_inf_file = $in->ask_file(N("Please select the Windows driver (.inf file)"), "/mnt/cdrom")) { - return system("ndiswrapper -i $ndiswrapper_inf_file"); - } - return 1; - } - }, - next => 'ndiswrapper_intf', - }, - - ndiswrapper_intf => - { - pre => sub { - undef $ntf_name; - }, - data => sub { - [ { label => N("Net Device"), type => "list", val => \$ntf_name, list => [ sort keys %eth_intf ], - format => sub { translate($eth_intf{$_[0]}) }, allow_empty_list => 1 } ]; - }, - post => sub { - if ($ntf_name) { - #- if another module is loaded for the wireless interface, unload it before using ndiswrapper - my $eth = find { $_->[0] eq $ntf_name } @all_cards; - $ntf_name and modules::unload($eth->[1]); - } - modules::load("ndiswrapper"); - - #- FIXME: move this somewhere in get_eth_cards, so that configure_eth_aliases correctly writes ndiswrapper - #- find the first interface matching an ndiswrapper driver, try ethtool then sysfs - my @available_drivers = network::tools::ndiswrapper_available_drivers(); - $ntf_name = find { - my $drv = c::getNetDriver($_) || readlink("/sys/class/net/$_/driver"); - $drv =~ s!.*/!!; - member($drv, @available_drivers); - } detect_devices::getNet(); - #- fallback on wlan0 - $ntf_name ||= "wlan0"; - - $ethntf = $intf->{$ntf_name} ||= { DEVICE => $ntf_name }; - return 'lan_protocol'; - }, - }, - - wireless => - { - pre => sub { - $ethntf->{wireless_eth} = 1; - $netc->{wireless_eth} = 1; - $ethntf->{WIRELESS_MODE} ||= "Managed"; - $ethntf->{WIRELESS_ESSID} ||= "any"; - }, - name => N("Please enter the wireless parameters for this card:"), - data => sub { - [ - { label => N("Operating Mode"), val => \$ethntf->{WIRELESS_MODE}, - list => [ keys %wireless_mode ] }, - { label => N("Network name (ESSID)"), val => \$ethntf->{WIRELESS_ESSID} }, - { label => N("Network ID"), val => \$ethntf->{WIRELESS_NWID}, advanced => 1 }, - { label => N("Operating frequency"), val => \$ethntf->{WIRELESS_FREQ}, advanced => 1 }, - { label => N("Sensitivity threshold"), val => \$ethntf->{WIRELESS_SENS}, advanced => 1 }, - { label => N("Bitrate (in b/s)"), val => \$ethntf->{WIRELESS_RATE}, advanced => 1 }, - { label => N("Encryption key"), val => \$ethntf->{WIRELESS_ENC_KEY} }, - #- FIXME: ask if the access point is open or restricted - { text => N("Use Wi-Fi Protected Access (WPA)"), val => \$ethntf->{WIRELESS_USE_WPA}, type => "bool" }, - ]; - }, - complete => sub { - if ($ethntf->{WIRELESS_FREQ} && $ethntf->{WIRELESS_FREQ} !~ /[0-9.]*[kGM]/) { - $in->ask_warn(N("Error"), N("Freq should have the suffix k, M or G (for example, \"2.46G\" for 2.46 GHz frequency), or add enough '0' (zeroes).")); - return 1, 6; - } - if ($ethntf->{WIRELESS_RATE} && $ethntf->{WIRELESS_RATE} !~ /[0-9.]*[kGM]/) { - $in->ask_warn(N("Error"), N("Rate should have the suffix k, M or G (for example, \"11M\" for 11M), or add enough '0' (zeroes).")); - return 1, 8; - } - }, - next => "wireless2", - }, - - - wireless2 => - { - name => N("Please enter the wireless parameters for this card:"), - data => sub { - [ - { label => N("RTS/CTS"), val => \$ethntf->{WIRELESS_RTS}, - help => N("RTS/CTS adds a handshake before each packet transmission to make sure that the -channel is clear. This adds overhead, but increase performance in case of hidden -nodes or large number of active nodes. This parameter sets the size of the -smallest packet for which the node sends RTS, a value equal to the maximum -packet size disable the scheme. You may also set this parameter to auto, fixed -or off.") - }, - { label => N("Fragmentation"), val => \$ethntf->{WIRELESS_FRAG} }, - { label => N("Iwconfig command extra arguments"), val => \$ethntf->{WIRELESS_IWCONFIG}, advanced => 1, - help => N("Here, one can configure some extra wireless parameters such as: -ap, channel, commit, enc, power, retry, sens, txpower (nick is already set as the hostname). - -See iwconfig(8) man page for further information."), - }, - { label => - #-PO: split the "xyz command extra argument" translated string into two lines if it's bigger than the english one - N("Iwspy command extra arguments"), val => \$ethntf->{WIRELESS_IWSPY}, advanced => 1, - help => N("Iwspy is used to set a list of addresses in a wireless network -interface and to read back quality of link information for each of those. - -This information is the same as the one available in /proc/net/wireless : -quality of the link, signal strength and noise level. - -See iwpspy(8) man page for further information."), - }, - { label => N("Iwpriv command extra arguments"), val => \$ethntf->{WIRELESS_IWPRIV}, advanced => 1, - help => N("Iwpriv enable to set up optionals (private) parameters of a wireless network -interface. - -Iwpriv deals with parameters and setting specific to each driver (as opposed to -iwconfig which deals with generic ones). - -In theory, the documentation of each device driver should indicate how to use -those interface specific commands and their effect. - -See iwpriv(8) man page for further information."), - } - ]; - }, - post => sub { - # untranslate parameters - $ethntf->{WIRELESS_MODE} = $wireless_mode{$ethntf->{WIRELESS_MODE}}; - $module =~ /^prism2_/ and network::network::wlan_ng_configure($in, $ethntf, $module); - network::network::wpa_supplicant_configure($in, $ethntf); - return "static_hostname"; - }, - }, - - - static_hostname => - { - pre => sub { - if ($ethntf->{IPADDR}) { - $netc->{dnsServer} ||= dns($ethntf->{IPADDR}); - $gateway_ex = gateway($ethntf->{IPADDR}); - # $netc->{GATEWAY} ||= gateway($ethntf->{IPADDR}); - if ($ntf_name eq "sagem") { - my @sagem_ip = split(/\./, $ethntf->{IPADDR}); - $sagem_ip[3] = 254; - $netc->{GATEWAY} = join(".", @sagem_ip); - } - } - }, - name => N("Please enter your host name. -Your host name should be a fully-qualified host name, -such as ``mybox.mylab.myco.com''. -You may also enter the IP address of the gateway if you have one.") . - " " . # better looking text (to be merged into texts since some languages (eg: ja) doesn't need it -N("Last but not least you can also type in your DNS server IP addresses."), - data => sub { - [ { label => $auto_ip ? N("Host name (optional)") : N("Host name"), val => \$netc->{HOSTNAME} }, - if_(!$auto_ip, - { label => N("DNS server 1"), val => \$netc->{dnsServer} }, - { label => N("DNS server 2"), val => \$netc->{dnsServer2} }, - { label => N("DNS server 3"), val => \$netc->{dnsServer3} }, - { label => N("Search domain"), val => \$netc->{DOMAINNAME}, - help => N("By default search domain will be set from the fully-qualified host name") }, - { label => N("Gateway (e.g. %s)", $gateway_ex), val => \$netc->{GATEWAY} }, - if_(@all_cards > 1, - { label => N("Gateway device"), val => \$netc->{GATEWAYDEV}, list => [ N_("None"), sort keys %all_eth_intf ], - format => sub { $all_eth_intf{$_[0]} || translate($_[0]) } }, - ), - ), - ]; - }, - complete => sub { - foreach my $dns (qw(dnsServer dnsServer2 dnsServer3)) { - if ($netc->{$dns} && !is_ip($netc->{$dns})) { - $in->ask_warn(N("Error"), N("DNS server address should be in format 1.2.3.4")); - return 1; - } - } - if ($netc->{GATEWAY} && !is_ip($netc->{GATEWAY})) { - $in->ask_warn(N("Error"), N("Gateway address should be in format 1.2.3.4")); - return 1; - } - }, - post => sub { - $netc->{GATEWAYDEV} eq "None" and delete $netc->{GATEWAYDEV}; - return "zeroconf"; - } - }, - - - zeroconf => - { - name => N("If desired, enter a Zeroconf hostname. -This is the name your machine will use to advertise any of -its shared resources that are not managed by the network. -It is not necessary on most networks."), - data => [ { label => N("Zeroconf Host name"), val => \$netc->{ZEROCONF_HOSTNAME} } ], - complete => sub { - if ($netc->{ZEROCONF_HOSTNAME} =~ /\./) { - $in->ask_warn(N("Error"), N("Zeroconf host name must not contain a .")); - return 1; - } - }, - post => $handle_multiple_cnx, - }, - - - multiple_internet_cnx => - { - name => N("You have configured multiple ways to connect to the Internet.\nChoose the one you want to use.\n\n") . if_(!$::isStandalone, "You may want to configure some profiles after the installation, in the Mandrake Control Center"), - data => sub { - [ { label => N("Internet connection"), val => \$netc->{internet_cnx_choice}, - list => [ keys %{$netc->{internet_cnx}} ] } ]; - }, - post => $save_cnx, - }, - - - apply_settings => - { - name => N("Configuration is complete, do you want to apply settings?"), - type => "yesorno", - }, - - - allow_user_ctl => - { - name => N("Do you want to allow users to start the connection?"), - type => "yesorno", - default => sub { bool2yesno(text2bool($intf->{$netc->{NET_INTERFACE}}{USERCTL})) }, - post => sub { - my ($res) = @_; - $res = bool2yesno($res); - $intf->{$netc->{NET_INTERFACE}}{USERCTL} = $res; - my $ifcfg_file = "$::prefix/etc/sysconfig/network-scripts/ifcfg-$netc->{NET_INTERFACE}"; - -f $ifcfg_file and substInFile { s/^USERCTL.*\n//; $_ .= qq(USERCTL=$res\n) if eof } $ifcfg_file; - return $goto_start_on_boot_ifneeded->(); - }, - }, - - - network_on_boot => - { - pre => sub { - # condition is : - member($netc->{internet_cnx_choice}, ('adsl', 'isdn')); # and $netc->{at_boot} = $in->ask_yesorno(N("Network Configuration Wizard"), N("Do you want to start the connection at boot?")); - }, - name => N("Do you want to start the connection at boot?"), - type => "yesorno", - default => sub { ($type eq 'modem' ? 'no' : 'yes') }, - post => sub { - my ($res) = @_; - $netc->{at_boot} = $res; - $res = bool2yesno($res); - $ethntf->{ONBOOT} = $res if $netcnx->{type} eq 'adsl' && member($adsl_type, qw(manual dhcp)); - my $ifcfg_file = "$::prefix/etc/sysconfig/network-scripts/ifcfg-$netc->{NET_INTERFACE}"; - -f $ifcfg_file and substInFile { s/^ONBOOT.*\n//; $_ .= qq(ONBOOT=$res\n) if eof } $ifcfg_file; - return $after_start_on_boot_step->(); - }, - }, - - - isdn_dial_on_boot => - { - pre => sub { - $intf->{ippp0} ||= { DEVICE => "ippp0" }; # we want the ifcfg-ippp0 file to be written - @isdn_dial_methods = ({ name => N("Automatically at boot"), - ONBOOT => 1, DIAL_ON_IFUP => 1 }, - { name => N("By using Net Applet in the system tray"), - ONBOOT => 0, DIAL_ON_IFUP => 1 }, - { name => N("Manually (the interface would still be activated at boot)"), - ONBOOT => 1, DIAL_ON_IFUP => 0 }); - my $method = find { - $_->{ONBOOT} eq text2bool($intf->{ippp0}{ONBOOT}) && - $_->{DIAL_ON_IFUP} eq text2bool($intf->{ippp0}{DIAL_ON_IFUP}); - } @isdn_dial_methods; - #- use net_applet by default - $isdn->{dial_method} = $method->{name} || $isdn_dial_methods[1]{name}; - }, - name => N("How do you want to dial this connection?"), - data => sub { - [ { type => "list", val => \$isdn->{dial_method}, list => [ map { $_->{name} } @isdn_dial_methods ] } ]; - }, - post => sub { - my $method = find { $_->{name} eq $isdn->{dial_method} } @isdn_dial_methods; - $intf->{ippp0}{$_} = bool2yesno($method->{$_}) foreach qw(ONBOOT DIAL_ON_IFUP); - return $after_start_on_boot_step->(); - }, - }, - - - restart => - { - name => N("The network needs to be restarted. Do you want to restart it?"), - type => "yesorno", - post => sub { - my ($a) = @_; - network::ethernet::write_ether_conf($in, $modules_conf, $netcnx, $netc, $intf) if $netcnx->{type} eq 'lan'; - if ($a && !$::testing && !run_program::rooted($::prefix, "/etc/rc.d/init.d/network restart")) { - $success = 0; - $in->ask_okcancel(N("Network Configuration"), - N("A problem occurred while restarting the network: \n\n%s", `/etc/rc.d/init.d/network restart`), 0); - } - return $offer_to_connect->(); - }, - }, - - - ask_connect_now => - { - name => N("Do you want to try to connect to the Internet now?"), - type => "yesorno", - post => sub { - my ($a) = @_; - my $type = $netc->{internet_cnx_choice}; - $up = 1; - if ($a) { - # local $::isWizard = 0; - my $_w = $in->wait_message('', N("Testing your connection..."), 1); - connect_backend($netc); - my $s = 30; - $type =~ /modem/ and $s = 50; - $type =~ /adsl/ and $s = 35; - $type =~ /isdn/ and $s = 20; - sleep $s; - $up = connected(); - } - $success = $up; - return $a ? "disconnect" : "end"; - } - }, - - - disconnect => - { - name => sub { - $up ? N("The system is now connected to the Internet.") . - if_($::isInstall, N("For security reasons, it will be disconnected now.")) : - N("The system does not seem to be connected to the Internet. -Try to reconfigure your connection."); - }, - no_back => 1, - end => 1, - post => sub { - $::isInstall and disconnect_backend($netc); - return "end"; - }, - }, - - - end => - { - name => sub { - return $success ? join('', N("Congratulations, the network and Internet configuration is finished. - -"), if_($::isStandalone && $in->isa('interactive::gtk'), - N("After this is done, we recommend that you restart your X environment to avoid any hostname-related problems."))) : - N("Problems occurred during configuration. -Test your connection via net_monitor or mcc. If your connection does not work, you might want to relaunch the configuration."); - }, - end => 1, - }, - }, - }; - - my $use_wizard = 1; - if ($::isInstall) { - if ($first_time && $in->{method} =~ /^(ftp|http|nfs)$/) { - local $::isWizard; - !$::expert && !$o_noauto || $in->ask_okcancel(N("Network Configuration"), - N("Because you are doing a network installation, your network is already configured. -Click on Ok to keep your configuration, or cancel to reconfigure your Internet & Network connection. -"), 1) - and do { - $netcnx->{type} = 'lan'; - $netc->{$_} = 'eth0' foreach qw(NET_DEVICE NET_INTERFACE); - $use_wizard = 0; - }; - } - } - - if ($use_wizard) { - require wizards; - $wiz->{var} = { - netc => $netc, - mouse => $mouse, - intf => $intf, - }; - wizards->new->process($wiz, $in); - } - - # install needed packages: - $network_configured or network::network::configureNetwork2($in, $modules_conf, $::prefix, $netc, $intf); - - $netcnx->{$_} = $netc->{$_} foreach qw(NET_DEVICE NET_INTERFACE); - $netcnx->{type} =~ /adsl/ or run_program::rooted($::prefix, "/chkconfig --del adsl 2> /dev/null"); -} - -sub main { - my ($netcnx, $in, $modules_conf, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) = @_; - eval { real_main($netcnx, $in, $modules_conf, $o_netc, $o_mouse, $o_intf, $o_first_time, $o_noauto) }; - my $err = $@; - if ($err) { # && $in->isa('interactive::gtk') - $err =~ /wizcancel/ and $in->exit(0); - - local $::isEmbedded = 0; # to prevent sub window embedding - local $::isWizard = 0 if !$::isInstall; # to prevent sub window embedding - #err_dialog(N("Error"), N("An unexpected error has happened:\n%s", $err)); - $in->ask_warn(N("Error"), N("An unexpected error has happened:\n%s", $err)); - } -} - -sub set_profile { - my ($netcnx) = @_; - system('/sbin/set-netprofile', $netcnx->{PROFILE}); - log::explanations(qq(Switching to "$netcnx->{PROFILE}" profile)); -} - -sub save_profile { - my ($netcnx) = @_; - system('/sbin/save-netprofile', $netcnx->{PROFILE}); - log::explanations(qq(Saving "$netcnx->{PROFILE}" profile)); -} - -sub del_profile { - my ($profile) = @_; - return if !$profile || $profile eq "default"; - rm_rf("$::prefix/etc/netprofile/profiles/$profile"); - log::explanations(qq(Deleting "$profile" profile)); -} - -sub add_profile { - my ($netcnx, $profile) = @_; - return if !$profile || $profile eq "default" || member($profile, get_profiles()); - system('/sbin/clone-netprofile', $netcnx->{PROFILE}, $profile); - log::explanations(qq("Creating "$profile" profile)); -} - -sub get_profiles() { - map { if_(m!([^/]*)/$!, $1) } glob("$::prefix/etc/netprofile/profiles/*/"); -} - -sub read_net_conf { - my ($netcnx, $netc, $intf) = @_; - my $current = { getVarsFromSh("$::prefix/etc/netprofile/current") }; - - $netcnx->{PROFILE} = $current->{PROFILE} || 'default'; - network::network::read_all_conf($::prefix, $netc, $intf, $netcnx); - - foreach ('NET_DEVICE', 'NET_INTERFACE') { - $netc->{$_} = $netcnx->{$_} if $netcnx->{$_}; - } - $netcnx->{$netcnx->{type}} ||= {} if $netcnx->{type}; -} - -sub start_internet { - my ($o) = @_; - init_globals($o); - #- give a chance for module to be loaded using kernel-BOOT modules... - $::isStandalone or modules::load_category($o->{modules_conf}, 'network/*'); - connect_backend($o->{netc}); -} - -sub stop_internet { - my ($o) = @_; - init_globals($o); - disconnect_backend($o->{netc}); -} - -1; - -=head1 network::netconnect::detect() - -=head2 example of usage - -use lib qw(/usr/lib/libDrakX); -use network::netconnect; -use Data::Dumper; - -use class_discard; - -local $in = class_discard->new; - -network::netconnect::init_globals($in); -my %i; -network::netconnect::detect($modules_conf, \%i); -print Dumper(\%i),"\n"; - -=cut diff --git a/perl-install/network/network.pm b/perl-install/network/network.pm deleted file mode 100644 index 8d79c106d..000000000 --- a/perl-install/network/network.pm +++ /dev/null @@ -1,684 +0,0 @@ -package network::network; # $Id$wir - -#-###################################################################################### -#- misc imports -#-###################################################################################### - -use strict; - -use Socket; -use common; -use detect_devices; -use run_program; -use network::tools; -use any; -use vars qw(@ISA @EXPORT); -use log; - -@ISA = qw(Exporter); -@EXPORT = qw(add2hosts addDefaultRoute configureNetwork2 dns dnsServers findIntf gateway guessHostname is_ip is_ip_forbidden masked_ip netmask read_all_conf read_conf read_interface_conf read_resolv_conf resolv sethostname write_conf write_resolv_conf); - -#-###################################################################################### -#- Functions -#-###################################################################################### -sub read_conf { - my ($file) = @_; - +{ getVarsFromSh($file) }; -} - -sub read_resolv_conf_raw { - my ($o_file) = @_; - my $s = cat_($o_file || "$::prefix/etc/resolv.conf"); - { nameserver => [ $s =~ /^\s*nameserver\s+(\S+)/mg ], - search => [ if_($s =~ /^\s*search\s+(.*)/m, split(' ', $1)) ] }; -} - -sub read_resolv_conf { - my ($o_file) = @_; - my $resolv_conf = read_resolv_conf_raw($o_file); - +{ - (mapn { $_[0] => $_[1] } [ qw(dnsServer dnsServer2 dnsServer3) ], $resolv_conf->{nameserver}), - (mapn { $_[0] => $_[1] } [ qw(DOMAINNAME DOMAINNAME2 DOMAINNAME3) ], $resolv_conf->{search}), - }; -} - -sub read_interface_conf { - my ($file) = @_; - my %intf = getVarsFromSh($file); - - $intf{BOOTPROTO} ||= 'static'; - $intf{isPtp} = $intf{NETWORK} eq '255.255.255.255'; - $intf{isUp} = 1; - \%intf; -} - -sub read_dhcpd_conf { - my ($o_file) = @_; - my $s = cat_($o_file || "$::prefix/etc/dhcpd.conf"); - { option_routers => [ $s =~ /^\s*option routers\s+(\S+);/mg ], - subnet_mask => [ if_($s =~ /^\s*option subnet-mask\s+(.*);/mg, split(' ', $1)) ], - domain_name => [ if_($s =~ /^\s*option domain-name\s+"(.*)";/mg, split(' ', $1)) ], - domain_name_servers => [ if_($s =~ /^\s*option domain-name-servers\s+(.*);/m, split(' ', $1)) ], - dynamic_bootp => [ if_($s =~ /^\s*range dynamic-bootp\s+\S+\.(\d+)\s+\S+\.(\d+)\s*;/m, split(' ', $1)) ], - default_lease_time => [ if_($s =~ /^\s*default-lease-time\s+(.*);/m, split(' ', $1)) ], - max_lease_time => [ if_($s =~ /^\s*max-lease-time\s+(.*);/m, split(' ', $1)) ] }; -} - -sub read_squid_conf { - my ($o_file) = @_; - my $s = cat_($o_file || "$::prefix/etc/squid/squid.conf"); - { http_port => [ $s =~ /^\s*http_port\s+(.*)/mg ], - cache_size => [ if_($s =~ /^\s*cache_dir diskd\s+(.*)/mg, split(' ', $1)) ], - admin_mail => [ if_($s =~ /^\s*err_html_text\s+(.*)/mg, split(' ', $1)) ] }; -} - -sub read_tmdns_conf() { - my $file = "$::prefix/etc/tmdns.conf"; - cat_($file) =~ /^\s*hostname\s*=\s*(\w+)/m && { ZEROCONF_HOSTNAME => $1 }; -} - -sub write_conf { - my ($netc) = @_; - my $file = "$::prefix/etc/sysconfig/network"; - - if ($netc->{HOSTNAME} && $netc->{HOSTNAME} =~ /\.(.+)$/) { - $netc->{DOMAINNAME} = $1; - } - $netc->{NETWORKING} = 'yes'; - - setVarsInSh($file, $netc, qw(HOSTNAME NETWORKING GATEWAY GATEWAYDEV NISDOMAIN)); -} - -sub write_zeroconf { - my ($file, $zhostname) = @_; - eval { substInFile { s/^\s*(hostname)\s*=.*/$1 = $zhostname/ } $file }; -} - -sub write_resolv_conf { - my ($file, $netc) = @_; - - my %new = ( - search => [ grep { $_ } uniq(@$netc{'DOMAINNAME', 'DOMAINNAME2', 'DOMAINNAME3'}) ], - nameserver => [ grep { $_ } uniq(@$netc{'dnsServer', 'dnsServer2', 'dnsServer3'}) ], - ); - - my (%prev, @unknown); - foreach (cat_($file)) { - s/\s+$//; - s/^[#\s]*//; - - if (my ($key, $val) = /^(search|nameserver)\s+(.*)$/) { - push @{$prev{$key}}, $val; - } elsif (/^ppp temp entry$/) { - } elsif (/\S/) { - push @unknown, $_; - } - } - unlink $file if -l $file; #- workaround situation when /etc/resolv.conf is an absolute link to /etc/ppp/resolv.conf or whatever - - if (@{$new{search}} || @{$new{nameserver}}) { - $prev{$_} = [ difference2($prev{$_} || [], $new{$_}) ] foreach keys %new; - - my @search = do { - my @new = if_(@{$new{search}}, "search " . join(' ', @{$new{search}}) . "\n"); - my @old = if_(@{$prev{search}}, "# search " . join(' ', @{$prev{search}}) . "\n"); - @new, @old; - }; - my @nameserver = do { - my @new = map { "nameserver $_\n" } @{$new{nameserver}}; - my @old = map { "# nameserver $_\n" } @{$prev{nameserver}}; - @new, @old; - }; - output_with_perm($file, 0644, @search, @nameserver, (map { "# $_\n" } @unknown), "\n# ppp temp entry\n"); - - #-res_init(); # reinit the resolver so DNS changes take affect - 1; - } else { - log::explanations("neither domain name nor dns server are configured"); - 0; - } -} - -sub write_interface_conf { - my ($file, $intf, $_netc, $_prefix) = @_; - - require network::ethernet; - my (undef, $mac_address) = network::ethernet::get_eth_card_mac_address($intf->{DEVICE}); - $intf->{HWADDR} &&= $mac_address; #- set HWADDR to MAC address if required - - my @ip = split '\.', $intf->{IPADDR}; - my @mask = split '\.', $intf->{NETMASK}; - - add2hash($intf, { - BROADCAST => join('.', mapn { int($_[0]) | ((~int($_[1])) & 255) } \@ip, \@mask), - NETWORK => join('.', mapn { int($_[0]) & $_[1] } \@ip, \@mask), - ONBOOT => bool2yesno(!member($intf->{DEVICE}, map { $_->{device} } detect_devices::pcmcia_probe())), - }); - - defined($intf->{METRIC}) or $intf->{METRIC} = network::tools::get_default_metric(network::tools::get_interface_type($intf)), - $intf->{BOOTPROTO} =~ s/dhcp.*/dhcp/; - - if (local $intf->{WIRELESS_ENC_KEY} = $intf->{WIRELESS_ENC_KEY}) { - network::tools::convert_wep_key_for_iwconfig($intf->{WIRELESS_ENC_KEY}); - } - - setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT HWADDR METRIC MII_NOT_SUPPORTED TYPE USERCTL ATM_ADDR), - qw(WIRELESS_MODE WIRELESS_ESSID WIRELESS_NWID WIRELESS_FREQ WIRELESS_SENS WIRELESS_RATE WIRELESS_ENC_KEY WIRELESS_RTS WIRELESS_FRAG WIRELESS_IWCONFIG WIRELESS_IWSPY WIRELESS_IWPRIV), - if_($intf->{BOOTPROTO} eq "dhcp", qw(DHCP_CLIENT DHCP_HOSTNAME NEEDHOSTNAME PEERDNS PEERYP PEERNTPD DHCP_TIMEOUT)), - if_($intf->{DEVICE} =~ /^ippp\d+$/, qw(DIAL_ON_IFUP)) - ); - substInFile { s/^DEVICE='(`.*`)'/DEVICE=$1/g } $file; #- remove quotes if DEVICE is the result of a command - - chmod $intf->{WIRELESS_ENC_KEY} ? 0700 : 0755, $file; #- hide WEP key for non-root users - log::explanations("written $intf->{DEVICE} interface configuration in $file"); -} - -sub add2hosts { - my ($file, $hostname, @ips) = @_; - my ($sub_hostname) = $hostname =~ /(.*?)\./; - - my %l; - foreach (cat_($file)) { - my ($ip, $aliases) = /^\s*(\S+)\s+(\S+.*)$/ or next; - push @{$l{$ip}}, difference2([ split /\s+/, $aliases ], [ $hostname, $sub_hostname ]); - } cat_($file); - - push @{$l{$_}}, $hostname, if_($sub_hostname, $sub_hostname) foreach grep { $_ } @ips; - - log::explanations("writing host information to $file"); - output($file, map { "$_\t\t" . join(" ", @{$l{$_}}) . "\n" } keys %l); -} - -# The interface/gateway needs to be configured before this will work! -sub guessHostname { - my ($_prefix, $netc, $intf) = @_; - - $intf->{isUp} && dnsServers($netc) or return 0; - $netc->{HOSTNAME} && $netc->{DOMAINNAME} and return 1; - - write_resolv_conf("$::prefix/etc/resolv.conf", $netc); - - my $name = gethostbyaddr(Socket::inet_aton($intf->{IPADDR}), Socket::AF_INET()) or log::explanations("reverse name lookup failed"), return 0; - - log::explanations("reverse name lookup worked"); - - add2hash($netc, { HOSTNAME => $name }); - 1; -} - -sub addDefaultRoute { - my ($netc) = @_; - c::addDefaultRoute($netc->{GATEWAY}) if $netc->{GATEWAY}; -} - -sub sethostname { - my ($netc) = @_; - my $text; - syscall_("sethostname", $netc->{HOSTNAME}, length $netc->{HOSTNAME}) ? ($text="set sethostname to $netc->{HOSTNAME}") : ($text="sethostname failed: $!"); - log::explanations($text); - - if (!$::isInstall) { - run_program::run("/usr/bin/run-parts", "--arg", $netc->{HOSTNAME}, "/etc/sysconfig/network-scripts/hostname.d"); - } -} - -sub resolv($) { - my ($name) = @_; - is_ip($name) and return $name; - my $a = join(".", unpack "C4", (gethostbyname $name)[4]); - #-log::explanations("resolved $name in $a"); - $a; -} - -sub dnsServers { - my ($netc) = @_; - my %used_dns; @used_dns{$netc->{dnsServer}, $netc->{dnsServer2}, $netc->{dnsServer3}} = (1, 2, 3); - sort { $used_dns{$a} <=> $used_dns{$b} } grep { $_ } keys %used_dns; -} - -sub findIntf { - my ($intf, $device) = @_; - $intf->{$device}{DEVICE} = undef; - $intf->{$device}; -} - -my $ip_regexp = qr/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; - -sub is_ip { - my ($ip) = @_; - my @fields = $ip =~ $ip_regexp or return; - every { 0 <= $_ && $_ <= 255 } @fields or return; - @fields; -} - -sub ip_compare { - my ($ip1, $ip2) = @_; - my (@ip1_fields) = $ip1 =~ $ip_regexp; - my (@ip2_fields) = $ip2 =~ $ip_regexp; - - every { $ip1_fields[$_] eq $ip2_fields[$_] } (0 .. 3); -} - -sub is_ip_forbidden { - my ($ip) = @_; - my @forbidden = ('127.0.0.1', '255.255.255.255'); - - any { ip_compare($ip, $_) } @forbidden; -} - -sub is_domain_name { - my ($name) = @_; - my @fields = split /\./, $name; - $name !~ /\.$/ && @fields > 0 && @fields == grep { /^[[:alnum:]](?:[\-[:alnum:]]{0,61}[[:alnum:]])?$/ } @fields; -} - -sub netmask { - my ($ip) = @_; - return "255.255.255.0" unless is_ip($ip); - $ip =~ $ip_regexp or warn "IP_regexp failed\n" and return "255.255.255.0"; - if ($1 >= 1 && $1 < 127) { - "255.0.0.0"; #-1.0.0.0 to 127.0.0.0 - } elsif ($1 >= 128 && $1 <= 191) { - "255.255.0.0"; #-128.0.0.0 to 191.255.0.0 - } elsif ($1 >= 192 && $1 <= 223) { - "255.255.255.0"; - } else { - "255.255.255.255"; #-experimental classes - } -} - -sub masked_ip { - my ($ip) = @_; - my @ip = is_ip($ip) or return ''; - my @mask = netmask($ip) =~ $ip_regexp; - for (my $i = 0; $i < @ip; $i++) { - $ip[$i] &= int $mask[$i]; - } - join(".", @ip); -} - -sub dns { - my ($ip) = @_; - my @masked = masked_ip($ip) =~ $ip_regexp; - $masked[3] = 2; - join(".", @masked); - -} - -sub gateway { - my ($ip) = @_; - my @masked = masked_ip($ip) =~ $ip_regexp; - $masked[3] = 1; - join(".", @masked); -} - -sub miscellaneous_choose { - my ($in, $u) = @_; - - $in->ask_from('', - N("Proxies configuration"), - [ { label => N("HTTP proxy"), val => \$u->{http_proxy} }, - { label => N("FTP proxy"), val => \$u->{ftp_proxy} }, - ], - complete => sub { - $u->{http_proxy} =~ m,^($|http://), or $in->ask_warn('', N("Proxy should be http://...")), return 1,0; - $u->{ftp_proxy} =~ m,^($|ftp://|http://), or $in->ask_warn('', N("URL should begin with 'ftp:' or 'http:'")), return 1,1; - 0; - } - ) or return; - 1; -} - -sub proxy_configure { - my ($u) = @_; - setExportedVarsInSh("$::prefix/etc/profile.d/proxy.sh", $u, qw(http_proxy ftp_proxy)); - chmod 0755, "$::prefix/etc/profile.d/proxy.sh"; - setExportedVarsInCsh("$::prefix/etc/profile.d/proxy.csh", $u, qw(http_proxy ftp_proxy)); - chmod 0755, "$::prefix/etc/profile.d/proxy.csh"; - - #- KDE proxy settings - my $kde_config_dir = "$::prefix/usr/share/config"; - my $kde_config_file = "$kde_config_dir/kioslaverc"; - if (-d $kde_config_dir) { - update_gnomekderc($kde_config_file, - undef, - PersistentProxyConnection => "false" - ); - update_gnomekderc($kde_config_file, - "Proxy Settings", - AuthMode => 0, - ProxyType => $u->{http_proxy} || $u->{ftp_proxy} ? 4 : 0, - ftpProxy => "ftp_proxy", - httpProxy => "http_proxy", - httpsProxy => "http_proxy" - ); - } - - #- Gnome proxy settings - if (-d "$::prefix/etc/gconf/2/") { - my $defaults_dir = "/etc/gconf/gconf.xml.local-defaults"; - my $p_defaults_dir = "$::prefix$defaults_dir"; - my $p_defaults_path = "$::prefix/etc/gconf/2/local-defaults.path"; - -r $p_defaults_path or output_with_perm($p_defaults_path, 0755, qq( -# System local settings -xml:readonly:$defaults_dir -)); - -d $p_defaults_dir or mkdir $p_defaults_dir, 0755; - - my $use_alternate_proxy; - my $gconf_set = sub { - my ($key, $type, $value) = @_; - #- gconftool-2 is available since /etc/gconf/2/ exists - system("gconftool-2", "--config-source=xml::$p_defaults_dir", "--direct", "--set", "--type=$type", $key, $value); - }; - - #- http proxy - if (my ($user, $password, $host, $port) = $u->{http_proxy} =~ m,^http://(?:([^:\@]+)(?::([^:\@]+))?\@)?([^\:]+)(?::(\d+))?$,) { - $port ||= 80; - $gconf_set->("/system/http_proxy/use_http_proxy", "bool", 1); - $gconf_set->("/system/http_proxy/host", "string", $host); - $gconf_set->("/system/http_proxy/port", "int", $port); - $gconf_set->("/system/http_proxy/use_authentication", "bool", to_bool($user)); - $user and $gconf_set->("/system/http_proxy/authentication_user", "string", $user); - $password and $gconf_set->("/system/http_proxy/authentication_password", "string", $password); - - #- https proxy (ssl) - $gconf_set->("/system/proxy/secure_host", "string", $host); - $gconf_set->("/system/proxy/secure_port", "int", $port); - $use_alternate_proxy = 1; - } else { - $gconf_set->("/system/http_proxy/use_http_proxy", "bool", 0); - #- clear the ssl host so that it isn't used if the manual proxy is activated for ftp - $gconf_set->("/system/proxy/secure_host", "string", ""); - } - - #- ftp proxy - if (my ($host, $port) = $u->{ftp_proxy} =~ m,^(?:http|ftp)://(?:[^:\@]+(?::[^:\@]+)?\@)?([^\:]+)(?::(\d+))?$,) { - $port ||= 21; - $gconf_set->("/system/proxy/mode", "string", "manual"); - $gconf_set->("/system/proxy/ftp_host", "string", $host); - $gconf_set->("/system/proxy/ftp_port", "int", $port); - $use_alternate_proxy = 1; - } else { - #- clear the ftp host so that it isn't used if the manual proxy is activated for ssl - $gconf_set->("/system/proxy/ftp_host", "string", ""); - } - - #- set proxy mode to manual if either https or ftp is used - $gconf_set->("/system/proxy/mode", "string", $use_alternate_proxy ? "manual" : "none"); - - #- make gconf daemons reload their settings - system("killall -s HUP gconfd-2"); - } -} - -sub read_all_conf { - my ($_prefix, $netc, $intf, $o_netcnx) = @_; - $netc ||= {}; $intf ||= {}; - my $netcnx = $o_netcnx || {}; - add2hash($netc, read_conf("$::prefix/etc/sysconfig/network")) if -r "$::prefix/etc/sysconfig/network"; - add2hash($netc, read_resolv_conf()); - add2hash($netc, read_tmdns_conf()); - foreach (all("$::prefix/etc/sysconfig/network-scripts")) { - my ($device) = /^ifcfg-([A-Za-z0-9.:]+)$/; - next if $device =~ /.rpmnew$|.rpmsave$/; - if ($device && $device ne 'lo') { - my $intf = findIntf($intf, $device); - add2hash($intf, { getVarsFromSh("$::prefix/etc/sysconfig/network-scripts/$_") }); - $intf->{DEVICE} ||= $device; - $intf->{WIRELESS_ENC_KEY} = network::tools::get_wep_key_from_iwconfig($intf->{WIRELESS_ENC_KEY}); - } - } - if (my $default_intf = network::tools::get_default_gateway_interface($netc, $intf)) { - $netcnx->{type} ||= network::tools::get_interface_type($intf->{$default_intf}); - } -} - -#- FIXME: this is buggy, use network::tools::get_default_gateway_interface -sub probe_netcnx_type { - my ($_prefix, $_netc, $intf, $netcnx) = @_; - #- try to probe $netcnx->{type} which is used almost everywhere. - unless ($netcnx->{type}) { - #- ugly hack to determine network type (avoid saying not configured in summary). - -e "$::prefix/etc/ppp/peers/adsl" and $netcnx->{type} ||= 'adsl'; # enough ? - -e "$::prefix/etc/ppp/ioptions1B" || -e "$::prefix/etc/ppp/ioptions2B" and $netcnx->{type} ||= 'isdn'; # enough ? - $intf->{ppp0} and $netcnx->{type} ||= 'modem'; - $intf->{eth0} and $netcnx->{type} ||= 'lan'; - } -} - -sub easy_dhcp { - my ($modules_conf, $netc, $intf) = @_; - - return if text2bool($netc->{NETWORKING}); - - require modules; - require network::ethernet; - modules::load_category($modules_conf, list_modules::ethernet_categories()); - my @all_dev = sort map { $_->[0] } network::ethernet::get_eth_cards($modules_conf); - - #- only for a single ethernet network card - my @ether_dev = grep { /^eth[0-9]+$/ && `LC_ALL= LANG= $::prefix/sbin/ip -o link show $_ 2>/dev/null` =~ m|\slink/ether\s| } @all_dev; - @ether_dev == 1 or return; - - my $dhcp_intf = $ether_dev[0]; - log::explanations("easy_dhcp: found $dhcp_intf"); - - put_in_hash($netc, { - NETWORKING => "yes", - DHCP => "yes", - NET_DEVICE => $dhcp_intf, - NET_INTERFACE => $dhcp_intf, - }); - $intf->{$dhcp_intf} ||= {}; - put_in_hash($intf->{$dhcp_intf}, { - DEVICE => $dhcp_intf, - BOOTPROTO => 'dhcp', - NETMASK => '255.255.255.0', - ONBOOT => 'yes' - }); - 1; -} - -#- FIXME: to be improved (quotes, comments) and moved in common files -sub wlan_ng_update_vars { - my ($file, $vars) = @_; - substInFile { - while (my ($key, $value) = each(%$vars)) { - s/^#?\Q$key\E=(?:"[^#]*"|[^#\s]*)(\s*#.*)?/$key=$value$1/ and delete $vars->{$key}; - } - $_ .= join('', map { "$_=$vars->{$_}\n" } keys %$vars) if eof; - } $file; -} - -sub wlan_ng_configure { - my ($in, $ethntf, $module) = @_; - $in->do_pkgs->install('prism2-utils'); - if ($ethntf->{WIRELESS_ESSID}) { - my $wlan_conf_file = "$::prefix/etc/wlan/wlan.conf"; - my @wlan_devices = split(/ /, (cat_($wlan_conf_file) =~ /^WLAN_DEVICES="(.*)"/m)[0]); - push @wlan_devices, $ethntf->{DEVICE} unless member($ethntf->{DEVICE}, @wlan_devices); - #- enable device and make it use the choosen ESSID - wlan_ng_update_vars($wlan_conf_file, - { - WLAN_DEVICES => qq("@wlan_devices"), - "SSID_$ethntf->{DEVICE}" => qq("$ethntf->{WIRELESS_ESSID}"), - "ENABLE_$ethntf->{DEVICE}" => "y" - }); - my $wlan_ssid_file = "$::prefix/etc/wlan/wlancfg-$ethntf->{WIRELESS_ESSID}"; - #- copy default settings for this ESSID if config file does not exist - -f $wlan_ssid_file or cp_f("$::prefix/etc/wlan/wlancfg-DEFAULT", $wlan_ssid_file); - #- enable/disable encryption - wlan_ng_update_vars($wlan_ssid_file, - { - (map { $_ => $ethntf->{WIRELESS_ENC_KEY} ? "true" : "false" } qw(lnxreq_hostWEPEncrypt lnxreq_hostWEPDecrypt dot11PrivacyInvoked dot11ExcludeUnencrypted)), - AuthType => $ethntf->{WIRELESS_ENC_KEY} ? qq("sharedkey") : qq("opensystem"), - if_($ethntf->{WIRELESS_ENC_KEY}, - dot11WEPDefaultKeyID => 0, - dot11WEPDefaultKey0 => qq("$ethntf->{WIRELESS_ENC_KEY}") - ) - }); - #- hide settings for non-root users - chmod 0600, $wlan_conf_file; - chmod 0600, $wlan_ssid_file; - } - #- apply settings on wlan interface - require services; - services::restart($module eq 'prism2_cs' ? 'pcmcia' : 'wlan'); -} - -sub wpa_supplicant_configure { - my ($in, $ethntf) = @_; - require services; - if (delete $ethntf->{WIRELESS_USE_WPA}) { - $in->do_pkgs->install('wpa_supplicant'); - wpa_supplicant_add_network({ - ssid => qq("$ethntf->{WIRELESS_ESSID}"), - psk => network::tools::convert_key_for_wpa_supplicant($ethntf->{WIRELESS_ENC_KEY}), - scan_ssid => 1, - }); - services::start_service_on_boot('wpa_supplicant'); - services::restart('wpa_supplicant'); - } else { - services::stop('wpa_supplicant'); - services::do_not_start_service_on_boot('wpa_supplicant'); - } -} - -sub wpa_supplicant_add_network { - my ($new_network) = @_; - my $wpa_supplicant_conf = "$::prefix/etc/wpa_supplicant.conf"; - my $s; - my %network; - foreach (cat_($wpa_supplicant_conf)) { - if (%network) { - #- in a "network = {}" block - if (/^\s*(\w+)=(.*?)(\s*#.*)?$/) { - push @{$network{entries}}, { key => $1, value => $2, comment => $3 }; - $1 eq 'ssid' and $network{ssid} = $2; - } elsif (/^·*\}/) { - #- end of network block, write it - $s .= "network={$network{comment}\n"; - my $update = $network{ssid} eq $new_network->{ssid}; - foreach (@{$network{entries}}) { - my $key = $_->{key}; - if ($update) { - #- do not write entry if not provided in the new network - exists $new_network->{$key} or next; - #- update value from the new network - $_->{value} = delete $new_network->{$key}; - } - if ($key) { - $s .= " $key=$_->{value}$_->{comment}\n"; - } else { - $s .= " $_->{comment}\n"; - } - } - if ($update) { - while (my ($key, $value) = each(%$new_network)) { - $s .= " $key=$value\n"; - } - } - $s .= "}\n"; - undef %network; - $update and undef $new_network; - } else { - #- unrecognized, keep it anyway - push @{$network{entries}}, { comment => $_ }; - } - } else { - if (/^\s*network={(.*)/) { - #- beginning of a new network block - $network{comment} = $1; - } else { - #- keep other options, comments - $s .= $_; - } - } - } - if ($new_network) { - #- network wasn't found, write it - $s .= "\nnetwork={\n"; - #- write ssid first - if (my $ssid = delete $new_network->{ssid}) { - $s .= " ssid=$ssid\n"; - } - while (my ($key, $value) = each(%$new_network)) { - $s .= " $key=$value\n"; - } - $s .= "}\n"; - } - output($wpa_supplicant_conf, $s); - #- hide keys for non-root users - chmod 0600, $wpa_supplicant_conf; -} - -#- configureNetwork2 : configure the network interfaces. -#- input -#- $prefix -#- $netc -#- $intf -#- $netc input -#- NETWORKING : networking flag : string : "yes" by default -#- FORWARD_IPV4 : forward IP flag : string : "false" by default -#- HOSTNAME : hostname : string : "localhost.localdomain" by default -#- DOMAINNAME : domainname : string : $netc->{HOSTNAME} =~ /\.(.*)/ by default -#- DOMAINNAME2 : well it's another domainname : have to look further why we used 2 -#- The following are facultatives -#- DHCP_HOSTNAME : If you have a dhcp and want to set the hostname -#- GATEWAY : gateway -#- GATEWAYDEV : gateway interface -#- NISDOMAIN : nis domain -#- $netc->{dnsServer} : dns server 1 -#- $netc->{dnsServer2} : dns server 2 -#- $netc->{dnsServer3} : dns server 3 : note that we uses the dns1 for the LAN, and the 2 others for the internet conx -#- $intf input: for each $device (for example ethx) -#- $intf->{$device}{IPADDR} : IP address -#- $intf->{$device}{NETMASK} : netmask -#- $intf->{$device}{DEVICE} : DEVICE = $device -#- $intf->{$device}{BOOTPROTO} : boot prototype : "bootp" or "dhcp" or "pump" or ... -sub configureNetwork2 { - my ($in, $modules_conf, $_prefix, $netc, $intf) = @_; - my $etc = "$::prefix/etc"; - if (!$::testing) { - require network::ethernet; - network::ethernet::update_iftab(); - network::ethernet::configure_eth_aliases($modules_conf); - - $netc->{wireless_eth} and $in->do_pkgs->ensure_binary_is_installed('wireless-tools', 'iwconfig', 'auto'); - write_conf($netc); - write_resolv_conf("$etc/resolv.conf", $netc) unless $netc->{DHCP}; - if ($::isInstall && ! -e "/etc/resolv.conf") { - #- symlink resolv.conf in install root too so that updates and suppl media can be added - symlink "$etc/resolv.conf", "/etc/resolv.conf"; - } - foreach (grep { !/^ppp\d+/ } keys %$intf) { - unlink("$etc/sysconfig/network-scripts/$_"); - write_interface_conf("$etc/sysconfig/network-scripts/ifcfg-$_", $intf->{$_}, $netc, $::prefix); - $intf->{$_}{BOOTPROTO} eq "dhcp" and network::ethernet::install_dhcp_client($in, $intf->{$_}); - } - add2hosts("$etc/hosts", $netc->{HOSTNAME}, "127.0.0.1") if $netc->{HOSTNAME}; - add2hosts("$etc/hosts", "localhost", "127.0.0.1"); - - if ($netc->{ZEROCONF_HOSTNAME}) { - $in->do_pkgs->ensure_binary_is_installed('tmdns', 'tmdns', 'auto') if !$in->do_pkgs->is_installed('bind'); - $in->do_pkgs->ensure_binary_is_installed('zcip', 'zcip', 'auto'); - write_zeroconf("$etc/tmdns.conf", $netc->{ZEROCONF_HOSTNAME}); - require services; - services::start_service_on_boot("tmdns"); - services::restart("tmdns"); - } else { - #- disable zeroconf - require services; - #- write blank hostname so that drakconnect does not assume zeroconf is enabled - -f "$etc/tmdns.conf" and write_zeroconf("$etc/tmdns.conf", ''); - if (-f "$etc/rc.d/init.d/tmdns") { - services::stop("tmdns"); - services::do_not_start_service_on_boot("tmdns"); - } - } - any { $_->{BOOTPROTO} =~ /^(pump|bootp)$/ } values %$intf and $in->do_pkgs->install('pump'); - } -} - -1; diff --git a/perl-install/network/nfs.pm b/perl-install/network/nfs.pm deleted file mode 100644 index 37dd954e5..000000000 --- a/perl-install/network/nfs.pm +++ /dev/null @@ -1,69 +0,0 @@ -package network::nfs; # $Id$ - -use strict; -use diagnostics; - -use common; -use network::network; -use network::smbnfs; -use log; - -our @ISA = 'network::smbnfs'; - -sub to_fstab_entry { - my ($class, $e) = @_; - $class->to_fstab_entry_raw($e, 'nfs'); -} -sub comment_to_string { - my ($_class, $comment) = @_; - member($comment, qw(* 0.0.0.0/0.0.0.0 (everyone))) ? '' : $comment; -} -sub from_dev { - my ($_class, $dev) = @_; - $dev =~ m|(.*?):(.*)|; -} -sub to_dev_raw { - my ($_class, $server, $name) = @_; - $server . ':' . $name; -} - -sub check { - my ($_class, $in) = @_; - $in->do_pkgs->ensure_binary_is_installed('nfs-utils-clients', 'showmount') or return; - system('/etc/init.d/portmap start') if system('/etc/init.d/portmap status') != 0; - 1; -} - -sub find_servers { - open(my $F2, "rpcinfo-flushed -b mountd 2 |"); - open(my $F3, "rpcinfo-flushed -b mountd 3 |"); - - common::nonblock($F2); - common::nonblock($F3); - my $domain = chomp_(`domainname`); - my ($s, %servers); - my $quit; - while (!$quit) { - $quit = 1; - sleep 1; - while ($s = <$F2> || <$F3>) { - $quit = 0; - my ($ip, $name) = $s =~ /(\S+)\s+(\S+)/ or log::explanations("bad line in rpcinfo output"), next; - $name =~ s/\.$//; - $name =~ s/\Q.$domain\E$//; - $servers{$ip} ||= { ip => $ip, if_($name ne '(unknown)', name => $name) }; - } - } - values %servers; -} - -sub find_exports { - my ($_class, $server) = @_; - - my @l; - run_program::raw({ timeout => 1 }, "showmount", '>', \@l, "--no-headers", "-e", $server->{ip} || $server->{name}); - - map { if_(/(\S+(\s*\S+)*)\s+(\S+)/, { name => $1, comment => $3, server => $server }) } @l; -} - -1; diff --git a/perl-install/network/shorewall.pm b/perl-install/network/shorewall.pm deleted file mode 100644 index eb3a4e045..000000000 --- a/perl-install/network/shorewall.pm +++ /dev/null @@ -1,173 +0,0 @@ -package network::shorewall; # $Id$ - - - - -use detect_devices; -use network::netconnect; -use network::ethernet; -use network::network; -use run_program; -use common; -use log; - - -sub check_iptables { - my ($in) = @_; - - my $existing_config = -f "$::prefix/etc/sysconfig/iptables"; - - $existing_config ||= $::isStandalone && do { - system('modprobe iptable_nat'); - -x '/sbin/iptables' && listlength(`/sbin/iptables -t nat -nL`) > 8; - }; - - !$existing_config || $in->ask_okcancel(N("Firewalling configuration detected!"), - N("Warning! An existing firewalling configuration has been detected. You may need some manual fixes after installation.")); -} - -sub set_config_file { - my ($file, @l) = @_; - - my $done; - substInFile { - if (!$done && (/^#LAST LINE/ || eof)) { - $_ = join('', map { join("\t", @$_) . "\n" } @l) . $_; - $done = 1; - } else { - $_ = '' if /^[^#]/; - } - } "$::prefix/etc/shorewall/$file"; -} - -sub get_config_file { - my ($file) = @_; - map { [ split ' ' ] } grep { !/^#/ } cat_("$::prefix/etc/shorewall/$file"); -} - -sub get_default_device() { - my $netcnx = {}; - my $netc = {}; - my $intf = {}; - network::netconnect::read_net_conf($netcnx, $netc, $intf); - my $default_intf = network::tools::get_default_gateway_interface($netc, $intf); - $default_intf->{DEVICE}; -} - -sub get_net_device() { - my $default_dev = get_default_device(); - $default_dev =~ /^ippp/ && "ippp+" || - $default_dev =~ /^ppp/ && "ppp+" || - $default_dev; -} - -sub default_interfaces_silent() { - my %conf; - my @l = detect_devices::getNet() or return; - if (@l == 1) { - $conf{net_interface} = $l[0]; - } else { - $conf{net_interface} = get_net_device() || $l[0]; - $conf{loc_interface} = [ grep { $_ ne $conf{net_interface} } @l ]; - } - \%conf; -} - -sub default_interfaces { - my ($in) = @_; - my %conf; - my $card_netconnect = get_net_device() || "eth0"; - log::l("[drakgw] Information from netconnect: ignore card $card_netconnect"); - - my @l = detect_devices::getNet() or return; - - my $modules_conf = modules::any_conf->read; - my @all_cards = network::ethernet::get_eth_cards($modules_conf); - my %net_devices = network::ethernet::get_eth_cards_names(@all_cards); - put_in_hash(\%net_devices, { 'ppp+' => 'ppp+', 'ippp+' => 'ippp+' }); - - $in->ask_from('', - N("Please enter the name of the interface connected to the internet. - -Examples: - ppp+ for modem or DSL connections, - eth0, or eth1 for cable connection, - ippp+ for a isdn connection. -"), - [ { label => N("Net Device"), val => \$card_netconnect, list => [ sort keys %net_devices ], format => sub { $net_devices{$_[0]} || $_[0] }, not_edit => 0 } ]); - - $conf{net_interface} = $card_netconnect; - $conf{loc_interface} = [ grep { $_ ne $conf{net_interface} } @l ]; - \%conf; -} - -sub read { - my ($o_in) = @_; - my %conf = (disabled => !glob_("$::prefix/etc/rc3.d/S*shorewall"), - ports => join(' ', map { - my $e = $_; - map { "$_/$e->[3]" } split(',', $e->[4]); - } grep { $_->[0] eq 'ACCEPT' && $_->[1] eq 'net' } get_config_file('rules')) - ); - - if (my ($e) = get_config_file('masq')) { - $conf{masquerade}{subnet} = $e->[1] if $e->[1]; - } - put_in_hash(\%conf, $o_in ? default_interfaces($o_in) : default_interfaces_silent()); - - $conf{net_interface} && \%conf; -} - -sub write { - my ($conf) = @_; - my $default_dev = get_default_device(); - my $use_pptp = $default_dev =~ /^ppp/ && cat_("$::prefix/etc/ppp/peers/$default_dev") =~ /pptp/; - my $squid_port = network::network::read_squid_conf()->{http_port}[0]; - - my %ports_by_proto; - foreach (split ' ', $conf->{ports}) { - m!^(\d+(:\d+)?)/(udp|tcp|icmp)$! or die "bad port $_\n"; - push @{$ports_by_proto{$3}}, $1; - } - - set_config_file("zones", - [ 'net', 'Net', 'Internet zone' ], - if_($conf->{loc_interface}[0], [ 'loc', 'Local', 'Local' ]), - ); - set_config_file('interfaces', - [ 'net', $conf->{net_interface}, 'detect' ], - (map { [ 'loc', $_, 'detect' ] } @{$conf->{loc_interface} || []}), - ); - set_config_file('policy', - if_($conf->{loc_interface}[0], [ 'loc', 'net', 'ACCEPT' ], [ 'loc', 'fw', 'ACCEPT' ], [ 'fw', 'loc', 'ACCEPT' ]), - [ 'fw', 'net', 'ACCEPT' ], - [ 'net', 'all', 'DROP', 'info' ], - [ 'all', 'all', 'REJECT', 'info' ], - ); - set_config_file('rules', - if_($use_pptp, [ 'ACCEPT', 'fw', 'loc:10.0.0.138', 'tcp', '1723' ]), - if_($use_pptp, [ 'ACCEPT', 'fw', 'loc:10.0.0.138', 'gre' ]), - (map { - map_each { [ 'ACCEPT', $_, 'fw', $::a, join(',', @$::b), '-' ] } %ports_by_proto; - } ('net', if_($conf->{loc_interface}[0], 'loc'))), - ); - if (cat_("/etc/shorewall/rules") !~ /^\s*REDIRECT\s*loc\s*$squid_port\s+(\S+)/mg && $squid_port && -f "/var/run/squid.pid" && grep { /Loc/i } cat_("/etc/shorewall/zones")) { - substInFile { - s/#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE/REDIRECT\tloc\t$squid_port\ttcp\twww\t-\nACCEPT\tfw\tnet\ttcp\twww\n#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE/; - } "/etc/shorewall/rules"; -} - set_config_file('masq', - $conf->{masquerade} ? [ $conf->{net_interface}, $conf->{masquerade}{subnet} ] : (), - ); - - if ($conf->{disabled}) { - run_program::rooted($::prefix, 'chkconfig', '--del', 'shorewall'); - run_program::run('service', '>', '/dev/null', 'shorewall', 'stop') if $::isStandalone; - } else { - run_program::rooted($::prefix, 'chkconfig', '--add', 'shorewall'); - run_program::run('service', '>', '/dev/null', 'shorewall', 'restart') if $::isStandalone; - } -} - -1; - diff --git a/perl-install/network/smb.pm b/perl-install/network/smb.pm deleted file mode 100644 index ef98f6945..000000000 --- a/perl-install/network/smb.pm +++ /dev/null @@ -1,217 +0,0 @@ -package network::smb; # $Id$ - -use strict; -use diagnostics; - -use common; -use fs; -use network::network; -use network::smbnfs; - - -our @ISA = 'network::smbnfs'; - -sub to_fstab_entry { - my ($class, $e) = @_; - my $part = $class->to_fstab_entry_raw($e, 'smbfs'); - if ($e->{server}{username}) { - my ($options, $unknown) = fs::mount_options::unpack($part); - $options->{"$_="} = $e->{server}{$_} foreach qw(username password domain); - fs::mount_options::pack($part, $options, $unknown); - } - $part; -} -sub from_dev { - my ($_class, $dev) = @_; - $dev =~ m|//(.*?)/(.*)|; -} -sub to_dev_raw { - my ($_class, $server, $name) = @_; - '//' . $server . '/' . $name; -} - -sub check { - my ($_class, $in) = @_; - $in->do_pkgs->ensure_binary_is_installed('samba-client', 'nmblookup'); -} - -sub smbclient { - my ($server) = @_; - my $name = $server->{name} || $server->{ip}; - my $ip = $server->{ip} ? "-I $server->{ip}" : ''; - my $group = $server->{group} ? qq( -W "$server->{group}") : ''; - - my $U = $server->{username} ? sprintf("%s/%s%%%s", @$server{'domain', 'username', 'password'}) : '%'; - my %h; - foreach (`smbclient -g -U "$U" -L "$name" $ip$group 2>/dev/null`) { - if (my ($type, $v1, $v2) = /(.*)\|(.*)\|(.*)/) { - push @{$h{$type}}, [ $v1, $v2 ]; - } elsif (/^Error returning browse list/) { - push @{$h{Error}}, $_; - } - } - \%h; -} - -sub find_servers { - my (undef, @l) = `nmblookup "*"`; - s/\s.*\n// foreach @l; - my @servers = grep { network::network::is_ip($_) } @l; - my %servers; - $servers{$_}{ip} = $_ foreach @servers; - my ($ip, $browse); - foreach (`nmblookup -A @servers`) { - my $nb = /^Looking up status of (\S+)/ .. /^$/ or next; - if ($nb == 1) { - $ip = $1; - } elsif (/<00>/) { - $servers{$ip}{/<GROUP>/ ? 'group' : 'name'} ||= lc first(/(\S+)/); - } elsif (/__MSBROWSE__/) { - $browse ||= $servers{$ip}; - } - } - if ($browse) { - my %l; - my $workgroups = smbclient($browse)->{Workgroup} || []; - foreach (@$workgroups) { - my ($group, $name) = map { lc($_) } @$_; - - # already done - next if any { $group eq $_->{group} } values %servers; - - $l{$name} = $group; - } - if (my @l = keys %l) { - foreach (`nmblookup @l`) { - $servers{$1} = { name => $2, group => $l{$2} } if /(\S+)\s+([^<]+)<00>/; - } - } - } - values %servers; -} - -sub find_exports { - my ($_class, $server) = @_; - my @l; - - my $browse = smbclient($server); - if (my $err = find { /NT_STATUS_/ } @{$browse->{Error} || []}) { - die $err; - } - foreach (@{$browse->{Disk} || []}) { - my ($name, $comment) = @$_; - push @l, { name => $name, type => 'Disk', comment => $comment, server => $server } - if $name !~ /\$$/ && $name !~ /netlogon|NETLOGON|SYSVOL/; - } - @l; -} - -sub authentications_available { - my ($server) = @_; - map { if_(/^auth.\Q$server->{name}.\E(.*)/, $1) } all("/etc/samba"); -} - -sub to_credentials { - my ($server_name, $username) = @_; - $username or die 'to_credentials'; - "/etc/samba/auth.$server_name.$username"; -} - -sub fstab_entry_to_credentials { - my ($part) = @_; - - my ($server_name) = network::smb->from_dev($part->{device}) or return; - - my ($options, $unknown) = fs::mount_options::unpack($part); - $options->{'username='} && $options->{'password='} or return; - my %h = map { $_ => delete $options->{"$_="} } qw(username domain password); - $h{file} = $options->{'credentials='} = to_credentials($server_name, $h{username}); - fs::mount_options::pack_($part, $options, $unknown), \%h; -} - -sub remove_bad_credentials { - my ($server) = @_; - unlink to_credentials($server->{name}, $server->{username}); -} - -sub save_credentials { - my ($credentials) = @_; - my $file = $credentials->{file}; - output_with_perm("$::prefix$file", 0640, map { "$_ = $credentials->{$_}\n" } qw(username domain password)); -} - - -sub read_credentials_raw { - my ($file) = @_; - my %h = map { /(.*?)\s*=\s*(.*)/ } cat_("$::prefix$file"); - \%h; -} - -sub read_credentials { - my ($server, $username) = @_; - put_in_hash($server, read_credentials_raw(to_credentials($server->{name}, $username))); -} - - -sub write_smb_conf { - my ($domain) = @_; - - #- was going to just have a canned config in samba-winbind - #- and replace the domain, but sylvestre/buchan did not bless it yet - - my $f = "$::prefix/etc/samba/smb.conf"; - rename $f, "$f.orig"; - output($f, " -[global] - workgroup = $domain - server string = Samba Server %v - security = domain - encrypt passwords = Yes - password server = * - log file = /var/log/samba/log.%m - max log size = 50 - socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 - unix charset = ISO8859-15 - os level = 18 - local master = No - dns proxy = No - idmap uid = 10000-20000 - idmap gid = 10000-20000 - winbind separator = + - template homedir = /home/%D/%U - template shell = /bin/bash - winbind use default domain = yes -"); -} - -sub write_smb_ads_conf { - my ($domain, $realm) = @_; - - #- was going to just have a canned config in samba-winbind - #- and replace the domain, but sylvestre/buchan did not bless it yet - - my $f = "$::prefix/etc/samba/smb.conf"; - rename $f, "$f.orig"; - output($f, " -[global] - workgroup = $domain - realm = $realm - server string = Samba Member %v - security = ads - encrypt passwords = Yes - password server = * - log file = /var/log/samba/log.%m - max log size = 50 - socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 - os level = 18 - local master = No - dns proxy = No - winbind uid = 10000-20000 - winbind gid = 10000-20000 - winbind separator = + - template homedir = /home/%D/%U - template shell = /bin/bash - winbind use default domain = yes -"); -} -1; diff --git a/perl-install/network/smbnfs.pm b/perl-install/network/smbnfs.pm deleted file mode 100644 index c38903028..000000000 --- a/perl-install/network/smbnfs.pm +++ /dev/null @@ -1,45 +0,0 @@ -package network::smbnfs; # $Id$ - -use strict; -use diagnostics; - -use fs; - - -sub new { - my ($class, $o_v) = @_; - bless($o_v || {}, $class); -} - -sub server_to_string { - my ($_class, $server) = @_; - $server->{name} || $server->{ip}; -} -sub comment_to_string { - my ($_class, $comment) = @_; - $comment; -} -sub to_dev { - my ($class, $e) = @_; - $class->to_dev_raw($class->server_to_string($e->{server}), $e->{name} || $e->{ip}); -} -sub to_string { - my ($class, $e) = @_; - my $comment = $class->comment_to_string($e->{comment}); - ($e->{name} || $e->{ip}) . ($comment ? " ($comment)" : ''); -} - -sub to_fullstring { - my ($class, $e) = @_; - my $comment = $class->comment_to_string($e->{comment}); - $class->to_dev($e) . ($comment ? " ($comment)" : ''); -} -sub to_fstab_entry_raw { - my ($class, $e, $fs_type) = @_; - my $fs_entry = { device => $class->to_dev($e), fs_type => $fs_type }; - fs::mount_options::set_default($fs_entry); - $fs_entry; -} - -1; - diff --git a/perl-install/network/test.pm b/perl-install/network/test.pm deleted file mode 100644 index cc043b19c..000000000 --- a/perl-install/network/test.pm +++ /dev/null @@ -1,158 +0,0 @@ -package network::test; # $Id$ - -use strict; -use MDK::Common; -use run_program; -use Socket; - -sub new { - my ($class, $o_hostname) = @_; - bless { - hostname => $o_hostname || "mandrakesoft.com" - }, $class; -} - -#- launch synchronous test, will hang until the test finishes -sub test_synchronous { - my ($o) = @_; - ($o->{address}, $o->{ping}) = resolve_and_ping($o->{hostname}); - $o->{done} = 1; -} - -#- launch asynchronous test, will not hang -sub start { - my ($o) = @_; - $o->{done} = 0; - $o->{kid} = bg_command->new(sub { - my ($address, $ping) = resolve_and_ping($o->{hostname}); - print "$address|$ping\n"; - }); -} - -#- abort asynchronous test -sub abort { - my ($o) = @_; - if ($o->{kid}) { - kill -9, $o->{kid}{pid}; - undef $o->{kid}; - } -} - -#- returns a true value if the test is finished, usefull for asynchronous tests -sub is_done { - my ($o) = @_; - $o->update_status; - to_bool($o->{done}); -} - -#- return a true value if the connection works (hostname resolution and ping) -sub is_connected { - my ($o) = @_; - to_bool(defined($o->{hostname}) && defined($o->{ping})); -} - -#- get hostname used in test for resolution and ping -sub get_hostname { - my ($o) = @_; - $o->{hostname}; -} - -#- get resolved address (if any) of given hostname -sub get_address { - my ($o) = @_; - $o->{address}; -} - -#- get ping (if any) to given hostname -sub get_ping { - my ($o) = @_; - $o->{ping}; -} - -sub resolve_and_ping { - my ($hostname) = @_; - require Net::Ping; - require Time::HiRes; - my $p; - if ($>) { - $p = Net::Ping->new('tcp'); - # Try connecting to the www port instead of the echo port - $p->{port_num} = getservbyname('http', 'tcp'); - } else { - $p = Net::Ping->new('icmp'); - } - $p->hires; #- get ping as float - #- default timeout is 5 seconds - my ($ret, $ping, $address) = $p->ping($hostname, 5); - if ($ret) { - return $address, $ping; - } elsif (defined($ret)) { - return $address; - } -} - -sub update_status { - my ($o) = @_; - if ($o->{kid}) { - my $fd = $o->{kid}{fd}; - fcntl($fd, c::F_SETFL(), c::O_NONBLOCK()) or die "can not fcntl F_SETFL: $!"; - local $| = 1; - if (defined(my $output = <$fd>)) { - ($o->{address}, $o->{ping}) = $output =~ /^([\d\.]+)\|([\d\.,]+)*$/; - $o->{done} = 1; - undef $o->{kid}; - } - } -} - -1; - -=head1 network::test - -=head2 Test synchronously - -#- resolve and get ping to hostname from command line if given, else to Mandrakesoft -use lib qw(/usr/lib/libDrakX); -use network::test; - -my $net_test = network::test->new($ARGV[0]); -$net_test->test_synchronous; - -my $is_connected = $net_test->is_connected; -my $hostname = $net_test->get_hostname; -my $address = $net_test->get_address; -my $ping = $net_test->get_ping; - -print "connected: $is_connected -host: $hostname -resolved host: $address -ping to host: $ping -"; - -=head2 Test asynchronously - -#- resolve and get ping to hostname from command line if given, else to Mandrakesoft -#- prints a "." every 10 miliseconds during connection test -use lib qw(/usr/lib/libDrakX); -use network::test; - -my $net_test = network::test->new($ARGV[0]); -$net_test->start; - -do { - print ".\n"; - select(undef, undef, undef, 0.01); -} while !$net_test->is_done; - -my $is_connected = $net_test->is_connected; -my $hostname = $net_test->get_hostname; -my $address = $net_test->get_address; -my $ping = $net_test->get_ping; - -print "connected: $is_connected -host: $hostname -resolved host: $address -ping to host: $ping -"; - -=cut diff --git a/perl-install/network/tools.pm b/perl-install/network/tools.pm deleted file mode 100644 index 92fe5f1f6..000000000 --- a/perl-install/network/tools.pm +++ /dev/null @@ -1,304 +0,0 @@ -package network::tools; # $Id$ - -use strict; -use common; -use run_program; -use fsedit; -use c; -use vars qw(@ISA @EXPORT @EXPORT_OK); -use MDK::Common::System qw(getVarsFromSh); - -@ISA = qw(Exporter); -@EXPORT = qw(connect_backend connected connected_bg disconnect_backend is_dynamic_ip passwd_by_login read_secret_backend test_connected remove_initscript write_secret_backend start_interface stop_interface); - -sub write_secret_backend { - my ($a, $b) = @_; - foreach my $i ("$::prefix/etc/ppp/pap-secrets", "$::prefix/etc/ppp/chap-secrets") { - substInFile { s/^'$a'.*\n//; $_ .= "\n'$a' * '$b' * \n" if eof } $i; - #- restore access right to secrets file, just in case. - chmod 0600, $i; - } -} - -sub unquotify { - my ($word) = @_; - $$word =~ s/^(['"]?)(.*)\1$/$2/; -} - -sub read_secret_backend() { - my $conf = []; - foreach my $i ("pap-secrets", "chap-secrets") { - foreach (cat_("$::prefix/etc/ppp/$i")) { - my ($login, $server, $passwd) = split(' '); - if ($login && $passwd) { - unquotify \$passwd; - unquotify \$login; - unquotify \$server; - push @$conf, {login => $login, - passwd => $passwd, - server => $server }; - } - } - } - $conf; -} - -sub passwd_by_login { - my ($login) = @_; - - unquotify \$login; - my $secret = read_secret_backend(); - foreach (@$secret) { - return $_->{passwd} if $_->{login} eq $login; - } -} - -sub connect_backend { - my ($netc) = @_; - run_program::rooted($::prefix, "ifup $netc->{NET_INTERFACE} &"); -} - -sub disconnect_backend { - my ($netc) = @_; - run_program::rooted($::prefix, "ifdown $netc->{NET_INTERFACE} &"); -} - -sub bg_command_as_root { - my ($name, @args) = @_; - #- FIXME: duplicate code from common::require_root_capability - if (check_for_xserver() && fuzzy_pidofs(qr/\bkwin\b/) > 0) { - run_program::raw({ detach => 1 }, "kdesu", "--ignorebutton", "-c", "$name @args"); - } else { - run_program::raw({ detach => 1 }, [ 'consolehelper', $name ], @args); - } -} - -sub user_run_interface_command { - my ($command, $intf) = @_; - if (system("usernetctl $intf report") == 0) { - run_program::run("$command $intf &"); - } else { - bg_command_as_root($command, $intf); - } -} - -sub start_interface { - my ($intf) = @_; - user_run_interface_command('/sbin/ifup', $intf); -} - -sub stop_interface { - my ($intf) = @_; - user_run_interface_command('/sbin/ifdown', $intf); -} - -sub connected() { gethostbyname("mandrakesoft.com") ? 1 : 0 } - -# request a ref on a bg_connect and a ref on a scalar -sub connected_bg__raw { - my ($kid_pipe, $status) = @_; - local $| = 1; - if (ref($kid_pipe) && ref($$kid_pipe)) { - my $fd = $$kid_pipe->{fd}; - fcntl($fd, c::F_SETFL(), c::O_NONBLOCK()) or die "can not fcntl F_SETFL: $!"; - my $a = <$fd>; - $$status = $a if defined $a; - } else { $$kid_pipe = check_link_beat() } -} - -my $kid_pipe; -sub connected_bg { - my ($status) = @_; - connected_bg__raw(\$kid_pipe, $status); -} - -# test if connected; -# cmd = 0 : ask current status -# return : 0 : not connected; 1 : connected; -1 : no test ever done; -2 : test in progress -# cmd = 1 : start new connection test -# return : -2 -# cmd = 2 : cancel current test -# return : nothing -# cmd = 3 : return current status even if a test is in progress -my $kid_pipe_connect; -my $current_connection_status; - -sub test_connected { - local $| = 1; - my ($cmd) = @_; - - $current_connection_status = -1 if !defined $current_connection_status; - - if ($cmd == 0) { - connected_bg__raw(\$kid_pipe_connect, \$current_connection_status); - } elsif ($cmd == 1) { - if ($current_connection_status != -2) { - $current_connection_status = -2; - $kid_pipe_connect = check_link_beat(); - } - } elsif ($cmd == 2) { - if (defined($kid_pipe_connect)) { - kill -9, $kid_pipe_connect->{pid}; - undef $kid_pipe_connect; - } - } - return $current_connection_status; -} - -sub check_link_beat() { - bg_command->new(sub { - require Net::Ping; - my $p; - if ($>) { - $p = Net::Ping->new("tcp"); - # Try connecting to the www port instead of the echo port - $p->{port_num} = getservbyname("http", "tcp"); - } else { - $p = Net::Ping->new("icmp"); - } - print $p->ping("www.mandrakesoft.com") ? 1 : 0; - }); -} - -sub remove_initscript() { - $::testing and return; - if (-e "$::prefix/etc/rc.d/init.d/internet") { - run_program::rooted($::prefix, "/sbin/chkconfig", "--del", "internet"); - rm_rf("$::prefix/etc/rc.d/init.d/internet"); - log::explanations("Removed internet service"); - } -} - -sub use_windows { - my ($file) = @_; - my $all_hds = fsedit::get_hds(); - fs::get_info_from_fstab($all_hds); - if (my $part = find { $_->{device_windobe} eq 'C' } fs::get::fstab($all_hds)) { - my $source = find { -d $_ && -r "$_/$file" } map { "$part->{mntpoint}/$_" } qw(windows/system winnt/system windows/system32/drivers winnt/system32/drivers); - log::explanations("Seek in $source to find firmware"); - $source; - } else { - my $failed = N("No partition available"); - log::explanations($failed); - undef, $failed; - } -} - -sub use_floppy { - my ($in, $file) = @_; - my $floppy = detect_devices::floppy(); - $in->ask_okcancel(N("Insert floppy"), - N("Insert a FAT formatted floppy in drive %s with %s in root directory and press %s", $floppy, $file, N("Next"))) or return; - if (eval { fs::mount(devices::make($floppy), '/mnt', 'vfat', 'readonly'); 1 }) { - log::explanations("Mounting floppy device $floppy in /mnt"); - '/mnt'; - } else { - my $failed = N("Floppy access error, unable to mount device %s", $floppy); - log::explanations($failed); - undef, $failed; - } -} - - -sub is_dynamic_ip { - my ($intf) = @_; - any { $_->{BOOTPROTO} !~ /^(none|static|)$/ } values %$intf; -} - -sub is_dynamic_host { - my ($intf) = @_; - any { defined $_->{DHCP_HOSTNAME} } values %$intf; -} - -sub convert_wep_key_for_iwconfig { - #- 5 or 13 characters, consider the key as ASCII and prepend "s:" - #- else consider the key as hexadecimal, do not strip dashes - #- always quote the key as string - my ($key) = @_; - member(length($key), (5, 13)) ? "s:$key" : $key; -} - -sub get_wep_key_from_iwconfig { - #- strip "s:" if the key is 5 or 13 characters (ASCII) - #- else the key as hexadecimal, do not modify - my ($key) = @_; - $key =~ s/^s:// if member(length($key), (7,15)); - $key; -} - -sub convert_key_for_wpa_supplicant { - my ($key) = @_; - if ($key =~ /^([[:xdigit:]]{4}[\:-])+[[:xdigit:]]{2,}$/) { - $key =~ s/[\:-]//g; - return lc($key); - } else { - return qq("$key"); - } -} - -#- returns interface whose IP address matchs given IP address, according to its network mask -sub find_matching_interface { - my ($intf, $address) = @_; - my @ip = split '\.', $address; - find { - my @intf_ip = split '\.', $intf->{$_}{IPADDR} or return; - my @mask = split '\.', $intf->{$_}{NETMASK} or return; - every { $_ } mapn { ($_[0] & $_[2]) == ($_[1] & $_[2]) } \@intf_ip, \@ip, \@mask; - } sort keys %$intf; -} - -#- returns gateway interface if found -sub get_default_gateway_interface { - my ($netc, $intf) = @_; - my @intfs = sort keys %$intf; - `$::prefix/sbin/ip route show` =~ /^default.*\s+dev\s+(\S+)/m && $1 || - $netc->{GATEWAYDEV} || - $netc->{GATEWAY} && find_matching_interface($intf, $netc->{GATEWAY}) || - (find { get_interface_type($intf->{$_}) eq 'adsl' } @intfs) || - (find { get_interface_type($intf->{$_}) eq 'isdn' && text2bool($intf->{$_}{DIAL_ON_IFUP}) } @intfs) || - (find { get_interface_type($intf->{$_}) eq 'modem' } @intfs) || - (find { get_interface_type($intf->{$_}) eq 'ethernet' && $intf->{$_}{BOOTPROTO} eq 'dhcp' } @intfs); -} - -sub get_interface_status { - my ($gw_intf) = @_; - my @routes = `$::prefix/sbin/ip route show`; - my $is_up = to_bool(grep { /\s+dev\s+$gw_intf(?:\s+|$)/ } @routes); - my ($gw_address) = join('', @routes) =~ /^default\s+via\s+(\S+).*\s+dev\s+$gw_intf(?:\s+|$)/m; - return $is_up, $gw_address; -} - -#- returns (gateway_interface, interface is up, gateway address, dns server address) -sub get_internet_connection { - my ($netc, $intf, $o_gw_intf) = @_; - my $gw_intf = $o_gw_intf || get_default_gateway_interface($netc, $intf) or return; - return $gw_intf, get_interface_status($gw_intf), $netc->{dnsServer}; -} - -sub get_interface_type { - my ($interface) = @_; - member($interface->{TYPE}, "xDSL", "ADSL") && "adsl" || - $interface->{DEVICE} =~ /^(eth|ath|wlan)/ && "ethernet" || - $interface->{DEVICE} =~ /^ippp/ && "isdn" || - $interface->{DEVICE} =~ /^ppp/ && "modem" || - "unknown"; -} - -sub get_default_metric { - my ($type) = @_; - my @known_types = ("ethernet_gigabit", "ethernet", "adsl", "isdn", "modem", "unknown"); - my $idx; - eval { $idx = find_index { $type eq $_ } @known_types }; - $idx = @known_types if $@; - $idx * 10; -} - -sub ndiswrapper_installed_drivers() { - `ndiswrapper -l` =~ /(\w+)\s+driver present/mg; -} - -sub ndiswrapper_available_drivers() { - `ndiswrapper -l` =~ /(\w+)\s+driver present, hardware present/mg; -} - -1; |