#!/bin/bash LOGFILE="/home/sats/satsd/log/dwc.log"; slog(){ echo -e "$1" | sudo -u sats tee -a $LOGFILE > /dev/null; } failexit(){ slog " > failed"; exit 127; } connectedexit(){ slog " > connected"; slog "<<< Finished\n"; exit 0; } test ! -f $LOGFILE && sudo -u sats touch $LOGFILE; HSALT="***SALT***"; HPEPPER="***PEPPER***"; slog ">>> Dynamic Wireless Credentials"; # [1] Checking connectivity #========================================================# slog " * 1. Checking connectivity" [ -z "`ping xdrm.io -q -c 1 -i 1 2>&1 > /dev/null`" ] \ && connectedexit \ || slog " > offline"; # [2] Wifi scan for "SATS_*" APs #========================================================# # (1) Get interface name # slog " * 2. Looking for wireless interface"; IFACE=`sudo ifconfig -a | grep -P "^w" | awk '{print $1}' | head -n 1`; sudo ifconfig $IFACE up; # (2) Manage no IFACE found # test -z "$IFACE" && failexit; slog " > done (got '$IFACE')"; # (3) Get nearest AP matching "SATS_*" and extract HASH # slog " * 3. Looking for nearest AP matching 'SATS_.+'"; AP_HASH=`sudo iwlist $IFACE scan | grep -P "^\s*ESSID:\"SATS_.+\"\s*$" | sed 's/^[ \t]*ESSID:"SATS_//' | sed 's/"[ \t]*$//' | head -n 1`; # (4) Manage no AP found # test -z "$AP_HASH" && failexit; slog " > done (got 'SATS_$AP_HASH')"; # [3] Calculate WIFI PASS from SSID hash #========================================================# slog " * 4. Processing WPA2 passphrase" PASS=`echo -ne "$HPEPPER$(echo -ne "${HSALT}${AP_HASH}" | sha512sum | sed 's/[ \t]*-$//')" | sha512sum | sed 's/[ \t]*-//' | cut -b 1-63`; slog " > done"; # [4] Update 'wpa_supplicant' configuration #========================================================# echo -e "network={\n\tssid=\"SATS_$AP_HASH\"\n\tpsk=\"$PASS\"\n}" | sudo tee /etc/wpa_supplicant/$IFACE.conf; # [5] Restart connection #========================================================# # (1) Starting wpa_supplicant # slog " * 5. Starting wpa_supplicant" sudo pkill wpa_supplicant; sudo wpa_supplicant -B -Dwext -i$IFACE -c/etc/wpa_supplicant/$IFACE.conf \ && slog " > done" \ || failexit; # (2) Starting dhclient # slog " * 6. Starting dhclient" if [ ! -z "`pgrep dhclient`" ]; then slog " > already running"; else sudo dhclient $IFACE \ && slog " > done" \ || failexit; fi; slog "<<< Finished\n";