From 61027579bbb5822d06ac41c7cdf259c49377b837 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 10 Jan 2013 16:07:52 +0100 Subject: [PATCH] Implement wireless client on RED. http://wishlist.ipfire.org/wish/wireless-client-on-red Conflicts: doc/language_issues.de doc/language_issues.en doc/language_issues.es doc/language_issues.fr doc/language_issues.pl doc/language_issues.ru src/misc-progs/Makefile --- config/cfgroot/general-functions.pl | 23 + config/cfgroot/header.pl | 4 + config/menu/10-system.menu | 6 + config/rootfiles/common/armv5tel/initscripts | 1 + config/rootfiles/common/i586/initscripts | 1 + config/rootfiles/common/misc-progs | 1 + doc/language_issues.de | 1 - doc/language_issues.en | 1 - doc/language_issues.es | 34 +- doc/language_issues.fr | 31 +- doc/language_issues.pl | 34 +- doc/language_issues.ru | 34 +- doc/language_missings | 124 ++++ html/cgi-bin/wirelessclient.cgi | 703 +++++++++++++++++++ langs/de/cgi-bin/de.pl | 31 + langs/en/cgi-bin/en.pl | 30 + src/initscripts/init.d/wlanclient | 276 ++++++++ src/misc-progs/Makefile | 6 +- src/misc-progs/wirelessclient.c | 26 + 19 files changed, 1360 insertions(+), 7 deletions(-) create mode 100755 html/cgi-bin/wirelessclient.cgi create mode 100755 src/initscripts/init.d/wlanclient create mode 100644 src/misc-progs/wirelessclient.c diff --git a/config/cfgroot/general-functions.pl b/config/cfgroot/general-functions.pl index a70f2673e6..3a04369e35 100644 --- a/config/cfgroot/general-functions.pl +++ b/config/cfgroot/general-functions.pl @@ -980,4 +980,27 @@ sub GetIcmpDescription ($) { 'Experimental'); if ($index>41) {return 'unknown'} else {return @icmp_description[$index]}; } + +sub RedIsWireless() { + # This function checks if a network device is a wireless device. + + my %settings = (); + &readhash("${General::swroot}/ethernet/settings", \%settings); + + # Find the name of the network device. + my $device = $settings{'RED_DEV'}; + + # Exit, if no device is configured. + return 0 if ($device eq ""); + + # Return 1 if the device is a wireless one. + my $path = "/sys/class/net/$device/wireless"; + if (-d $path) { + return 1; + } + + # Otherwise return zero. + return 0; +} + 1; diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl index 0f10bf9f86..a7f209d9cb 100644 --- a/config/cfgroot/header.pl +++ b/config/cfgroot/header.pl @@ -157,6 +157,10 @@ sub genmenu { if ( $ethsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/ && $ethsettings{'RED_TYPE'} eq 'STATIC' ) { $menu->{'03.network'}{'subMenu'}->{'70.aliases'}{'enabled'} = 1; } + + if (&General::RedIsWireless()) { + $menu->{'01.system'}{'subMenu'}->{'21.wlan'}{'enabled'} = 1; + } } sub showhttpheaders diff --git a/config/menu/10-system.menu b/config/menu/10-system.menu index 9248663bd4..b56a1ec04f 100644 --- a/config/menu/10-system.menu +++ b/config/menu/10-system.menu @@ -10,6 +10,12 @@ 'title' => "$Lang::tr{'alt dialup'}", 'enabled' => 1, }; + $subsystem->{'21.wlan'} = { + 'caption' => $Lang::tr{'wlan client'}, + 'uri' => '/cgi-bin/wirelessclient.cgi', + 'title' => "$Lang::tr{'wlan client'}", + 'enabled' => 0, + }; $subsystem->{'30.ssh'} = { 'caption' => $Lang::tr{'ssh access'}, 'uri' => '/cgi-bin/remote.cgi', diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index 1a613ac34a..a8f35e4676 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -130,6 +130,7 @@ etc/rc.d/init.d/upnpd #etc/rc.d/init.d/vsftpd #etc/rc.d/init.d/watchdog #etc/rc.d/init.d/winbind +etc/rc.d/init.d/wlanclient #etc/rc.d/init.d/xinetd #etc/rc.d/rc0.d #etc/rc.d/rc0.d/K01imspetor diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index f26e2446dc..1863a7afba 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -133,6 +133,7 @@ etc/rc.d/init.d/upnpd #etc/rc.d/init.d/vsftpd #etc/rc.d/init.d/watchdog #etc/rc.d/init.d/winbind +etc/rc.d/init.d/wlanclient #etc/rc.d/init.d/xinetd #etc/rc.d/rc0.d #etc/rc.d/rc0.d/K01imspetor diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs index d2cf7102c1..3f48f83764 100644 --- a/config/rootfiles/common/misc-progs +++ b/config/rootfiles/common/misc-progs @@ -35,5 +35,6 @@ usr/local/bin/timectrl usr/local/bin/updxlratorctrl usr/local/bin/upnpctrl usr/local/bin/urlfilterctrl +usr/local/bin/wirelessclient usr/local/bin/wirelessctrl #usr/local/bin/wlanapctrl diff --git a/doc/language_issues.de b/doc/language_issues.de index de0c4d30cc..6c4a5d8b76 100644 --- a/doc/language_issues.de +++ b/doc/language_issues.de @@ -429,7 +429,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 diff --git a/doc/language_issues.en b/doc/language_issues.en index d7a7d72acf..8f530a3f3e 100644 --- a/doc/language_issues.en +++ b/doc/language_issues.en @@ -460,7 +460,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 diff --git a/doc/language_issues.es b/doc/language_issues.es index 0dea29c181..266361c35b 100644 --- a/doc/language_issues.es +++ b/doc/language_issues.es @@ -456,7 +456,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 @@ -488,7 +487,10 @@ WARNING: translation string unused: use dov WARNING: translation string unused: use ibod WARNING: translation string unused: view log WARNING: translation string unused: vpn aggrmode +<<<<<<< HEAD WARNING: translation string unused: vpn incompatible use of defaultroute +======= +>>>>>>> 1b23ab3... Implement wireless client on RED. WARNING: translation string unused: vpn mtu invalid WARNING: translation string unused: vpn on blue WARNING: translation string unused: vpn on green @@ -621,4 +623,34 @@ WARNING: untranslated string: system information WARNING: untranslated string: uptime load average WARNING: untranslated string: visit us at WARNING: untranslated string: vpn keyexchange +WARNING: untranslated string: wlan client +WARNING: untranslated string: wlan client advanced settings +WARNING: untranslated string: wlan client and +WARNING: untranslated string: wlan client bssid +WARNING: untranslated string: wlan client ccmp +WARNING: untranslated string: wlan client configuration +WARNING: untranslated string: wlan client disconnected +WARNING: untranslated string: wlan client duplicate ssid +WARNING: untranslated string: wlan client edit entry +WARNING: untranslated string: wlan client encryption +WARNING: untranslated string: wlan client encryption none +WARNING: untranslated string: wlan client encryption wep +WARNING: untranslated string: wlan client encryption wpa +WARNING: untranslated string: wlan client encryption wpa2 +WARNING: untranslated string: wlan client group cipher +WARNING: untranslated string: wlan client group key algorithm +WARNING: untranslated string: wlan client invalid key length +WARNING: untranslated string: wlan client new entry +WARNING: untranslated string: wlan client new network +WARNING: untranslated string: wlan client pairwise cipher +WARNING: untranslated string: wlan client pairwise key algorithm +WARNING: untranslated string: wlan client pairwise key group key +WARNING: untranslated string: wlan client psk +WARNING: untranslated string: wlan client ssid +WARNING: untranslated string: wlan client tkip +WARNING: untranslated string: wlan client wpa mode +WARNING: untranslated string: wlan client wpa mode all +WARNING: untranslated string: wlan client wpa mode ccmp ccmp +WARNING: untranslated string: wlan client wpa mode ccmp tkip +WARNING: untranslated string: wlan client wpa mode tkip tkip WARNING: untranslated string: wlanap country diff --git a/doc/language_issues.fr b/doc/language_issues.fr index bec7223940..f4f113154b 100644 --- a/doc/language_issues.fr +++ b/doc/language_issues.fr @@ -455,7 +455,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 @@ -609,6 +608,36 @@ WARNING: untranslated string: urlfilter file ext block WARNING: untranslated string: urlfilter mode block WARNING: untranslated string: visit us at WARNING: untranslated string: vpn keyexchange +WARNING: untranslated string: wlan client +WARNING: untranslated string: wlan client advanced settings +WARNING: untranslated string: wlan client and +WARNING: untranslated string: wlan client bssid +WARNING: untranslated string: wlan client ccmp +WARNING: untranslated string: wlan client configuration +WARNING: untranslated string: wlan client disconnected +WARNING: untranslated string: wlan client duplicate ssid +WARNING: untranslated string: wlan client edit entry +WARNING: untranslated string: wlan client encryption +WARNING: untranslated string: wlan client encryption none +WARNING: untranslated string: wlan client encryption wep +WARNING: untranslated string: wlan client encryption wpa +WARNING: untranslated string: wlan client encryption wpa2 +WARNING: untranslated string: wlan client group cipher +WARNING: untranslated string: wlan client group key algorithm +WARNING: untranslated string: wlan client invalid key length +WARNING: untranslated string: wlan client new entry +WARNING: untranslated string: wlan client new network +WARNING: untranslated string: wlan client pairwise cipher +WARNING: untranslated string: wlan client pairwise key algorithm +WARNING: untranslated string: wlan client pairwise key group key +WARNING: untranslated string: wlan client psk +WARNING: untranslated string: wlan client ssid +WARNING: untranslated string: wlan client tkip +WARNING: untranslated string: wlan client wpa mode +WARNING: untranslated string: wlan client wpa mode all +WARNING: untranslated string: wlan client wpa mode ccmp ccmp +WARNING: untranslated string: wlan client wpa mode ccmp tkip +WARNING: untranslated string: wlan client wpa mode tkip tkip WARNING: untranslated string: wlanap access point WARNING: untranslated string: wlanap channel WARNING: untranslated string: wlanap country diff --git a/doc/language_issues.pl b/doc/language_issues.pl index 0dea29c181..266361c35b 100644 --- a/doc/language_issues.pl +++ b/doc/language_issues.pl @@ -456,7 +456,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 @@ -488,7 +487,10 @@ WARNING: translation string unused: use dov WARNING: translation string unused: use ibod WARNING: translation string unused: view log WARNING: translation string unused: vpn aggrmode +<<<<<<< HEAD WARNING: translation string unused: vpn incompatible use of defaultroute +======= +>>>>>>> 1b23ab3... Implement wireless client on RED. WARNING: translation string unused: vpn mtu invalid WARNING: translation string unused: vpn on blue WARNING: translation string unused: vpn on green @@ -621,4 +623,34 @@ WARNING: untranslated string: system information WARNING: untranslated string: uptime load average WARNING: untranslated string: visit us at WARNING: untranslated string: vpn keyexchange +WARNING: untranslated string: wlan client +WARNING: untranslated string: wlan client advanced settings +WARNING: untranslated string: wlan client and +WARNING: untranslated string: wlan client bssid +WARNING: untranslated string: wlan client ccmp +WARNING: untranslated string: wlan client configuration +WARNING: untranslated string: wlan client disconnected +WARNING: untranslated string: wlan client duplicate ssid +WARNING: untranslated string: wlan client edit entry +WARNING: untranslated string: wlan client encryption +WARNING: untranslated string: wlan client encryption none +WARNING: untranslated string: wlan client encryption wep +WARNING: untranslated string: wlan client encryption wpa +WARNING: untranslated string: wlan client encryption wpa2 +WARNING: untranslated string: wlan client group cipher +WARNING: untranslated string: wlan client group key algorithm +WARNING: untranslated string: wlan client invalid key length +WARNING: untranslated string: wlan client new entry +WARNING: untranslated string: wlan client new network +WARNING: untranslated string: wlan client pairwise cipher +WARNING: untranslated string: wlan client pairwise key algorithm +WARNING: untranslated string: wlan client pairwise key group key +WARNING: untranslated string: wlan client psk +WARNING: untranslated string: wlan client ssid +WARNING: untranslated string: wlan client tkip +WARNING: untranslated string: wlan client wpa mode +WARNING: untranslated string: wlan client wpa mode all +WARNING: untranslated string: wlan client wpa mode ccmp ccmp +WARNING: untranslated string: wlan client wpa mode ccmp tkip +WARNING: untranslated string: wlan client wpa mode tkip tkip WARNING: untranslated string: wlanap country diff --git a/doc/language_issues.ru b/doc/language_issues.ru index b513b59f26..aa8e3edc54 100644 --- a/doc/language_issues.ru +++ b/doc/language_issues.ru @@ -449,7 +449,6 @@ WARNING: translation string unused: transparent on WARNING: translation string unused: umount WARNING: translation string unused: umount removable media before to unplug WARNING: translation string unused: unencrypted -WARNING: translation string unused: unknown WARNING: translation string unused: update transcript WARNING: translation string unused: updates WARNING: translation string unused: updates is old1 @@ -481,7 +480,10 @@ WARNING: translation string unused: use dov WARNING: translation string unused: use ibod WARNING: translation string unused: view log WARNING: translation string unused: vpn aggrmode +<<<<<<< HEAD WARNING: translation string unused: vpn incompatible use of defaultroute +======= +>>>>>>> 1b23ab3... Implement wireless client on RED. WARNING: translation string unused: vpn mtu invalid WARNING: translation string unused: vpn on blue WARNING: translation string unused: vpn on green @@ -585,4 +587,34 @@ WARNING: untranslated string: static routes WARNING: untranslated string: uptime load average WARNING: untranslated string: visit us at WARNING: untranslated string: vpn keyexchange +WARNING: untranslated string: wlan client +WARNING: untranslated string: wlan client advanced settings +WARNING: untranslated string: wlan client and +WARNING: untranslated string: wlan client bssid +WARNING: untranslated string: wlan client ccmp +WARNING: untranslated string: wlan client configuration +WARNING: untranslated string: wlan client disconnected +WARNING: untranslated string: wlan client duplicate ssid +WARNING: untranslated string: wlan client edit entry +WARNING: untranslated string: wlan client encryption +WARNING: untranslated string: wlan client encryption none +WARNING: untranslated string: wlan client encryption wep +WARNING: untranslated string: wlan client encryption wpa +WARNING: untranslated string: wlan client encryption wpa2 +WARNING: untranslated string: wlan client group cipher +WARNING: untranslated string: wlan client group key algorithm +WARNING: untranslated string: wlan client invalid key length +WARNING: untranslated string: wlan client new entry +WARNING: untranslated string: wlan client new network +WARNING: untranslated string: wlan client pairwise cipher +WARNING: untranslated string: wlan client pairwise key algorithm +WARNING: untranslated string: wlan client pairwise key group key +WARNING: untranslated string: wlan client psk +WARNING: untranslated string: wlan client ssid +WARNING: untranslated string: wlan client tkip +WARNING: untranslated string: wlan client wpa mode +WARNING: untranslated string: wlan client wpa mode all +WARNING: untranslated string: wlan client wpa mode ccmp ccmp +WARNING: untranslated string: wlan client wpa mode ccmp tkip +WARNING: untranslated string: wlan client wpa mode tkip tkip WARNING: untranslated string: wlanap country diff --git a/doc/language_missings b/doc/language_missings index 85e59ab738..b78b367b0e 100644 --- a/doc/language_missings +++ b/doc/language_missings @@ -120,6 +120,7 @@ < vpn keyexchange < wlanap access point < wlanap channel +< wlanap country < wlanap debugging < wlanap del interface < wlanap encryption @@ -138,6 +139,36 @@ < wlanap wlan services < wlanap wlan settings < wlanap wlan status +< wlan client +< wlan client advanced settings +< wlan client and +< wlan client bssid +< wlan client ccmp +< wlan client configuration +< wlan client disconnected +< wlan client duplicate ssid +< wlan client edit entry +< wlan client encryption +< wlan client encryption none +< wlan client encryption wep +< wlan client encryption wpa +< wlan client encryption wpa2 +< wlan client group cipher +< wlan client group key algorithm +< wlan client invalid key length +< wlan client new entry +< wlan client new network +< wlan client pairwise cipher +< wlan client pairwise key algorithm +< wlan client pairwise key group key +< wlan client psk +< wlan client ssid +< wlan client tkip +< wlan client wpa mode +< wlan client wpa mode all +< wlan client wpa mode ccmp ccmp +< wlan client wpa mode ccmp tkip +< wlan client wpa mode tkip tkip ############################################################################ # Checking install/setup translations for language: es # ############################################################################ @@ -264,6 +295,37 @@ < uptime load average < visit us at < vpn keyexchange +< wlanap country +< wlan client +< wlan client advanced settings +< wlan client and +< wlan client bssid +< wlan client ccmp +< wlan client configuration +< wlan client disconnected +< wlan client duplicate ssid +< wlan client edit entry +< wlan client encryption +< wlan client encryption none +< wlan client encryption wep +< wlan client encryption wpa +< wlan client encryption wpa2 +< wlan client group cipher +< wlan client group key algorithm +< wlan client invalid key length +< wlan client new entry +< wlan client new network +< wlan client pairwise cipher +< wlan client pairwise key algorithm +< wlan client pairwise key group key +< wlan client psk +< wlan client ssid +< wlan client tkip +< wlan client wpa mode +< wlan client wpa mode all +< wlan client wpa mode ccmp ccmp +< wlan client wpa mode ccmp tkip +< wlan client wpa mode tkip tkip ############################################################################ # Checking install/setup translations for language: pl # ############################################################################ @@ -365,6 +427,37 @@ < uptime load average < visit us at < vpn keyexchange +< wlanap country +< wlan client +< wlan client advanced settings +< wlan client and +< wlan client bssid +< wlan client ccmp +< wlan client configuration +< wlan client disconnected +< wlan client duplicate ssid +< wlan client edit entry +< wlan client encryption +< wlan client encryption none +< wlan client encryption wep +< wlan client encryption wpa +< wlan client encryption wpa2 +< wlan client group cipher +< wlan client group key algorithm +< wlan client invalid key length +< wlan client new entry +< wlan client new network +< wlan client pairwise cipher +< wlan client pairwise key algorithm +< wlan client pairwise key group key +< wlan client psk +< wlan client ssid +< wlan client tkip +< wlan client wpa mode +< wlan client wpa mode all +< wlan client wpa mode ccmp ccmp +< wlan client wpa mode ccmp tkip +< wlan client wpa mode tkip tkip ############################################################################ # Checking install/setup translations for language: ru # ############################################################################ @@ -472,4 +565,35 @@ < visit us at < vpn keyexchange < week-graph +< wlanap country +< wlan client +< wlan client advanced settings +< wlan client and +< wlan client bssid +< wlan client ccmp +< wlan client configuration +< wlan client disconnected +< wlan client duplicate ssid +< wlan client edit entry +< wlan client encryption +< wlan client encryption none +< wlan client encryption wep +< wlan client encryption wpa +< wlan client encryption wpa2 +< wlan client group cipher +< wlan client group key algorithm +< wlan client invalid key length +< wlan client new entry +< wlan client new network +< wlan client pairwise cipher +< wlan client pairwise key algorithm +< wlan client pairwise key group key +< wlan client psk +< wlan client ssid +< wlan client tkip +< wlan client wpa mode +< wlan client wpa mode all +< wlan client wpa mode ccmp ccmp +< wlan client wpa mode ccmp tkip +< wlan client wpa mode tkip tkip < year-graph diff --git a/html/cgi-bin/wirelessclient.cgi b/html/cgi-bin/wirelessclient.cgi new file mode 100755 index 0000000000..5ff0e2c427 --- /dev/null +++ b/html/cgi-bin/wirelessclient.cgi @@ -0,0 +1,703 @@ +#!/usr/bin/perl +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2012 IPFire Team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +# DEVICE,ENABLED,MODE,WPA_MODE,SSID,PSK,PRIO +# wlan0,on,WPA2,,Use This One Mum,ThisIsTheKey,2 + +use strict; + +# enable only the following on debugging purpose +use warnings; +use CGI::Carp 'fatalsToBrowser'; + +require '/var/ipfire/general-functions.pl'; +require "${General::swroot}/lang.pl"; +require "${General::swroot}/header.pl"; + +#workaround to suppress a warning when a variable is used only once +my @dummy = ( ${Header::colouryellow} ); +undef (@dummy); + +# Files used +my $setting = "${General::swroot}/main/settings"; +our $datafile = "${General::swroot}/ethernet/wireless"; + +my %color = (); +my %mainsettings = (); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); + +our %settings = (); +our %netsettings = (); + +$settings{'ID'} = ''; +$settings{'INTERFACE'} = ''; +$settings{'ENABLED'} = ''; +$settings{'ENCRYPTION'} = ''; +$settings{'WPA_MODE'} = ''; +$settings{'SSID'} = ''; +$settings{'PSK'} = ''; +$settings{'PRIO'} = ''; + +$settings{'ACTION'} = ''; # add/edit/remove +$settings{'ID'} = ''; # point record for ACTION + +my $errormessage = ''; +my $warnmessage = ''; + +&Header::showhttpheaders(); + +#Get GUI values +&Header::getcgihash(\%settings); + +# Load multiline data +our @configs = (); +if (open(FILE, "$datafile")) { + @configs = ; + close (FILE); +} + +&General::readhash("${General::swroot}/main/settings", \%settings); +&General::readhash("${General::swroot}/ethernet/settings", \%netsettings); + +# Toggle enable/disable field. +if ($settings{'ACTION'} eq $Lang::tr{'toggle enable disable'}) { + my @update; + + foreach my $line (@configs) { + chomp($line); + my @config = split(/\,/, $line); + + # Update the entry with the matching ID. + if ($config[0] eq $settings{'ID'}) { + # Toggle enabled/disabled status. + + if ($config[2] eq 'on') { + $config[2] = 'off'; + } else { + $config[2] = 'on'; + } + + $line = join(',', @config); + } + + push(@update, $line."\n"); + } + + # Save updated configuration settings. + open(FILE, ">$datafile") or die 'wlan client datafile error'; + print FILE @update; + close(FILE); + + @configs = @update; + + # Update configuration files. + &BuildConfiguration(); + + # Reset ACTION. + $settings{'ACTION'} = ''; +} + +if ($settings{'ACTION'} eq $Lang::tr{'add'}) { + # Validate input data. + $errormessage = ValidateInput("add"); + + unless ($errormessage) { + # Search for the next free id. + my $next_id = NextID(); + + my @config = ($next_id); + push(@config, $settings{'INTERFACE'}); + push(@config, $settings{'ENABLED'}); + push(@config, $settings{'ENCRYPTION'}); + push(@config, $settings{'WPA_MODE'}); + push(@config, $settings{'SSID'}); + push(@config, $settings{'PSK'}); + push(@config, $settings{'PRIO'}); + + # Add the new configuration and write all the stuff to the configuration file. + my $line = join(',', @config) . "\n"; + push(@configs, $line); + + # Save updated configuration settings. + open(FILE, ">$datafile") or die 'wlan client datafile error'; + print FILE @configs; + close(FILE); + + # Update configuration files. + &BuildConfiguration(); + + # Reset ACTION. + $settings{'ACTION'} = ''; + } +} + +if ($settings{'ACTION'} eq $Lang::tr{'edit'}) { + foreach my $line (@configs) { + chomp($line); + my @config = split(/\,/, $line); + + if ($config[0] eq $settings{'ID'}) { + $settings{'ID'} = $config[0]; + $settings{'INTERFACE'} = $config[1]; + $settings{'ENABLED'} = $config[2]; + $settings{'ENCRYPTION'} = $config[3]; + $settings{'WPA_MODE'} = $config[4]; + $settings{'SSID'} = $config[5]; + $settings{'PSK'} = $config[6]; + $settings{'PRIO'} = $config[7]; + } + } +} + +if ($settings{'ACTION'} eq $Lang::tr{'update'}) { + $errormessage = ValidateInput("update"); + + unless ($errormessage) { + my @update; + foreach my $line (@configs) { + chomp($line); + my @config = split(/\,/, $line); + + # Update the entry with the matching ID. + if ($config[0] eq $settings{'ID'}) { + # Update all configuration settings. + # ID and INTERFACE cannot be changed. + $config[2] = $settings{'ENABLED'}; + $config[3] = $settings{'ENCRYPTION'}; + $config[4] = $settings{'WPA_MODE'}; + $config[5] = $settings{'SSID'}; + $config[6] = $settings{'PSK'}; + $config[7] = $settings{'PRIO'}; + + $line = join(',', @config); + } + + push(@update, $line."\n"); + } + + # Save updated configuration settings. + open(FILE, ">$datafile") or die 'wlan client datafile error'; + print FILE @update; + close(FILE); + + @configs = @update; + + # Update configuration files. + &BuildConfiguration(); + + # Reset ACTION. + $settings{'ACTION'} = ''; + } +} + +if ($settings{'ACTION'} eq $Lang::tr{'remove'}) { + my @update; + + foreach my $line (@configs) { + chomp($line); + my @config = split(/\,/, $line); + + # Skip the to be removed entry. + if ($config[0] eq $settings{'ID'}) { + next; + } + + push(@update, $line."\n"); + } + + # Save updated configuration settings. + open(FILE, ">$datafile") or die 'wlan client datafile error'; + print FILE @update; + close(FILE); + + @configs = @update; + + # Update configuration files. + &BuildConfiguration(); + + # Reset ACTION. + $settings{'ACTION'} = ''; +} + +if ($settings{'ACTION'} eq '') { # First launch from GUI + &showMainBox(); +} else { + # Action has been set, so show the edit box. + &showEditBox(); +} + +sub showMainBox() { + &Header::openpage($Lang::tr{'wlan client configuration'}, 1, ''); + &Header::openbigbox('100%', 'left', '', $errormessage); + + &Header::openbox('100%', 'left', $Lang::tr{'wlan client configuration'}); + + print < + + + +


