Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- my_name=$0
- function setup_environment {
- bf=""
- n=""
- ORGANISATION="Universidad de Talca"
- URL="your local eduroam support page"
- SUPPORT="your local eduroam support"
- 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
- if $ZENITY --question --text="${1}\n${2}?" --title="$T" ; 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"
- 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"
- return
- fi
- echo "$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?\" ; 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"`
- 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}Universidad de Talca.${n}" "Continue" 1 ; then exit; fi
- if [ -d $HOME/.eduroam ] ; then
- if ! ask "Directory $HOME/.eduroam exists; some of its files may be overwritten." "Continue" 1 ; then exit; fi
- else
- mkdir $HOME/.eduroam
- fi
- # save certificates
- echo "-----BEGIN CERTIFICATE-----
- MIIEtzCCA5+gAwIBAgIJAJQZ9p7tYyDiMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD
- VQQGEwJDTDEOMAwGA1UECBMFVGFsY2ExHTAbBgNVBAoTFFVuaXZlcnNpZGFkIGRl
- IFRhbGNhMQwwCgYDVQQLEwNEVEkxJzAlBgNVBAMTHkF1dG9yaWRhZCBDZXJ0aWZp
- Y2Fkb3JhIFVUQUxDQTEjMCEGCSqGSIb3DQEJARYUcGxhdGFmb3JtYUB1dGFsY2Eu
- Y2wwHhcNMTUwMzExMDI0ODE3WhcNMTgwMzEwMDI0ODE3WjCBmDELMAkGA1UEBhMC
- Q0wxDjAMBgNVBAgTBVRhbGNhMR0wGwYDVQQKExRVbml2ZXJzaWRhZCBkZSBUYWxj
- YTEMMAoGA1UECxMDRFRJMScwJQYDVQQDEx5BdXRvcmlkYWQgQ2VydGlmaWNhZG9y
- YSBVVEFMQ0ExIzAhBgkqhkiG9w0BCQEWFHBsYXRhZm9ybWFAdXRhbGNhLmNsMIIB
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2n7ik1Arvt9p8zOj3ZQEJ1+r
- nMPiwZ0CtVI1jC+1H7eV2GGZ4m099V2YLUBTLg5zA/JtZV7IZijhE2dEotNdCG9z
- v1NiNv5NHskckW+UMFnpCj8ljXx0eTeZLhF7cHEHWU6JDedPghPGM5gocsHNKnBv
- NqSdwRCtlhYpjyW+mYFpzzcOfirxYZKPKRzGCn2hrRemBMznEf2jK7BHzTEJ8/3h
- lUlJK8wPvsf246SbG8ztDOoT+OXY/Qp+tdOCucC1f3E4xHjpte5krjGx3FMExi6K
- XQOVPrz3TiWQ5L6TsQv8hXyGuo+JFS6zb1y3xra1mKgWG5G5AgqERkVftWYOoQID
- AQABo4IBADCB/TAdBgNVHQ4EFgQU3pzZEtDibtU4oFjcM19L1Duipmgwgc0GA1Ud
- IwSBxTCBwoAU3pzZEtDibtU4oFjcM19L1DuipmihgZ6kgZswgZgxCzAJBgNVBAYT
- AkNMMQ4wDAYDVQQIEwVUYWxjYTEdMBsGA1UEChMUVW5pdmVyc2lkYWQgZGUgVGFs
- Y2ExDDAKBgNVBAsTA0RUSTEnMCUGA1UEAxMeQXV0b3JpZGFkIENlcnRpZmljYWRv
- cmEgVVRBTENBMSMwIQYJKoZIhvcNAQkBFhRwbGF0YWZvcm1hQHV0YWxjYS5jbIIJ
- AJQZ9p7tYyDiMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAIEh5/4M
- qV8BtSTX9jrDtodaQDQh59pATeAy1zv9hfo+uq6nxq9vEAb2A0QLvRNndx1I3uT8
- ZwHyLED/PGW1C7qutveSxj0I/VjEZlMEw+MGaEebxDdcRkCTZJZH5oACpf41zG3j
- dBbTTCMqjurg5dEvhSa3FUuGe5Fq5IhOApfz+kJpPS16xpmWQwT9HBeahomgruWz
- re92XwkfiDEEubHpQsnxfmz3pZSAeUseSFaw1Vxoo7jE3GN1tw+skKxah24c0RNF
- 1key9MatJnVIJ7fw1tVrRbgAJYYEoal625WWbvPfSI5ftKtc31ol5hBiAfBGtQOI
- dHna3fjmbjn5rK4=
- -----END CERTIFICATE-----
- " > $HOME/.eduroam/ca.pem
- function run_python_script {
- 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
- nm_version = self.check_nm_version()
- if nm_version == "0.9":
- 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 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}/.eduroam/ca.pem'
- self.pfx_file = '${HOME}/.eduroam/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'^0\.9', version):
- return "0.9"
- if re.match(r'^0\.8', version):
- return "0.8"
- else:
- return "Unknown version"
- 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):
- 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),
- 'security': '802-11-wireless-security'
- })
- s_wsec = dbus.Dictionary({'key-mgmt': 'wpa-eap'})
- s_8021x = dbus.Dictionary({
- 'eap': ['ttls'],
- 'identity': '$USER_NAME',
- 'ca-cert': dbus.ByteArray("file://" + self.cacert_file + "\0"),
- 'subject-match': 'radius.utalca.cl',
- 'password': '$PASSWORD',
- 'phase2-auth': 'pap',
- })
- 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/.eduroam/eduroam.conf
- network={
- ssid="eduroam"
- key_mgmt=WPA-EAP
- eap=TTLS
- ca_cert="${HOME}/.eduroam/ca.pem"
- identity="${USER_NAME}"
- subject_match="radius.utalca.cl"
- phase2="auth=PAP"
- password="${PASSWORD}"
- }
- EOFW
- chmod 600 $HOME/.eduroam/eduroam.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 [ -f $HOME/.eduroam/eduroam.conf ] ; then
- if ! ask "File $HOME/.eduroam/eduroam.conf exists; it will be overwritten." "Continue" 1 ; then confirm_exit; fi
- rm $HOME/.eduroam/eduroam.conf
- fi
- create_wpa_conf
- show_info "Output written to $HOME/.eduroam/eduroam.conf"
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement