diff options
Diffstat (limited to 'perl-install/network/wireless.pm')
-rw-r--r-- | perl-install/network/wireless.pm | 111 |
1 files changed, 5 insertions, 106 deletions
diff --git a/perl-install/network/wireless.pm b/perl-install/network/wireless.pm index 564cafb9b..27f06971b 100644 --- a/perl-install/network/wireless.pm +++ b/perl-install/network/wireless.pm @@ -2,16 +2,14 @@ package network::wireless; use strict; use common; -use modules; -use detect_devices; -use c; 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; + my ($real_key, $restricted) = @_; + my $key = member(length($real_key), (5, 13)) ? "s:$real_key" : $real_key; + $restricted ? "restricted $key" : "open $key"; } sub get_wep_key_from_iwconfig { @@ -19,7 +17,8 @@ sub get_wep_key_from_iwconfig { #- else the key as hexadecimal, do not modify my ($key) = @_; $key =~ s/^s:// if member(length($key), (7,15)); - $key; + my ($mode, $real_key) = $key =~ /^(?:(open|restricted)\s+)?(.*)$/; + ($real_key, $mode eq 'restricted'); } sub convert_key_for_wpa_supplicant { @@ -170,104 +169,4 @@ sub wpa_supplicant_add_network { chmod 0600, $wpa_supplicant_conf; } -my $ndiswrapper_prefix = "$::prefix/etc/ndiswrapper"; - -sub ndiswrapper_installed_drivers() { - grep { -d "$ndiswrapper_prefix/$_" } all($ndiswrapper_prefix); -} - -sub ndiswrapper_present_devices { - my ($driver) = @_; - my @supported_devices; - foreach (all("$ndiswrapper_prefix/$driver")) { - my ($ids) = /^([0-9A-Z]{4}:[0-9A-Z]{4})\.[05]\.conf$/; - $ids and push @supported_devices, $ids; - } - grep { member(uc(sprintf("%04x:%04x", $_->{vendor}, $_->{id})), @supported_devices) } detect_devices::probeall(); -} - -sub ndiswrapper_get_devices { - my ($in, $driver) = @_; - my @devices = ndiswrapper_present_devices($driver); - @devices or $in->ask_warn(N("Error"), N("No device supporting the %s ndiswrapper driver is present!", $driver)); - @devices; -} - -sub ndiswrapper_ask_driver { - my ($in) = @_; - if (my $inf_file = $in->ask_file(N("Please select the Windows driver (.inf file)"), "/mnt/cdrom")) { - my $driver = basename(lc($inf_file)); - $driver =~ s/\.inf$//; - - #- first uninstall the driver if present, may solve issues if it is corrupted - -d "$ndiswrapper_prefix/$driver" and system('ndiswrapper', '-e', $driver); - - unless (system('ndiswrapper', '-i', $inf_file) == 0) { - $in->ask_warn(N("Error"), N("Unable to install the %s ndiswrapper driver!", $driver)); - return undef; - } - - return $driver; - } - undef; -} - -sub ndiswrapper_find_matching_devices { - my ($device) = @_; - my $net_path = '/sys/class/net'; - my @devices; - - foreach my $interface (all($net_path)) { - my $dev_path = "$net_path/$interface/device"; - -l $dev_path or next; - - my %map = (vendor => 'vendor', device => 'id'); - if (every { hex(chomp_(cat_("$dev_path/$_"))) eq $device->{$map{$_}} } keys %map) { - my $driver = readlink("$net_path/$interface/driver"); - $driver =~ s!.*/!!; - push @devices, [ $interface, $driver ]; - } - } - - @devices; -} - -sub ndiswrapper_find_conflicting_devices { - my ($device) = @_; - grep { $_->[1] ne "ndiswrapper" } ndiswrapper_find_matching_devices($device); -} - -sub ndiswrapper_find_interface { - my ($device) = @_; - my $dev = find { $_->[1] eq "ndiswrapper" } ndiswrapper_find_matching_devices($device); - $dev->[0]; -} - -sub ndiswrapper_setup_device { - my ($in, $device) = @_; - - eval { modules::unload("ndiswrapper") }; - #- unload ndiswrapper first so that the newly installed .inf files will be read - eval { modules::load("ndiswrapper") }; - - if ($@) { - $in->ask_warn(N("Error"), N("Unable to load the ndiswrapper module!")); - return; - } - - my @ndiswrapper_conflicts = ndiswrapper_find_conflicting_devices($device); - if (@ndiswrapper_conflicts) { - $in->ask_yesorno(N("Warning"), N("The selected device has already been configured with the %s driver. -Do you really want to use a ndiswrapper driver ?", $ndiswrapper_conflicts[0][1])) or return; - } - - my $interface = ndiswrapper_find_interface($device); - unless ($interface) { - $in->ask_warn(N("Error"), N("Unable to find the ndiswrapper interface!")); - return; - } - - $interface; -} - 1; |