From 603a72e648ced831cebd9f401fe1af2a20ccac6b Mon Sep 17 00:00:00 2001 From: KatolaZ Date: Thu, 5 Jan 2017 00:15:33 +0000 Subject: version 0.2 released --- .../setnet-0.1/debian/setnet/DEBIAN/md5sums | 2 +- .../setnet-0.1/debian/setnet/usr/sbin/setnet.sh | 2 +- debian_package/setnet-0.1/setnet.sh | 2 +- debian_package/setnet-0.2/debian/README.Debian | 132 ++ debian_package/setnet-0.2/debian/README.source | 10 + debian_package/setnet-0.2/debian/changelog | 27 + debian_package/setnet-0.2/debian/compat | 1 + debian_package/setnet-0.2/debian/control | 19 + debian_package/setnet-0.2/debian/copyright | 21 + .../setnet-0.2/debian/debhelper-build-stamp | 1 + debian_package/setnet-0.2/debian/files | 1 + debian_package/setnet-0.2/debian/init.d.ex | 26 + debian_package/setnet-0.2/debian/install | 3 + debian_package/setnet-0.2/debian/manpage.1.ex | 56 + debian_package/setnet-0.2/debian/manpage.sgml.ex | 154 ++ debian_package/setnet-0.2/debian/manpage.xml.ex | 291 +++ debian_package/setnet-0.2/debian/menu.ex | 2 + debian_package/setnet-0.2/debian/postinst.ex | 39 + debian_package/setnet-0.2/debian/postrm.ex | 37 + debian_package/setnet-0.2/debian/preinst.ex | 35 + debian_package/setnet-0.2/debian/prerm.ex | 38 + debian_package/setnet-0.2/debian/rules | 25 + debian_package/setnet-0.2/debian/setnet-docs.docs | 2 + debian_package/setnet-0.2/debian/setnet.cron.d.ex | 4 + .../setnet-0.2/debian/setnet.debhelper.log | 19 + debian_package/setnet-0.2/debian/setnet.default.ex | 10 + .../setnet-0.2/debian/setnet.doc-base.EX | 20 + debian_package/setnet-0.2/debian/setnet.substvars | 2 + .../setnet-0.2/debian/setnet/DEBIAN/conffiles | 2 + .../setnet-0.2/debian/setnet/DEBIAN/control | 14 + .../setnet-0.2/debian/setnet/DEBIAN/md5sums | 4 + .../setnet-0.2/debian/setnet/etc/setnetrc | 22 + .../setnet/etc/wpa_supplicant/wpa_setnet.conf | 4 + .../setnet-0.2/debian/setnet/usr/sbin/setnet.sh | 1848 ++++++++++++++++++++ .../setnet/usr/share/doc/setnet/README.Debian | 132 ++ .../usr/share/doc/setnet/changelog.Debian.gz | Bin 0 -> 439 bytes .../debian/setnet/usr/share/doc/setnet/copyright | 21 + debian_package/setnet-0.2/debian/source/format | 1 + debian_package/setnet-0.2/debian/watch.ex | 39 + debian_package/setnet-0.2/setnet.sh | 1848 ++++++++++++++++++++ debian_package/setnet-0.2/setnetrc | 22 + debian_package/setnet-0.2/wpa_setnet.conf | 4 + debian_package/setnet_0.1-1.debian.tar.xz | Bin 8180 -> 8176 bytes debian_package/setnet_0.1-1.dsc | 23 +- debian_package/setnet_0.1-1_all.deb | Bin 8320 -> 8312 bytes debian_package/setnet_0.1-1_amd64.changes | 35 +- debian_package/setnet_0.1.orig.tar.xz | Bin 14092 -> 14296 bytes debian_package/setnet_0.2-1.debian.tar.xz | Bin 0 -> 9680 bytes debian_package/setnet_0.2-1.dsc | 31 + debian_package/setnet_0.2-1_all.deb | Bin 0 -> 12920 bytes debian_package/setnet_0.2-1_amd64.changes | 63 + debian_package/setnet_0.2.orig.tar.xz | Bin 0 -> 18332 bytes 52 files changed, 5073 insertions(+), 21 deletions(-) create mode 100644 debian_package/setnet-0.2/debian/README.Debian create mode 100644 debian_package/setnet-0.2/debian/README.source create mode 100644 debian_package/setnet-0.2/debian/changelog create mode 100644 debian_package/setnet-0.2/debian/compat create mode 100644 debian_package/setnet-0.2/debian/control create mode 100644 debian_package/setnet-0.2/debian/copyright create mode 100644 debian_package/setnet-0.2/debian/debhelper-build-stamp create mode 100644 debian_package/setnet-0.2/debian/files create mode 100644 debian_package/setnet-0.2/debian/init.d.ex create mode 100644 debian_package/setnet-0.2/debian/install create mode 100644 debian_package/setnet-0.2/debian/manpage.1.ex create mode 100644 debian_package/setnet-0.2/debian/manpage.sgml.ex create mode 100644 debian_package/setnet-0.2/debian/manpage.xml.ex create mode 100644 debian_package/setnet-0.2/debian/menu.ex create mode 100644 debian_package/setnet-0.2/debian/postinst.ex create mode 100644 debian_package/setnet-0.2/debian/postrm.ex create mode 100644 debian_package/setnet-0.2/debian/preinst.ex create mode 100644 debian_package/setnet-0.2/debian/prerm.ex create mode 100755 debian_package/setnet-0.2/debian/rules create mode 100644 debian_package/setnet-0.2/debian/setnet-docs.docs create mode 100644 debian_package/setnet-0.2/debian/setnet.cron.d.ex create mode 100644 debian_package/setnet-0.2/debian/setnet.debhelper.log create mode 100644 debian_package/setnet-0.2/debian/setnet.default.ex create mode 100644 debian_package/setnet-0.2/debian/setnet.doc-base.EX create mode 100644 debian_package/setnet-0.2/debian/setnet.substvars create mode 100644 debian_package/setnet-0.2/debian/setnet/DEBIAN/conffiles create mode 100644 debian_package/setnet-0.2/debian/setnet/DEBIAN/control create mode 100644 debian_package/setnet-0.2/debian/setnet/DEBIAN/md5sums create mode 100644 debian_package/setnet-0.2/debian/setnet/etc/setnetrc create mode 100644 debian_package/setnet-0.2/debian/setnet/etc/wpa_supplicant/wpa_setnet.conf create mode 100755 debian_package/setnet-0.2/debian/setnet/usr/sbin/setnet.sh create mode 100644 debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/README.Debian create mode 100644 debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gz create mode 100644 debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/copyright create mode 100644 debian_package/setnet-0.2/debian/source/format create mode 100644 debian_package/setnet-0.2/debian/watch.ex create mode 100755 debian_package/setnet-0.2/setnet.sh create mode 100644 debian_package/setnet-0.2/setnetrc create mode 100644 debian_package/setnet-0.2/wpa_setnet.conf create mode 100644 debian_package/setnet_0.2-1.debian.tar.xz create mode 100644 debian_package/setnet_0.2-1.dsc create mode 100644 debian_package/setnet_0.2-1_all.deb create mode 100644 debian_package/setnet_0.2-1_amd64.changes create mode 100644 debian_package/setnet_0.2.orig.tar.xz (limited to 'debian_package') diff --git a/debian_package/setnet-0.1/debian/setnet/DEBIAN/md5sums b/debian_package/setnet-0.1/debian/setnet/DEBIAN/md5sums index d5492f6..60b8009 100644 --- a/debian_package/setnet-0.1/debian/setnet/DEBIAN/md5sums +++ b/debian_package/setnet-0.1/debian/setnet/DEBIAN/md5sums @@ -1,4 +1,4 @@ -8ca53becf53712ce6d851a60622b5df5 usr/sbin/setnet.sh +6f6229c3f868bd852a16a9514cbbaa87 usr/sbin/setnet.sh 14d36df6a96346c9126ffe5cb4c2bbd6 usr/share/doc/setnet/README.Debian d47fe95e38c07c7ab04d65e36ba03614 usr/share/doc/setnet/changelog.Debian.gz e5218c2f383b136780a03ba5e3f610b2 usr/share/doc/setnet/copyright diff --git a/debian_package/setnet-0.1/debian/setnet/usr/sbin/setnet.sh b/debian_package/setnet-0.1/debian/setnet/usr/sbin/setnet.sh index e5cba98..1880c78 100755 --- a/debian_package/setnet-0.1/debian/setnet/usr/sbin/setnet.sh +++ b/debian_package/setnet-0.1/debian/setnet/usr/sbin/setnet.sh @@ -664,7 +664,7 @@ function wifi_load_file(){ local DEVNAME=$1 eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH} \ - 2>${TMPFILE}|" + 2>${TMPFILE}" if [ $? -eq 0 ]; then SEL_FILE=`<${TMPFILE}` diff --git a/debian_package/setnet-0.1/setnet.sh b/debian_package/setnet-0.1/setnet.sh index e5cba98..1880c78 100755 --- a/debian_package/setnet-0.1/setnet.sh +++ b/debian_package/setnet-0.1/setnet.sh @@ -664,7 +664,7 @@ function wifi_load_file(){ local DEVNAME=$1 eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH} \ - 2>${TMPFILE}|" + 2>${TMPFILE}" if [ $? -eq 0 ]; then SEL_FILE=`<${TMPFILE}` diff --git a/debian_package/setnet-0.2/debian/README.Debian b/debian_package/setnet-0.2/debian/README.Debian new file mode 100644 index 0000000..0cad044 --- /dev/null +++ b/debian_package/setnet-0.2/debian/README.Debian @@ -0,0 +1,132 @@ ++--------------+ +| setnet | ++--------------+ + +Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +=== DESCRIPTION === + +setnet is a shell script with a dialog UI to configure ethernet and +wifi connections. It is meant to be POSIX-compliant, and has been +tested with bash, busybox, dash, ksh, mksh, posh, and yash. It is +still to be considered beta software, so you should use it AT YOUR OWN +RISK, but it is already fully functional. + +=== LICENSE === + +setnet is Free Software, and can be used and distributed under the +terms of the GNU General Public License, either version 3 of the +licence or, at your option, any later version. + +Please see the file LICENSE for more information + +=== DEPENDENCIES === + +In order to run setset, you MUST satisfy this (relatively small) set +of dependencies: + + - a posix-compliant shell (bash, busybox, dash, ksh, mksh, posh, and + yash have been tested) + + - dialog (version 1.2 tested, but it should work with previous + versions as well) + + - dhcp-client (for dhclient, tested with isc-dhcp-client) + + - iproute2 (for ip) + + - wireless-tools (for iwconfig, currently required for interface + identification) + +Most of those tools might already be installed in your system anyway. +In particular, setnet uses: + + - dialog: to provide a minimal Text-based User Interface, + - ip: to configure network interfaces and get information about them, + - dhclient: for DHCP-based IP configuration + - iwconfig: to check whether a network device is a wifi adapter + +In order to use the full set of functionalities provided by setnet, +you MIGHT also need the following packages: + + - wpa_supplicant (for wifi configuration) + + - net-tools (for netstat, to gather information about network status) + + - iputils-ping (for ping) + + - bind9-nost (for host, used to check DNS configuration) + + - traceroute (to trace the route between your host and any other host + in the Internet) + +Again, most of them should be already installed in your system anyway. + +=== USAGE === + +setnet is installed under /usr/sbin/setnet.sh. If invoked with "-h", +it provides a list of supported options: + +$ ./setnet.sh -h +Usage: setnet.sh [OPTION] +Options: + -c cfg_file Load configuration from cfg_file. + -v Print version number and exit. + -h Show this help. +$ + +If the argument "-c" is specified, setnet will use the provided +configuration file. Otherwise, it will look for its configuration file +in one of the following locations: + + - /etc/setnetrc + - ~/.setnetrc + +in the given order. The following configuration variables should be +defined in setnetrc: + + + - WPA_FILE + This is the file configuration file used by wpa_supplicant. + + - LOGNAME + This is the file used for logging. + + - TRUNCATE_LOG + if equal to "yes", the log file will be truncated when setnet + starts + + +=== root vs. mortal users === + +Networking is an amdinistration task, and as such should be performed +by the host administrator, i.e., the user with UID 0 (normally called +"root"). However, in many modern GNU/Linux systems it is customary to +allow normal users to perform some administration tasks. There are at +least two concrete possibilities to allow a particular user (in the +following we call such user "fool") to configure network interfaces +using setnet. + + +-- 1) First approach: using sudo + +If sudo is installed in your system, it is sufficient to add the +following line: + + fool ALL=NOPASSWD: /usr/sbin/setnet.sh + +to the file /etc/sudoers, and the user "fool" will be able to run +setnet.sh with effective UID 0 (i.e., as if it was root), by using the +command: + +[fool@host]$ sudo /usr/sbin/setnet.sh + +and thus will be able to perform all the needed admin tasks to +configure networking. + +-- 2) Second approach: using sup + +......TO BE DOCUMENTED...... + + diff --git a/debian_package/setnet-0.2/debian/README.source b/debian_package/setnet-0.2/debian/README.source new file mode 100644 index 0000000..acbd725 --- /dev/null +++ b/debian_package/setnet-0.2/debian/README.source @@ -0,0 +1,10 @@ +setnet for Debian +---------------- + + + + + + -- Vincenzo (KatolaZ) Nicosia Wed, 04 Jan 2017 18:52:56 +0000 + diff --git a/debian_package/setnet-0.2/debian/changelog b/debian_package/setnet-0.2/debian/changelog new file mode 100644 index 0000000..b66a0b4 --- /dev/null +++ b/debian_package/setnet-0.2/debian/changelog @@ -0,0 +1,27 @@ +setnet (0.2-1) unstable; urgency=medium + + * Initial release (20170104) + + == Major Changes == + + + Polished code to make it posix-shell compliant + + + Tested with bash, busybox, dash, ksh, mksh, posh, yash + + + Added support and checks for hard, soft, and optional + dependencies + + + Added standard command line options (-c, -h, -v) + + + Added submenu "Info" with basic network testing tools + + + Added submenu "Dump" to dump network information to a file + + + Added submenu "Log" (shows setnet logfile) + + + Added status information in device configuration panel + + + Added minimal README.Debian file + + + -- Vincenzo (KatolaZ) Nicosia Wed, 04 Jan 2017 18:52:56 +0000 diff --git a/debian_package/setnet-0.2/debian/compat b/debian_package/setnet-0.2/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian_package/setnet-0.2/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian_package/setnet-0.2/debian/control b/debian_package/setnet-0.2/debian/control new file mode 100644 index 0000000..fdf5de7 --- /dev/null +++ b/debian_package/setnet-0.2/debian/control @@ -0,0 +1,19 @@ +Source: setnet +Section: unknown +Priority: optional +Maintainer: Vincenzo (KatolaZ) Nicosia +Build-Depends: debhelper (>=9) +Standards-Version: 3.9.8 +Homepage: http://kalos.mine.nu/setnet +#Vcs-Git: git://anonscm.debian.org/collab-maint/setnet.git +#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/setnet.git + +Package: setnet +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, bash | busybox | dash | ksh | mksh | posh | yash , dhcp-client, dialog, iproute2, wireless-tools +Suggests: wpasupplicant, pastebinit, net-tools, iputils-ping, bind9-host, traceroute +Description: simple shell/dialog tool to configure networks + setnet is a shell script with a dialog UI to configure ethernet + and wifi connections. It is meant to be POSIX-compliant, and has + been tested on bash, busybox, dash, ksh, mksh, posh, and yash. + diff --git a/debian_package/setnet-0.2/debian/copyright b/debian_package/setnet-0.2/debian/copyright new file mode 100644 index 0000000..f425891 --- /dev/null +++ b/debian_package/setnet-0.2/debian/copyright @@ -0,0 +1,21 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: setnet +Source: + +Files: debian/* +Copyright: 2016 Vincenzo (KatolaZ) Nicosia +License: GPL-3+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + diff --git a/debian_package/setnet-0.2/debian/debhelper-build-stamp b/debian_package/setnet-0.2/debian/debhelper-build-stamp new file mode 100644 index 0000000..c166bc0 --- /dev/null +++ b/debian_package/setnet-0.2/debian/debhelper-build-stamp @@ -0,0 +1 @@ +setnet diff --git a/debian_package/setnet-0.2/debian/files b/debian_package/setnet-0.2/debian/files new file mode 100644 index 0000000..45733e1 --- /dev/null +++ b/debian_package/setnet-0.2/debian/files @@ -0,0 +1 @@ +setnet_0.2-1_all.deb unknown optional diff --git a/debian_package/setnet-0.2/debian/init.d.ex b/debian_package/setnet-0.2/debian/init.d.ex new file mode 100644 index 0000000..08360e2 --- /dev/null +++ b/debian_package/setnet-0.2/debian/init.d.ex @@ -0,0 +1,26 @@ +#!/bin/sh +# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing. +if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then + set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script +fi +### BEGIN INIT INFO +# Provides: setnet +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: +# Description: +# <...> +# <...> +### END INIT INFO + +# Author: Vincenzo (KatolaZ) Nicosia + +DESC="setnet" +DAEMON=/usr/bin/setnet + +# This is an example to start a single forking daemon capable of writing +# a pid file. To get other behaviors, implement do_start(), do_stop() or +# other functions to override the defaults in /lib/init/init-d-script. +# See also init-d-script(5) diff --git a/debian_package/setnet-0.2/debian/install b/debian_package/setnet-0.2/debian/install new file mode 100644 index 0000000..7385031 --- /dev/null +++ b/debian_package/setnet-0.2/debian/install @@ -0,0 +1,3 @@ +setnet.sh /usr/sbin +setnetrc /etc/ +wpa_setnet.conf /etc/wpa_supplicant/ diff --git a/debian_package/setnet-0.2/debian/manpage.1.ex b/debian_package/setnet-0.2/debian/manpage.1.ex new file mode 100644 index 0000000..c48d1ce --- /dev/null +++ b/debian_package/setnet-0.2/debian/manpage.1.ex @@ -0,0 +1,56 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" (C) Copyright 2017 Vincenzo (KatolaZ) Nicosia , +.\" +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH Setnet SECTION "January 4 2017" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +setnet \- program to do something +.SH SYNOPSIS +.B setnet +.RI [ options ] " files" ... +.br +.B bar +.RI [ options ] " files" ... +.SH DESCRIPTION +This manual page documents briefly the +.B setnet +and +.B bar +commands. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBsetnet\fP is a program that... +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +For a complete description, see the Info files. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-v, \-\-version +Show version of program. +.SH SEE ALSO +.BR bar (1), +.BR baz (1). +.br +The programs are documented fully by +.IR "The Rise and Fall of a Fooish Bar" , +available via the Info system. diff --git a/debian_package/setnet-0.2/debian/manpage.sgml.ex b/debian_package/setnet-0.2/debian/manpage.sgml.ex new file mode 100644 index 0000000..8e6d551 --- /dev/null +++ b/debian_package/setnet-0.2/debian/manpage.sgml.ex @@ -0,0 +1,154 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + FIRSTNAME"> + SURNAME"> + + January 4 2017"> + + SECTION"> + katolaz@freaknet.org"> + + Setnet"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + program to do something + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (and may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the &gnu; General Public License, Version 2 any + later version published by the Free Software Foundation. + + + On Debian systems, the complete text of the GNU General Public + License can be found in /usr/share/common-licenses/GPL. + + + +
+ + diff --git a/debian_package/setnet-0.2/debian/manpage.xml.ex b/debian_package/setnet-0.2/debian/manpage.xml.ex new file mode 100644 index 0000000..ae9864a --- /dev/null +++ b/debian_package/setnet-0.2/debian/manpage.xml.ex @@ -0,0 +1,291 @@ + +.
will be generated. You may view the +manual page with: nroff -man .
| less'. A typical entry +in a Makefile or Makefile.am is: + +DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl +XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" + +manpage.1: manpage.xml + $(XP) $(DB2MAN) $< + +The xsltproc binary is found in the xsltproc package. The XSL files are in +docbook-xsl. A description of the parameters you can use can be found in the +docbook-xsl-doc-* packages. Please remember that if you create the nroff +version in one of the debian/rules file targets (such as build), you will need +to include xsltproc and docbook-xsl in your Build-Depends control field. +Alternatively use the xmlto command/package. That will also automatically +pull in xsltproc and docbook-xsl. + +Notes for using docbook2x: docbook2x-man does not automatically create the +AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as + ... . + +To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections +read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be +found in the docbook-xsl-doc-html package. + +Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` + +General documentation about man-pages and man-page-formatting: +man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ + +--> + + + + + + + + + + + + + +]> + + + + &dhtitle; + &dhpackage; + + + &dhfirstname; + &dhsurname; + Wrote this manpage for the Debian system. +
+ &dhemail; +
+
+
+ + 2007 + &dhusername; + + + This manual page was written for the Debian system + (and may be used by others). + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License, + Version 2 or (at your option) any later version published by + the Free Software Foundation. + On Debian systems, the complete text of the GNU General Public + License can be found in + /usr/share/common-licenses/GPL. + +
+ + &dhucpackage; + &dhsection; + + + &dhpackage; + program to do something + + + + &dhpackage; + + + + + + + + + this + + + + + + + + this + that + + + + + &dhpackage; + + + + + + + + + + + + + + + + + + + DESCRIPTION + This manual page documents briefly the + &dhpackage; and bar + commands. + This manual page was written for the Debian distribution + because the original program does not have a manual page. + Instead, it has documentation in the GNU + info + 1 + format; see below. + &dhpackage; is a program that... + + + OPTIONS + The program follows the usual GNU command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + + info + 1 + files. + + + + + + + Does this and that. + + + + + + + Show summary of options. + + + + + + + Show version of program. + + + + + + FILES + + + /etc/foo.conf + + The system-wide configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + ${HOME}/.foo.conf + + The per-user configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + + + ENVIRONMENT + + + FOO_CONF + + If used, the defined file is used as configuration + file (see also ). + + + + + + DIAGNOSTICS + The following diagnostics may be issued + on stderr: + + + Bad configuration file. Exiting. + + The configuration file seems to contain a broken configuration + line. Use the option, to get more info. + + + + + &dhpackage; provides some return codes, that can + be used in scripts: + + Code + Diagnostic + + 0 + Program exited successfully. + + + 1 + The configuration file seems to be broken. + + + + + + BUGS + The program is currently limited to only work + with the foobar library. + The upstreams BTS can be found + at . + + + SEE ALSO + + + bar + 1 + , + baz + 1 + , + foo.conf + 5 + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + info + 1 + system. + +
+ diff --git a/debian_package/setnet-0.2/debian/menu.ex b/debian_package/setnet-0.2/debian/menu.ex new file mode 100644 index 0000000..3f6b8bb --- /dev/null +++ b/debian_package/setnet-0.2/debian/menu.ex @@ -0,0 +1,2 @@ +?package(setnet):needs="X11|text|vc|wm" section="Applications/see-menu-manual"\ + title="setnet" command="/usr/bin/setnet" diff --git a/debian_package/setnet-0.2/debian/postinst.ex b/debian_package/setnet-0.2/debian/postinst.ex new file mode 100644 index 0000000..63f6b54 --- /dev/null +++ b/debian_package/setnet-0.2/debian/postinst.ex @@ -0,0 +1,39 @@ +#!/bin/sh +# postinst script for setnet +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian_package/setnet-0.2/debian/postrm.ex b/debian_package/setnet-0.2/debian/postrm.ex new file mode 100644 index 0000000..14fe7e0 --- /dev/null +++ b/debian_package/setnet-0.2/debian/postrm.ex @@ -0,0 +1,37 @@ +#!/bin/sh +# postrm script for setnet +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian_package/setnet-0.2/debian/preinst.ex b/debian_package/setnet-0.2/debian/preinst.ex new file mode 100644 index 0000000..09a88b6 --- /dev/null +++ b/debian_package/setnet-0.2/debian/preinst.ex @@ -0,0 +1,35 @@ +#!/bin/sh +# preinst script for setnet +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + install|upgrade) + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian_package/setnet-0.2/debian/prerm.ex b/debian_package/setnet-0.2/debian/prerm.ex new file mode 100644 index 0000000..725e2b8 --- /dev/null +++ b/debian_package/setnet-0.2/debian/prerm.ex @@ -0,0 +1,38 @@ +#!/bin/sh +# prerm script for setnet +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + remove|upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian_package/setnet-0.2/debian/rules b/debian_package/setnet-0.2/debian/rules new file mode 100755 index 0000000..2f54c47 --- /dev/null +++ b/debian_package/setnet-0.2/debian/rules @@ -0,0 +1,25 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ + + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) + diff --git a/debian_package/setnet-0.2/debian/setnet-docs.docs b/debian_package/setnet-0.2/debian/setnet-docs.docs new file mode 100644 index 0000000..efea0a6 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet-docs.docs @@ -0,0 +1,2 @@ +README.Debian +README.source diff --git a/debian_package/setnet-0.2/debian/setnet.cron.d.ex b/debian_package/setnet-0.2/debian/setnet.cron.d.ex new file mode 100644 index 0000000..fd54f7d --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet.cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the setnet package +# +0 4 * * * root [ -x /usr/bin/setnet_maintenance ] && /usr/bin/setnet_maintenance diff --git a/debian_package/setnet-0.2/debian/setnet.debhelper.log b/debian_package/setnet-0.2/debian/setnet.debhelper.log new file mode 100644 index 0000000..73fb7fd --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet.debhelper.log @@ -0,0 +1,19 @@ +dh_update_autotools_config +dh_auto_configure +dh_auto_build +dh_auto_test +dh_prep +dh_auto_install +dh_install +dh_installdocs +dh_installchangelogs +dh_perl +dh_link +dh_strip_nondeterminism +dh_compress +dh_fixperms +dh_installdeb +dh_gencontrol +dh_md5sums +dh_builddeb +dh_builddeb diff --git a/debian_package/setnet-0.2/debian/setnet.default.ex b/debian_package/setnet-0.2/debian/setnet.default.ex new file mode 100644 index 0000000..ade741e --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet.default.ex @@ -0,0 +1,10 @@ +# Defaults for setnet initscript +# sourced by /etc/init.d/setnet +# installed at /etc/default/setnet by the maintainer scripts + +# +# This is a POSIX shell fragment +# + +# Additional options that are passed to the Daemon. +DAEMON_OPTS="" diff --git a/debian_package/setnet-0.2/debian/setnet.doc-base.EX b/debian_package/setnet-0.2/debian/setnet.doc-base.EX new file mode 100644 index 0000000..42bd26a --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet.doc-base.EX @@ -0,0 +1,20 @@ +Document: setnet +Title: Debian setnet Manual +Author: +Abstract: This manual describes what setnet is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/setnet/setnet.sgml.gz + +Format: postscript +Files: /usr/share/doc/setnet/setnet.ps.gz + +Format: text +Files: /usr/share/doc/setnet/setnet.text.gz + +Format: HTML +Index: /usr/share/doc/setnet/html/index.html +Files: /usr/share/doc/setnet/html/*.html diff --git a/debian_package/setnet-0.2/debian/setnet.substvars b/debian_package/setnet-0.2/debian/setnet.substvars new file mode 100644 index 0000000..978fc8b --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet.substvars @@ -0,0 +1,2 @@ +misc:Depends= +misc:Pre-Depends= diff --git a/debian_package/setnet-0.2/debian/setnet/DEBIAN/conffiles b/debian_package/setnet-0.2/debian/setnet/DEBIAN/conffiles new file mode 100644 index 0000000..3479547 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/DEBIAN/conffiles @@ -0,0 +1,2 @@ +/etc/setnetrc +/etc/wpa_supplicant/wpa_setnet.conf diff --git a/debian_package/setnet-0.2/debian/setnet/DEBIAN/control b/debian_package/setnet-0.2/debian/setnet/DEBIAN/control new file mode 100644 index 0000000..eea84fb --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/DEBIAN/control @@ -0,0 +1,14 @@ +Package: setnet +Version: 0.2-1 +Architecture: all +Maintainer: Vincenzo (KatolaZ) Nicosia +Installed-Size: 85 +Depends: bash | busybox | dash | ksh | mksh | posh | yash, dhcp-client, dialog, iproute2, wireless-tools +Suggests: wpasupplicant, pastebinit, net-tools, iputils-ping, bind9-host, traceroute +Section: unknown +Priority: optional +Homepage: http://kalos.mine.nu/setnet +Description: simple shell/dialog tool to configure networks + setnet is a shell script with a dialog UI to configure ethernet + and wifi connections. It is meant to be POSIX-compliant, and has + been tested on bash, busybox, dash, ksh, mksh, posh, and yash. diff --git a/debian_package/setnet-0.2/debian/setnet/DEBIAN/md5sums b/debian_package/setnet-0.2/debian/setnet/DEBIAN/md5sums new file mode 100644 index 0000000..1cc141d --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/DEBIAN/md5sums @@ -0,0 +1,4 @@ +d9a00f64ca65cc3c0c420a77b7875ab5 usr/sbin/setnet.sh +d690d59753d9fcd42667d50efb859a68 usr/share/doc/setnet/README.Debian +632d597c2778f1bb905a04c2b7bbad37 usr/share/doc/setnet/changelog.Debian.gz +e5218c2f383b136780a03ba5e3f610b2 usr/share/doc/setnet/copyright diff --git a/debian_package/setnet-0.2/debian/setnet/etc/setnetrc b/debian_package/setnet-0.2/debian/setnet/etc/setnetrc new file mode 100644 index 0000000..3f18bcc --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/etc/setnetrc @@ -0,0 +1,22 @@ +## +## +## setnetrc -- configuration file for setnet +## +## + +## +## The default configuration file for wpa_supplicant +## +WPA_FILE=/etc/wpa_supplicant/wpa_setnet.conf + + +## +## Logfile +## +LOGFILE=/var/log/setnet.log + +## +## +## +TRUNCATE_LOG="yes" + diff --git a/debian_package/setnet-0.2/debian/setnet/etc/wpa_supplicant/wpa_setnet.conf b/debian_package/setnet-0.2/debian/setnet/etc/wpa_supplicant/wpa_setnet.conf new file mode 100644 index 0000000..9ce4275 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/etc/wpa_supplicant/wpa_setnet.conf @@ -0,0 +1,4 @@ +ctrl_interface=/var/run/wpa_supplicant +update_config=1 +GROUP=wheel + diff --git a/debian_package/setnet-0.2/debian/setnet/usr/sbin/setnet.sh b/debian_package/setnet-0.2/debian/setnet/usr/sbin/setnet.sh new file mode 100755 index 0000000..a352b44 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/usr/sbin/setnet.sh @@ -0,0 +1,1848 @@ +#!/bin/sh + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# ---------------------------------------------------------------------- +# +# setnet.sh -- view and configure network interfaces +# +# ---------------------------------------------------------------------- +# +# Copyleft (C) Vincenzo "KatolaZ" Nicosia (katolaz@freaknet.org) -- +# (2016, 2017) +# +# + + +## +## Initialisation +## + +VERSION=0.2 + + +TOPSTR="setnet-${VERSION} [user: $(id -run)]" +DIALOG="dialog --backtitle \"${TOPSTR}\" " + + +############################### +## ## +## Internal config variables ## +## ## +############################### + +## +## Required dependencies. If any of those commands is missing, +## the script will exit +## + +HARD_DEPS="ip dhclient dialog iwconfig" + +## +## Suggested dependencies. The script will issue a warning if any of +## those commands is missing +## + +SOFT_DEPS="wpa_cli wpa_supplicant" + +## +## Optional dependencies. The script will check if those dependencies +## exist, and if they do, will set a variable HAS_OPTS which contains +## the names of the commands actually found +## + +OPT_DEPS="host ping traceroute netstat pastebinit" + +################################# + +##################################### +## ## +## HEIGHT/WIDTH of various dialogs ## +## ## +##################################### + +## +## Regular windows +## + +WINDOW_WIDTH=75 +WINDOW_HEIGHT=20 + +## +## Infoboxes +## +INFO_WIDTH=40 +INFO_HEIGHT=10 + + +## +## Forms +## +FORM_WIDTH=60 +FORM_HEIGHT=12 + +## +## Large windows +## + +LARGE_WIDTH=80 +LARGE_HEIGHT=20 + + +################################# + +################################ +## ## +## Supported network families ## +## ## +################################ + +NET_FAMILIES="inet inet6" + +################################# + +## +## Load the configuration file "setnetrc" +## + +##function +load_setnetrc(){ + + WPA_FILE="" + LOGFILE="" + ## If we were given a parameter, is the rc file to load... + ## + if [ $# -ge 1 ]; then + . "$1" + return + fi + + ## + ## Otherwise, let's look in the standard locations, namely: + ## + + ## + ## 1) /etc/setnetrc + ## + + if [ -f /etc/setnetrc ]; then + SETNETRC=/etc/setnetrc + fi + + ## + ## 2) ~/.setnetrc + ## + + if [ -f ~/.setnetrc ]; then + SETNETRC=~/.setnetrc + fi + + . ${SETNETRC} + + if [ -z ${WPA_FILE} ]; then + echo "Could not find WPA_FILE defined anywhere. Exiting" + exit 1 + fi + + if [ -z ${LOGFILE} ]; then + echo "Could not find LOGFILE defined anywhere. Exiting" + exit 1 + fi +} + + +## +## handler called upon exit/signal (NONE HUP INT TRAP TERM QUIT) +## + +##function +cleanup(){ + rm -f ${TMPFILE} + rm -f ${WPA_PIDFILE} +} + + +################### +# # +# LOGGING # +# # +################### + +## +## log() takes two arguments, namely the label and the message +## +## +##function +log(){ + + ##local + LABEL=$1 + ##local + MSG=$2 + + echo "${LABEL}:" "${MSG}" >> "${LOGFILE}" + +} + +## +## Check whether the shell which called the script is supported, or +## exit. Currently, we support the follwing shells: +## +## - bash +## - busybox +## - dash +## - ksh +## - mksh +## - posh +## - sh +## - yash +## + +##function +check_shell(){ + + ## + ## FIXME!!! THIS TEST DOES NOT WORK yet... + ## + CUR_SH=$(ps -p $$ -o comm=) + case ${CUR_SH} in + ash|bash|busybox|dash|ksh|mksh|posh|sh|yash) + log "check_shell" "The current shell (${CUR_SH}) is supported" + return + ;; + *) + log "check_shell" "The current shell (${CUR_SH}) is not supported" + echo "The current shell (${CUR_SH}) is not supported. Exiting..." + exit 1 + ;; + esac +} + + +## +## Check dependencies +## +## - check if the current shell is supported through check_shell +## +## - each command in HARD_DEPS MUST exist, or the script exits +## +## - each command in SOFT_DEPS SHOULD exist, or the script will log a +## warning +## +## - each command in OPT_DEPS MIGHT exist, and if it does its name is +## included in the variable "HAS_OPTS" +## + +##function +check_deps(){ + + ## FIXME FIRST.... check_shell + + for h in ${HARD_DEPS}; do + _W=$(which ${h}) + if [ -z "${_W}" ]; then + echo "Error: required command \"${h}\" not found. Exiting..." + exit 1 + fi + log "check_deps" "NOTICE: required command '${h}'...found" + done + + for s in ${SOFT_DEPS}; do + _S=$(which ${s}) + if [ -z "${_S}" ]; then + log "check_deps" "WARNING: suggested command '${s}' not found! Some functions might not work properly" + fi + done + + HAS_OPTS="" + for o in ${OPT_DEPS}; do + _O=$(which ${o}) + if [ -n "${_O}" ]; then + HAS_OPTS=" ${HAS_OPTS} ${o} " + log "check_deps" "NOTICE: optional command '${o}'...found" + else + log "check_deps" "NOTICE: optional command '${o}' not found!" + fi + done + + log "check_deps" "HAS_OPTS: \"${HAS_OPTS}\"" + +} + +## +## Generic function fo unimplemented features. It just pops up a +## message-box and returns +## + +##function +unimplemented(){ + + LABEL=$1 + + eval "${DIALOG} --msgbox 'Sorry! '$LABEL' not implemented, yet!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2>${TMPFILE} +} + + + +########################################## + +##function +edit_file(){ + + ##local + FILEIN=$1 + log "edit_file" "editing file ${FILEIN}" + eval "${DIALOG} --title 'Editing file: ${FILEIN}' \ + --editbox ${FILEIN} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + log "edit_file" "Copying ${TMPFILE} into ${FILEIN}" + if cp "${TMPFILE}" "${FILEIN}" + then + eval "${DIALOG} --clear --msgbox 'File ${FILEIN} saved successfully' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --clear --msgbox 'Error saving file ${FILEIN}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + else + log "edit_file" "Editing of ${FILEIN} aborted..." + eval "${DIALOG} --clear --msgbox 'File ${FILEIN} not saved' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi +} + + + + +## +## Read all the configured addresses for a given inet family +## +##function +get_addr_family(){ + +##local + DEVNAME=$1 + ##local + DEVFAMILY=$2 + + NUMADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep -c "${DEVFAMILY}") + ADDR_STR="" + for i in $(seq ${NUMADDR}); do + ADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep "${DEVFAMILY}" | \ + tail -n +$i | head -1 | sed -r -e "s:^\ +::g" | cut -d " " -f 2,4,6 |\ + sed -r -e "s:\ : -- :g") + ADDR_STR="${ADDR_STR}\n${DEVFAMILY}: ${ADDR}\n" + done +} + +## +## Show the current configuration of a given device +## + +##function +show_device_conf(){ + +##local +DEVNAME=$1 + if [ -z "${DEVNAME}" ]; then + return -1 + fi + + DEVMAC=$(ip link show "${DEVNAME}" | tail -n +2 | sed -r 's/^\ +//g' | cut -d " " -f 2) + DEVCONF="MAC: ${DEVMAC}\n" + + log "show_device_conf" "NET_FAMILIES: \"${NET_FAMILIES}\"" + + for f in ${NET_FAMILIES}; do + get_addr_family ${DEVNAME} ${f} + log "show_device_conf" "family: ${f} ADDR_STR: \"${ADDR_STR}\"" + + if [ -z "${ADDR_STR}" ]; then + DEVCONF="${DEVCONF}${f}: Unconfigured\n" + else + DEVCONF="${DEVCONF}${ADDR_STR}" + fi + log "show_device_conf" "DEVCONF: ${DEVCONF}" + done + + DEVCONF="${DEVCONF}\n== name servers ==\n$(grep '^nameserver' /etc/resolv.conf)" + + eval "${DIALOG} --clear --title 'Current configuration of device: ${DEVNAME}' \ + --msgbox '\n\n${DEVCONF}' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} " + return 0 + +} + + + +##function +config_ethernet_static(){ + +##local +DEV_IP="192.168.1.2" +##local +DEV_NET="192.168.1.0" +##local +DEV_NETMASK="255.255.255.0" +##local +DEV_GW="192.168.1.1" +##local +DEV_DNS1="208.67.222.222" +##local +DEV_DNS2="208.67.220.220" + +##local +DEVNAME=$1 + + exec 3>&1 + eval "${DIALOG} --clear --form 'Set network for device: ${DEVNAME}'" \ + ${FORM_HEIGHT} ${FORM_WIDTH} 0 \ + "IP" 1 1 "${DEV_IP}" 1 16 16 16 \ + "Network" 2 1 "${DEV_NET}" 2 16 16 16 \ + "Netmask" 3 1 "${DEV_NETMASK}" 3 16 16 16 \ + "Gateway" 4 1 "${DEV_GW}" 4 16 16 16 \ + "Primary DNS" 5 1 "${DEV_DNS1}" 5 16 16 16 \ + "Secondary DNS" 6 1 "${DEV_DNS2}" 6 16 16 16 2> ${TMPFILE} + + if [ $? -eq 1 ]; then + eval "${DIALOG} --infobox 'Configuration of ${DEVNAME} aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + + read -d "*" DEV_IP DEV_NET DEV_NETMASK DEV_GW DEV_DNS1 DEV_DNS2 < ${TMPFILE} + eval "${DIALOG} --msgbox 'Proposed configuration of ${DEVNAME}:\n ${DEV_IP}\n${DEV_NET}\n${DEV_NETMASK}\n${DEV_GW}\n${DEV_DNS1}\n${DEV_DNS2}'\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + + ## Configure IP + + ip link set "${DEVNAME}" down + ip link set "${DEVNAME}" up + ip address flush dev "${DEVNAME}" + ip address add "${DEV_IP}/${DEV_NETMASK}" dev "${DEVNAME}" + + ## Configure GW + ip route flush dev "${DEVNAME}" + ip route add "${DEV_NET}/${DEV_NETMASK}" dev "${DEVNAME}" + ip route add default via "${DEV_GW}" + + ## Configure DNS + mv /etc/resolv.conf /etc/resolv.conf.bak + if [ -n "${DEV_DNS1}" ]; then + echo "nameserver ${DEV_DNS1}" >> /etc/resolv.conf + fi + if [ -n "${DEV_DNS2}" ]; then + echo "nameserver ${DEV_DNS2}" >> /etc/resolv.conf + fi + show_device_conf "${DEVNAME}" +} + +##function +config_ethernet_dhcp(){ + +##local +DEVNAME=$1 + + eval "${DIALOG} --msgbox 'Running \"dhclient ${DEVNAME}\"' ${INFO_HEIGHT} ${INFO_WIDTH}" + dhclient -r ${DEVNAME} + dhclient ${DEVNAME} + show_device_conf ${DEVNAME} +} + + +##function +config_ethernet(){ + +##local + DEVNAME=$1 + + while true; do + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Configuring ${DEVNAME}' ${INFO_HEIGHT} ${INFO_WIDTH} 4 \ + 'DHCP' ''\ + 'Static' ''" 2>${TMPFILE} + if [ $? -eq 1 ]; then + return + fi + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Static") + config_ethernet_static ${DEVNAME} + ;; + "DHCP") + config_ethernet_dhcp ${DEVNAME} + ;; + esac + done + +} + +##function +wifi_essid_from_mac(){ + + ##local + DEVNAME=$1 + ##local + W_MAC=$2 + + W_ESSID=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \ + sed -r -e 's/\t/\|/g' | cut -d "|" -f 5) + + log "wifi_essid_from_mac" "Recovered ESSID: ${W_ESSID}" +} + +##function +wifi_flags_from_mac(){ +##local + DEVNAME=$1 +##local + W_MAC=$2 + + W_FLAGS=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \ + sed -r -e 's/\t/\|/g' | cut -d "|" -f 4) + log "wifi_essid_from_mac" "Recovered W_FLAGS: ${W_FLAGS}" + +} + + +##function +wifi_network_list(){ + +##local + DEVNAME=$1 + wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' > ${TMPFILE} + + NETLIST="" + LAST_IFS=$IFS + IFS="|" + while read NETNUM NETESSID NETBSSID NETFLAGS; do + IS_DIS=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i disabled ) + if [ ${IS_DIS} -eq 1 ]; then + STATUS="(DIS)" + else + STATUS="(ENAB)" + fi + IS_CUR=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i current ) + if [ ${IS_CUR} -eq 1 ]; then + STATUS="${STATUS}(CUR)" + fi + + + NETLIST="${NETLIST} ${NETNUM} \"${NETESSID}-${STATUS}\"" + done < ${TMPFILE} + IFS=${LAST_IFS} + + log "wifi_network_list" "NETLIST: ${NETLIST}" +} + + +## +## Manage the authentication for a given wifi ESSID +## +##function +wifi_authenticate(){ + +##local + DEVNAME=$1 +##local + W_MAC=$2 + + + log "wifi_authenticate" "configuring ${DEVNAME} on ${W_MAC}" + ## This will set the variable W_ESSID appropriately + wifi_essid_from_mac ${DEVNAME} ${W_MAC} + + ## This will set the variable W_FLAGS appropriately + wifi_flags_from_mac ${DEVNAME} ${W_MAC} + + + log "wifi_authenticate" "configuring essid: ${W_ESSID} on device: ${DEVNAME}" + log "wifi_authenticate" "W_FLAGS: ${W_FLAGS}" + + + NET_EXISTS=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \ + | cut -d "|" -f 2 | grep -c "${W_ESSID}$" ) + if [ ${NET_EXISTS} != 0 ]; then + NET_NUM=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \ + | cut -d "|" -f 1,2 | grep "${W_ESSID}$" | cut -d "|" -f 1) + wpa_cli -i ${DEVNAME} remove_network ${NET_NUM} > ${TMPFILE} + STATUS=$(cat ${TMPFILE}) + if [ "${STATUS}" != "OK" ]; then + eval "${DIALOG} --msgbox 'Error while removing existing network:\n$essid: {W_ESSID}'" + ${INFO_HEIGHT} ${INFO_WIDTH} + return + fi + fi + + + HAS_WPA=$(echo "${W_FLAGS}" | grep -E -c "WPA.*-PSK" ) + + log "wifi_authenticate" "HAS_WPA: \"${HAS_WPA}\"" + + ### This section will configure WPA-PSK or WPA2-PSK + if [ "${HAS_WPA}" != "0" ]; then + PSK="" + PSK_LENGTH=${#PSK} + while [ ${PSK_LENGTH} -le 7 ]; do + eval "${DIALOG} --insecure --inputbox 'Please insert WPA PSK\n(8 characters)' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + if [ $? -eq 1 ]; then + eval "${DIALOG} --clear --msgbox 'Network configuration aborted!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return 1 + fi + PSK=$(cat ${TMPFILE}) + PSK_LENGTH=${#PSK} + done + + + NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1) + + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\"" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} psk \"${PSK}\" + ## remove the password from tmpfile + echo "" > ${TMPFILE} + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network \"${W_ESSID}\" added\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + eval "${DIALOG} --msgbox 'Network added successfully' ${INFO_HEIGHT} ${INFO_WIDTH}" + return 0 + fi + + HAS_ESS=$(echo "${W_FLAGS}" | grep -E -c "ESS" ) + + log "wifi_authenticate" "HAS_ESS: \"${HAS_ESS}\"" + + if [ "${HAS_ESS}" != "0" ]; then + NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1) + + log "wifi_authenticate" "NET_NUM: ${NET_NUM}" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\"" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} key_mgmt NONE + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network \"${W_ESSID}\" added\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + return 0 + else + eval " ${DIALOG} --msgbox 'Error occurred!!!!' ${INFO_HEIGHT} ${INFO_WIDTH}" + return 0 + fi + + ## No available authentication methods.... + + eval "${DIALOG} --msgbox 'No supported authentication method for ${W_ESSID}'" + return 1 +} + + + + +## +## Configure a new connection from a list of available wi-fi networks +## + +##function +wifi_add(){ + +##local +DEVNAME=$1 + + wpa_cli -i ${DEVNAME} scan + eval "${DIALOG} --timeout 4 --msgbox 'Scanning for networks...' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + wpa_cli -i ${DEVNAME} scan_results | grep -E "^[0-9a-f][0-9a-f]:" | \ + sed -r -e 's/\t/|/g' |\ + sort -t "|" -r -n -k 3 > ${TMPFILE} + + wifinets="" + LAST_IFS=$IFS + IFS="|" + while read W_MAC W_FREQ W_STRNGT W_FLAGS W_ESSID; do + + log "wifi_add" "W_ESSID: \"${W_ESSID}\"" + wifinets="${wifinets} ${W_MAC} \"${W_ESSID} -- ${W_FLAGS}\"" + done < ${TMPFILE} + IFS=${LAST_IFS} + + + log "wifi_add" "Wifi nets: \n${wifinets}\n===" + eval "dialog --menu 'Select a network' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + ${wifinets} " 2> ${TMPFILE} + if [ $? -eq 1 ]; then + return + fi + + W_MAC=$(cat ${TMPFILE}) + + + wifi_authenticate ${DEVNAME} ${W_MAC} + if [ $? != "0" ]; then + eval "${DIALOG} --msgbox 'Error while configuring ${DEVNAME}' " + fi + return $? +} + + +##function +wifi_save_file(){ + +##local +DEVNAME=$1 + + wpa_cli -i ${DEVNAME} save_config | tail -1 > ${TMPFILE} + SAVE_STATUS=$(cat ${TMPFILE}) + if [ "${SAVE_STATUS}" = "OK" ]; then + eval "${DIALOG} --msgbox 'Current configuration dumped to file ${WPA_FILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --msgbox 'Error while saving configuration to file ${WPA_FILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi +} + +##function +wifi_remove(){ + +##local + DEVNAME=$1 + + wifi_network_list ${DEVNAME} + + eval "${DIALOG} --menu 'Select network to remove' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} remove_network ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network ${NETNUM} removed\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT removed' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network removed!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + +} + + +##function +wifi_restart_wpa(){ + +##local + DEVNAME=$1 +##local + WPA_FILE=$2 + + WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | +sed -r -e 's/^\ +//g' | cut -d " " -f 1) + + log "wifi_restart_wpa" "WPA_PID: ${WPA_PID}" + kill -9 ${WPA_PID} + + wpa_supplicant -B -i ${DEVNAME} -c ${WPA_FILE} -P${WPA_PIDFILE} 2>/dev/null + WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | \ + sed -r -e 's/^\ +//g' | cut -d " " -f 1 ) + WPA_PID_SAVED=$(cat ${WPA_PIDFILE}) + log "wifi_restart_wpa" "WPA_PID: ${WPA_PID} WPA_PID_SAVED: ${WPA_PID_SAVED}" + if [ -n "${WPA_PID}" ] && [ "${WPA_PID}" != "${WPA_PID_SAVED}" ]; then + eval "${DIALOG} --clear --msgbox 'Error restarting wpa_supplicant' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --clear --msgbox 'wpa_supplicant restarted successfully' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + +} + + + +## +## wifi_enable: show the list of configured networks, and enable the +## one the used has clicked on +## + +##function +wifi_enable(){ + +##local + DEVNAME=$1 + + wifi_network_list ${DEVNAME} + + eval "${DIALOG} --menu 'Select configured network' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} enable ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} enabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + config_ethernet ${DEVNAME} + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT enabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network enabled!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi +} + + +##function +wifi_disable(){ + +##local + DEVNAME=$1 + wifi_network_list ${DEVNAME} + eval "${DIALOG} --menu 'Select configured network' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} disable ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} disabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT disabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network disabled!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi +} + + + +##function +wifi_load_file(){ + +##local + DEVNAME=$1 + + eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + while [ -d "${SEL_FILE}" ]; do + eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + else + eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + done + + if [ -f "${SEL_FILE}" ]; then + WPA_FILE=${SEL_FILE} + eval "${DIALOG} --clear --defaultno --yesno \ + 'WPA_FILE changed to ${WPA_FILE}\nRestart wpa_supplicant?' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + if [ $? -eq 0 ]; then + wifi_restart_wpa ${DEVNAME} ${WPA_FILE} + fi + else + eval "${DIALOG} --clear --msgbox 'Invalid file name!\n WPA_FILE *not* changed' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + +} + + + +##function +config_wifi(){ + +##local + DEVNAME=$1 + + while true; do + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Configuring ${DEVNAME}\n(Current file: ${WPA_FILE})' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 12 \ + 'Restart' 'Restart wpa_supplicant' \ + 'Enable' 'Enable a configured network' \ + 'Disable' 'Disable a configured network' \ + 'Add' 'Configure a new network' \ + 'Remove' 'Delete an existing network' \ + 'Show' 'Show current configuration file' \ + 'Edit' 'Edit current configuration file' \ + 'Save' 'Save configuration to file'\ + 'Load' 'Load configuration from file'\ + 'New' 'Create new configuration file' " \ + 2>${TMPFILE} + + if [ $? = "1" ]; then + return + fi + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Restart") + ## Restart wpa_supplicant + wifi_restart_wpa ${DEVNAME} ${WPA_FILE} + ;; + "Enable") + wifi_enable ${DEVNAME} + ;; + "Disable") + wifi_disable ${DEVNAME} + ;; + "Add") + wifi_add ${DEVNAME} + ;; + "Remove") + wifi_remove ${DEVNAME} + ;; + "Show") + eval "${DIALOG} --title 'Current file: ${WPA_FILE}' \ + --textbox ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + ;; + "Edit") + edit_file ${WPA_FILE} + ;; + "Save") + wifi_save_file ${DEVNAME} + ;; + "Load") + wifi_load_file ${DEVNAME} + ;; + "New") + unimplemented "New" + ;; + esac + done + +} + + + +## +## (Re)-Configure a network device +## + +##function +configure_device(){ + +##local + DEVNAME=$1 + + ## Check if the network device is a wifi -- WEAK + IS_WIFI=$(iwconfig ${DEVNAME} 2>/dev/null | grep -c "IEEE 802.11") + + case ${IS_WIFI} in + 0) + config_ethernet ${DEVNAME} + ;; + *) + config_wifi ${DEVNAME} + ;; + esac + + +} + + +##function +set_device_up(){ + +##local +DEVNAME=$1 + + ip link set ${DEVNAME} up + +} + +##function +set_device_down(){ + +##local +DEVNAME=$1 + + ip link set ${DEVNAME} down + +} + +##function +show_device_menu(){ + +##local + DEVNAME=$1 + + while true; do + DEV_STATUS=$(ip -o link | cut -d " " -f 2,9 | grep -E "^${DEVNAME}: " | cut -d " " -f 2) + log "show_device_menu" "DEVNAME: ${DEVNAME} DEV_STATUS: ${DEV_STATUS}" + eval "${DIALOG} --clear --cancel-label 'Up' --menu\ + 'Device: ${DEVNAME}\nStatus: ${DEV_STATUS}' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 8 \ + 'View' 'View current configuration' \ + 'Conf' 'Configure device' \ + 'Start' 'Bring interface up' \ + 'Stop' 'Put interface down' \ + 'Restart' 'Restart interface'" 2> ${TMPFILE} + + if [ $? -eq 1 ]; then + return + fi + + DEV_ACTION=$(cat ${TMPFILE}) + case ${DEV_ACTION} in + "View") + show_device_conf ${DEVNAME} + ;; + "Conf") + configure_device ${DEVNAME} + ;; + "Start") + set_device_up ${DEVNAME} + ;; + "Stop") + set_device_down ${DEVNAME} + ;; + "Restart") + set_device_down ${DEVNAME} + set_device_up ${DEVNAME} + ;; + *) + ;; + + esac + done +} + +## +## Show all the available network devices +## + +##function +show_devs() { + + DEVICES=$(ip link show | awk 'NR % 2 == 1' | cut -d ":" -f 2) + + DEVICE_TAGS="" + + for i in $DEVICES; do + if [ "$i" != "lo" ]; then + DEVICE_TAGS="${DEVICE_TAGS} $i $i" + fi + done + + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Select Interface to configure' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 4 \ + ${DEVICE_TAGS}" 2> ${TMPFILE} + return $? +} + + +##function +dev_config_menu(){ + + while true; do + show_devs + if [ $? -eq 1 ]; then + return + fi + DEVNAME=$(cat ${TMPFILE}) + show_device_menu ${DEVNAME} + done +} + +##function +show_info(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +setnet.sh is a simple state-less tool to manage and configure network +interfaces. It is a shell wrapper around the functionalities of +standard command-line tools, including "ip", "dhclient", "wpa_cli", +etc., and can be used to configure network connections via +Ethernet/Wi-Fi interfaces. + +Both Static and DHCP-based IP configuration are supported. + +At the moment, only WPA-PSK and open (no key) Wi-Fi connections are +available. + +For more information, please visit the webpage of the project: + + http://kalos.mine.nu/setnet/ + +Please report bugs at: + + https://git.devuan.org/KatolaZ/setnet + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + +##function +show_copyright(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +-------------------------------------------------------------------- + + Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +-------------------------------------------------------------------- + + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + + +##function +show_license(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-------------------------------------------------------------------- + + Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +-------------------------------------------------------------------- + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + + + +##function +about_menu(){ + + while true; do + eval "${DIALOG} --cancel-label 'Up' --menu 'setnet ${VERSION} -- About' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \ + 'Info' 'General information' \ + 'Copyleft' 'Copyleft information' \ + 'License' 'How to distribute this program' " \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Info") + show_info + ;; + "Copyleft") + show_copyright + ;; + "License") + show_license + ;; + esac + done +} + +##function +notfound(){ + + CMDNAME=$1 + + + eval "${DIALOG} --clear --msgbox 'Sorry! Commmand ${CMDNAME} not found!'" \ + ${INFO_HEIGHT} ${INFO_WIDTH} + +} + + +##function +netdiag_DNS(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== DNS Configuration (/etc/resolv.conf)\n=====\n\n" >> ${DUMPFILE} + cat /etc/resolv.conf >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + NAMESERVERS=$(grep '^nameserver' /etc/resolv.conf) + MSG_STR="Configured name servers in /etc/resolv.conf ==\n\n${NAMESERVERS}" + + eval "${DIALOG} --clear --title 'DNS servers' --msgbox '${MSG_STR}' "\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} + +} + +##function +netdiag_resolver(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Resolver Configuration (/etc/nsswitch.conf)\n=====\n\n" >> ${DUMPFILE} + grep -v '^#' /etc/nsswitch.conf >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + RESOLVER=$(grep -v '^#' /etc/nsswitch.conf) + + eval "${DIALOG} --clear --title 'Resolver configuration (/etc/nsswitch.conf)' \ + --msgbox '${RESOLVER}' "\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} + +} + + +##function +netdiag_routes(){ + + DUMPFILE=$1 + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Routing table\n=====\n\n" >> ${DUMPFILE} + netstat -rn >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + ## Dump to dialog + ROUTES=$(netstat -rn > ${TMPFILE} ) + + eval "${DIALOG} --clear --no-collapse --title 'Routing table (netstat -rn) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + +##function +netdiag_ARP(){ + + DUMPFILE=$1 + log "netdiag_ARP" "DUMPFILE: '${DUMPFILE}'" + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== ARP table\n=====\n\n" >> "${DUMPFILE}" + cat /proc/net/arp >> "${DUMPFILE}" + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + # Dump to dialog + ARP=$(cat /proc/net/arp >${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse --title 'ARP table (/proc/net/arp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + +##function +netdiag_connections(){ + + DUMPFILE=$1 + + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Active Network Connections\n=====\n\n" >> ${DUMPFILE} + netstat -tnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + SERV=$(netstat -tnp | sed -r -e 's/$/\n/g' > ${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse "\ + " --title 'Active network connections (netstat -tnp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + + +##function +netdiag_services(){ + + DUMPFILE=$1 + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Active network services\n=====\n\n" >> ${DUMPFILE} + netstat -ltnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + + SERV=$(netstat -ltnp | sed -r -e 's/$/\n/g' > ${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse "\ + " --title 'Active network services (netstat -ltnp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + + +##function +netdiag_ping(){ + + HAS_PING=$(echo ${HAS_OPTS} | grep -c " ping ") + if [ ${HAS_PING} -ne 1 ]; then + notfound "ping" + return + fi + eval "${DIALOG} --insecure --inputbox 'Host or IP to ping:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'Ping Aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + PINGIP=$(cat ${TMPFILE}) + ping -c 5 ${PINGIP} > ${TMPFILE} & + PINGPID=$! + eval "${DIALOG} --clear --title 'Ping ${PINGIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${PINGPID} + fi + fi + +} + +##function +netdiag_traceroute(){ + + HAS_TRACERT=$(echo ${HAS_OPTS} | grep -c " traceroute ") + if [ ${HAS_TRACERT} -ne 1 ]; then + notfound "traceroute" + return + fi + eval "${DIALOG} --insecure --inputbox 'Host or IP to trace:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'Traceroute Aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + TRACEIP=$(cat ${TMPFILE}) + traceroute ${TRACEIP} > ${TMPFILE} & + TRCPID=$! + eval "${DIALOG} --clear --title 'Traceroute ${TRACEIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${TRCPID} + fi + fi +} + + +##function +netdiag_query(){ + + HAST_HOST=$(echo ${HAS_OPTS} | grep -c " host ") + if [ $? -ne 1 ]; then + notfound "host" + return + fi + + eval "${DIALOG} --insecure --inputbox 'Hostname or IP to query:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'DNS query aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + QUERYIP=$(cat ${TMPFILE}) + host ${QUERYIP} > ${TMPFILE} & + QUERYPID=$! + eval "${DIALOG} --clear --title 'host ${QUERYIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${QUERYPID} + fi + fi +} + +##function +netdiag_devices(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + printf "\n=====\n== Network Devices\n=====\n\n" >> ${DUMPFILE} + ip addr >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi +} + + + +## +## Main menu for network diagnostics +## + +##function +netdiag_menu(){ + + while true; do + eval "${DIALOG} --cancel-label 'Up' --menu 'Network diagnostics' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + 'ARP' 'Show ARP table' \ + 'Connections' 'List active network connections' \ + 'DNS' 'List DNS servers' \ + 'Ping' 'Ping a host' \ + 'Query' 'DNS Query' \ + 'Resolver' 'Show resolver configuration' \ + 'Routes' 'Show routing table' \ + 'Services' 'List active network daemons' \ + 'Traceroute' 'Show the route to a host' " \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "ARP") + netdiag_ARP + ;; + "Connections") + netdiag_connections + ;; + "DNS") + netdiag_DNS + ;; + "Ping") + netdiag_ping + ;; + "Query") + netdiag_query + ;; + "Resolver") + netdiag_resolver + ;; + "Routes") + netdiag_routes + ;; + "Services") + netdiag_services + ;; + "Traceroute") + netdiag_traceroute + ;; + esac + done + + +} + +##function +dump_file(){ + + CONF=$1 + + log "dump_file" "CONF: ${CONF}" + + DUMPFILE="/tmp/network_dump.txt" + + eval "${DIALOG} --fselect ${DUMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + while [ -d "${SEL_FILE}" ]; do + eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + else + eval "${DIALOG} --clear --msgbox 'Dump aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + done + + ## The dump starts here.... + DUMPFILE=${SEL_FILE} + truncate -s 0 ${DUMPFILE} + echo "===== setnet ${VERSION}" >> ${DUMPFILE} + echo "===== Date: $(date)" >> ${DUMPFILE} + echo "===== Network configuration dump: ${CONF} " >> ${DUMPFILE} + for c in ${CONF}; do + eval "netdiag_${c} \"${DUMPFILE}\"" + done + else + eval "${DIALOG} --clear --msgbox 'Dump aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + eval "${DIALOG} --clear --msgbox 'Status dumped to ${DUMPFILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" +} + + +##function +dump_pastebin(){ + + unimplemented "pastebin" +} + +##function +dump_menu(){ + + eval "${DIALOG} --clear --checklist 'Select conf to dump' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + 'ARP' 'ARP table' on \ + 'devices' 'Device configuration' on \ + 'DNS' 'DNS configuration' on \ + 'resolver' 'System resolver configuration' on \ + 'routes' 'Routing table' on \ + 'connections' 'Active network connections' on \ + 'services' 'Active network services' on " 2> ${TMPFILE} + if [ $? -ne 0 ]; then + return + fi + + DUMP_CONF=$(cat ${TMPFILE}) + + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Dump configuration to:' \ + ${INFO_HEIGHT} ${INFO_WIDTH} 6 \ + 'File' 'Dump to file' \ + 'Pastebin' 'Dump to pastebin'" \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "File") + dump_file "${DUMP_CONF}" + ;; + "Pastebin") + dump_pastebin "${DUMP_CONF}" + ;; + esac +} + + +##function +show_toplevel(){ + + log "show_toplevel" "TMPFILE: ${TMPFILE}" + eval "${DIALOG} --clear --cancel-label 'Quit' --menu 'Main Menu' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \ + 'Setup' 'Setup interfaces' \ + 'Info' 'Network diagnostics' \ + 'Dump' 'Dump current network status' \ + 'Log' 'View setnet log' \ + 'About' 'License & Copyleft'" 2> ${TMPFILE} + + return $? +} + +##function +show_help(){ + +##local +SCRIPTNAME=$1 + echo "Usage: ${SCRIPTNAME} [OPTION]" + echo "Options:" + printf "\t -c cfg_file\tLoad configuration from cfg_file.\n" + printf "\t -v\t\tPrint version number and exit.\n" + printf "\t -h\t\tShow this help.\n" + +} + +##function +show_version(){ + +##local +SCRIPTNAME=$1 + echo "${SCRIPTNAME} -- version ${VERSION}" + echo "Copyleft (C) Vincenzo \"KatolaZ\" Nicosia (katolaz@freaknet.org) -- 2016, 2017" + echo "This is free software. You can use and redistribute it under the " + echo "terms of the GNU General Public Licence version 3 or (at your option)" + echo "any later version." + echo + echo "YOU USE THIS SOFTWARE AT YOUR OWN RISK." + echo "There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or" + echo "FITNESS FOR A PARTICULAR PURPOSE." +} + +##function +show_disclaimer(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + + Copyleft (C) KatolaZ (katolaz@freaknet.org) + 2016, 2017 + + -+- This is an alpha release of setnet.sh -+- + + THIS IS FREE SOFTWARE + YOU CAN USE AND DISTRIBUTE IT UNDER THE + TERMS OF THE GNU GENERAL PUBLIC LICENSE + + USE THIS SOFTWARE AT YOUR OWN RISK + + There is ABSOLUTELY NO WARRANTY; not even for + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + + See "About" for more information about + your right and distribution terms +EOF + + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} 23 60" + return +} + +##function +initialise(){ + + + TMPFILE=$( (tempfile) 2>/dev/null) || TMPFILE=/tmp/setnet_$$ + WPA_PIDFILE=$( (tempfile) 2>/dev/null) || WPA_PIDFILE=/tmp/setnet_wpapid_$$ + + trap cleanup 0 HUP INT TRAP TERM QUIT + + if [ -z ${TRUNCATE_LOG} ] || \ + [ ${TRUNCATE_LOG} = "yes" ] || \ + [ ${TRUNCATE_LOG} = "YES" ]; then + truncate -s 0 ${LOGFILE} + fi + +} + + +##function +log_show(){ + + eval "${DIALOG} --clear --cr-wrap --title 'setnet log file (${LOGFILE})'\ + --textbox ${LOGFILE} \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + +} + +##function +main(){ + + + show_disclaimer + + log "setnet" "Starting afresh on $(date)" + SETNETRC=$(realpath ${SETNETRC}) + log "main" "Using config file \"${SETNETRC}\"" + WPA_FILE=$(realpath ${WPA_FILE}) + log "main" "Using WPA config file \"${WPA_FILE}\"" + LOFGILE=$(realpath ${LOGFILE}) + log "main" "Using log file \"${LOGFILE}\"" + + while true; do + show_toplevel + + if [ $? -eq 1 ]; then + cleanup + exit 1 + fi + log "main" "${TMPFILE}" + ACTION=$(cat ${TMPFILE}) + log "main" "ACTION: ${ACTION}" + case ${ACTION} in + "Setup") + dev_config_menu + ;; + "Info") + netdiag_menu + ;; + "Dump") + dump_menu + ;; + "Log") + log_show + ;; + "About") + about_menu + ;; + esac + done + +} + + +## +## The script starts here +## + + +## +## Get command-line arguments +## + +SETNETRC="" + +while getopts ":c:hv" opt; do + + case $opt in + c) + #echo "Got option -c ${OPTARG}" + SETNETRC=$(realpath ${OPTARG}) + #echo "SETNETRC: ${SETNETRC}" + ;; + h) + show_help $(basename $0) + exit 1 + ;; + v) + show_version $(basename $0) + exit 1 + ;; + \?) + echo "Invalid option: -${OPTARG}" + exit 1 + ;; + :) + echo "Option -${OPTARG} requires an argument" + exit 1 + ;; + esac +done + + +## +## Load the configuration file +## + +load_setnetrc ${SETNETRC} + +## +## Init stuff +## + +initialise + + +## +## Check dependencies. If we are missing someting essential, then exit. +## + +check_deps + +## +## This is the main loop +## + +main + diff --git a/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/README.Debian b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/README.Debian new file mode 100644 index 0000000..0cad044 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/README.Debian @@ -0,0 +1,132 @@ ++--------------+ +| setnet | ++--------------+ + +Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +=== DESCRIPTION === + +setnet is a shell script with a dialog UI to configure ethernet and +wifi connections. It is meant to be POSIX-compliant, and has been +tested with bash, busybox, dash, ksh, mksh, posh, and yash. It is +still to be considered beta software, so you should use it AT YOUR OWN +RISK, but it is already fully functional. + +=== LICENSE === + +setnet is Free Software, and can be used and distributed under the +terms of the GNU General Public License, either version 3 of the +licence or, at your option, any later version. + +Please see the file LICENSE for more information + +=== DEPENDENCIES === + +In order to run setset, you MUST satisfy this (relatively small) set +of dependencies: + + - a posix-compliant shell (bash, busybox, dash, ksh, mksh, posh, and + yash have been tested) + + - dialog (version 1.2 tested, but it should work with previous + versions as well) + + - dhcp-client (for dhclient, tested with isc-dhcp-client) + + - iproute2 (for ip) + + - wireless-tools (for iwconfig, currently required for interface + identification) + +Most of those tools might already be installed in your system anyway. +In particular, setnet uses: + + - dialog: to provide a minimal Text-based User Interface, + - ip: to configure network interfaces and get information about them, + - dhclient: for DHCP-based IP configuration + - iwconfig: to check whether a network device is a wifi adapter + +In order to use the full set of functionalities provided by setnet, +you MIGHT also need the following packages: + + - wpa_supplicant (for wifi configuration) + + - net-tools (for netstat, to gather information about network status) + + - iputils-ping (for ping) + + - bind9-nost (for host, used to check DNS configuration) + + - traceroute (to trace the route between your host and any other host + in the Internet) + +Again, most of them should be already installed in your system anyway. + +=== USAGE === + +setnet is installed under /usr/sbin/setnet.sh. If invoked with "-h", +it provides a list of supported options: + +$ ./setnet.sh -h +Usage: setnet.sh [OPTION] +Options: + -c cfg_file Load configuration from cfg_file. + -v Print version number and exit. + -h Show this help. +$ + +If the argument "-c" is specified, setnet will use the provided +configuration file. Otherwise, it will look for its configuration file +in one of the following locations: + + - /etc/setnetrc + - ~/.setnetrc + +in the given order. The following configuration variables should be +defined in setnetrc: + + + - WPA_FILE + This is the file configuration file used by wpa_supplicant. + + - LOGNAME + This is the file used for logging. + + - TRUNCATE_LOG + if equal to "yes", the log file will be truncated when setnet + starts + + +=== root vs. mortal users === + +Networking is an amdinistration task, and as such should be performed +by the host administrator, i.e., the user with UID 0 (normally called +"root"). However, in many modern GNU/Linux systems it is customary to +allow normal users to perform some administration tasks. There are at +least two concrete possibilities to allow a particular user (in the +following we call such user "fool") to configure network interfaces +using setnet. + + +-- 1) First approach: using sudo + +If sudo is installed in your system, it is sufficient to add the +following line: + + fool ALL=NOPASSWD: /usr/sbin/setnet.sh + +to the file /etc/sudoers, and the user "fool" will be able to run +setnet.sh with effective UID 0 (i.e., as if it was root), by using the +command: + +[fool@host]$ sudo /usr/sbin/setnet.sh + +and thus will be able to perform all the needed admin tasks to +configure networking. + +-- 2) Second approach: using sup + +......TO BE DOCUMENTED...... + + diff --git a/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gz b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gz new file mode 100644 index 0000000..1d52ede Binary files /dev/null and b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gz differ diff --git a/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/copyright b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/copyright new file mode 100644 index 0000000..f425891 --- /dev/null +++ b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/copyright @@ -0,0 +1,21 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: setnet +Source: + +Files: debian/* +Copyright: 2016 Vincenzo (KatolaZ) Nicosia +License: GPL-3+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + diff --git a/debian_package/setnet-0.2/debian/source/format b/debian_package/setnet-0.2/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian_package/setnet-0.2/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian_package/setnet-0.2/debian/watch.ex b/debian_package/setnet-0.2/debian/watch.ex new file mode 100644 index 0000000..0f01132 --- /dev/null +++ b/debian_package/setnet-0.2/debian/watch.ex @@ -0,0 +1,39 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 4 file +version=4 + +# PGP signature mangle, so foo.tar.gz has foo.tar.gz.sig +#opts="pgpsigurlmangle=s%$%.sig%" + +# HTTP site (basic) +#http://example.com/downloads.html \ +# files/setnet-([\d\.]+)\.tar\.gz debian uupdate + +# Uncommment to examine a FTP server +#ftp://ftp.example.com/pub/setnet-(.*)\.tar\.gz debian uupdate + +# SourceForge hosted projects +# http://sf.net/setnet/ setnet-(.*)\.tar\.gz debian uupdate + +# GitHub hosted projects +#opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%-$1.tar.gz%" \ +# https://github.com//setnet/tags \ +# (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate + +# PyPI +# https://pypi.python.org/packages/source//setnet/ \ +# setnet-(.+)\.tar\.gz debian uupdate + +# Direct Git +# opts="mode=git" http://git.example.com/setnet.git \ +# refs/tags/v([\d\.]+) debian uupdate + + + + +# Uncomment to find new files on GooglePages +# http://example.googlepages.com/foo.html setnet-(.*)\.tar\.gz diff --git a/debian_package/setnet-0.2/setnet.sh b/debian_package/setnet-0.2/setnet.sh new file mode 100755 index 0000000..a352b44 --- /dev/null +++ b/debian_package/setnet-0.2/setnet.sh @@ -0,0 +1,1848 @@ +#!/bin/sh + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# ---------------------------------------------------------------------- +# +# setnet.sh -- view and configure network interfaces +# +# ---------------------------------------------------------------------- +# +# Copyleft (C) Vincenzo "KatolaZ" Nicosia (katolaz@freaknet.org) -- +# (2016, 2017) +# +# + + +## +## Initialisation +## + +VERSION=0.2 + + +TOPSTR="setnet-${VERSION} [user: $(id -run)]" +DIALOG="dialog --backtitle \"${TOPSTR}\" " + + +############################### +## ## +## Internal config variables ## +## ## +############################### + +## +## Required dependencies. If any of those commands is missing, +## the script will exit +## + +HARD_DEPS="ip dhclient dialog iwconfig" + +## +## Suggested dependencies. The script will issue a warning if any of +## those commands is missing +## + +SOFT_DEPS="wpa_cli wpa_supplicant" + +## +## Optional dependencies. The script will check if those dependencies +## exist, and if they do, will set a variable HAS_OPTS which contains +## the names of the commands actually found +## + +OPT_DEPS="host ping traceroute netstat pastebinit" + +################################# + +##################################### +## ## +## HEIGHT/WIDTH of various dialogs ## +## ## +##################################### + +## +## Regular windows +## + +WINDOW_WIDTH=75 +WINDOW_HEIGHT=20 + +## +## Infoboxes +## +INFO_WIDTH=40 +INFO_HEIGHT=10 + + +## +## Forms +## +FORM_WIDTH=60 +FORM_HEIGHT=12 + +## +## Large windows +## + +LARGE_WIDTH=80 +LARGE_HEIGHT=20 + + +################################# + +################################ +## ## +## Supported network families ## +## ## +################################ + +NET_FAMILIES="inet inet6" + +################################# + +## +## Load the configuration file "setnetrc" +## + +##function +load_setnetrc(){ + + WPA_FILE="" + LOGFILE="" + ## If we were given a parameter, is the rc file to load... + ## + if [ $# -ge 1 ]; then + . "$1" + return + fi + + ## + ## Otherwise, let's look in the standard locations, namely: + ## + + ## + ## 1) /etc/setnetrc + ## + + if [ -f /etc/setnetrc ]; then + SETNETRC=/etc/setnetrc + fi + + ## + ## 2) ~/.setnetrc + ## + + if [ -f ~/.setnetrc ]; then + SETNETRC=~/.setnetrc + fi + + . ${SETNETRC} + + if [ -z ${WPA_FILE} ]; then + echo "Could not find WPA_FILE defined anywhere. Exiting" + exit 1 + fi + + if [ -z ${LOGFILE} ]; then + echo "Could not find LOGFILE defined anywhere. Exiting" + exit 1 + fi +} + + +## +## handler called upon exit/signal (NONE HUP INT TRAP TERM QUIT) +## + +##function +cleanup(){ + rm -f ${TMPFILE} + rm -f ${WPA_PIDFILE} +} + + +################### +# # +# LOGGING # +# # +################### + +## +## log() takes two arguments, namely the label and the message +## +## +##function +log(){ + + ##local + LABEL=$1 + ##local + MSG=$2 + + echo "${LABEL}:" "${MSG}" >> "${LOGFILE}" + +} + +## +## Check whether the shell which called the script is supported, or +## exit. Currently, we support the follwing shells: +## +## - bash +## - busybox +## - dash +## - ksh +## - mksh +## - posh +## - sh +## - yash +## + +##function +check_shell(){ + + ## + ## FIXME!!! THIS TEST DOES NOT WORK yet... + ## + CUR_SH=$(ps -p $$ -o comm=) + case ${CUR_SH} in + ash|bash|busybox|dash|ksh|mksh|posh|sh|yash) + log "check_shell" "The current shell (${CUR_SH}) is supported" + return + ;; + *) + log "check_shell" "The current shell (${CUR_SH}) is not supported" + echo "The current shell (${CUR_SH}) is not supported. Exiting..." + exit 1 + ;; + esac +} + + +## +## Check dependencies +## +## - check if the current shell is supported through check_shell +## +## - each command in HARD_DEPS MUST exist, or the script exits +## +## - each command in SOFT_DEPS SHOULD exist, or the script will log a +## warning +## +## - each command in OPT_DEPS MIGHT exist, and if it does its name is +## included in the variable "HAS_OPTS" +## + +##function +check_deps(){ + + ## FIXME FIRST.... check_shell + + for h in ${HARD_DEPS}; do + _W=$(which ${h}) + if [ -z "${_W}" ]; then + echo "Error: required command \"${h}\" not found. Exiting..." + exit 1 + fi + log "check_deps" "NOTICE: required command '${h}'...found" + done + + for s in ${SOFT_DEPS}; do + _S=$(which ${s}) + if [ -z "${_S}" ]; then + log "check_deps" "WARNING: suggested command '${s}' not found! Some functions might not work properly" + fi + done + + HAS_OPTS="" + for o in ${OPT_DEPS}; do + _O=$(which ${o}) + if [ -n "${_O}" ]; then + HAS_OPTS=" ${HAS_OPTS} ${o} " + log "check_deps" "NOTICE: optional command '${o}'...found" + else + log "check_deps" "NOTICE: optional command '${o}' not found!" + fi + done + + log "check_deps" "HAS_OPTS: \"${HAS_OPTS}\"" + +} + +## +## Generic function fo unimplemented features. It just pops up a +## message-box and returns +## + +##function +unimplemented(){ + + LABEL=$1 + + eval "${DIALOG} --msgbox 'Sorry! '$LABEL' not implemented, yet!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2>${TMPFILE} +} + + + +########################################## + +##function +edit_file(){ + + ##local + FILEIN=$1 + log "edit_file" "editing file ${FILEIN}" + eval "${DIALOG} --title 'Editing file: ${FILEIN}' \ + --editbox ${FILEIN} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + log "edit_file" "Copying ${TMPFILE} into ${FILEIN}" + if cp "${TMPFILE}" "${FILEIN}" + then + eval "${DIALOG} --clear --msgbox 'File ${FILEIN} saved successfully' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --clear --msgbox 'Error saving file ${FILEIN}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + else + log "edit_file" "Editing of ${FILEIN} aborted..." + eval "${DIALOG} --clear --msgbox 'File ${FILEIN} not saved' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi +} + + + + +## +## Read all the configured addresses for a given inet family +## +##function +get_addr_family(){ + +##local + DEVNAME=$1 + ##local + DEVFAMILY=$2 + + NUMADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep -c "${DEVFAMILY}") + ADDR_STR="" + for i in $(seq ${NUMADDR}); do + ADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep "${DEVFAMILY}" | \ + tail -n +$i | head -1 | sed -r -e "s:^\ +::g" | cut -d " " -f 2,4,6 |\ + sed -r -e "s:\ : -- :g") + ADDR_STR="${ADDR_STR}\n${DEVFAMILY}: ${ADDR}\n" + done +} + +## +## Show the current configuration of a given device +## + +##function +show_device_conf(){ + +##local +DEVNAME=$1 + if [ -z "${DEVNAME}" ]; then + return -1 + fi + + DEVMAC=$(ip link show "${DEVNAME}" | tail -n +2 | sed -r 's/^\ +//g' | cut -d " " -f 2) + DEVCONF="MAC: ${DEVMAC}\n" + + log "show_device_conf" "NET_FAMILIES: \"${NET_FAMILIES}\"" + + for f in ${NET_FAMILIES}; do + get_addr_family ${DEVNAME} ${f} + log "show_device_conf" "family: ${f} ADDR_STR: \"${ADDR_STR}\"" + + if [ -z "${ADDR_STR}" ]; then + DEVCONF="${DEVCONF}${f}: Unconfigured\n" + else + DEVCONF="${DEVCONF}${ADDR_STR}" + fi + log "show_device_conf" "DEVCONF: ${DEVCONF}" + done + + DEVCONF="${DEVCONF}\n== name servers ==\n$(grep '^nameserver' /etc/resolv.conf)" + + eval "${DIALOG} --clear --title 'Current configuration of device: ${DEVNAME}' \ + --msgbox '\n\n${DEVCONF}' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} " + return 0 + +} + + + +##function +config_ethernet_static(){ + +##local +DEV_IP="192.168.1.2" +##local +DEV_NET="192.168.1.0" +##local +DEV_NETMASK="255.255.255.0" +##local +DEV_GW="192.168.1.1" +##local +DEV_DNS1="208.67.222.222" +##local +DEV_DNS2="208.67.220.220" + +##local +DEVNAME=$1 + + exec 3>&1 + eval "${DIALOG} --clear --form 'Set network for device: ${DEVNAME}'" \ + ${FORM_HEIGHT} ${FORM_WIDTH} 0 \ + "IP" 1 1 "${DEV_IP}" 1 16 16 16 \ + "Network" 2 1 "${DEV_NET}" 2 16 16 16 \ + "Netmask" 3 1 "${DEV_NETMASK}" 3 16 16 16 \ + "Gateway" 4 1 "${DEV_GW}" 4 16 16 16 \ + "Primary DNS" 5 1 "${DEV_DNS1}" 5 16 16 16 \ + "Secondary DNS" 6 1 "${DEV_DNS2}" 6 16 16 16 2> ${TMPFILE} + + if [ $? -eq 1 ]; then + eval "${DIALOG} --infobox 'Configuration of ${DEVNAME} aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + + read -d "*" DEV_IP DEV_NET DEV_NETMASK DEV_GW DEV_DNS1 DEV_DNS2 < ${TMPFILE} + eval "${DIALOG} --msgbox 'Proposed configuration of ${DEVNAME}:\n ${DEV_IP}\n${DEV_NET}\n${DEV_NETMASK}\n${DEV_GW}\n${DEV_DNS1}\n${DEV_DNS2}'\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + + ## Configure IP + + ip link set "${DEVNAME}" down + ip link set "${DEVNAME}" up + ip address flush dev "${DEVNAME}" + ip address add "${DEV_IP}/${DEV_NETMASK}" dev "${DEVNAME}" + + ## Configure GW + ip route flush dev "${DEVNAME}" + ip route add "${DEV_NET}/${DEV_NETMASK}" dev "${DEVNAME}" + ip route add default via "${DEV_GW}" + + ## Configure DNS + mv /etc/resolv.conf /etc/resolv.conf.bak + if [ -n "${DEV_DNS1}" ]; then + echo "nameserver ${DEV_DNS1}" >> /etc/resolv.conf + fi + if [ -n "${DEV_DNS2}" ]; then + echo "nameserver ${DEV_DNS2}" >> /etc/resolv.conf + fi + show_device_conf "${DEVNAME}" +} + +##function +config_ethernet_dhcp(){ + +##local +DEVNAME=$1 + + eval "${DIALOG} --msgbox 'Running \"dhclient ${DEVNAME}\"' ${INFO_HEIGHT} ${INFO_WIDTH}" + dhclient -r ${DEVNAME} + dhclient ${DEVNAME} + show_device_conf ${DEVNAME} +} + + +##function +config_ethernet(){ + +##local + DEVNAME=$1 + + while true; do + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Configuring ${DEVNAME}' ${INFO_HEIGHT} ${INFO_WIDTH} 4 \ + 'DHCP' ''\ + 'Static' ''" 2>${TMPFILE} + if [ $? -eq 1 ]; then + return + fi + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Static") + config_ethernet_static ${DEVNAME} + ;; + "DHCP") + config_ethernet_dhcp ${DEVNAME} + ;; + esac + done + +} + +##function +wifi_essid_from_mac(){ + + ##local + DEVNAME=$1 + ##local + W_MAC=$2 + + W_ESSID=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \ + sed -r -e 's/\t/\|/g' | cut -d "|" -f 5) + + log "wifi_essid_from_mac" "Recovered ESSID: ${W_ESSID}" +} + +##function +wifi_flags_from_mac(){ +##local + DEVNAME=$1 +##local + W_MAC=$2 + + W_FLAGS=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \ + sed -r -e 's/\t/\|/g' | cut -d "|" -f 4) + log "wifi_essid_from_mac" "Recovered W_FLAGS: ${W_FLAGS}" + +} + + +##function +wifi_network_list(){ + +##local + DEVNAME=$1 + wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' > ${TMPFILE} + + NETLIST="" + LAST_IFS=$IFS + IFS="|" + while read NETNUM NETESSID NETBSSID NETFLAGS; do + IS_DIS=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i disabled ) + if [ ${IS_DIS} -eq 1 ]; then + STATUS="(DIS)" + else + STATUS="(ENAB)" + fi + IS_CUR=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i current ) + if [ ${IS_CUR} -eq 1 ]; then + STATUS="${STATUS}(CUR)" + fi + + + NETLIST="${NETLIST} ${NETNUM} \"${NETESSID}-${STATUS}\"" + done < ${TMPFILE} + IFS=${LAST_IFS} + + log "wifi_network_list" "NETLIST: ${NETLIST}" +} + + +## +## Manage the authentication for a given wifi ESSID +## +##function +wifi_authenticate(){ + +##local + DEVNAME=$1 +##local + W_MAC=$2 + + + log "wifi_authenticate" "configuring ${DEVNAME} on ${W_MAC}" + ## This will set the variable W_ESSID appropriately + wifi_essid_from_mac ${DEVNAME} ${W_MAC} + + ## This will set the variable W_FLAGS appropriately + wifi_flags_from_mac ${DEVNAME} ${W_MAC} + + + log "wifi_authenticate" "configuring essid: ${W_ESSID} on device: ${DEVNAME}" + log "wifi_authenticate" "W_FLAGS: ${W_FLAGS}" + + + NET_EXISTS=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \ + | cut -d "|" -f 2 | grep -c "${W_ESSID}$" ) + if [ ${NET_EXISTS} != 0 ]; then + NET_NUM=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \ + | cut -d "|" -f 1,2 | grep "${W_ESSID}$" | cut -d "|" -f 1) + wpa_cli -i ${DEVNAME} remove_network ${NET_NUM} > ${TMPFILE} + STATUS=$(cat ${TMPFILE}) + if [ "${STATUS}" != "OK" ]; then + eval "${DIALOG} --msgbox 'Error while removing existing network:\n$essid: {W_ESSID}'" + ${INFO_HEIGHT} ${INFO_WIDTH} + return + fi + fi + + + HAS_WPA=$(echo "${W_FLAGS}" | grep -E -c "WPA.*-PSK" ) + + log "wifi_authenticate" "HAS_WPA: \"${HAS_WPA}\"" + + ### This section will configure WPA-PSK or WPA2-PSK + if [ "${HAS_WPA}" != "0" ]; then + PSK="" + PSK_LENGTH=${#PSK} + while [ ${PSK_LENGTH} -le 7 ]; do + eval "${DIALOG} --insecure --inputbox 'Please insert WPA PSK\n(8 characters)' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + if [ $? -eq 1 ]; then + eval "${DIALOG} --clear --msgbox 'Network configuration aborted!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return 1 + fi + PSK=$(cat ${TMPFILE}) + PSK_LENGTH=${#PSK} + done + + + NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1) + + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\"" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} psk \"${PSK}\" + ## remove the password from tmpfile + echo "" > ${TMPFILE} + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network \"${W_ESSID}\" added\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + eval "${DIALOG} --msgbox 'Network added successfully' ${INFO_HEIGHT} ${INFO_WIDTH}" + return 0 + fi + + HAS_ESS=$(echo "${W_FLAGS}" | grep -E -c "ESS" ) + + log "wifi_authenticate" "HAS_ESS: \"${HAS_ESS}\"" + + if [ "${HAS_ESS}" != "0" ]; then + NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1) + + log "wifi_authenticate" "NET_NUM: ${NET_NUM}" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\"" + wpa_cli -i ${DEVNAME} set_network ${NET_NUM} key_mgmt NONE + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network \"${W_ESSID}\" added\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + return 0 + else + eval " ${DIALOG} --msgbox 'Error occurred!!!!' ${INFO_HEIGHT} ${INFO_WIDTH}" + return 0 + fi + + ## No available authentication methods.... + + eval "${DIALOG} --msgbox 'No supported authentication method for ${W_ESSID}'" + return 1 +} + + + + +## +## Configure a new connection from a list of available wi-fi networks +## + +##function +wifi_add(){ + +##local +DEVNAME=$1 + + wpa_cli -i ${DEVNAME} scan + eval "${DIALOG} --timeout 4 --msgbox 'Scanning for networks...' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + wpa_cli -i ${DEVNAME} scan_results | grep -E "^[0-9a-f][0-9a-f]:" | \ + sed -r -e 's/\t/|/g' |\ + sort -t "|" -r -n -k 3 > ${TMPFILE} + + wifinets="" + LAST_IFS=$IFS + IFS="|" + while read W_MAC W_FREQ W_STRNGT W_FLAGS W_ESSID; do + + log "wifi_add" "W_ESSID: \"${W_ESSID}\"" + wifinets="${wifinets} ${W_MAC} \"${W_ESSID} -- ${W_FLAGS}\"" + done < ${TMPFILE} + IFS=${LAST_IFS} + + + log "wifi_add" "Wifi nets: \n${wifinets}\n===" + eval "dialog --menu 'Select a network' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + ${wifinets} " 2> ${TMPFILE} + if [ $? -eq 1 ]; then + return + fi + + W_MAC=$(cat ${TMPFILE}) + + + wifi_authenticate ${DEVNAME} ${W_MAC} + if [ $? != "0" ]; then + eval "${DIALOG} --msgbox 'Error while configuring ${DEVNAME}' " + fi + return $? +} + + +##function +wifi_save_file(){ + +##local +DEVNAME=$1 + + wpa_cli -i ${DEVNAME} save_config | tail -1 > ${TMPFILE} + SAVE_STATUS=$(cat ${TMPFILE}) + if [ "${SAVE_STATUS}" = "OK" ]; then + eval "${DIALOG} --msgbox 'Current configuration dumped to file ${WPA_FILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --msgbox 'Error while saving configuration to file ${WPA_FILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi +} + +##function +wifi_remove(){ + +##local + DEVNAME=$1 + + wifi_network_list ${DEVNAME} + + eval "${DIALOG} --menu 'Select network to remove' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} remove_network ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --defaultno --yesno \ + 'Network ${NETNUM} removed\nSave configuration file?' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + if [ $? -eq 0 ]; then + ## Save the config file + wifi_save_file ${DEVNAME} + fi + + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT removed' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network removed!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + +} + + +##function +wifi_restart_wpa(){ + +##local + DEVNAME=$1 +##local + WPA_FILE=$2 + + WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | +sed -r -e 's/^\ +//g' | cut -d " " -f 1) + + log "wifi_restart_wpa" "WPA_PID: ${WPA_PID}" + kill -9 ${WPA_PID} + + wpa_supplicant -B -i ${DEVNAME} -c ${WPA_FILE} -P${WPA_PIDFILE} 2>/dev/null + WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | \ + sed -r -e 's/^\ +//g' | cut -d " " -f 1 ) + WPA_PID_SAVED=$(cat ${WPA_PIDFILE}) + log "wifi_restart_wpa" "WPA_PID: ${WPA_PID} WPA_PID_SAVED: ${WPA_PID_SAVED}" + if [ -n "${WPA_PID}" ] && [ "${WPA_PID}" != "${WPA_PID_SAVED}" ]; then + eval "${DIALOG} --clear --msgbox 'Error restarting wpa_supplicant' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + else + eval "${DIALOG} --clear --msgbox 'wpa_supplicant restarted successfully' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + +} + + + +## +## wifi_enable: show the list of configured networks, and enable the +## one the used has clicked on +## + +##function +wifi_enable(){ + +##local + DEVNAME=$1 + + wifi_network_list ${DEVNAME} + + eval "${DIALOG} --menu 'Select configured network' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} enable ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} enabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + config_ethernet ${DEVNAME} + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT enabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network enabled!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi +} + + +##function +wifi_disable(){ + +##local + DEVNAME=$1 + wifi_network_list ${DEVNAME} + eval "${DIALOG} --menu 'Select configured network' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \ + 2> ${TMPFILE} + + if [ $? -eq 0 ]; then + ## a network has been selected + NETNUM=$(cat ${TMPFILE}) + WPA_STATUS=$(wpa_cli -i ${DEVNAME} disable ${NETNUM} | tail -1 ) + if [ "${WPA_STATUS}" = "OK" ]; then + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} disabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT disabled' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'No network disabled!!!' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi +} + + + +##function +wifi_load_file(){ + +##local + DEVNAME=$1 + + eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + while [ -d "${SEL_FILE}" ]; do + eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + else + eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + done + + if [ -f "${SEL_FILE}" ]; then + WPA_FILE=${SEL_FILE} + eval "${DIALOG} --clear --defaultno --yesno \ + 'WPA_FILE changed to ${WPA_FILE}\nRestart wpa_supplicant?' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + if [ $? -eq 0 ]; then + wifi_restart_wpa ${DEVNAME} ${WPA_FILE} + fi + else + eval "${DIALOG} --clear --msgbox 'Invalid file name!\n WPA_FILE *not* changed' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return + fi + else + eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + fi + +} + + + +##function +config_wifi(){ + +##local + DEVNAME=$1 + + while true; do + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Configuring ${DEVNAME}\n(Current file: ${WPA_FILE})' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 12 \ + 'Restart' 'Restart wpa_supplicant' \ + 'Enable' 'Enable a configured network' \ + 'Disable' 'Disable a configured network' \ + 'Add' 'Configure a new network' \ + 'Remove' 'Delete an existing network' \ + 'Show' 'Show current configuration file' \ + 'Edit' 'Edit current configuration file' \ + 'Save' 'Save configuration to file'\ + 'Load' 'Load configuration from file'\ + 'New' 'Create new configuration file' " \ + 2>${TMPFILE} + + if [ $? = "1" ]; then + return + fi + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Restart") + ## Restart wpa_supplicant + wifi_restart_wpa ${DEVNAME} ${WPA_FILE} + ;; + "Enable") + wifi_enable ${DEVNAME} + ;; + "Disable") + wifi_disable ${DEVNAME} + ;; + "Add") + wifi_add ${DEVNAME} + ;; + "Remove") + wifi_remove ${DEVNAME} + ;; + "Show") + eval "${DIALOG} --title 'Current file: ${WPA_FILE}' \ + --textbox ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + ;; + "Edit") + edit_file ${WPA_FILE} + ;; + "Save") + wifi_save_file ${DEVNAME} + ;; + "Load") + wifi_load_file ${DEVNAME} + ;; + "New") + unimplemented "New" + ;; + esac + done + +} + + + +## +## (Re)-Configure a network device +## + +##function +configure_device(){ + +##local + DEVNAME=$1 + + ## Check if the network device is a wifi -- WEAK + IS_WIFI=$(iwconfig ${DEVNAME} 2>/dev/null | grep -c "IEEE 802.11") + + case ${IS_WIFI} in + 0) + config_ethernet ${DEVNAME} + ;; + *) + config_wifi ${DEVNAME} + ;; + esac + + +} + + +##function +set_device_up(){ + +##local +DEVNAME=$1 + + ip link set ${DEVNAME} up + +} + +##function +set_device_down(){ + +##local +DEVNAME=$1 + + ip link set ${DEVNAME} down + +} + +##function +show_device_menu(){ + +##local + DEVNAME=$1 + + while true; do + DEV_STATUS=$(ip -o link | cut -d " " -f 2,9 | grep -E "^${DEVNAME}: " | cut -d " " -f 2) + log "show_device_menu" "DEVNAME: ${DEVNAME} DEV_STATUS: ${DEV_STATUS}" + eval "${DIALOG} --clear --cancel-label 'Up' --menu\ + 'Device: ${DEVNAME}\nStatus: ${DEV_STATUS}' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 8 \ + 'View' 'View current configuration' \ + 'Conf' 'Configure device' \ + 'Start' 'Bring interface up' \ + 'Stop' 'Put interface down' \ + 'Restart' 'Restart interface'" 2> ${TMPFILE} + + if [ $? -eq 1 ]; then + return + fi + + DEV_ACTION=$(cat ${TMPFILE}) + case ${DEV_ACTION} in + "View") + show_device_conf ${DEVNAME} + ;; + "Conf") + configure_device ${DEVNAME} + ;; + "Start") + set_device_up ${DEVNAME} + ;; + "Stop") + set_device_down ${DEVNAME} + ;; + "Restart") + set_device_down ${DEVNAME} + set_device_up ${DEVNAME} + ;; + *) + ;; + + esac + done +} + +## +## Show all the available network devices +## + +##function +show_devs() { + + DEVICES=$(ip link show | awk 'NR % 2 == 1' | cut -d ":" -f 2) + + DEVICE_TAGS="" + + for i in $DEVICES; do + if [ "$i" != "lo" ]; then + DEVICE_TAGS="${DEVICE_TAGS} $i $i" + fi + done + + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Select Interface to configure' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 4 \ + ${DEVICE_TAGS}" 2> ${TMPFILE} + return $? +} + + +##function +dev_config_menu(){ + + while true; do + show_devs + if [ $? -eq 1 ]; then + return + fi + DEVNAME=$(cat ${TMPFILE}) + show_device_menu ${DEVNAME} + done +} + +##function +show_info(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +setnet.sh is a simple state-less tool to manage and configure network +interfaces. It is a shell wrapper around the functionalities of +standard command-line tools, including "ip", "dhclient", "wpa_cli", +etc., and can be used to configure network connections via +Ethernet/Wi-Fi interfaces. + +Both Static and DHCP-based IP configuration are supported. + +At the moment, only WPA-PSK and open (no key) Wi-Fi connections are +available. + +For more information, please visit the webpage of the project: + + http://kalos.mine.nu/setnet/ + +Please report bugs at: + + https://git.devuan.org/KatolaZ/setnet + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + +##function +show_copyright(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +-------------------------------------------------------------------- + + Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +-------------------------------------------------------------------- + + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + + +##function +show_license(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-------------------------------------------------------------------- + + Copyleft (C) Vincenzo "KatolaZ" Nicosia + 2016, 2017 + +-------------------------------------------------------------------- + +EOF + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + return +} + + + +##function +about_menu(){ + + while true; do + eval "${DIALOG} --cancel-label 'Up' --menu 'setnet ${VERSION} -- About' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \ + 'Info' 'General information' \ + 'Copyleft' 'Copyleft information' \ + 'License' 'How to distribute this program' " \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "Info") + show_info + ;; + "Copyleft") + show_copyright + ;; + "License") + show_license + ;; + esac + done +} + +##function +notfound(){ + + CMDNAME=$1 + + + eval "${DIALOG} --clear --msgbox 'Sorry! Commmand ${CMDNAME} not found!'" \ + ${INFO_HEIGHT} ${INFO_WIDTH} + +} + + +##function +netdiag_DNS(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== DNS Configuration (/etc/resolv.conf)\n=====\n\n" >> ${DUMPFILE} + cat /etc/resolv.conf >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + NAMESERVERS=$(grep '^nameserver' /etc/resolv.conf) + MSG_STR="Configured name servers in /etc/resolv.conf ==\n\n${NAMESERVERS}" + + eval "${DIALOG} --clear --title 'DNS servers' --msgbox '${MSG_STR}' "\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} + +} + +##function +netdiag_resolver(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Resolver Configuration (/etc/nsswitch.conf)\n=====\n\n" >> ${DUMPFILE} + grep -v '^#' /etc/nsswitch.conf >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + RESOLVER=$(grep -v '^#' /etc/nsswitch.conf) + + eval "${DIALOG} --clear --title 'Resolver configuration (/etc/nsswitch.conf)' \ + --msgbox '${RESOLVER}' "\ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} + +} + + +##function +netdiag_routes(){ + + DUMPFILE=$1 + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Routing table\n=====\n\n" >> ${DUMPFILE} + netstat -rn >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + ## Dump to dialog + ROUTES=$(netstat -rn > ${TMPFILE} ) + + eval "${DIALOG} --clear --no-collapse --title 'Routing table (netstat -rn) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + +##function +netdiag_ARP(){ + + DUMPFILE=$1 + log "netdiag_ARP" "DUMPFILE: '${DUMPFILE}'" + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== ARP table\n=====\n\n" >> "${DUMPFILE}" + cat /proc/net/arp >> "${DUMPFILE}" + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + # Dump to dialog + ARP=$(cat /proc/net/arp >${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse --title 'ARP table (/proc/net/arp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + +##function +netdiag_connections(){ + + DUMPFILE=$1 + + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Active Network Connections\n=====\n\n" >> ${DUMPFILE} + netstat -tnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + ## Dump to dialog + SERV=$(netstat -tnp | sed -r -e 's/$/\n/g' > ${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse "\ + " --title 'Active network connections (netstat -tnp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + + +##function +netdiag_services(){ + + DUMPFILE=$1 + + HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ") + if [ ${HAS_NETSTAT} -ne 1 ]; then + notfound "netstat" + return + fi + + if [ -n "${DUMPFILE}" ]; then + ## Dump to file + printf "\n=====\n== Active network services\n=====\n\n" >> ${DUMPFILE} + netstat -ltnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi + + + SERV=$(netstat -ltnp | sed -r -e 's/$/\n/g' > ${TMPFILE}) + + eval "${DIALOG} --clear --no-collapse "\ + " --title 'Active network services (netstat -ltnp) [arrows to scroll]'" \ + "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\ + ${LARGE_HEIGHT} ${LARGE_WIDTH} +} + + +##function +netdiag_ping(){ + + HAS_PING=$(echo ${HAS_OPTS} | grep -c " ping ") + if [ ${HAS_PING} -ne 1 ]; then + notfound "ping" + return + fi + eval "${DIALOG} --insecure --inputbox 'Host or IP to ping:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'Ping Aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + PINGIP=$(cat ${TMPFILE}) + ping -c 5 ${PINGIP} > ${TMPFILE} & + PINGPID=$! + eval "${DIALOG} --clear --title 'Ping ${PINGIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${PINGPID} + fi + fi + +} + +##function +netdiag_traceroute(){ + + HAS_TRACERT=$(echo ${HAS_OPTS} | grep -c " traceroute ") + if [ ${HAS_TRACERT} -ne 1 ]; then + notfound "traceroute" + return + fi + eval "${DIALOG} --insecure --inputbox 'Host or IP to trace:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'Traceroute Aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + TRACEIP=$(cat ${TMPFILE}) + traceroute ${TRACEIP} > ${TMPFILE} & + TRCPID=$! + eval "${DIALOG} --clear --title 'Traceroute ${TRACEIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${TRCPID} + fi + fi +} + + +##function +netdiag_query(){ + + HAST_HOST=$(echo ${HAS_OPTS} | grep -c " host ") + if [ $? -ne 1 ]; then + notfound "host" + return + fi + + eval "${DIALOG} --insecure --inputbox 'Hostname or IP to query:' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE} + + if [ $? -ne 0 ]; then + eval "${DIALOG} --clear --msgbox 'DNS query aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + else + QUERYIP=$(cat ${TMPFILE}) + host ${QUERYIP} > ${TMPFILE} & + QUERYPID=$! + eval "${DIALOG} --clear --title 'host ${QUERYIP}'"\ + "--tailbox ${TMPFILE} " \ + ${LARGE_HEIGHT} ${LARGE_WIDTH} + if [ $? -ne 0 ];then + kill -9 ${QUERYPID} + fi + fi +} + +##function +netdiag_devices(){ + + DUMPFILE=$1 + + if [ -n "${DUMPFILE}" ]; then + printf "\n=====\n== Network Devices\n=====\n\n" >> ${DUMPFILE} + ip addr >> ${DUMPFILE} + echo "==================================" >> ${DUMPFILE} + return 0 + fi +} + + + +## +## Main menu for network diagnostics +## + +##function +netdiag_menu(){ + + while true; do + eval "${DIALOG} --cancel-label 'Up' --menu 'Network diagnostics' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + 'ARP' 'Show ARP table' \ + 'Connections' 'List active network connections' \ + 'DNS' 'List DNS servers' \ + 'Ping' 'Ping a host' \ + 'Query' 'DNS Query' \ + 'Resolver' 'Show resolver configuration' \ + 'Routes' 'Show routing table' \ + 'Services' 'List active network daemons' \ + 'Traceroute' 'Show the route to a host' " \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "ARP") + netdiag_ARP + ;; + "Connections") + netdiag_connections + ;; + "DNS") + netdiag_DNS + ;; + "Ping") + netdiag_ping + ;; + "Query") + netdiag_query + ;; + "Resolver") + netdiag_resolver + ;; + "Routes") + netdiag_routes + ;; + "Services") + netdiag_services + ;; + "Traceroute") + netdiag_traceroute + ;; + esac + done + + +} + +##function +dump_file(){ + + CONF=$1 + + log "dump_file" "CONF: ${CONF}" + + DUMPFILE="/tmp/network_dump.txt" + + eval "${DIALOG} --fselect ${DUMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + while [ -d "${SEL_FILE}" ]; do + eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \ + 2>${TMPFILE} + if [ $? -eq 0 ]; then + SEL_FILE=$(cat ${TMPFILE}) + else + eval "${DIALOG} --clear --msgbox 'Dump aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + done + + ## The dump starts here.... + DUMPFILE=${SEL_FILE} + truncate -s 0 ${DUMPFILE} + echo "===== setnet ${VERSION}" >> ${DUMPFILE} + echo "===== Date: $(date)" >> ${DUMPFILE} + echo "===== Network configuration dump: ${CONF} " >> ${DUMPFILE} + for c in ${CONF}; do + eval "netdiag_${c} \"${DUMPFILE}\"" + done + else + eval "${DIALOG} --clear --msgbox 'Dump aborted' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" + return + fi + eval "${DIALOG} --clear --msgbox 'Status dumped to ${DUMPFILE}' \ + ${INFO_HEIGHT} ${INFO_WIDTH}" +} + + +##function +dump_pastebin(){ + + unimplemented "pastebin" +} + +##function +dump_menu(){ + + eval "${DIALOG} --clear --checklist 'Select conf to dump' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \ + 'ARP' 'ARP table' on \ + 'devices' 'Device configuration' on \ + 'DNS' 'DNS configuration' on \ + 'resolver' 'System resolver configuration' on \ + 'routes' 'Routing table' on \ + 'connections' 'Active network connections' on \ + 'services' 'Active network services' on " 2> ${TMPFILE} + if [ $? -ne 0 ]; then + return + fi + + DUMP_CONF=$(cat ${TMPFILE}) + + eval "${DIALOG} --clear --cancel-label 'Up' \ + --menu 'Dump configuration to:' \ + ${INFO_HEIGHT} ${INFO_WIDTH} 6 \ + 'File' 'Dump to file' \ + 'Pastebin' 'Dump to pastebin'" \ + 2> ${TMPFILE} + if [ $? -eq 1 ];then + return; + fi + + ACTION=$(cat ${TMPFILE}) + case ${ACTION} in + "File") + dump_file "${DUMP_CONF}" + ;; + "Pastebin") + dump_pastebin "${DUMP_CONF}" + ;; + esac +} + + +##function +show_toplevel(){ + + log "show_toplevel" "TMPFILE: ${TMPFILE}" + eval "${DIALOG} --clear --cancel-label 'Quit' --menu 'Main Menu' \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \ + 'Setup' 'Setup interfaces' \ + 'Info' 'Network diagnostics' \ + 'Dump' 'Dump current network status' \ + 'Log' 'View setnet log' \ + 'About' 'License & Copyleft'" 2> ${TMPFILE} + + return $? +} + +##function +show_help(){ + +##local +SCRIPTNAME=$1 + echo "Usage: ${SCRIPTNAME} [OPTION]" + echo "Options:" + printf "\t -c cfg_file\tLoad configuration from cfg_file.\n" + printf "\t -v\t\tPrint version number and exit.\n" + printf "\t -h\t\tShow this help.\n" + +} + +##function +show_version(){ + +##local +SCRIPTNAME=$1 + echo "${SCRIPTNAME} -- version ${VERSION}" + echo "Copyleft (C) Vincenzo \"KatolaZ\" Nicosia (katolaz@freaknet.org) -- 2016, 2017" + echo "This is free software. You can use and redistribute it under the " + echo "terms of the GNU General Public Licence version 3 or (at your option)" + echo "any later version." + echo + echo "YOU USE THIS SOFTWARE AT YOUR OWN RISK." + echo "There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or" + echo "FITNESS FOR A PARTICULAR PURPOSE." +} + +##function +show_disclaimer(){ + + cat < ${TMPFILE} + + -+- setnet.sh ${VERSION} -+- + + Copyleft (C) KatolaZ (katolaz@freaknet.org) + 2016, 2017 + + -+- This is an alpha release of setnet.sh -+- + + THIS IS FREE SOFTWARE + YOU CAN USE AND DISTRIBUTE IT UNDER THE + TERMS OF THE GNU GENERAL PUBLIC LICENSE + + USE THIS SOFTWARE AT YOUR OWN RISK + + There is ABSOLUTELY NO WARRANTY; not even for + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + + See "About" for more information about + your right and distribution terms +EOF + + eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} 23 60" + return +} + +##function +initialise(){ + + + TMPFILE=$( (tempfile) 2>/dev/null) || TMPFILE=/tmp/setnet_$$ + WPA_PIDFILE=$( (tempfile) 2>/dev/null) || WPA_PIDFILE=/tmp/setnet_wpapid_$$ + + trap cleanup 0 HUP INT TRAP TERM QUIT + + if [ -z ${TRUNCATE_LOG} ] || \ + [ ${TRUNCATE_LOG} = "yes" ] || \ + [ ${TRUNCATE_LOG} = "YES" ]; then + truncate -s 0 ${LOGFILE} + fi + +} + + +##function +log_show(){ + + eval "${DIALOG} --clear --cr-wrap --title 'setnet log file (${LOGFILE})'\ + --textbox ${LOGFILE} \ + ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" + +} + +##function +main(){ + + + show_disclaimer + + log "setnet" "Starting afresh on $(date)" + SETNETRC=$(realpath ${SETNETRC}) + log "main" "Using config file \"${SETNETRC}\"" + WPA_FILE=$(realpath ${WPA_FILE}) + log "main" "Using WPA config file \"${WPA_FILE}\"" + LOFGILE=$(realpath ${LOGFILE}) + log "main" "Using log file \"${LOGFILE}\"" + + while true; do + show_toplevel + + if [ $? -eq 1 ]; then + cleanup + exit 1 + fi + log "main" "${TMPFILE}" + ACTION=$(cat ${TMPFILE}) + log "main" "ACTION: ${ACTION}" + case ${ACTION} in + "Setup") + dev_config_menu + ;; + "Info") + netdiag_menu + ;; + "Dump") + dump_menu + ;; + "Log") + log_show + ;; + "About") + about_menu + ;; + esac + done + +} + + +## +## The script starts here +## + + +## +## Get command-line arguments +## + +SETNETRC="" + +while getopts ":c:hv" opt; do + + case $opt in + c) + #echo "Got option -c ${OPTARG}" + SETNETRC=$(realpath ${OPTARG}) + #echo "SETNETRC: ${SETNETRC}" + ;; + h) + show_help $(basename $0) + exit 1 + ;; + v) + show_version $(basename $0) + exit 1 + ;; + \?) + echo "Invalid option: -${OPTARG}" + exit 1 + ;; + :) + echo "Option -${OPTARG} requires an argument" + exit 1 + ;; + esac +done + + +## +## Load the configuration file +## + +load_setnetrc ${SETNETRC} + +## +## Init stuff +## + +initialise + + +## +## Check dependencies. If we are missing someting essential, then exit. +## + +check_deps + +## +## This is the main loop +## + +main + diff --git a/debian_package/setnet-0.2/setnetrc b/debian_package/setnet-0.2/setnetrc new file mode 100644 index 0000000..3f18bcc --- /dev/null +++ b/debian_package/setnet-0.2/setnetrc @@ -0,0 +1,22 @@ +## +## +## setnetrc -- configuration file for setnet +## +## + +## +## The default configuration file for wpa_supplicant +## +WPA_FILE=/etc/wpa_supplicant/wpa_setnet.conf + + +## +## Logfile +## +LOGFILE=/var/log/setnet.log + +## +## +## +TRUNCATE_LOG="yes" + diff --git a/debian_package/setnet-0.2/wpa_setnet.conf b/debian_package/setnet-0.2/wpa_setnet.conf new file mode 100644 index 0000000..9ce4275 --- /dev/null +++ b/debian_package/setnet-0.2/wpa_setnet.conf @@ -0,0 +1,4 @@ +ctrl_interface=/var/run/wpa_supplicant +update_config=1 +GROUP=wheel + diff --git a/debian_package/setnet_0.1-1.debian.tar.xz b/debian_package/setnet_0.1-1.debian.tar.xz index adeb16f..93d26b0 100644 Binary files a/debian_package/setnet_0.1-1.debian.tar.xz and b/debian_package/setnet_0.1-1.debian.tar.xz differ diff --git a/debian_package/setnet_0.1-1.dsc b/debian_package/setnet_0.1-1.dsc index 3c62f6e..f4af913 100644 --- a/debian_package/setnet_0.1-1.dsc +++ b/debian_package/setnet_0.1-1.dsc @@ -1,3 +1,6 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + Format: 3.0 (quilt) Source: setnet Binary: setnet @@ -10,11 +13,19 @@ Build-Depends: debhelper (>= 9) Package-List: setnet deb unknown optional arch=all Checksums-Sha1: - a55b27f9d2ebec9680916348ca9770ea7b4d0589 14092 setnet_0.1.orig.tar.xz - b3b1f290469c8551aa880ea330c06f7399caa649 8180 setnet_0.1-1.debian.tar.xz + fa44398b362a88d12574d88ee78ac28345cdeb7a 14296 setnet_0.1.orig.tar.xz + de07a55eb28ddec304df8db1d902ef66b5dde8e5 8176 setnet_0.1-1.debian.tar.xz Checksums-Sha256: - f80b75ec868e193b7a5ae636a7a4c8758fb6f09a7f4ebd76e6b0409f8b9521ab 14092 setnet_0.1.orig.tar.xz - 2f96cb066eb2efc587871b376e2b0eeb5b111deaaa7c7b30fbfa46713d8ddf76 8180 setnet_0.1-1.debian.tar.xz + 40f493dcbba73700730adb9064c46117b95691938bb3665dee85123707409b39 14296 setnet_0.1.orig.tar.xz + 5443bbe4476de250cc75dc94ff997b10f5c01f2574570c7410494689ee2bdfe9 8176 setnet_0.1-1.debian.tar.xz Files: - b6f0c6985260c5663d456e3f52ee409b 14092 setnet_0.1.orig.tar.xz - 812548b181ee08263ede60c2e82189b5 8180 setnet_0.1-1.debian.tar.xz + 86a57dc10821d0a4ec49cecdbc2f58cb 14296 setnet_0.1.orig.tar.xz + 03d24ba7e89c749f5ff392872c73fff3 8176 setnet_0.1-1.debian.tar.xz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2 + +iEYEARECAAYFAlhnsQ8ACgkQXyCzrgtfBi9xtACeJPM+AtHFhiYbe/U/qwEuO2IM ++Z8An3PkUOk4cKVeqZ67//SlFtBNFuC+ +=RMrq +-----END PGP SIGNATURE----- diff --git a/debian_package/setnet_0.1-1_all.deb b/debian_package/setnet_0.1-1_all.deb index 23b452d..31bdbe0 100644 Binary files a/debian_package/setnet_0.1-1_all.deb and b/debian_package/setnet_0.1-1_all.deb differ diff --git a/debian_package/setnet_0.1-1_amd64.changes b/debian_package/setnet_0.1-1_amd64.changes index 74869e7..07ef707 100644 --- a/debian_package/setnet_0.1-1_amd64.changes +++ b/debian_package/setnet_0.1-1_amd64.changes @@ -1,3 +1,6 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + Format: 1.8 Date: Fri, 30 Dec 2016 16:06:26 +0000 Source: setnet @@ -15,17 +18,25 @@ Changes: . * Initial release (Closes: #nnnn) Checksums-Sha1: - dc98edf5169fc89f6fc783fda7a989a7ffe9a14a 800 setnet_0.1-1.dsc - a55b27f9d2ebec9680916348ca9770ea7b4d0589 14092 setnet_0.1.orig.tar.xz - b3b1f290469c8551aa880ea330c06f7399caa649 8180 setnet_0.1-1.debian.tar.xz - 9ec4055ded22128d6d4b19f37d61651e5700fbca 8320 setnet_0.1-1_all.deb + c3c899c4031f64cb703c58fedf30a1fd9be37445 1029 setnet_0.1-1.dsc + fa44398b362a88d12574d88ee78ac28345cdeb7a 14296 setnet_0.1.orig.tar.xz + de07a55eb28ddec304df8db1d902ef66b5dde8e5 8176 setnet_0.1-1.debian.tar.xz + b699237c3db70ae276bf5a27b1affcc4e11bb3c0 8312 setnet_0.1-1_all.deb Checksums-Sha256: - eeafb53ad1b0be450115581852a18a45d4128e97cc13abd372620ff77414e60f 800 setnet_0.1-1.dsc - f80b75ec868e193b7a5ae636a7a4c8758fb6f09a7f4ebd76e6b0409f8b9521ab 14092 setnet_0.1.orig.tar.xz - 2f96cb066eb2efc587871b376e2b0eeb5b111deaaa7c7b30fbfa46713d8ddf76 8180 setnet_0.1-1.debian.tar.xz - 2b75f2c543616dc60a23d46b6d205e4b6e66a08dac70a127ce1bc274b9a1ef41 8320 setnet_0.1-1_all.deb + bea5be1fa4125a75f5657726e12297650943c1c58a96bdbc681a582f7161a893 1029 setnet_0.1-1.dsc + 40f493dcbba73700730adb9064c46117b95691938bb3665dee85123707409b39 14296 setnet_0.1.orig.tar.xz + 5443bbe4476de250cc75dc94ff997b10f5c01f2574570c7410494689ee2bdfe9 8176 setnet_0.1-1.debian.tar.xz + 1bca53ccdda1e8b1763a1d6318db683d7e75a16b988353c120c56f2607497f0e 8312 setnet_0.1-1_all.deb Files: - a46199e2ff4900a99dfad5087bdcb7ca 800 unknown optional setnet_0.1-1.dsc - b6f0c6985260c5663d456e3f52ee409b 14092 unknown optional setnet_0.1.orig.tar.xz - 812548b181ee08263ede60c2e82189b5 8180 unknown optional setnet_0.1-1.debian.tar.xz - c21330cb507e2fecccf133007366b3f2 8320 unknown optional setnet_0.1-1_all.deb + c8fe75e54a25a8610abbcfe60de76a52 1029 unknown optional setnet_0.1-1.dsc + 86a57dc10821d0a4ec49cecdbc2f58cb 14296 unknown optional setnet_0.1.orig.tar.xz + 03d24ba7e89c749f5ff392872c73fff3 8176 unknown optional setnet_0.1-1.debian.tar.xz + a65f5f6fb443c1727a24ab5ff59fec58 8312 unknown optional setnet_0.1-1_all.deb + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2 + +iEYEARECAAYFAlhnsRUACgkQXyCzrgtfBi8qGQCfQo9nDGl87WWX4vBpj8wDqs55 +fE0An16lyYUivEnJ+aJ1R/5QmkENW5Ge +=EpiE +-----END PGP SIGNATURE----- diff --git a/debian_package/setnet_0.1.orig.tar.xz b/debian_package/setnet_0.1.orig.tar.xz index 316aec0..549577c 100644 Binary files a/debian_package/setnet_0.1.orig.tar.xz and b/debian_package/setnet_0.1.orig.tar.xz differ diff --git a/debian_package/setnet_0.2-1.debian.tar.xz b/debian_package/setnet_0.2-1.debian.tar.xz new file mode 100644 index 0000000..3cb6e4e Binary files /dev/null and b/debian_package/setnet_0.2-1.debian.tar.xz differ diff --git a/debian_package/setnet_0.2-1.dsc b/debian_package/setnet_0.2-1.dsc new file mode 100644 index 0000000..27cc40e --- /dev/null +++ b/debian_package/setnet_0.2-1.dsc @@ -0,0 +1,31 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 3.0 (quilt) +Source: setnet +Binary: setnet +Architecture: all +Version: 0.2-1 +Maintainer: Vincenzo (KatolaZ) Nicosia +Homepage: http://kalos.mine.nu/setnet +Standards-Version: 3.9.8 +Build-Depends: debhelper (>= 9) +Package-List: + setnet deb unknown optional arch=all +Checksums-Sha1: + 6687c70cfd39d5966b6083dd1a472cc9a8c9f11b 18332 setnet_0.2.orig.tar.xz + 42fddb35b45898826c6c737bd2dd40ad0c25eee9 9680 setnet_0.2-1.debian.tar.xz +Checksums-Sha256: + 8b3b0f74a2f44c2d68f1044ed139cf4dd7117219614ca9d54a0af4a1875579aa 18332 setnet_0.2.orig.tar.xz + 4aec8c6f7989fdb0356120de7f598083519bbe681868af787b5a472f162b21c7 9680 setnet_0.2-1.debian.tar.xz +Files: + 0582808467c275c83cc139d0becc9f73 18332 setnet_0.2.orig.tar.xz + 83126d984701925dcfbccb8b8df9a76c 9680 setnet_0.2-1.debian.tar.xz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2 + +iEYEARECAAYFAlhtc5EACgkQXyCzrgtfBi84YgCfaUanpMpPIUCcCzkO+rIXETa7 +qwgAn0gjp0BmrsyoDbBrOcFflovaB+RM +=7R3D +-----END PGP SIGNATURE----- diff --git a/debian_package/setnet_0.2-1_all.deb b/debian_package/setnet_0.2-1_all.deb new file mode 100644 index 0000000..e7f4bed Binary files /dev/null and b/debian_package/setnet_0.2-1_all.deb differ diff --git a/debian_package/setnet_0.2-1_amd64.changes b/debian_package/setnet_0.2-1_amd64.changes new file mode 100644 index 0000000..561ce4c --- /dev/null +++ b/debian_package/setnet_0.2-1_amd64.changes @@ -0,0 +1,63 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 1.8 +Date: Wed, 04 Jan 2017 18:52:56 +0000 +Source: setnet +Binary: setnet +Architecture: source all +Version: 0.2-1 +Distribution: unstable +Urgency: medium +Maintainer: Vincenzo (KatolaZ) Nicosia +Changed-By: Vincenzo (KatolaZ) Nicosia +Description: + setnet - simple shell/dialog tool to configure networks +Changes: + setnet (0.2-1) unstable; urgency=medium + . + * Initial release (20170104) + . + == Major Changes == + . + + Polished code to make it posix-shell compliant + . + + Tested with bash, busybox, dash, ksh, mksh, posh, yash + . + + Added support and checks for hard, soft, and optional + dependencies + . + + Added standard command line options (-c, -h, -v) + . + + Added submenu "Info" with basic network testing tools + . + + Added submenu "Dump" to dump network information to a file + . + + Added submenu "Log" (shows setnet logfile) + . + + Added status information in device configuration panel + . + + Added minimal README.Debian file +Checksums-Sha1: + 60a6993087da3b51479d5c6d126c4a4014a7e353 1029 setnet_0.2-1.dsc + 6687c70cfd39d5966b6083dd1a472cc9a8c9f11b 18332 setnet_0.2.orig.tar.xz + 42fddb35b45898826c6c737bd2dd40ad0c25eee9 9680 setnet_0.2-1.debian.tar.xz + 107c1365706b06e5cadcb3117df4331d40aa7b1e 12920 setnet_0.2-1_all.deb +Checksums-Sha256: + fca27a6cb28b799b54c054a834e783d4274a08f184fcf40869190f6673878244 1029 setnet_0.2-1.dsc + 8b3b0f74a2f44c2d68f1044ed139cf4dd7117219614ca9d54a0af4a1875579aa 18332 setnet_0.2.orig.tar.xz + 4aec8c6f7989fdb0356120de7f598083519bbe681868af787b5a472f162b21c7 9680 setnet_0.2-1.debian.tar.xz + 4be9629c81b73b65676ecd1c6b5a178608cb1a3d29b99306ccd77c9411298117 12920 setnet_0.2-1_all.deb +Files: + 01a59603d2153e9ad1cd11b61ec5ce6a 1029 unknown optional setnet_0.2-1.dsc + 0582808467c275c83cc139d0becc9f73 18332 unknown optional setnet_0.2.orig.tar.xz + 83126d984701925dcfbccb8b8df9a76c 9680 unknown optional setnet_0.2-1.debian.tar.xz + e8fc933f4eb0d80f3ea0a698036a5ddf 12920 unknown optional setnet_0.2-1_all.deb + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2 + +iEYEARECAAYFAlhtc5MACgkQXyCzrgtfBi+BMACdEjed8D0UWSttaQcpY1XRpjBI +nIUAnR/SEkhqqHv9P1VbHbCEmoUQNa9J +=lXMS +-----END PGP SIGNATURE----- diff --git a/debian_package/setnet_0.2.orig.tar.xz b/debian_package/setnet_0.2.orig.tar.xz new file mode 100644 index 0000000..ac93629 Binary files /dev/null and b/debian_package/setnet_0.2.orig.tar.xz differ -- cgit v1.2.3