From 237a287656548315efbbc4e0161cf6edee005c26 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Tue, 30 Aug 2005 16:54:21 +0000 Subject: - configure wpa_supplicant correctly for shared or passwordless connections - split write_interface_setttings out of network::network::write_interface_conf - wpa_supplicant may list some networks twice, handle it - rewrite drakroam to use wpa_supplicant --- perl-install/network/monitor.pm | 8 ++++++-- perl-install/network/network.pm | 29 +++++++++++++++++++---------- perl-install/network/wireless.pm | 26 ++++++++++++++------------ 3 files changed, 39 insertions(+), 24 deletions(-) (limited to 'perl-install/network') diff --git a/perl-install/network/monitor.pm b/perl-install/network/monitor.pm index eea814bc8..38912af97 100644 --- a/perl-install/network/monitor.pm +++ b/perl-install/network/monitor.pm @@ -21,8 +21,12 @@ sub list_wireless { my %networks; #- bssid / frequency / signal level / flags / ssid while ($results =~ /^((?:[0-9a-f]{2}:){5}[0-9a-f]{2})\t(\d+)\t(\d+)\t(.*?)\t(.*)$/mg) { - $networks{$1} = { frequency => $2, signal_level => $3, flags => $4, ssid => $5 }; - $networks{$1}{approx_level} = 20 + min(80, int($3/20)*20); + # wpa_supplicant may list the network two times, use ||= + $networks{$1}{frequency} ||= $2; + $networks{$1}{signal_level} ||= $3; + $networks{$1}{flags} ||= $4; + $networks{$1}{ssid} ||= $5 if $5 ne ''; + $networks{$1}{approx_level} ||= 20 + min(80, int($3/20)*20); } my $list; eval { $list = $o->call_method('ListNetworks') }; diff --git a/perl-install/network/network.pm b/perl-install/network/network.pm index afce07917..75c70975b 100644 --- a/perl-install/network/network.pm +++ b/perl-install/network/network.pm @@ -179,6 +179,20 @@ sub update_broadcast_and_network { $intf->{NETWORK} = join('.', mapn { int($_[0]) & $_[1] } \@ip, \@mask); } +sub write_interface_settings { + my ($intf, $file) = @_; + setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT HWADDR METRIC MII_NOT_SUPPORTED TYPE USERCTL ATM_ADDR ETHTOOL_OPTS VLAN MTU MS_DNS1 MS_DNS2 DOMAIN), + 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 WIRELESS_WPA_DRIVER), + qw(DVB_ADAPTER_ID DVB_NETWORK_DEMUX DVB_NETWORK_PID), + qw(IPV6INIT IPV6TO4INIT), + 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 write_interface_conf { my ($net, $name) = @_; @@ -198,16 +212,7 @@ sub write_interface_conf { defined($intf->{METRIC}) or $intf->{METRIC} = network::tools::get_default_metric(network::tools::get_interface_type($intf)), $intf->{BOOTPROTO} =~ s/dhcp.*/dhcp/; - setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT HWADDR METRIC MII_NOT_SUPPORTED TYPE USERCTL ATM_ADDR ETHTOOL_OPTS VLAN MTU MS_DNS1 MS_DNS2 DOMAIN), - 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 WIRELESS_WPA_DRIVER), - qw(DVB_ADAPTER_ID DVB_NETWORK_DEMUX DVB_NETWORK_PID), - qw(IPV6INIT IPV6TO4INIT), - 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"); + write_interface_settings($intf, $file); } sub add2hosts { @@ -507,6 +512,10 @@ sub read_net_conf { $intf->{DEVICE} ||= $device; } } + $net->{wireless} ||= {}; + foreach (all("$::prefix/etc/sysconfig/network-scripts/wireless.d")) { + $net->{wireless}{$_} = { getVarsFromSh("$::prefix/etc/sysconfig/network-scripts/wireless.d/$_") }; + } netprofile_read($net); if (my $default_intf = network::tools::get_default_gateway_interface($net)) { $net->{net_interface} = $default_intf; diff --git a/perl-install/network/wireless.pm b/perl-install/network/wireless.pm index 62971bcaf..79a6ec9a0 100644 --- a/perl-install/network/wireless.pm +++ b/perl-install/network/wireless.pm @@ -108,19 +108,21 @@ sub wpa_supplicant_add_network { my $network = { ssid => qq("$essid"), scan_ssid => 1, - $enc_mode eq 'wpa-psk' ? - ( - psk => convert_key_for_wpa_supplicant($key), - ) : - member($enc_mode, qw(open restricted)) ? - ( - key_mgmt => 'NONE', - wep_key0 => convert_key_for_wpa_supplicant($key), - wep_tx_keyidx => 0, - auth_alg => 'SHARED', - ) : - () }; + + if ($enc_mode eq 'wpa-psk') { + $network->{psk} = convert_key_for_wpa_supplicant($key); + } else { + $network->{key_mgmt} = 'NONE'; + if (member($enc_mode, qw(open restricted))) { + put_in_hash($network, { + wep_key0 => convert_key_for_wpa_supplicant($key), + wep_tx_keyidx => 0, + auth_alg => $enc_mode eq 'restricted' ? 'SHARED' : 'OPEN', + }); + } + } + @$conf = difference2($conf, [ wpa_supplicant_find_similar($conf, $network) ]); push @$conf, $network; wpa_supplicant_write_conf($conf); -- cgit v1.2.1