Maybe is working!

parent 40773897
...@@ -99,6 +99,9 @@ def checkYN(res, default='N'): ...@@ -99,6 +99,9 @@ def checkYN(res, default='N'):
return False return False
def netmaskToBit(nmask):
return str(sum(bin(int(x)).count('1') for x in mask.split('.')))
def validateIP(ip): def validateIP(ip):
if not ip: if not ip:
return False return False
...@@ -146,27 +149,49 @@ def read_netconf(net): ...@@ -146,27 +149,49 @@ def read_netconf(net):
def write_netconf(net, nconf): def write_netconf(net, nconf):
p="/".join([NETPATH, net]) p="/".join([NETPATH, net])
with open(p, 'w') as f: try:
for k in nconf.keys(): with open(p, 'w') as f:
if k!='saved': for k in nconf.keys():
if k == 'gw': if k!='saved':
if not validateIP(nconf[k]): if k == 'gw':
f.write('gw:n\n') if not validateIP(nconf[k]):
f.write('gw:n\n')
else:
f.write('gw:'+nconf[k]+"\n")
elif k in ['auto', 'dhcp']:
v='n'
if nconf[k]:
v='y'
f.write(k+':'+v+'\n')
else: else:
f.write('gw:'+nconf[k]+"\n") f.write(k+':'+str(nconf[k])+'\n')
f.close()
except:
return False
elif k in ['auto', 'dhcp']:
v='n'
if nconf[k]:
v='y'
f.write(k+':'+v+'\n')
else:
f.write(k+':'+str(nconf[k])+'\n')
f.close()
sys.exit(0)
return True return True
WPAHEAD="""# needed for wpa_gui to work
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
# needed to allow wpa_gui to alter the configuration
update_config=1
"""
def create_wpacfile(cfile, selected):
# XXX Not all the world is WPA-PSK compatible. And the rest...
# should we try to create a better config?
#
with open(cfile, 'w') as f:
f.write(WPAHEAD)
f.write("\nnetwork={\n")
f.write(" ssid=\""+selected['Name']+"\"\n")
f.write(" scan_ssid=1\n")
f.write(" key_mgmt=WPA-PSK\n")
f.write(" psk=\""+selected['conf']['psk']+"\"\n")
f.write("}\n")
f.close()
def kill_proc(name, ops=False): def kill_proc(name, ops=False):
for process in psutil.process_iter(): for process in psutil.process_iter():
...@@ -177,10 +202,13 @@ def kill_proc(name, ops=False): ...@@ -177,10 +202,13 @@ def kill_proc(name, ops=False):
else: else:
process.kill() process.kill()
def start_wpa(interface): def start_wpa(interface, conf=False):
kill_proc("dhclient", interface) kill_proc("dhclient", interface)
kill_proc("wpa_supplicant", interface) kill_proc("wpa_supplicant", interface)
sh("/sbin/wpa_supplicant -s -B -P /run/wpa_supplicant."+interface+".pid -i wlan0 -D nl80211,wext -C /run/wpa_supplicant") adds=''
if conf:
adds = ' -c '+conf
sh("/sbin/wpa_supplicant -s -B -P /run/wpa_supplicant."+interface+".pid -i wlan0 -D nl80211,wext -C /run/wpa_supplicant"+adds)
def show_fuck_list(nets): def show_fuck_list(nets):
...@@ -380,6 +408,16 @@ while not EXIT: ...@@ -380,6 +408,16 @@ while not EXIT:
elif SM=="connect": elif SM=="connect":
done=False done=False
if selected: if selected:
cfile='/tmp/wpa.'+interface+'.conf'
create_wpacfile(cfile, selected)
start_wpa(interface, cfile)
if selected['conf']['dhcp']:
sh("dhclient "+interface)
else:
sh("ip address add "+selected['conf']['ip']+"/"+netmaskToBit(selected['conf']['nmask'])+" dev "+interface)
sh("ip link set "+interface+" up")
if selected['conf']['gw']:
sh("ip route add default via "+selected['conf']['gw']+" dev "+interface)
done=True done=True
else: else:
print_error("FUCK, Are you asking me to connect but you didn't select successfully any network???") print_error("FUCK, Are you asking me to connect but you didn't select successfully any network???")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment