Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- if [ -z "$BASH" ] ; then
- bash $0
- exit
- fi
- my_name=$0
- function setup_environment {
- bf=""
- n=""
- ORGANISATION="Bangor University"
- URL="http://www.bangor.ac.uk/itservices/help/index.php.en"
- SUPPORT="helpdesk@bangor.ac.uk"
- if [ ! -z "$DISPLAY" ] ; then
- if which zenity 1>/dev/null 2>&1 ; then
- ZENITY=`which zenity`
- elif which kdialog 1>/dev/null 2>&1 ; then
- KDIALOG=`which kdialog`
- else
- if tty > /dev/null 2>&1 ; then
- if echo $TERM | grep -E -q "xterm|gnome-terminal|lxterminal" ; then
- bf="[1m";
- n="[0m";
- fi
- else
- find_xterm
- if [ -n "$XT" ] ; then
- $XT -e $my_name
- fi
- fi
- fi
- fi
- }
- function split_line {
- echo $1 | awk -F '\\\\n' 'END { for(i=1; i <= NF; i++) print $i }'
- }
- function find_xterm {
- terms="xterm aterm wterm lxterminal rxvt gnome-terminal konsole"
- for t in $terms
- do
- if which $t > /dev/null 2>&1 ; then
- XT=$t
- break
- fi
- done
- }
- function ask {
- T="eduroam CAT"
- # if ! [ -z "$3" ] ; then
- # T="$T: $3"
- # fi
- if [ ! -z $KDIALOG ] ; then
- if $KDIALOG --yesno "${1}\n${2}?" --title "$T" ; then
- return 0
- else
- return 1
- fi
- fi
- if [ ! -z $ZENITY ] ; then
- text=`echo "${1}" | fmt -w60`
- if $ZENITY --no-wrap --question --text="${text}\n${2}?" --title="$T" 2>/dev/null ; then
- return 0
- else
- return 1
- fi
- fi
- yes=Y
- no=N
- yes1=`echo $yes | awk '{ print toupper($0) }'`
- no1=`echo $no | awk '{ print toupper($0) }'`
- if [ $3 == "0" ]; then
- def=$yes
- else
- def=$no
- fi
- echo "";
- while true
- do
- split_line "$1"
- read -p "${bf}$2 ${yes}/${no}? [${def}]:$n " answer
- if [ -z "$answer" ] ; then
- answer=${def}
- fi
- answer=`echo $answer | awk '{ print toupper($0) }'`
- case "$answer" in
- ${yes1})
- return 0
- ;;
- ${no1})
- return 1
- ;;
- esac
- done
- }
- function alert {
- if [ ! -z $KDIALOG ] ; then
- $KDIALOG --sorry "${1}"
- return
- fi
- if [ ! -z $ZENITY ] ; then
- $ZENITY --warning --text="$1" 2>/dev/null
- return
- fi
- echo "$1"
- }
- function show_info {
- if [ ! -z $KDIALOG ] ; then
- $KDIALOG --msgbox "${1}"
- return
- fi
- if [ ! -z $ZENITY ] ; then
- $ZENITY --info --width=500 --text="$1" 2>/dev/null
- return
- fi
- split_line "$1"
- }
- function confirm_exit {
- if [ ! -z $KDIALOG ] ; then
- if $KDIALOG --yesno "Really quit?" ; then
- exit 1
- fi
- fi
- if [ ! -z $ZENITY ] ; then
- if $ZENITY --question --text="Really quit?" 2>/dev/null ; then
- exit 1
- fi
- fi
- }
- function prompt_nonempty_string {
- prompt=$2
- if [ ! -z $ZENITY ] ; then
- if [ $1 -eq 0 ] ; then
- H="--hide-text "
- fi
- if ! [ -z "$3" ] ; then
- D="--entry-text=$3"
- fi
- elif [ ! -z $KDIALOG ] ; then
- if [ $1 -eq 0 ] ; then
- H="--password"
- else
- H="--inputbox"
- fi
- fi
- out_s="";
- if [ ! -z $ZENITY ] ; then
- while [ ! "$out_s" ] ; do
- out_s=`$ZENITY --entry --width=300 $H $D --text "$prompt" 2>/dev/null`
- if [ $? -ne 0 ] ; then
- confirm_exit
- fi
- done
- elif [ ! -z $KDIALOG ] ; then
- while [ ! "$out_s" ] ; do
- out_s=`$KDIALOG $H "$prompt" "$3"`
- if [ $? -ne 0 ] ; then
- confirm_exit
- fi
- done
- else
- while [ ! "$out_s" ] ; do
- read -p "${prompt}: " out_s
- done
- fi
- echo "$out_s";
- }
- function user_cred {
- PASSWORD="a"
- PASSWORD1="b"
- if ! USER_NAME=`prompt_nonempty_string 1 "enter your userid"` ; then
- exit 1
- fi
- while [ "$PASSWORD" != "$PASSWORD1" ]
- do
- if ! PASSWORD=`prompt_nonempty_string 0 "enter your password"` ; then
- exit 1
- fi
- if ! PASSWORD1=`prompt_nonempty_string 0 "repeat your password"` ; then
- exit 1
- fi
- if [ "$PASSWORD" != "$PASSWORD1" ] ; then
- alert "passwords do not match"
- fi
- done
- }
- setup_environment
- 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."
- if ! ask "This installer will only work properly if you are a member of ${bf}Bangor University.${n}" "Continue" 1 ; then exit; fi
- if [ -d $HOME/.cat_installer ] ; then
- if ! ask "Directory $HOME/.cat_installer exists; some of its files may be overwritten." "Continue" 1 ; then exit; fi
- else
- mkdir $HOME/.cat_installer
- fi
- # save certificates
- echo "-----BEGIN CERTIFICATE-----
- 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
- 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
- -----END CERTIFICATE-----
- -----BEGIN CERTIFICATE-----
- MIIFeTCCA2GgAwIBAgIUc9pa+iPZP7qELgog9AHJ2G4k/F0wDQYJKoZIhvcNAQEL
- BQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZ
- BgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0xNTAxMTMxNjQyMTVaFw0yNTAx
- MTMxNjQyMTVaMEkxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
- dGVkMR8wHQYDVQQDExZRdW9WYWRpcyBFViBTU0wgSUNBIEcxMIIBIjANBgkqhkiG
- 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAws73Q2pp5IiTIXZiGAXAtvH/EEkhGTK3NytG
- LsznSUkfe3GYyQ1TFuYmrw/ZWcDRzjp/b5PrSLMG0noHgPWw71BifhOjaFraoEVr
- pIC5lzYi0epvBBXL3HW/SERp99HvCDH/3m686anfUxAxBsqIgHAd0cLkkb3MKd0/
- CnYt8+AKd/mhO2ru0u4gzZf3i/71LHzSAeZZl6cuhWJ0qzuUaXhChTB0zzyTe6n6
- ml5zcGi+y6U7euToSCku+ymDBEMOzdxPeUmPaBDD2O2KrqvGTg8jHllSjIhmfOmY
- RpfXlZ7dzfqvkB6qvZfVFb/H2k/PdsnNMAYd0AQCAItAAPy3YwIDAQABo4IBWzCC
- AVcwEgYDVR0TAQH/BAgwBgEB/wIBADAZBgNVHSAEEjAQMA4GDCsGAQQBvlgAAmQB
- AjByBggrBgEFBQcBAQRmMGQwKgYIKwYBBQUHMAGGHmh0dHA6Ly9vY3NwLnF1b3Zh
- ZGlzZ2xvYmFsLmNvbTA2BggrBgEFBQcwAoYqaHR0cDovL3RydXN0LnF1b3ZhZGlz
- Z2xvYmFsLmNvbS9xdnJjYTIuY3J0MA4GA1UdDwEB/wQEAwIBBjAnBgNVHSUEIDAe
- BggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFBqEYrxI
- TDMlBNTu0PYDxBlG0ZRrMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwucXVv
- dmFkaXNnbG9iYWwuY29tL3F2cmNhMi5jcmwwHQYDVR0OBBYEFFVYhs66fHZOmROp
- D9Nsn8L10zzjMA0GCSqGSIb3DQEBCwUAA4ICAQBLAcQz+wCq4P4IFsY11E+i0wAW
- ljwqQX84wCqx24XJtH2E5iY40glnkTltno77/+FKk64/8FSGh+HOHZ8/QW7z+3Gz
- s2RNCLHJ/f7oUk7eUrSzYK/4rLU/1vyBnujT2JQAhts+pkUghQYFjSNY7CoYIp+i
- zGGPJfKRgZJVe9c0Fx9Eb0tH6vOWbrcpIoEop4A2R8h8KeehLOdipQCZ67/Olgsa
- uvwgDas9hSICnlIKmCpbzFn6duAduLnd9nQ0SGVbI0Iil59Cs58H8BXPvvd6VcmA
- Fywmsi+0EtPPEWqFztl4yiRlQwaRPUu2L/d8QGSqrrvB8+9Y8KoMVS7ky2wp7i5V
- VjNfRmdy7cRri8PpEigHnzEy0EqrXd77QTio7QjvMW8FBNXVZ0bVq4YJFIkK7HT4
- Aq6rkin7oRMQWXNS+wHV15P+MKl0x2b5LMY1wASSkklaQKSkrp1sR/l0tnFWtxHZ
- OUKBHeWRPmCuv59UkTZXA/LT/tHt2JC6htu2pYislARuJGsnq4Bgrw76c0AS3UF8
- 80dYnDtu1CObhU3bjALGJ9Z/V17sj6ZCKNVe8/iZScP8zCNsj27woqVnogLDT5o0
- 0f6O8NHSMl1HIys7SH5oieJj1dfoUbCXFQPqKYQMugUU3aokoEpqaxFUd7moXFeY
- wxZChJIYvI+fVDAKwQ==
- -----END CERTIFICATE-----
- " > $HOME/.cat_installer/ca.pem
- function run_python_script {
- PASSWORD=$( echo "$PASSWORD" | sed "s/'/\\\'/g" )
- if python << EEE1 > /dev/null 2>&1
- import dbus
- EEE1
- then
- PYTHON=python
- elif python3 << EEE2 > /dev/null 2>&1
- import dbus
- EEE2
- then
- PYTHON=python3
- else
- PYTHON=none
- return 1
- fi
- $PYTHON << EOF > /dev/null 2>&1
- #-*- coding: utf-8 -*-
- import dbus
- import re
- import sys
- import uuid
- import os
- class EduroamNMConfigTool:
- def connect_to_NM(self):
- #connect to DBus
- try:
- self.bus = dbus.SystemBus()
- except dbus.exceptions.DBusException:
- print("Can't connect to DBus")
- sys.exit(2)
- #main service name
- self.system_service_name = "org.freedesktop.NetworkManager"
- #check NM version
- self.check_nm_version()
- if self.nm_version == "0.9" or self.nm_version == "1.0":
- self.settings_service_name = self.system_service_name
- self.connection_interface_name = "org.freedesktop.NetworkManager.Settings.Connection"
- #settings proxy
- sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManager/Settings")
- #settings intrface
- self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManager.Settings")
- elif self.nm_version == "0.8":
- #self.settings_service_name = "org.freedesktop.NetworkManagerUserSettings"
- self.settings_service_name = "org.freedesktop.NetworkManager"
- self.connection_interface_name = "org.freedesktop.NetworkManagerSettings.Connection"
- #settings proxy
- sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManagerSettings")
- #settings intrface
- self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManagerSettings")
- else:
- print("This Network Manager version is not supported")
- sys.exit(2)
- def check_opts(self):
- self.cacert_file = '${HOME}/.cat_installer/ca.pem'
- self.pfx_file = '${HOME}/.cat_installer/user.p12'
- if not os.path.isfile(self.cacert_file):
- print("Certificate file not found, looks like a CAT error")
- sys.exit(2)
- def check_nm_version(self):
- try:
- proxy = self.bus.get_object(self.system_service_name, "/org/freedesktop/NetworkManager")
- props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
- version = props.Get("org.freedesktop.NetworkManager", "Version")
- except dbus.exceptions.DBusException:
- version = "0.8"
- if re.match(r'^1\.', version):
- self.nm_version = "1.0"
- return
- if re.match(r'^0\.9', version):
- self.nm_version = "0.9"
- return
- if re.match(r'^0\.8', version):
- self.nm_version = "0.8"
- return
- else:
- self.nm_version = "Unknown version"
- return
- def byte_to_string(self, barray):
- return "".join([chr(x) for x in barray])
- def delete_existing_connections(self, ssid):
- "checks and deletes earlier connections"
- try:
- conns = self.settings.ListConnections()
- except dbus.exceptions.DBusException:
- print("DBus connection problem, a sudo might help")
- exit(3)
- for each in conns:
- con_proxy = self.bus.get_object(self.system_service_name, each)
- connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
- try:
- connection_settings = connection.GetSettings()
- if connection_settings['connection']['type'] == '802-11-wireless':
- conn_ssid = self.byte_to_string(connection_settings['802-11-wireless']['ssid'])
- if conn_ssid == ssid:
- connection.Delete()
- except dbus.exceptions.DBusException:
- pass
- def add_connection(self,ssid):
- server_alt_subject_name_list = dbus.Array({'DNS:wifi.bangor.ac.uk'})
- server_name = 'wifi.bangor.ac.uk'
- if self.nm_version == "0.9" or self.nm_version == "1.0":
- match_key = 'altsubject-matches'
- match_value = server_alt_subject_name_list
- else:
- match_key = 'subject-match'
- match_value = server_name
- s_con = dbus.Dictionary({
- 'type': '802-11-wireless',
- 'uuid': str(uuid.uuid4()),
- 'permissions': ['user:$USER'],
- 'id': ssid
- })
- s_wifi = dbus.Dictionary({
- 'ssid': dbus.ByteArray(ssid.encode('utf8')),
- 'security': '802-11-wireless-security'
- })
- s_wsec = dbus.Dictionary({
- 'key-mgmt': 'wpa-eap',
- 'proto': ['rsn',],
- 'pairwise': ['ccmp',],
- 'group': ['ccmp', 'tkip']
- })
- s_8021x = dbus.Dictionary({
- 'eap': ['peap'],
- 'identity': '$USER_NAME',
- 'ca-cert': dbus.ByteArray("file://{0}\0".format(self.cacert_file).encode('utf8')),
- match_key: match_value,
- 'password': '$PASSWORD',
- 'phase2-auth': 'mschapv2',
- })
- s_ip4 = dbus.Dictionary({'method': 'auto'})
- s_ip6 = dbus.Dictionary({'method': 'auto'})
- con = dbus.Dictionary({
- 'connection': s_con,
- '802-11-wireless': s_wifi,
- '802-11-wireless-security': s_wsec,
- '802-1x': s_8021x,
- 'ipv4': s_ip4,
- 'ipv6': s_ip6
- })
- self.settings.AddConnection(con)
- def main(self):
- self.check_opts()
- ver = self.connect_to_NM()
- self.delete_existing_connections('eduroam')
- self.add_connection('eduroam')
- if __name__ == "__main__":
- ENMCT = EduroamNMConfigTool()
- ENMCT.main()
- EOF
- }
- function create_wpa_conf {
- cat << EOFW >> $HOME/.cat_installer/cat_installer.conf
- network={
- ssid="eduroam"
- key_mgmt=WPA-EAP
- pairwise=CCMP
- group=CCMP TKIP
- eap=PEAP
- ca_cert="${HOME}/.cat_installer/ca.pem"
- identity="${USER_NAME}"
- domain_suffix_match="wifi.bangor.ac.uk"
- phase2="auth=MSCHAPV2"
- password="${PASSWORD}"
- }
- EOFW
- chmod 600 $HOME/.cat_installer/cat_installer.conf
- }
- #prompt user for credentials
- user_cred
- if run_python_script ; then
- show_info "Installation successful"
- else
- show_info "Network Manager configuration failed, generating wpa_supplicant.conf"
- 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
- if [ -f $HOME/.cat_installer/cat_installer.conf ] ; then
- if ! ask "File $HOME/.cat_installer/cat_installer.conf exists; it will be overwritten." "Continue" 1 ; then confirm_exit; fi
- rm $HOME/.cat_installer/cat_installer.conf
- fi
- create_wpa_conf
- show_info "Output written to $HOME/.cat_installer/cat_installer.conf"
- fi
Add Comment
Please, Sign In to add comment