+ + + + + + + +END + + # + # Print each line of @configs list + # + + my $key = 0; + foreach my $line (@configs) { + # Skip commented lines. + my $firstchar = substr($line, 0, 1); + next if ($firstchar eq "#"); + + chomp($line); + my @config = split(/\,/,$line); + + #Choose icon for checkbox + my $gif = ''; + my $gdesc = ''; + if ($config[2] eq 'on' ) { + $gif = 'on.gif'; + $gdesc = $Lang::tr{'click to disable'}; + } else { + $gif = 'off.gif'; + $gdesc = $Lang::tr{'click to enable'}; + } + + # Colorize each line + if ($key % 2) { + print ""; + } else { + print ""; + } + + my $encryption_mode = $Lang::tr{'unknown'}; + if ($config[3] eq "NONE") { + $encryption_mode = $Lang::tr{'wlan client encryption none'}; + } elsif ($config[3] eq "WEP") { + $encryption_mode = $Lang::tr{'wlan client encryption wep'}; + } elsif ($config[3] eq "WPA") { + $encryption_mode = $Lang::tr{'wlan client encryption wpa'}; + } elsif ($config[3] eq "WPA2") { + $encryption_mode = $Lang::tr{'wlan client encryption wpa2'}; + } + + if (($config[3] eq "WPA") || ($config[3] eq "WPA2")) { + my $wpa_pairwise = "$Lang::tr{'wlan client ccmp'} $Lang::tr{'wlan client and'} $Lang::tr{'wlan client tkip'}"; + my $wpa_group = "$Lang::tr{'wlan client ccmp'} $Lang::tr{'wlan client and'} $Lang::tr{'wlan client tkip'}"; + + if ($config[4] eq "CCMP-CCMP") { + $wpa_pairwise = $Lang::tr{'wlan client ccmp'}; + $wpa_group = $Lang::tr{'wlan client ccmp'}; + } elsif ($config[4] eq "CCMP-TKIP") { + $wpa_pairwise = $Lang::tr{'wlan client ccmp'}; + $wpa_group = $Lang::tr{'wlan client tkip'}; + } elsif ($config[4] eq "TKIP-TKIP") { + $wpa_pairwise = $Lang::tr{'wlan client tkip'}; + $wpa_group = $Lang::tr{'wlan client tkip'}; + } + + $encryption_mode .= "
"; + $encryption_mode .= "$Lang::tr{'wlan client pairwise key algorithm'}: "; + $encryption_mode .= $wpa_pairwise; + $encryption_mode .= "
"; + $encryption_mode .= "$Lang::tr{'wlan client group key algorithm'}: "; + $encryption_mode .= $wpa_group; + } + + print <$config[5] + + + + + + +END + $key++; + } + print "
$Lang::tr{'wlan client ssid'}$Lang::tr{'wlan client encryption'}$Lang::tr{'priority'}
$encryption_mode$config[7] +
+ + + +
+
+
+ + + +
+
+
+ + + +
+
"; + + # If table contains entries, print 'Key to action icons' + if ($key) { + print < + +  $Lang::tr{'legend'}:  + $Lang::tr{ + $Lang::tr{'click to disable'} +    + $Lang::tr{ + $Lang::tr{'click to enable'} +    + $Lang::tr{ + $Lang::tr{'edit'} +    + $Lang::tr{ + $Lang::tr{'remove'} + + +END + } + + &Header::closebox(); + + # Show status box. + &ShowStatus(); + + &Header::closebigbox(); + &Header::closepage(); +} + +sub showEditBox() { + &Header::openpage($Lang::tr{'wlan client configuration'}, 1, ''); + &Header::openbigbox('100%', 'left', '', $errormessage); + + if ($errormessage) { + &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); + print "$errormessage "; + &Header::closebox(); + } + + my $buttontext = $Lang::tr{'add'}; + if ($settings{'ID'} ne '') { + $buttontext = $Lang::tr{'update'}; + &Header::openbox('100%', 'left', $Lang::tr{'wlan client edit entry'}); + } else { + &Header::openbox('100%', 'left', $Lang::tr{'wlan client new entry'}); + $settings{'ENABLED'} = 'on'; + } + my $action = $buttontext; + + my %checked = (); + $checked{'ENABLED'} = ($settings{'ENABLED'} ne 'on' ) ? '' : "checked='checked'"; + + my %selected = (); + $selected{'ENCRYPTION'} = (); + $selected{'ENCRYPTION'}{'NONE'} = ''; + $selected{'ENCRYPTION'}{'WPA2'} = ''; + $selected{'ENCRYPTION'}{'WPA'} = ''; + $selected{'ENCRYPTION'}{'WEP'} = ''; + $selected{'ENCRYPTION'}{$settings{'ENCRYPTION'}} = "selected='selected'"; + + $selected{'WPA_MODE'} = (); + $selected{'WPA_MODE'}{''} = ''; + $selected{'WPA_MODE'}{'CCMP-CCMP'} = ''; + $selected{'WPA_MODE'}{'CCMP-TKIP'} = ''; + $selected{'WPA_MODE'}{'TKIP-TKIP'} = ''; + $selected{'WPA_MODE'}{$settings{'WPA_MODE'}} = "selected='selected'"; + + $selected{'PRIO'} = (); + $selected{'PRIO'}{'0'} = ''; + $selected{'PRIO'}{'1'} = ''; + $selected{'PRIO'}{'2'} = ''; + $selected{'PRIO'}{'3'} = ''; + $selected{'PRIO'}{'4'} = ''; + $selected{'PRIO'}{$settings{'PRIO'}} = "selected='selected'"; + + print < + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'wlan client ssid'}:$Lang::tr{'enabled'}
$Lang::tr{'wlan client encryption'}: + +
$Lang::tr{'wlan client psk'}: 
+ +
+
+ + + $Lang::tr{'wlan client advanced settings'}: + + + + + + + + + + + + + +
+ $Lang::tr{'wlan client wpa mode'}: + + + + ($Lang::tr{'wlan client pairwise key group key'}) +
+ $Lang::tr{'priority'}: + + +
+ +
+
+ + + + + +
+ + +
+ +END + &Header::closebox(); + + &Header::closebigbox(); + &Header::closepage(); +} + +sub ShowStatus() { + my $device = $netsettings{'RED_DEV'}; + + # Exit if no device is configured. + return if ($device eq ""); + + # Exit if wpa_supplicant is not running on this interface. + #return if (! -e "/var/run/wpa_supplicant/$device"); + + open(FILE, "/usr/local/bin/wirelessclient status |"); + + my %status = (); + while () { + chomp($_); + + my ($key, $value) = split("=", $_); + $status{$key} = $value; + } + + close(FILE); + + # End here, if no there is no input. + return if (!keys %status); + + &Header::openbox('100%', 'left', $Lang::tr{'status'}); + + if ($status{'ssid'} eq "") { + print "

$Lang::tr{'wlan client disconnected'}

"; + + } else { + print < + + + $Lang::tr{'wlan client ssid'} + + + $status{'ssid'} + + + + + $Lang::tr{'wlan client bssid'} + + + $status{'bssid'} + + +END + + if (($status{'pairwise_cipher'} ne "NONE") || ($status{'group_cipher'} ne "NONE")) { + print < + + $Lang::tr{'wlan client encryption wpa'} + + + + + $Lang::tr{'wlan client pairwise cipher'} + + + $status{'pairwise_cipher'} + + + + + $Lang::tr{'wlan client group cipher'} + + + $status{'group_cipher'} + + +END + } + + print ""; + } + + &Header::closebox(); +} + +sub BuildConfiguration() { + system("/usr/local/bin/wirelessclient restart"); +} + +sub NextID() { + my $highest_id = 0; + foreach my $line (@configs) { + # Skip commented lines. + my $firstchar = substr($line, 0, 1); + next if ($firstchar eq "#"); + + my @config = split(/\,/, $line); + if ($config[0] > $highest_id) { + $highest_id = $config[0]; + } + } + + return $highest_id + 1; +} + +sub DuplicateSSID($) { + my $ssid = shift; + + foreach my $line (@configs) { + # Skip commented lines. + my $firstchar = substr($line, 0, 1); + next if ($firstchar eq "#"); + + my @config = split(/\,/, $line); + if ($config[5] eq $ssid) { + return 1; + } + } + + return 0; +} + +sub ValidKeyLength($$) { + my $algo = shift; + my $key = shift; + + my $key_length = length($key); + + if ($algo eq "WEP") { + # Key must be 13 or 26 characters. + if (($key_length == 13) || ($key_length == 26)) { + return 0; + } + + return 1; + + } elsif (($algo eq "WPA2") || ($algo eq "WPA")) { + # Key must be between 8 and 63 chars. + if (($key_length >= 8) && ($key_length <= 63)) { + return 0; + } + + return 1; + } + + # Say okay for all other algorithms. + return 0; +} + +sub ValidateInput($) { + my $mode = shift; + + # Check for duplicate SSIDs. + if (($mode eq "add") && (DuplicateSSID($settings{'SSID'}))) { + return "$Lang::tr{'wlan client duplicate ssid'}: $settings{'SSID'}"; + + # Check for invalid key length. + } elsif (ValidKeyLength($settings{'ENCRYPTION'}, $settings{'PSK'})) { + return "$Lang::tr{'wlan client invalid key length'}"; + + } + + # Reset WPA mode, if WPA(2) is not selected. + if (($settings{'ENCRYPTION'} ne "WPA") && ($settings{'ENCRYPTION'} ne "WPA2")) { + $settings{'WPA_MODE'} = ''; + } + + if ($settings{'ENABLED'} ne "") { + $settings{'ENABLED'} = 'on'; + } else { + $settings{'ENABLED'} = 'off'; + } + + return; +} diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 6275d8a078..84b102f36b 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -2212,8 +2212,39 @@ 'wireless config added' => 'Wireless-Konfiguration hinzugefügt', 'wireless config changed' => 'Wireless-Konfiguration geändert', 'wireless configuration' => 'Wireless-Konfiguration', +'wlan client' => 'WLAN-Client', +'wlan client advanced settings' => 'Erweiterte Einstellungen', +'wlan client and' => 'und', +'wlan client bssid' => 'BSSID', +'wlan client ccmp' => 'CCMP', +'wlan client configuration' => 'WLAN-Client-Konfiguration', +'wlan client disconnected' => 'Nicht verbunden', +'wlan client duplicate ssid' => 'Doppelte SSID', +'wlan client edit entry' => 'Verbindung bearbeiten', +'wlan client encryption' => 'Verschlüsselung', +'wlan client encryption none' => 'Keine', +'wlan client encryption wep' => 'WEP', +'wlan client encryption wpa' => 'WPA', +'wlan client encryption wpa2' => 'WPA2', +'wlan client group cipher' => 'Gruppenchiffre', +'wlan client group key algorithm' => 'GKA', +'wlan client invalid key length' => 'Ungültige Schlüssellänge.', +'wlan client new entry' => 'Neue WLAN-Client-Konfiguration erstellen', +'wlan client new network' => 'Neues Netzwerk', +'wlan client pairwise cipher' => 'Paarweise Chiffre', +'wlan client pairwise key algorithm' => 'PKA', +'wlan client pairwise key group key' => 'Paarweise-/Gruppenschlüssel', +'wlan client psk' => 'Schlüssel', +'wlan client ssid' => 'SSID', +'wlan client tkip' => 'TKIP', +'wlan client wpa mode' => 'WPA-Modus', +'wlan client wpa mode all' => 'Automatisch', +'wlan client wpa mode ccmp ccmp' => 'CCMP-CCMP', +'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP', +'wlan client wpa mode tkip tkip' => 'TKIP-TKIP', 'wlanap access point' => 'Access Point', 'wlanap channel' => 'Kanal', +'wlanap country' => 'Ländercode', 'wlanap debugging' => 'Debugging', 'wlanap del interface' => 'Ausgewähltes Interface zurücksetzen?', 'wlanap encryption' => 'Verschlüsselung', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index 75138f5577..8ff2608a0a 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -2246,6 +2246,36 @@ 'wireless config added' => 'Wireless config added', 'wireless config changed' => 'Wireless config changed', 'wireless configuration' => 'Wireless Configuration', +'wlan client' => 'Wireless client', +'wlan client advanced settings' => 'Advanced settings', +'wlan client and' => 'and', +'wlan client bssid' => 'BSSID', +'wlan client ccmp' => 'CCMP', +'wlan client configuration' => 'Wireless Client Configuration', +'wlan client disconnected' => 'Disconnected', +'wlan client duplicate ssid' => 'Duplicate SSID', +'wlan client edit entry' => 'Edit wireless client configuration', +'wlan client encryption' => 'Encryption', +'wlan client encryption none' => 'None', +'wlan client encryption wep' => 'WEP', +'wlan client encryption wpa' => 'WPA', +'wlan client encryption wpa2' => 'WPA2', +'wlan client group cipher' => 'Group cipher', +'wlan client group key algorithm' => 'GKA', +'wlan client invalid key length' => 'Invalid key length.', +'wlan client new entry' => 'Create new wireless client configuration', +'wlan client new network' => 'New network', +'wlan client pairwise cipher' => 'Pairwise cipher', +'wlan client pairwise key algorithm' => 'PKA', +'wlan client pairwise key group key' => 'Pairwise key/group key', +'wlan client psk' => 'Pre-shared key', +'wlan client ssid' => 'SSID', +'wlan client tkip' => 'TKIP', +'wlan client wpa mode' => 'WPA mode', +'wlan client wpa mode all' => 'Auto', +'wlan client wpa mode ccmp ccmp' => 'CCMP-CCMP', +'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP', +'wlan client wpa mode tkip tkip' => 'TKIP-TKIP', 'wlanap access point' => 'Access Point', 'wlanap channel' => 'Channel', 'wlanap country' => 'Country Code', diff --git a/src/initscripts/init.d/wlanclient b/src/initscripts/init.d/wlanclient new file mode 100755 index 0000000000..80be8f987c --- /dev/null +++ b/src/initscripts/init.d/wlanclient @@ -0,0 +1,276 @@ +#!/bin/sh +######################################################################## +# Begin $rc_base/init.d/wlan_client +# +# Description : Wireless client initscript +# +######################################################################## + +. /etc/sysconfig/rc +. ${rc_functions} + +eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings) + +WIRELESS_CONFIG="/var/ipfire/ethernet/wireless" + +function device_is_wireless() { + local device=${1} + + if [ -d "/sys/class/net/${device}/wireless" ]; then + return 0 + fi + + return 1 +} + +function wpa_supplicant_make_config() { + local device=${1} + local config=${2} + shift 2 + + # Check if device is wireless. + local wireless="false" + if device_is_wireless ${device}; then + wireless="true" + fi + + # Write a configuration file header. + ( + echo "#" + echo "# THIS FILE IS AUTOMATICALLY GENERATED AND" + echo "# ANY CUSTOM CHANGES WILL BE OVERWRITTEN!" + echo "#" + echo + echo "ctrl_interface=/var/run/wpa_supplicant" + echo + ) > ${config} + + local items=0 + + local line + while IFS="," read -ra line; do + # Skip commented lines. + [ "${line:0:1}" = "#" ] && continue + + # Skip disabled entries. + [ "${line[2]}" = "on" ] || continue + + wpa_supplicant_config_line \ + ${device} ${config} \ + --wireless="${wireless}" \ + --mode="${line[3]}" \ + --wpa-mode="${line[4]}" \ + --ssid="${line[5]}" \ + --psk="${line[6]}" \ + --priority="${line[7]}" + + items=$(( ${items} + 1 )) + + done < ${WIRELESS_CONFIG} + + # Return exit code 2, when there are no entries in the + # configuration file. + if [ "${items}" = "0" ]; then + return 2 + fi + + return 0 +} + +function wpa_supplicant_config_line() { + local device=${1} + local config=${2} + shift 2 + + local auth_alg + local proto + local key_mgmt + local pairwise + local group + local mode + local priority + local psk + local ssid + local wep_tx_keyidx + local wep_key0 + local wireless="true" + local wpa_mode + + while [ $# -gt 0 ]; do + case "${1}" in + --mode=*) + mode=${1#--mode=} + ;; + --priority=*) + priority=${1#--priority=} + ;; + --psk=*) + psk=${1#--psk=} + ;; + --ssid=*) + ssid=${1#--ssid=} + ;; + --wireless=*) + wireless=${1#--wireless=} + ;; + --wpa-mode=*) + wpa_mode=${1#--wpa-mode=} + ;; + esac + shift + done + + case "${mode}" in + WPA2) + auth_alg="OPEN" + proto="RSN" + key_mgmt="WPA-PSK" + ;; + WPA) + auth_alg="OPEN" + proto="WPA" + key_mgmt="WPA-PSK" + ;; + WEP) + auth_alg="SHARED" + key_mgmt="NONE" + + wep_tx_keyidx=0 + wep_key0=${psk} + psk="" + ;; + NONE) + auth_alg="OPEN" + key_mgmt="NONE" + ;; + *) + # Unsupported mode. + return 1 + ;; + esac + + if [ "${mode}" = "WPA" -o "${mode}" = "WPA2" ]; then + case "${wpa_mode}" in + CCMP-CCMP) + pairwise="CCMP" + group="CCMP" + ;; + CCMP-TKIP) + pairwise="CCMP" + group="TKIP" + ;; + TKIP-TKIP) + pairwise="TKIP" + group="TKIP" + ;; + *) + pairwise="CCMP TKIP" + group="CCMP TKIP" + ;; + esac + fi + + ( + echo "network={" + + if [ -n "${ssid}" ]; then + echo " ssid=\"${ssid}\"" + fi + if [ "${wireless}" = "true" ]; then + echo " scan_ssid=1" + fi + if [ -n "${auth_alg}" ]; then + echo " auth_alg=${auth_alg}" + fi + if [ -n "${key_mgmt}" ]; then + echo " key_mgmt=${key_mgmt}" + fi + if [ -n "${psk}" ]; then + echo " psk=\"${psk}\"" + fi + if [ -n "${wep_tx_keyidx}" ]; then + echo " wep_tx_keyidx=${wep_tx_keyidx}" + fi + if [ -n "${wep_key0}" ]; then + echo " wep_key0=\"${wep_key0}\"" + fi + if [ -n "${proto}" ]; then + echo " proto=${proto}" + fi + if [ -n "${pairwise}" -a -n "${group}" ]; then + echo " pairwise=${pairwise}" + echo " group=${group}" + fi + if [ -n "${priority}" ]; then + echo " priority=${priority}" + fi + + echo "}" + echo + ) >> ${config} +} + +function wpa_supplicant_start() { + local device=${1} + local config="/etc/wpa_supplicant.conf" + + # Write configuration file. + wpa_supplicant_make_config ${device} ${config} + [ $? -eq 0 ] || return 0 + + # Build wpa_supplicant command line. + local wpa_suppl_cmd="wpa_supplicant -B -qqq -i${device} -c${config}" + + if device_is_wireless ${device}; then + wpa_suppl_cmd="${wpa_suppl_cmd} -Dwext" + else + wpa_suppl_cmd="${wpa_suppl_cmd} -Dwired" + fi + + # Run the shiz. + boot_mesg "Starting wireless client on ${RED_DEV}..." + loadproc ${wpa_suppl_cmd} + + # Run wpa_cli to handle reconnection events. + boot_mesg "Starting wireless event handler on ${RED_DEV}..." + wpa_cli -B -a /etc/rc.d/init.d/networking/wpa_supplicant.exe +} + +function wpa_supplicant_stop() { + boot_mesg "Stopping wireless event handler on ${RED_DEV}..." + killproc wpa_cli + + boot_mesg "Stopping wireless client on ${RED_DEV}..." + killproc wpa_supplicant +} + +case "${1}" in + start) + if [ -n "${RED_DEV}" ] && device_is_wireless ${RED_DEV}; then + wpa_supplicant_start ${RED_DEV} + fi + ;; + + stop) + if [ -n "${RED_DEV}" ] && device_is_wireless ${RED_DEV}; then + wpa_supplicant_stop + fi + ;; + + restart) + ${0} stop + sleep 1 + ${0} start + ;; + + status) + statusproc wpa_supplicant + ;; + + *) + echo "Usage: ${0} {start|stop|restart|status}" + exit 1 + ;; +esac + +# End $rc_base/init.d/wlan_client diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile index cc33266d0c..0a4fda63e0 100644 --- a/src/misc-progs/Makefile +++ b/src/misc-progs/Makefile @@ -33,7 +33,8 @@ SUID_PROGS = setdmzholes setportfw setxtaccess \ redctrl syslogdctrl extrahdctrl sambactrl upnpctrl tripwirectrl \ smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \ setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \ - getconntracktable + getconntracktable wirelessclient +SUID_UPDX = updxsetperms install : all install -m 755 $(PROGS) /usr/local/bin @@ -157,3 +158,6 @@ rebuildroutes: rebuildroutes.c setuid.o ../install+setup/libsmooth/varval.o getconntracktable: getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o $(COMPILE) -I../install+setup/libsmooth/ getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o -o $@ + +wirelessclient: wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o + $(COMPILE) -I../install+setup/libsmooth/ wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o -o $@ diff --git a/src/misc-progs/wirelessclient.c b/src/misc-progs/wirelessclient.c new file mode 100644 index 0000000000..c85e5316fa --- /dev/null +++ b/src/misc-progs/wirelessclient.c @@ -0,0 +1,26 @@ +/* IPFire helper program - wirelessclient + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + */ + +#include +#include +#include "setuid.h" + +int main(int argc, char *argv[]) { + if (!(initsetuid())) + exit(1); + + if (strcmp(argv[1], "restart") == 0) { + safe_system("/etc/rc.d/init.d/wlanclient restart >/dev/null 2>&1"); + return 0; + } + + if (strcmp(argv[1], "status") == 0) { + safe_system("/usr/sbin/wpa_cli status verbose"); + return 0; + } + + return 0; +} -- 2.39.2