diff options
-rw-r--r-- | perl-install/network/network.pm | 3 | ||||
-rw-r--r-- | perl-install/network/tools.pm | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/perl-install/network/network.pm b/perl-install/network/network.pm index 728e0f901..da773c8c2 100644 --- a/perl-install/network/network.pm +++ b/perl-install/network/network.pm @@ -168,7 +168,7 @@ sub write_interface_conf { $intf->{BOOTPROTO} =~ s/dhcp.*/dhcp/; - local $intf->{WIRELESS_ENC_KEY} = qq("$intf->{WIRELESS_ENC_KEY}") if $intf->{WIRELESS_ENC_KEY} !~ /"/; + local $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 MII_NOT_SUPPORTED), 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_HOSTNAME NEEDHOSTNAME)) @@ -344,6 +344,7 @@ sub read_all_conf { if (/^ifcfg-([A-Za-z0-9.:]+)$/ && $1 ne 'lo') { my $intf = findIntf($intf, $1); add2hash($intf, { getVarsFromSh("$::prefix/etc/sysconfig/network-scripts/$_") }); + $intf->{WIRELESS_ENC_KEY} = network::tools::get_wep_key_from_iwconfig($intf->{WIRELESS_ENC_KEY}); } } $netcnx->{type} or probe_netcnx_type($::prefix, $netc, $intf, $netcnx); diff --git a/perl-install/network/tools.pm b/perl-install/network/tools.pm index 4726e1350..e49e8dc2b 100644 --- a/perl-install/network/tools.pm +++ b/perl-install/network/tools.pm @@ -189,4 +189,21 @@ sub reread_net_conf { network::network::probe_netcnx_type('', $netc, $intf, $netcnx); } +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) = @_; + unquotify \$key; + member(length($key), (5, 13)) ? qq("s:$key") : qq("$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; +} + 1; |