From: git@ipfire.org
To: ipfire-scm@lists.ipfire.org
Subject: [git.ipfire.org] IPFire 2.x development tree branch, next, updated. e2a9e21f68c848af352330b2fc9af63daaf6c5aa
Date: Sat, 06 Jul 2013 17:01:11 +0200 [thread overview]
Message-ID: <20130706150113.11D31201F3@argus.ipfire.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 72501 bytes --]
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".
The branch, next has been updated
via e2a9e21f68c848af352330b2fc9af63daaf6c5aa (commit)
via 57097305a610383d013c87ef32ae117c18846e46 (commit)
via 71ea0d688d77705e53dae8931b1c3e2b477ed8fa (commit)
via 61027579bbb5822d06ac41c7cdf259c49377b837 (commit)
from b63dc827f21fa617246ec0aa1d8a690f46b4f58e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit e2a9e21f68c848af352330b2fc9af63daaf6c5aa
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date: Sat Jul 6 17:00:40 2013 +0200
core71: add wlanclient to updater.
commit 57097305a610383d013c87ef32ae117c18846e46
Merge: b63dc82 71ea0d6
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date: Sat Jul 6 11:50:01 2013 +0200
Merge remote-tracking branch 'stevee/wlan-client' into next
Conflicts:
config/cfgroot/general-functions.pl
commit 71ea0d688d77705e53dae8931b1c3e2b477ed8fa
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date: Sun Jun 2 15:00:25 2013 +0200
Add wireless client for RED to startup process.
http://wishlist.ipfire.org/wish/wireless-client-on-red
commit 61027579bbb5822d06ac41c7cdf259c49377b837
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date: Thu Jan 10 16:07:52 2013 +0100
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
-----------------------------------------------------------------------
Summary of changes:
config/cfgroot/general-functions.pl | 22 +
config/cfgroot/header.pl | 4 +
config/menu/10-system.menu | 6 +
config/rootfiles/common/armv5tel/initscripts | 1 +
config/rootfiles/common/i586/initscripts | 6 +
config/rootfiles/common/misc-progs | 1 +
config/rootfiles/core/71/filelists/files | 13 +
config/rootfiles/core/71/update.sh | 2 +-
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 +
lfs/initscripts | 3 +
.../init.d/networking/functions.network | 154 +++++
src/initscripts/init.d/networking/red | 127 +---
.../init.d/networking/wpa_supplicant.exe | 50 ++
src/initscripts/init.d/wlanclient | 283 +++++++++
src/misc-progs/Makefile | 6 +-
.../{updxsetperms.c => wirelessclient.c} | 22 +-
25 files changed, 1597 insertions(+), 126 deletions(-)
create mode 100755 html/cgi-bin/wirelessclient.cgi
create mode 100755 src/initscripts/init.d/networking/functions.network
mode change 100644 => 100755 src/initscripts/init.d/networking/red
create mode 100755 src/initscripts/init.d/networking/wpa_supplicant.exe
create mode 100755 src/initscripts/init.d/wlanclient
copy src/misc-progs/{updxsetperms.c => wirelessclient.c} (50%)
Difference in files:
diff --git a/config/cfgroot/general-functions.pl b/config/cfgroot/general-functions.pl
index 90eacbd..3cdb36f 100644
--- a/config/cfgroot/general-functions.pl
+++ b/config/cfgroot/general-functions.pl
@@ -1008,4 +1008,26 @@ sub MakeUserAgent() {
return $user_agent;
}
+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 0f10bf9..a7f209d 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 9248663..b56a1ec 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 a4fa8a7..17bbdb7 100644
--- a/config/rootfiles/common/armv5tel/initscripts
+++ b/config/rootfiles/common/armv5tel/initscripts
@@ -132,6 +132,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 606f8ea..55cee86 100644
--- a/config/rootfiles/common/i586/initscripts
+++ b/config/rootfiles/common/i586/initscripts
@@ -66,6 +66,7 @@ etc/rc.d/init.d/network-vlans
etc/rc.d/init.d/networking/any
etc/rc.d/init.d/networking/blue
etc/rc.d/init.d/networking/dhcpcd.exe
+etc/rc.d/init.d/networking/functions.network
etc/rc.d/init.d/networking/green
etc/rc.d/init.d/networking/orange
etc/rc.d/init.d/networking/red
@@ -96,6 +97,7 @@ etc/rc.d/init.d/networking/red.up/98-leds
etc/rc.d/init.d/networking/red.up/99-U-dialctrl.pl
etc/rc.d/init.d/networking/red.up/99-fireinfo
etc/rc.d/init.d/networking/red.up/99-pakfire-update
+etc/rc.d/init.d/networking/wpa_supplicant.exe
#etc/rc.d/init.d/nfs-server
etc/rc.d/init.d/ntp
#etc/rc.d/init.d/nut
@@ -135,6 +137,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
@@ -152,6 +155,7 @@ etc/rc.d/rc0.d/K49cyrus-sasl
etc/rc.d/rc0.d/K78snort
etc/rc.d/rc0.d/K79leds
etc/rc.d/rc0.d/K80network
+etc/rc.d/rc0.d/K82wlanclient
#etc/rc.d/rc0.d/K84bluetooth
#etc/rc.d/rc0.d/K85messagebus
etc/rc.d/rc0.d/K85tmpfs
@@ -170,6 +174,7 @@ etc/rc.d/rc3.d/S12acpid
#etc/rc.d/rc3.d/S16bluetooth
#etc/rc.d/rc3.d/S18cpufreq
etc/rc.d/rc3.d/S19smartenabler
+etc/rc.d/rc3.d/S19wlanclient
etc/rc.d/rc3.d/S20network
etc/rc.d/rc3.d/S21leds
etc/rc.d/rc3.d/S24cyrus-sasl
@@ -200,6 +205,7 @@ etc/rc.d/rc6.d/K49cyrus-sasl
etc/rc.d/rc6.d/K78snort
etc/rc.d/rc6.d/K79leds
etc/rc.d/rc6.d/K80network
+etc/rc.d/rc6.d/K82wlanclient
#etc/rc.d/rc6.d/K84bluetooth
#etc/rc.d/rc6.d/K85messagebus
etc/rc.d/rc6.d/K85tmpfs
diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs
index d2cf710..3f48f83 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/config/rootfiles/core/71/filelists/files b/config/rootfiles/core/71/filelists/files
index 409e5fe..51d4ff4 100644
--- a/config/rootfiles/core/71/filelists/files
+++ b/config/rootfiles/core/71/filelists/files
@@ -1,2 +1,15 @@
etc/system-release
etc/issue
+var/ipfire/general-functions.pl
+var/ipfire/header.pl
+var/ipfire/menu.d/10-system.menu
+etc/rc.d/init.d/wlanclient
+etc/rc.d/init.d/networking/functions.network
+etc/rc.d/init.d/networking/wpa_supplicant.exe
+etc/rc.d/init.d/networking/red
+etc/rc.d/rc0.d/K82wlanclient
+etc/rc.d/rc3.d/S19wlanclient
+etc/rc.d/rc6.d/K82wlanclient
+usr/local/bin/wirelessclient
+srv/web/ipfire/cgi-bin/wirelessclient.cgi
+var/ipfire/langs
diff --git a/config/rootfiles/core/71/update.sh b/config/rootfiles/core/71/update.sh
index a8cfe04..c83ffef 100644
--- a/config/rootfiles/core/71/update.sh
+++ b/config/rootfiles/core/71/update.sh
@@ -44,7 +44,7 @@ extract_files
#
#Update Language cache
-#perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
sync
diff --git a/doc/language_issues.de b/doc/language_issues.de
index de0c4d3..6c4a5d8 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 d7a7d72..8f530a3 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 0dea29c..266361c 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 bec7223..f4f1131 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 0dea29c..266361c 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 b513b59..aa8e3ed 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 85e59ab..b78b367 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 0000000..5ff0e2c
--- /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 <info(a)ipfire.org> #
+# #
+# 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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+# 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 = <FILE>;
+ 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;
+ <form method='POST' action='$ENV{'SCRIPT_NAME'}' style='text-align: center;'>
+ <input type='submit' name='ACTION' value='$Lang::tr{'wlan client new network'}' />
+ </form>
+
+ <br><hr><br>
+
+ <table width="100%">
+ <tr>
+ <th align='center'>$Lang::tr{'wlan client ssid'}</th>
+ <th align='center'>$Lang::tr{'wlan client encryption'}</th>
+ <th align='center'>$Lang::tr{'priority'}</th>
+ </tr>
+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 "<tr bgcolor='$color{'color22'}'>";
+ } else {
+ print "<tr bgcolor='$color{'color20'}'>";
+ }
+
+ 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 .= "<hr>";
+ $encryption_mode .= "<strong>$Lang::tr{'wlan client pairwise key algorithm'}</strong>: ";
+ $encryption_mode .= $wpa_pairwise;
+ $encryption_mode .= "<br>";
+ $encryption_mode .= "<strong>$Lang::tr{'wlan client group key algorithm'}</strong>: ";
+ $encryption_mode .= $wpa_group;
+ }
+
+ print <<END;
+ <td align='center'>$config[5]</td>
+ <td align='center'>$encryption_mode</td>
+ <td align='center'>$config[7]</td>
+ <td align='center' width='5%'>
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='ACTION' value='$Lang::tr{'toggle enable disable'}' />
+ <input type='image' name='$Lang::tr{'toggle enable disable'}' src='/images/$gif' alt='$gdesc' title='$gdesc' />
+ <input type='hidden' name='ID' value='$config[0]' />
+ </form>
+ </td>
+ <td align='center' width='5%'>
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
+ <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
+ <input type='hidden' name='ID' value='$config[0]' />
+ </form>
+ </td>
+ <td align='center' width='5%'>
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}' />
+ <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' />
+ <input type='hidden' name='ID' value='$config[0]' />
+ </form>
+ </td>
+ </tr>
+END
+ $key++;
+ }
+ print "</table>";
+
+ # If table contains entries, print 'Key to action icons'
+ if ($key) {
+ print <<END;
+ <table>
+ <tr>
+ <td class='boldbase'> <b>$Lang::tr{'legend'}: </b></td>
+ <td><img src='/images/on.gif' alt='$Lang::tr{'click to disable'}' /></td>
+ <td class='base'>$Lang::tr{'click to disable'}</td>
+ <td> </td>
+ <td><img src='/images/off.gif' alt='$Lang::tr{'click to enable'}' /></td>
+ <td class='base'>$Lang::tr{'click to enable'}</td>
+ <td> </td>
+ <td><img src='/images/edit.gif' alt='$Lang::tr{'edit'}' /></td>
+ <td class='base'>$Lang::tr{'edit'}</td>
+ <td> </td>
+ <td><img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
+ <td class='base'>$Lang::tr{'remove'}</td>
+ </tr>
+ </table>
+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 "<font class='base'>$errormessage </font>";
+ &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 <<END;
+ <form method='POST' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='ID' value='$settings{'ID'}'>
+
+ <table width='100%'>
+ <tr>
+ <td class='base' width='20%'>$Lang::tr{'wlan client ssid'}:</td>
+ <td width='40%'><input type='text' name='SSID' value='$settings{'SSID'}' size='25'/></td>
+ <td class='base' width='10%'>$Lang::tr{'enabled'}</td>
+ <td width='30%'><input type='checkbox' name='ENABLED' $checked{'ENABLED'} /></td>
+ </tr>
+ <tr>
+ <td class='base' width='20%'>$Lang::tr{'wlan client encryption'}:</td>
+ <td width='40%'>
+ <select name='ENCRYPTION'>
+ <option value="NONE" $selected{'ENCRYPTION'}{'NONE'}>$Lang::tr{'wlan client encryption none'}</option>
+ <option value="WPA2" $selected{'ENCRYPTION'}{'WPA2'}>$Lang::tr{'wlan client encryption wpa2'}</option>
+ <option value="WPA" $selected{'ENCRYPTION'}{'WPA'}>$Lang::tr{'wlan client encryption wpa'}</option>
+ <option value="WEP" $selected{'ENCRYPTION'}{'WEP'}>$Lang::tr{'wlan client encryption wep'}</option>
+ </select>
+ </td>
+ <td colspan="2" width='40%'></td>
+ </tr>
+ <tr>
+ <td class='base' width='20%'>$Lang::tr{'wlan client psk'}: </td>
+ <td width='40%'><input type='password' name='PSK' value='$settings{'PSK'}' size='25'/></td>
+ <td colspan="2" width='40%'></td>
+ </tr>
+ </table>
+
+ <br>
+ <hr>
+
+ <strong>
+ $Lang::tr{'wlan client advanced settings'}:
+ </strong>
+
+ <table width='100%'>
+ <tr>
+ <td class='base' width='20%'>
+ $Lang::tr{'wlan client wpa mode'}:
+ </td>
+ <td width='40%'>
+ <select name='WPA_MODE'>
+ <option value="" $selected{'WPA_MODE'}{''}>$Lang::tr{'wlan client wpa mode all'}</option>
+ <option value="CCMP-CCMP" $selected{'WPA_MODE'}{'CCMP-CCMP'}>$Lang::tr{'wlan client wpa mode ccmp ccmp'}</option>
+ <option value="CCMP-TKIP" $selected{'WPA_MODE'}{'CCMP-TKIP'}>$Lang::tr{'wlan client wpa mode ccmp tkip'}</option>
+ <option value="TKIP-TKIP" $selected{'WPA_MODE'}{'TKIP-TKIP'}>$Lang::tr{'wlan client wpa mode tkip tkip'}</option>
+ </select>
+ </td>
+ <td colspan="2" width='40%'>
+ <em>($Lang::tr{'wlan client pairwise key group key'})</em>
+ </td>
+ </tr>
+ <tr>
+ <td class='base' width='20%'>
+ $Lang::tr{'priority'}:
+ </td>
+ <td width='40%'>
+ <select name='PRIO'>
+ <option value="0" $selected{'PRIO'}{'0'}>0</option>
+ <option value="1" $selected{'PRIO'}{'1'}>1</option>
+ <option value="2" $selected{'PRIO'}{'2'}>2</option>
+ <option value="3" $selected{'PRIO'}{'3'}>3</option>
+ <option value="4" $selected{'PRIO'}{'4'}>4</option>
+ </select>
+ </td>
+ <td colspan="2" width='40%'></td>
+ </tr>
+ </table>
+
+ <br>
+ <hr>
+
+ <table width='100%'>
+ <tr>
+ <td width='50%' align='center'>
+ <input type='hidden' name='ACTION' value='$action' />
+ <input type='submit' name='SUBMIT' value='$buttontext' />
+ </td>
+ </tr>
+ </table>
+ </form>
+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 (<FILE>) {
+ 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 "<p>$Lang::tr{'wlan client disconnected'}</p>";
+
+ } else {
+ print <<END;
+ <table width='100%'>
+ <tr>
+ <td width='20%'>
+ $Lang::tr{'wlan client ssid'}
+ </td>
+ <td width='80%'>
+ $status{'ssid'}
+ </td>
+ </tr>
+ <tr>
+ <td width='20%'>
+ $Lang::tr{'wlan client bssid'}
+ </td>
+ <td width='80%'>
+ $status{'bssid'}
+ </td>
+ </tr>
+END
+
+ if (($status{'pairwise_cipher'} ne "NONE") || ($status{'group_cipher'} ne "NONE")) {
+ print <<END;
+ <tr>
+ <td colspan='2'>
+ <strong>$Lang::tr{'wlan client encryption wpa'}</strong>
+ </td>
+ </tr>
+ <tr>
+ <td width='20%'>
+ $Lang::tr{'wlan client pairwise cipher'}
+ </td>
+ <td width='80%'>
+ $status{'pairwise_cipher'}
+ </td>
+ </tr>
+ <tr>
+ <td width='20%'>
+ $Lang::tr{'wlan client group cipher'}
+ </td>
+ <td width='80%'>
+ $status{'group_cipher'}
+ </td>
+ </tr>
+END
+ }
+
+ print "</table>";
+ }
+
+ &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 6275d8a..84b102f 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 75138f5..8ff2608 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/lfs/initscripts b/lfs/initscripts
index 213b46e..6549147 100644
--- a/lfs/initscripts
+++ b/lfs/initscripts
@@ -173,6 +173,9 @@ $(TARGET) :
ln -sf ../init.d/localnet /etc/rc.d/rcsysinit.d/S80localnet
ln -sf ../init.d/sysctl /etc/rc.d/rcsysinit.d/S90sysctl
ln -sf ../init.d/network-vlans /etc/rc.d/rcsysinit.d/S91network-vlans
+ ln -sf ../init.d/wlanclient /etc/rc.d/rc0.d/K82wlanclient
+ ln -sf ../init.d/wlanclient /etc/rc.d/rc3.d/S19wlanclient
+ ln -sf ../init.d/wlanclient /etc/rc.d/rc6.d/K82wlanclient
ln -sf ../../dnsmasq /etc/rc.d/init.d/networking/red.up/05-RS-dnsmasq
ln -sf ../../firewall /etc/rc.d/init.d/networking/red.up/20-RL-firewall
diff --git a/src/initscripts/init.d/networking/functions.network b/src/initscripts/init.d/networking/functions.network
new file mode 100755
index 0000000..26cc65c
--- /dev/null
+++ b/src/initscripts/init.d/networking/functions.network
@@ -0,0 +1,154 @@
+#!/bin/sh
+#
+########################################################################
+# Begin
+#
+# Description : A collection of functions for the IPFire network scripts
+#
+# Authors : IPFire Development Team <developers(a)ipfire.org>
+#
+# Version : 01.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. $rc_functions
+
+
+eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+eval $(/usr/local/bin/readhash /var/ipfire/dns/settings)
+
+dhcpcd_get_pid() {
+ # This function returns the pid of a dhcpcd by a given
+ # network device, if a pidfile exists.
+
+ local device="$1"
+ local pidfile="/var/run/dhcpcd-${device}.pid"
+
+ # Check if a pid file exists.
+ if [ -f "${pidfile}" ] ; then
+
+ # Get the pid from the file.
+ local pid="$(<"${pidfile}")"
+
+ echo "${pid}"
+ fi
+}
+
+dhcpcd_is_running() {
+ # This functions checks if a dhcpcd is running by a given pid.
+
+ local pid="$1"
+
+ # Check if a dhcpcd is running.
+ if [ -n "${pid}" -a -d "/proc/${pid}" ]; then
+ # Return "0" (True) if a dhcpcd is running.
+ return 0
+ fi
+
+ # Return 1 (False) no dhcpcd is running.
+ return 1
+}
+
+dhcpcd_start() {
+ # This function will start a dhcpcd on a speciefied device.
+
+ local device="$1"
+ local dhcp_start=""
+
+ boot_mesg -n "Starting dhcpcd on the ${device} interface..."
+
+ # Check if a dhcpcd is already running.
+ local pid="$(dhcpcd_get_pid "${device}")"
+
+ if dhcpcd_is_running "${pid}"; then
+ boot_mesg "dhcpcd already running!" ${WARNING}
+ echo_warning
+ exit 2
+ fi
+
+ # Check if a DHCP hostname has been set.
+ if [ -n "${RED_DHCP_HOSTNAME}" ]; then
+ dhcp_start+="-h ${RED_DHCP_HOSTNAME}"
+ fi
+
+ # Start dhcpcd.
+ /sbin/dhcpcd "${device}" "${dhcp_start}" >/dev/null 2>&1
+ ret="$?"
+
+ if [ "${ret}" -eq 0 ]; then
+ . /var/ipfire/dhcpc/dhcpcd-"${device}".info
+ echo ""
+ echo_ok
+ boot_mesg " DHCP Assigned Settings for ${device}:"
+ boot_mesg_flush
+ boot_mesg " IP Address: $ip_address"
+ boot_mesg_flush
+
+ if [ -n "${RED_DHCP_HOSTNAME}" ]; then
+ boot_mesg " Hostname: $RED_DHCP_HOSTNAME"
+ boot_mesg_flush
+ fi
+
+ boot_mesg " Subnet Mask: $subnet_mask"
+ boot_mesg_flush
+ boot_mesg " Default Gateway: $routers"
+ boot_mesg_flush
+ boot_mesg " DNS Server: $domain_name_servers"
+ boot_mesg_flush
+ else
+ echo ""
+ $(exit "${ret}")
+ evaluate_retval
+ fi
+}
+
+dhcpcd_stop() {
+ # This function stops a previously started dhcpcd on a given device.
+
+ local device="$1"
+ local dhcp_stop="-k"
+ local leaseinfo="/var/ipfire/dhcpc/dhcpcd-${device}.info"
+
+ boot_mesg -n "Stopping dhcpcd on the ${device} interface..."
+
+ # Check if a dhcpcd is running.
+ local pid="$(dhcpcd_get_pid "${device}")"
+
+ if ! dhcpcd_is_running "${pid}"; then
+ boot_mesg "dhcpcd not running!" ${WARNING}
+ echo_warning
+ exit 1
+ fi
+
+ # Check if we got a valid lease.
+ if [ -e $leaseinfo ]; then
+ . $leaseinfo
+ if [ "$dchp_lease_time" = "4294967295" ]; then
+ # do nothing, just echo ok
+ echo_ok
+ else
+ # Stop dhcpcd.
+ /sbin/dhcpcd "${device}" "${dhcp_stop}" &> /dev/null
+ ret="$?"
+
+ # Wait until dhcpd has stopped.
+ while [ -d "/proc/${pid}" ]; do
+ sleep 1
+ done
+
+ # Display console message, depended on the exit code
+ # of the stopped dhcpcd.
+ if [ "${ret}" -eq 0 ]; then
+ echo_ok
+ elif [ "${ret}" -eq 1 ]; then
+ boot_mesg "failed to stop dhcpcd!" ${WARNING}
+ echo_warning
+ else
+ echo_failure
+ fi
+ fi
+ fi
+}
diff --git a/src/initscripts/init.d/networking/red b/src/initscripts/init.d/networking/red
old mode 100644
new mode 100755
index 421c6f6..e28b2e6
--- a/src/initscripts/init.d/networking/red
+++ b/src/initscripts/init.d/networking/red
@@ -17,6 +17,7 @@
. /etc/sysconfig/rc
. ${rc_functions}
+. /etc/init.d/networking/functions.network
#Define some defaults
INET_VLAN=7
@@ -77,11 +78,6 @@ if [ "${TYPE}" == "STATIC" ]; then
fi
fi
-PIDFILE="/var/run/dhcpcd-${DEVICE}.pid"
-LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.info"
-DHCP_START=" "
-DHCP_STOP="-k "
-
case "${1}" in
start)
if [ "${DEVICE}" != "${GREEN_DEV}" ] && [ "${DEVICE}" != "" ]; then
@@ -137,87 +133,24 @@ case "${1}" in
/usr/local/bin/setaliases
elif [ "${TYPE}" == "DHCP" ]; then
+ # Add firewall rules to allow comunication with the dhcp server on red.
+ iptables -A REDINPUT -p tcp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT
+ iptables -A REDINPUT -p udp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT
- if [ -e $LEASEINFO ]; then
- boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..."
- . $LEASEINFO
- if [ "$dhcp_lease_time" = "4294967295" ]; then
- # do nothing, just echo ok
- echo ""
- echo_ok
- else
- if [ -n "$DHCP_STOP" ]; then
- /sbin/dhcpcd ${DEVICE} $DHCP_STOP &> /dev/null
- RET="$?"
- if [ "$RET" -eq 0 ]; then
- echo ""
- echo_ok
- elif [ "$RET" -eq 1 ]; then
- boot_mesg "dhcpcd not running!" ${WARNING}
- echo_warning
- else
- echo ""
- echo_failure
- fi
- else
- echo ""
- killproc dhcpcd
- fi
- fi
- fi
-
- boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..."
echo -n "${DEVICE}" > /var/ipfire/red/iface
+ # Check if the wlan-client is used on red.
+ # To determine this we check if a wpa_supplicant is running.
+ pid="$(pidof wpa_supplicant)"
+
+ if [ -z "${pid}" ]; then
+ # No wpa_supplicant is running. So it's save to start dhcpcd.
+ dhcpcd_start "${DEVICE}"
+ fi
+
## Create & Enable vnstat
/usr/bin/vnstat -u -i ${DEVICE} -r --enable --force > /dev/null 2>&1
- # Test to see if there is a stale pid file
- if [ -f "$PIDFILE" ]; then
- ps `cat "$PIDFILE"` | grep dhcpcd > /dev/null
- if [ $? != 0 ]; then
- rm -f /var/run/dhcpcd-${DEVICE}.pid > /dev/null
- else
- boot_mesg "dhcpcd already running!" ${WARNING}
- echo_warning
- exit 2
- fi
- fi
-
- iptables -A REDINPUT -p tcp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT
- iptables -A REDINPUT -p udp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT
-
- if [ -n "${RED_DHCP_HOSTNAME}" ]; then
- DHCP_START+="-h ${RED_DHCP_HOSTNAME} "
- fi
-
- /sbin/dhcpcd ${DEVICE} ${DHCP_START} >/dev/null 2>&1
- RET="$?"
-
- if [ "$RET" = "0" ]; then
- . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.info
- echo ""
- echo_ok
- boot_mesg " DHCP Assigned Settings for ${DEVICE}:"
- boot_mesg_flush
- boot_mesg " IP Address: $ip_address"
- boot_mesg_flush
- if [ -n "${RED_DHCP_HOSTNAME}" ]; then
- boot_mesg " Hostname: $RED_DHCP_HOSTNAME"
- boot_mesg_flush
- fi
- boot_mesg " Subnet Mask: $subnet_mask"
- boot_mesg_flush
- boot_mesg " Default Gateway: $routers"
- boot_mesg_flush
- boot_mesg " DNS Server: $domain_name_servers"
- boot_mesg_flush
- else
- echo ""
- $(exit "$RET")
- evaluate_retval
- fi
-
elif [ "$TYPE" == "PPPOE" ]; then
if ( ps ax | grep -q [p]ppd ); then
@@ -525,33 +458,15 @@ case "${1}" in
# Add a NaN value to ppp0 rrd to supress spikes at reconnect
rrdtool update $RRDLOG/collectd/localhost/interface/if_octets-ppp0.rrd \
$(date +%s):: > /dev/null 2>&1
- fi
- if [ -e $LEASEINFO ]; then
- boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..."
- . $LEASEINFO
- if [ "$dchp_lease_time" = "4294967295" ]; then
- # do nothing, just echo ok
- echo ""
- echo_ok
- else
- if [ -n "$DHCP_STOP" ]; then
- /sbin/dhcpcd ${DEVICE} $DHCP_STOP &> /dev/null
- RET="$?"
- if [ "$RET" -eq 0 ]; then
- echo ""
- echo_ok
- elif [ "$RET" -eq 1 ]; then
- boot_mesg "dhcpcd not running!" ${WARNING}
- echo_warning
- else
- echo ""
- echo_failure
- fi
- else
- echo ""
- killproc dhcpcd
- fi
+ elif [ "$TYPE" == "DHCP" ]; then
+ # Check if the wlan-client is used on red.
+ # To determine this we check if a wpa_supplicant is running.
+ pid="$(pidof wpa_supplicant)"
+
+ if [ -z "${pid}" ]; then
+ # Stop dhcpcd.
+ dhcpcd_stop "${DEVICE}"
fi
fi
diff --git a/src/initscripts/init.d/networking/wpa_supplicant.exe b/src/initscripts/init.d/networking/wpa_supplicant.exe
new file mode 100755
index 0000000..b5ad8ff
--- /dev/null
+++ b/src/initscripts/init.d/networking/wpa_supplicant.exe
@@ -0,0 +1,50 @@
+#!/bin/bash
+########################################################################
+# Begin
+#
+# Description : wpa_supplicant Script
+#
+# Authors : IPFire Development Team <developers(a)ipfire.org>
+#
+# Version : 01.00
+#
+# Notes : This script starts/stops the dhclient if a WPA/WPA2
+# connection to an AP successfull has been established
+# or disconnected.
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. /etc/init.d/networking/functions.network
+
+# Gather required information from wpa_cli.
+device="$1"
+wpa_state="$2"
+
+# Check if the RED device has been configured to use DHCP or exit immediately.
+eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+if [ ! "${RED_TYPE}" == "DHCP" ] ; then
+ exit 0
+fi
+
+case "${wpa_state}" in
+ CONNECTED)
+ # Start dhcpcd.
+ dhcpcd_start "${device}"
+
+ exit 0
+ ;;
+
+ DISCONNECTED)
+ # Stop dhcpcd.
+ dhcpcd_stop "${device}"
+
+ exit 0
+ ;;
+
+ *)
+ # When we ever got here, there is a really big problem.
+ exit 1
+ ;;
+esac
diff --git a/src/initscripts/init.d/wlanclient b/src/initscripts/init.d/wlanclient
new file mode 100755
index 0000000..ee24c43
--- /dev/null
+++ b/src/initscripts/init.d/wlanclient
@@ -0,0 +1,283 @@
+#!/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
+
+ # wpa_cli does not send a disconnect event when get stopped.
+ # So we manually have to send it to the wpa_supplicant.exe.
+ /etc/rc.d/init.d/networking/wpa_supplicant.exe "${RED_DEV}" DISCONNECTED
+
+ boot_mesg "Stopping wireless client on ${RED_DEV}..."
+ killproc wpa_supplicant
+
+ # Tidy up /tmp directory.
+ rm -f /tmp/wpa_ctrl_*
+}
+
+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 cc33266..0a4fda6 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 0000000..c85e531
--- /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 <stdio.h>
+#include <stdlib.h>
+#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;
+}
hooks/post-receive
--
IPFire 2.x development tree
reply other threads:[~2013-07-06 15:01 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130706150113.11D31201F3@argus.ipfire.org \
--to=git@ipfire.org \
--cc=ipfire-scm@lists.ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox