Guest User

Untitled

a guest
Mar 2nd, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.65 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. if [ -z "$BASH" ] ; then
  3. bash $0
  4. exit
  5. fi
  6.  
  7.  
  8.  
  9. my_name=$0
  10.  
  11.  
  12. function setup_environment {
  13. bf=""
  14. n=""
  15. ORGANISATION="Bangor University"
  16. URL="http://www.bangor.ac.uk/itservices/help/index.php.en"
  17. SUPPORT="helpdesk@bangor.ac.uk"
  18. if [ ! -z "$DISPLAY" ] ; then
  19. if which zenity 1>/dev/null 2>&1 ; then
  20. ZENITY=`which zenity`
  21. elif which kdialog 1>/dev/null 2>&1 ; then
  22. KDIALOG=`which kdialog`
  23. else
  24. if tty > /dev/null 2>&1 ; then
  25. if echo $TERM | grep -E -q "xterm|gnome-terminal|lxterminal" ; then
  26. bf="";
  27. n="";
  28. fi
  29. else
  30. find_xterm
  31. if [ -n "$XT" ] ; then
  32. $XT -e $my_name
  33. fi
  34. fi
  35. fi
  36. fi
  37. }
  38.  
  39. function split_line {
  40. echo $1 | awk -F '\\\\n' 'END { for(i=1; i <= NF; i++) print $i }'
  41. }
  42.  
  43. function find_xterm {
  44. terms="xterm aterm wterm lxterminal rxvt gnome-terminal konsole"
  45. for t in $terms
  46. do
  47. if which $t > /dev/null 2>&1 ; then
  48. XT=$t
  49. break
  50. fi
  51. done
  52. }
  53.  
  54.  
  55. function ask {
  56. T="eduroam CAT"
  57. # if ! [ -z "$3" ] ; then
  58. # T="$T: $3"
  59. # fi
  60. if [ ! -z $KDIALOG ] ; then
  61. if $KDIALOG --yesno "${1}\n${2}?" --title "$T" ; then
  62. return 0
  63. else
  64. return 1
  65. fi
  66. fi
  67. if [ ! -z $ZENITY ] ; then
  68. text=`echo "${1}" | fmt -w60`
  69. if $ZENITY --no-wrap --question --text="${text}\n${2}?" --title="$T" 2>/dev/null ; then
  70. return 0
  71. else
  72. return 1
  73. fi
  74. fi
  75.  
  76. yes=Y
  77. no=N
  78. yes1=`echo $yes | awk '{ print toupper($0) }'`
  79. no1=`echo $no | awk '{ print toupper($0) }'`
  80.  
  81. if [ $3 == "0" ]; then
  82. def=$yes
  83. else
  84. def=$no
  85. fi
  86.  
  87. echo "";
  88. while true
  89. do
  90. split_line "$1"
  91. read -p "${bf}$2 ${yes}/${no}? [${def}]:$n " answer
  92. if [ -z "$answer" ] ; then
  93. answer=${def}
  94. fi
  95. answer=`echo $answer | awk '{ print toupper($0) }'`
  96. case "$answer" in
  97. ${yes1})
  98. return 0
  99. ;;
  100. ${no1})
  101. return 1
  102. ;;
  103. esac
  104. done
  105. }
  106.  
  107. function alert {
  108. if [ ! -z $KDIALOG ] ; then
  109. $KDIALOG --sorry "${1}"
  110. return
  111. fi
  112. if [ ! -z $ZENITY ] ; then
  113. $ZENITY --warning --text="$1" 2>/dev/null
  114. return
  115. fi
  116. echo "$1"
  117.  
  118. }
  119.  
  120. function show_info {
  121. if [ ! -z $KDIALOG ] ; then
  122. $KDIALOG --msgbox "${1}"
  123. return
  124. fi
  125. if [ ! -z $ZENITY ] ; then
  126. $ZENITY --info --width=500 --text="$1" 2>/dev/null
  127. return
  128. fi
  129. split_line "$1"
  130. }
  131.  
  132. function confirm_exit {
  133. if [ ! -z $KDIALOG ] ; then
  134. if $KDIALOG --yesno "Really quit?" ; then
  135. exit 1
  136. fi
  137. fi
  138. if [ ! -z $ZENITY ] ; then
  139. if $ZENITY --question --text="Really quit?" 2>/dev/null ; then
  140. exit 1
  141. fi
  142. fi
  143. }
  144.  
  145.  
  146.  
  147. function prompt_nonempty_string {
  148. prompt=$2
  149. if [ ! -z $ZENITY ] ; then
  150. if [ $1 -eq 0 ] ; then
  151. H="--hide-text "
  152. fi
  153. if ! [ -z "$3" ] ; then
  154. D="--entry-text=$3"
  155. fi
  156. elif [ ! -z $KDIALOG ] ; then
  157. if [ $1 -eq 0 ] ; then
  158. H="--password"
  159. else
  160. H="--inputbox"
  161. fi
  162. fi
  163.  
  164.  
  165. out_s="";
  166. if [ ! -z $ZENITY ] ; then
  167. while [ ! "$out_s" ] ; do
  168. out_s=`$ZENITY --entry --width=300 $H $D --text "$prompt" 2>/dev/null`
  169. if [ $? -ne 0 ] ; then
  170. confirm_exit
  171. fi
  172. done
  173. elif [ ! -z $KDIALOG ] ; then
  174. while [ ! "$out_s" ] ; do
  175. out_s=`$KDIALOG $H "$prompt" "$3"`
  176. if [ $? -ne 0 ] ; then
  177. confirm_exit
  178. fi
  179. done
  180. else
  181. while [ ! "$out_s" ] ; do
  182. read -p "${prompt}: " out_s
  183. done
  184. fi
  185. echo "$out_s";
  186. }
  187.  
  188. function user_cred {
  189. PASSWORD="a"
  190. PASSWORD1="b"
  191.  
  192. if ! USER_NAME=`prompt_nonempty_string 1 "enter your userid"` ; then
  193. exit 1
  194. fi
  195.  
  196. while [ "$PASSWORD" != "$PASSWORD1" ]
  197. do
  198. if ! PASSWORD=`prompt_nonempty_string 0 "enter your password"` ; then
  199. exit 1
  200. fi
  201. if ! PASSWORD1=`prompt_nonempty_string 0 "repeat your password"` ; then
  202. exit 1
  203. fi
  204. if [ "$PASSWORD" != "$PASSWORD1" ] ; then
  205. alert "passwords do not match"
  206. fi
  207. done
  208. }
  209. setup_environment
  210. show_info "This installer has been prepared for ${ORGANISATION}\n\nMore information and comments:\n\nEMAIL: ${SUPPORT}\nWWW: ${URL}\n\nInstaller created with software from the GEANT project."
  211. if ! ask "This installer will only work properly if you are a member of ${bf}Bangor University.${n}" "Continue" 1 ; then exit; fi
  212. if [ -d $HOME/.cat_installer ] ; then
  213. if ! ask "Directory $HOME/.cat_installer exists; some of its files may be overwritten." "Continue" 1 ; then exit; fi
  214. else
  215. mkdir $HOME/.cat_installer
  216. fi
  217. # save certificates
  218. echo "-----BEGIN CERTIFICATE-----
  219. MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
  220. GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
  221. b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
  222. BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
  223. YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
  224. GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
  225. Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
  226. WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
  227. rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
  228. +ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
  229. ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
  230. Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
  231. PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
  232. /zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
  233. oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
  234. yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
  235. EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
  236. A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
  237. MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
  238. ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
  239. BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
  240. g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
  241. fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
  242. WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
  243. B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
  244. hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
  245. TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
  246. mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
  247. ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
  248. 4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
  249. 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
  250. -----END CERTIFICATE-----
  251.  
  252. -----BEGIN CERTIFICATE-----
  253. MIIFeTCCA2GgAwIBAgIUc9pa+iPZP7qELgog9AHJ2G4k/F0wDQYJKoZIhvcNAQEL
  254. BQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZ
  255. BgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0xNTAxMTMxNjQyMTVaFw0yNTAx
  256. MTMxNjQyMTVaMEkxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
  257. dGVkMR8wHQYDVQQDExZRdW9WYWRpcyBFViBTU0wgSUNBIEcxMIIBIjANBgkqhkiG
  258. 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAws73Q2pp5IiTIXZiGAXAtvH/EEkhGTK3NytG
  259. LsznSUkfe3GYyQ1TFuYmrw/ZWcDRzjp/b5PrSLMG0noHgPWw71BifhOjaFraoEVr
  260. pIC5lzYi0epvBBXL3HW/SERp99HvCDH/3m686anfUxAxBsqIgHAd0cLkkb3MKd0/
  261. CnYt8+AKd/mhO2ru0u4gzZf3i/71LHzSAeZZl6cuhWJ0qzuUaXhChTB0zzyTe6n6
  262. ml5zcGi+y6U7euToSCku+ymDBEMOzdxPeUmPaBDD2O2KrqvGTg8jHllSjIhmfOmY
  263. RpfXlZ7dzfqvkB6qvZfVFb/H2k/PdsnNMAYd0AQCAItAAPy3YwIDAQABo4IBWzCC
  264. AVcwEgYDVR0TAQH/BAgwBgEB/wIBADAZBgNVHSAEEjAQMA4GDCsGAQQBvlgAAmQB
  265. AjByBggrBgEFBQcBAQRmMGQwKgYIKwYBBQUHMAGGHmh0dHA6Ly9vY3NwLnF1b3Zh
  266. ZGlzZ2xvYmFsLmNvbTA2BggrBgEFBQcwAoYqaHR0cDovL3RydXN0LnF1b3ZhZGlz
  267. Z2xvYmFsLmNvbS9xdnJjYTIuY3J0MA4GA1UdDwEB/wQEAwIBBjAnBgNVHSUEIDAe
  268. BggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFBqEYrxI
  269. TDMlBNTu0PYDxBlG0ZRrMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwucXVv
  270. dmFkaXNnbG9iYWwuY29tL3F2cmNhMi5jcmwwHQYDVR0OBBYEFFVYhs66fHZOmROp
  271. D9Nsn8L10zzjMA0GCSqGSIb3DQEBCwUAA4ICAQBLAcQz+wCq4P4IFsY11E+i0wAW
  272. ljwqQX84wCqx24XJtH2E5iY40glnkTltno77/+FKk64/8FSGh+HOHZ8/QW7z+3Gz
  273. s2RNCLHJ/f7oUk7eUrSzYK/4rLU/1vyBnujT2JQAhts+pkUghQYFjSNY7CoYIp+i
  274. zGGPJfKRgZJVe9c0Fx9Eb0tH6vOWbrcpIoEop4A2R8h8KeehLOdipQCZ67/Olgsa
  275. uvwgDas9hSICnlIKmCpbzFn6duAduLnd9nQ0SGVbI0Iil59Cs58H8BXPvvd6VcmA
  276. Fywmsi+0EtPPEWqFztl4yiRlQwaRPUu2L/d8QGSqrrvB8+9Y8KoMVS7ky2wp7i5V
  277. VjNfRmdy7cRri8PpEigHnzEy0EqrXd77QTio7QjvMW8FBNXVZ0bVq4YJFIkK7HT4
  278. Aq6rkin7oRMQWXNS+wHV15P+MKl0x2b5LMY1wASSkklaQKSkrp1sR/l0tnFWtxHZ
  279. OUKBHeWRPmCuv59UkTZXA/LT/tHt2JC6htu2pYislARuJGsnq4Bgrw76c0AS3UF8
  280. 80dYnDtu1CObhU3bjALGJ9Z/V17sj6ZCKNVe8/iZScP8zCNsj27woqVnogLDT5o0
  281. 0f6O8NHSMl1HIys7SH5oieJj1dfoUbCXFQPqKYQMugUU3aokoEpqaxFUd7moXFeY
  282. wxZChJIYvI+fVDAKwQ==
  283. -----END CERTIFICATE-----
  284.  
  285. " > $HOME/.cat_installer/ca.pem
  286. function run_python_script {
  287. PASSWORD=$( echo "$PASSWORD" | sed "s/'/\\\'/g" )
  288. if python << EEE1 > /dev/null 2>&1
  289. import dbus
  290. EEE1
  291. then
  292. PYTHON=python
  293. elif python3 << EEE2 > /dev/null 2>&1
  294. import dbus
  295. EEE2
  296. then
  297. PYTHON=python3
  298. else
  299. PYTHON=none
  300. return 1
  301. fi
  302.  
  303. $PYTHON << EOF > /dev/null 2>&1
  304. #-*- coding: utf-8 -*-
  305. import dbus
  306. import re
  307. import sys
  308. import uuid
  309. import os
  310.  
  311. class EduroamNMConfigTool:
  312.  
  313. def connect_to_NM(self):
  314. #connect to DBus
  315. try:
  316. self.bus = dbus.SystemBus()
  317. except dbus.exceptions.DBusException:
  318. print("Can't connect to DBus")
  319. sys.exit(2)
  320. #main service name
  321. self.system_service_name = "org.freedesktop.NetworkManager"
  322. #check NM version
  323. self.check_nm_version()
  324. if self.nm_version == "0.9" or self.nm_version == "1.0":
  325. self.settings_service_name = self.system_service_name
  326. self.connection_interface_name = "org.freedesktop.NetworkManager.Settings.Connection"
  327. #settings proxy
  328. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManager/Settings")
  329. #settings intrface
  330. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManager.Settings")
  331. elif self.nm_version == "0.8":
  332. #self.settings_service_name = "org.freedesktop.NetworkManagerUserSettings"
  333. self.settings_service_name = "org.freedesktop.NetworkManager"
  334. self.connection_interface_name = "org.freedesktop.NetworkManagerSettings.Connection"
  335. #settings proxy
  336. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManagerSettings")
  337. #settings intrface
  338. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManagerSettings")
  339. else:
  340. print("This Network Manager version is not supported")
  341. sys.exit(2)
  342.  
  343. def check_opts(self):
  344. self.cacert_file = '${HOME}/.cat_installer/ca.pem'
  345. self.pfx_file = '${HOME}/.cat_installer/user.p12'
  346. if not os.path.isfile(self.cacert_file):
  347. print("Certificate file not found, looks like a CAT error")
  348. sys.exit(2)
  349.  
  350. def check_nm_version(self):
  351. try:
  352. proxy = self.bus.get_object(self.system_service_name, "/org/freedesktop/NetworkManager")
  353. props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  354. version = props.Get("org.freedesktop.NetworkManager", "Version")
  355. except dbus.exceptions.DBusException:
  356. version = "0.8"
  357. if re.match(r'^1\.', version):
  358. self.nm_version = "1.0"
  359. return
  360. if re.match(r'^0\.9', version):
  361. self.nm_version = "0.9"
  362. return
  363. if re.match(r'^0\.8', version):
  364. self.nm_version = "0.8"
  365. return
  366. else:
  367. self.nm_version = "Unknown version"
  368. return
  369.  
  370. def byte_to_string(self, barray):
  371. return "".join([chr(x) for x in barray])
  372.  
  373.  
  374. def delete_existing_connections(self, ssid):
  375. "checks and deletes earlier connections"
  376. try:
  377. conns = self.settings.ListConnections()
  378. except dbus.exceptions.DBusException:
  379. print("DBus connection problem, a sudo might help")
  380. exit(3)
  381. for each in conns:
  382. con_proxy = self.bus.get_object(self.system_service_name, each)
  383. connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
  384. try:
  385. connection_settings = connection.GetSettings()
  386. if connection_settings['connection']['type'] == '802-11-wireless':
  387. conn_ssid = self.byte_to_string(connection_settings['802-11-wireless']['ssid'])
  388. if conn_ssid == ssid:
  389. connection.Delete()
  390. except dbus.exceptions.DBusException:
  391. pass
  392.  
  393. def add_connection(self,ssid):
  394. server_alt_subject_name_list = dbus.Array({'DNS:wifi.bangor.ac.uk'})
  395. server_name = 'wifi.bangor.ac.uk'
  396. if self.nm_version == "0.9" or self.nm_version == "1.0":
  397. match_key = 'altsubject-matches'
  398. match_value = server_alt_subject_name_list
  399. else:
  400. match_key = 'subject-match'
  401. match_value = server_name
  402.  
  403. s_con = dbus.Dictionary({
  404. 'type': '802-11-wireless',
  405. 'uuid': str(uuid.uuid4()),
  406. 'permissions': ['user:$USER'],
  407. 'id': ssid
  408. })
  409. s_wifi = dbus.Dictionary({
  410. 'ssid': dbus.ByteArray(ssid.encode('utf8')),
  411. 'security': '802-11-wireless-security'
  412. })
  413. s_wsec = dbus.Dictionary({
  414. 'key-mgmt': 'wpa-eap',
  415. 'proto': ['rsn',],
  416. 'pairwise': ['ccmp',],
  417. 'group': ['ccmp', 'tkip']
  418. })
  419. s_8021x = dbus.Dictionary({
  420. 'eap': ['peap'],
  421. 'identity': '$USER_NAME',
  422. 'ca-cert': dbus.ByteArray("file://{0}\0".format(self.cacert_file).encode('utf8')),
  423. match_key: match_value,
  424. 'password': '$PASSWORD',
  425. 'phase2-auth': 'mschapv2',
  426. })
  427. s_ip4 = dbus.Dictionary({'method': 'auto'})
  428. s_ip6 = dbus.Dictionary({'method': 'auto'})
  429. con = dbus.Dictionary({
  430. 'connection': s_con,
  431. '802-11-wireless': s_wifi,
  432. '802-11-wireless-security': s_wsec,
  433. '802-1x': s_8021x,
  434. 'ipv4': s_ip4,
  435. 'ipv6': s_ip6
  436. })
  437. self.settings.AddConnection(con)
  438.  
  439. def main(self):
  440. self.check_opts()
  441. ver = self.connect_to_NM()
  442. self.delete_existing_connections('eduroam')
  443. self.add_connection('eduroam')
  444.  
  445. if __name__ == "__main__":
  446. ENMCT = EduroamNMConfigTool()
  447. ENMCT.main()
  448. EOF
  449. }
  450. function create_wpa_conf {
  451. cat << EOFW >> $HOME/.cat_installer/cat_installer.conf
  452.  
  453. network={
  454. ssid="eduroam"
  455. key_mgmt=WPA-EAP
  456. pairwise=CCMP
  457. group=CCMP TKIP
  458. eap=PEAP
  459. ca_cert="${HOME}/.cat_installer/ca.pem"
  460. identity="${USER_NAME}"
  461. domain_suffix_match="wifi.bangor.ac.uk"
  462. phase2="auth=MSCHAPV2"
  463. password="${PASSWORD}"
  464. }
  465. EOFW
  466. chmod 600 $HOME/.cat_installer/cat_installer.conf
  467. }
  468. #prompt user for credentials
  469. user_cred
  470. if run_python_script ; then
  471. show_info "Installation successful"
  472. else
  473. show_info "Network Manager configuration failed, generating wpa_supplicant.conf"
  474. if ! ask "Network Manager configuration failed, but we may generate a wpa_supplicant configuration file if you wish. Be warned that your connection password will be saved in this file as clear text." "Write the file" 1 ; then exit ; fi
  475.  
  476. if [ -f $HOME/.cat_installer/cat_installer.conf ] ; then
  477. if ! ask "File $HOME/.cat_installer/cat_installer.conf exists; it will be overwritten." "Continue" 1 ; then confirm_exit; fi
  478. rm $HOME/.cat_installer/cat_installer.conf
  479. fi
  480. create_wpa_conf
  481. show_info "Output written to $HOME/.cat_installer/cat_installer.conf"
  482. fi
Add Comment
Please, Sign In to add comment