summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKatolaZ <katolaz@freaknet.org>2017-01-05 00:15:33 +0000
committerKatolaZ <katolaz@freaknet.org>2017-01-05 00:15:33 +0000
commit603a72e648ced831cebd9f401fe1af2a20ccac6b (patch)
tree1bfaf384bf53c9c1a0f31c6e4df60664169d5086
parent7601025d906f7a79df47f42e5009b74738d64e2e (diff)
version 0.2 releasedrelease-0.2
-rw-r--r--debian_package/setnet-0.1/debian/setnet/DEBIAN/md5sums2
-rwxr-xr-xdebian_package/setnet-0.1/debian/setnet/usr/sbin/setnet.sh2
-rwxr-xr-xdebian_package/setnet-0.1/setnet.sh2
-rw-r--r--debian_package/setnet-0.2/debian/README.Debian132
-rw-r--r--debian_package/setnet-0.2/debian/README.source10
-rw-r--r--debian_package/setnet-0.2/debian/changelog27
-rw-r--r--debian_package/setnet-0.2/debian/compat1
-rw-r--r--debian_package/setnet-0.2/debian/control19
-rw-r--r--debian_package/setnet-0.2/debian/copyright21
-rw-r--r--debian_package/setnet-0.2/debian/debhelper-build-stamp1
-rw-r--r--debian_package/setnet-0.2/debian/files1
-rw-r--r--debian_package/setnet-0.2/debian/init.d.ex26
-rw-r--r--debian_package/setnet-0.2/debian/install3
-rw-r--r--debian_package/setnet-0.2/debian/manpage.1.ex56
-rw-r--r--debian_package/setnet-0.2/debian/manpage.sgml.ex154
-rw-r--r--debian_package/setnet-0.2/debian/manpage.xml.ex291
-rw-r--r--debian_package/setnet-0.2/debian/menu.ex2
-rw-r--r--debian_package/setnet-0.2/debian/postinst.ex39
-rw-r--r--debian_package/setnet-0.2/debian/postrm.ex37
-rw-r--r--debian_package/setnet-0.2/debian/preinst.ex35
-rw-r--r--debian_package/setnet-0.2/debian/prerm.ex38
-rwxr-xr-xdebian_package/setnet-0.2/debian/rules25
-rw-r--r--debian_package/setnet-0.2/debian/setnet-docs.docs2
-rw-r--r--debian_package/setnet-0.2/debian/setnet.cron.d.ex4
-rw-r--r--debian_package/setnet-0.2/debian/setnet.debhelper.log19
-rw-r--r--debian_package/setnet-0.2/debian/setnet.default.ex10
-rw-r--r--debian_package/setnet-0.2/debian/setnet.doc-base.EX20
-rw-r--r--debian_package/setnet-0.2/debian/setnet.substvars2
-rw-r--r--debian_package/setnet-0.2/debian/setnet/DEBIAN/conffiles2
-rw-r--r--debian_package/setnet-0.2/debian/setnet/DEBIAN/control14
-rw-r--r--debian_package/setnet-0.2/debian/setnet/DEBIAN/md5sums4
-rw-r--r--debian_package/setnet-0.2/debian/setnet/etc/setnetrc22
-rw-r--r--debian_package/setnet-0.2/debian/setnet/etc/wpa_supplicant/wpa_setnet.conf4
-rwxr-xr-xdebian_package/setnet-0.2/debian/setnet/usr/sbin/setnet.sh1848
-rw-r--r--debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/README.Debian132
-rw-r--r--debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gzbin0 -> 439 bytes
-rw-r--r--debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/copyright21
-rw-r--r--debian_package/setnet-0.2/debian/source/format1
-rw-r--r--debian_package/setnet-0.2/debian/watch.ex39
-rwxr-xr-xdebian_package/setnet-0.2/setnet.sh1848
-rw-r--r--debian_package/setnet-0.2/setnetrc22
-rw-r--r--debian_package/setnet-0.2/wpa_setnet.conf4
-rw-r--r--debian_package/setnet_0.1-1.debian.tar.xzbin8180 -> 8176 bytes
-rw-r--r--debian_package/setnet_0.1-1.dsc23
-rw-r--r--debian_package/setnet_0.1-1_all.debbin8320 -> 8312 bytes
-rw-r--r--debian_package/setnet_0.1-1_amd64.changes35
-rw-r--r--debian_package/setnet_0.1.orig.tar.xzbin14092 -> 14296 bytes
-rw-r--r--debian_package/setnet_0.2-1.debian.tar.xzbin0 -> 9680 bytes
-rw-r--r--debian_package/setnet_0.2-1.dsc31
-rw-r--r--debian_package/setnet_0.2-1_all.debbin0 -> 12920 bytes
-rw-r--r--debian_package/setnet_0.2-1_amd64.changes63
-rw-r--r--debian_package/setnet_0.2.orig.tar.xzbin0 -> 18332 bytes
-rwxr-xr-xsetnet.sh9
-rw-r--r--setnetrc2
54 files changed, 5078 insertions, 27 deletions
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 <katolaz@freaknet.org>
+ 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
+----------------
+
+<this file describes information about the source package, see Debian policy
+manual section 4.14. You WILL either need to modify or delete this file>
+
+
+
+ -- Vincenzo (KatolaZ) Nicosia <katolaz@freaknet.org> 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 <katolaz@freaknet.org> 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 <katolaz@freaknet.org>
+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: <http://kalos.mine.nu/setnet>
+
+Files: debian/*
+Copyright: 2016 Vincenzo (KatolaZ) Nicosia <katolaz@freaknet.org>
+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 <https://www.gnu.org/licenses/>
+ .
+
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: <Enter a short description of the software>
+# Description: <Enter a long description of the software>
+# <...>
+# <...>
+### END INIT INFO
+
+# Author: Vincenzo (KatolaZ) Nicosia <katolaz@freaknet.org>
+
+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 <katolaz@freaknet.org>,
+.\"
+.\" 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 <n> 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<whatever>\fP and
+.\" \fI<whatever>\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 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Process this file with docbook-to-man to generate an nroff manual
+ page: `docbook-to-man manpage.sgml > 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.
+
+ -->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>">
+ <!ENTITY dhsurname "<surname>SURNAME</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>January 4 2017</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>SECTION</manvolnum>">
+ <!ENTITY dhemail "<email>katolaz@freaknet.org</email>">
+ <!ENTITY dhusername "Vincenzo (KatolaZ) Nicosia">
+ <!ENTITY dhucpackage "<refentrytitle>Setnet</refentrytitle>">
+ <!ENTITY dhpackage "setnet">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ <copyright>
+ <year>2003</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+
+ <refpurpose>program to do something</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+
+ <arg><option>-e <replaceable>this</replaceable></option></arg>
+
+ <arg><option>--example <replaceable>that</replaceable></option></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para>This manual page documents briefly the
+ <command>&dhpackage;</command> and <command>bar</command>
+ commands.</para>
+
+ <para>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;
+ <application>Info</application> format; see below.</para>
+
+ <para><command>&dhpackage;</command> is a program that...</para>
+
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <para>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
+ <application>Info</application> files.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-h</option>
+ <option>--help</option>
+ </term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option>
+ <option>--version</option>
+ </term>
+ <listitem>
+ <para>Show version of program.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>bar (1), baz (1).</para>
+
+ <para>The programs are documented fully by <citetitle>The Rise and
+ Fall of a Fooish Bar</citetitle> available via the
+ <application>Info</application> system.</para>
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>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.
+ </para>
+ <para>
+ On Debian systems, the complete text of the GNU General Public
+ License can be found in /usr/share/common-licenses/GPL.
+ </para>
+
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
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 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+
+<!--
+
+`xsltproc -''-nonet \
+ -''-param man.charmap.use.subset "0" \
+ -''-param make.year.ranges "1" \
+ -''-param make.single.year.ranges "1" \
+ /usr/share/xml/docbook/stylesheet/docbook-xsl/manpages/docbook.xsl \
+ manpage.xml'
+
+A manual page <package>.<section> will be generated. You may view the
+manual page with: nroff -man <package>.<section> | 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
+<refsect1> ... </refsect1>.
+
+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/
+
+-->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "FIRSTNAME">
+ <!ENTITY dhsurname "SURNAME">
+ <!-- dhusername could also be set to "&dhfirstname; &dhsurname;". -->
+ <!ENTITY dhusername "Vincenzo (KatolaZ) Nicosia">
+ <!ENTITY dhemail "katolaz@freaknet.org">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1) and
+ http://www.tldp.org/HOWTO/Man-Page/q2.html. -->
+ <!ENTITY dhsection "SECTION">
+ <!-- TITLE should be something like "User commands" or similar (see
+ http://www.tldp.org/HOWTO/Man-Page/q2.html). -->
+ <!ENTITY dhtitle "setnet User Manual">
+ <!ENTITY dhucpackage "Setnet">
+ <!ENTITY dhpackage "setnet">
+]>
+
+<refentry>
+ <refentryinfo>
+ <title>&dhtitle;</title>
+ <productname>&dhpackage;</productname>
+ <authorgroup>
+ <author>
+ <firstname>&dhfirstname;</firstname>
+ <surname>&dhsurname;</surname>
+ <contrib>Wrote this manpage for the Debian system.</contrib>
+ <address>
+ <email>&dhemail;</email>
+ </address>
+ </author>
+ </authorgroup>
+ <copyright>
+ <year>2007</year>
+ <holder>&dhusername;</holder>
+ </copyright>
+ <legalnotice>
+ <para>This manual page was written for the Debian system
+ (and may be used by others).</para>
+ <para>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.</para>
+ <para>On Debian systems, the complete text of the GNU General Public
+ License can be found in
+ <filename>/usr/share/common-licenses/GPL</filename>.</para>
+ </legalnotice>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>&dhucpackage;</refentrytitle>
+ <manvolnum>&dhsection;</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>&dhpackage;</refname>
+ <refpurpose>program to do something</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+ <!-- These are several examples, how syntaxes could look -->
+ <arg choice="plain"><option>-e <replaceable>this</replaceable></option></arg>
+ <arg choice="opt"><option>--example=<parameter>that</parameter></option></arg>
+ <arg choice="opt">
+ <group choice="req">
+ <arg choice="plain"><option>-e</option></arg>
+ <arg choice="plain"><option>--example</option></arg>
+ </group>
+ <replaceable class="option">this</replaceable>
+ </arg>
+ <arg choice="opt">
+ <group choice="req">
+ <arg choice="plain"><option>-e</option></arg>
+ <arg choice="plain"><option>--example</option></arg>
+ </group>
+ <group choice="req">
+ <arg choice="plain"><replaceable>this</replaceable></arg>
+ <arg choice="plain"><replaceable>that</replaceable></arg>
+ </group>
+ </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+ <!-- Normally the help and version options make the programs stop
+ right after outputting the requested information. -->
+ <group choice="opt">
+ <arg choice="plain">
+ <group choice="req">
+ <arg choice="plain"><option>-h</option></arg>
+ <arg choice="plain"><option>--help</option></arg>
+ </group>
+ </arg>
+ <arg choice="plain">
+ <group choice="req">
+ <arg choice="plain"><option>-v</option></arg>
+ <arg choice="plain"><option>--version</option></arg>
+ </group>
+ </arg>
+ </group>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1 id="description">
+ <title>DESCRIPTION</title>
+ <para>This manual page documents briefly the
+ <command>&dhpackage;</command> and <command>bar</command>
+ commands.</para>
+ <para>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 <citerefentry>
+ <refentrytitle>info</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry> format; see below.</para>
+ <para><command>&dhpackage;</command> is a program that...</para>
+ </refsect1>
+ <refsect1 id="options">
+ <title>OPTIONS</title>
+ <para>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
+ <citerefentry>
+ <refentrytitle>info</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry> files.</para>
+ <variablelist>
+ <!-- Use the variablelist.term.separator and the
+ variablelist.term.break.after parameters to
+ control the term elements. -->
+ <varlistentry>
+ <term><option>-e <replaceable>this</replaceable></option></term>
+ <term><option>--example=<replaceable>that</replaceable></option></term>
+ <listitem>
+ <para>Does this and that.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option></term>
+ <term><option>--help</option></term>
+ <listitem>
+ <para>Show summary of options.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option></term>
+ <term><option>--version</option></term>
+ <listitem>
+ <para>Show version of program.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1 id="files">
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/foo.conf</filename></term>
+ <listitem>
+ <para>The system-wide configuration file to control the
+ behaviour of <application>&dhpackage;</application>. See
+ <citerefentry>
+ <refentrytitle>foo.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry> for further details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>${HOME}/.foo.conf</filename></term>
+ <listitem>
+ <para>The per-user configuration file to control the
+ behaviour of <application>&dhpackage;</application>. See
+ <citerefentry>
+ <refentrytitle>foo.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry> for further details.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1 id="environment">
+ <title>ENVIRONMENT</title>
+ <variablelist>
+ <varlistentry>
+ <term><envar>FOO_CONF</envar></term>
+ <listitem>
+ <para>If used, the defined file is used as configuration
+ file (see also <xref linkend="files"/>).</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+ <refsect1 id="diagnostics">
+ <title>DIAGNOSTICS</title>
+ <para>The following diagnostics may be issued
+ on <filename class="devicefile">stderr</filename>:</para>
+ <variablelist>
+ <varlistentry>
+ <term><errortext>Bad configuration file. Exiting.</errortext></term>
+ <listitem>
+ <para>The configuration file seems to contain a broken configuration
+ line. Use the <option>--verbose</option> option, to get more info.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para><command>&dhpackage;</command> provides some return codes, that can
+ be used in scripts:</para>
+ <segmentedlist>
+ <segtitle>Code</segtitle>
+ <segtitle>Diagnostic</segtitle>
+ <seglistitem>
+ <seg><errorcode>0</errorcode></seg>
+ <seg>Program exited successfully.</seg>
+ </seglistitem>
+ <seglistitem>
+ <seg><errorcode>1</errorcode></seg>
+ <seg>The configuration file seems to be broken.</seg>
+ </seglistitem>
+ </segmentedlist>
+ </refsect1>
+ <refsect1 id="bugs">
+ <!-- Or use this section to tell about upstream BTS. -->
+ <title>BUGS</title>
+ <para>The program is currently limited to only work
+ with the <package>foobar</package> library.</para>
+ <para>The upstreams <acronym>BTS</acronym> can be found
+ at <ulink url="http://bugzilla.foo.tld"/>.</para>
+ </refsect1>
+ <refsect1 id="see_also">
+ <title>SEE ALSO</title>
+ <!-- In alpabetical order. -->
+ <para><citerefentry>
+ <refentrytitle>bar</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>, <citerefentry>
+ <refentrytitle>baz</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>, <citerefentry>
+ <refentrytitle>foo.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry></para>
+ <para>The programs are documented fully by <citetitle>The Rise and
+ Fall of a Fooish Bar</citetitle> available via the <citerefentry>
+ <refentrytitle>info</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry> system.</para>
+ </refsect1>
+</refentry>
+
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:
+# * <postinst> `configure' <most-recently-configured-version>
+# * <old-postinst> `abort-upgrade' <new version>
+# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+# <new-version>
+# * <postinst> `abort-remove'
+# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+# <failed-install-package> <version> `removing'
+# <conflicting-package> <version>
+# 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:
+# * <postrm> `remove'
+# * <postrm> `purge'
+# * <old-postrm> `upgrade' <new-version>
+# * <new-postrm> `failed-upgrade' <old-version>
+# * <new-postrm> `abort-install'
+# * <new-postrm> `abort-install' <old-version>
+# * <new-postrm> `abort-upgrade' <old-version>
+# * <disappearer's-postrm> `disappear' <overwriter>
+# <overwriter-version>
+# 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:
+# * <new-preinst> `install'
+# * <new-preinst> `install' <old-version>
+# * <new-preinst> `upgrade' <old-version>
+# * <old-preinst> `abort-upgrade' <new-version>
+# 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:
+# * <prerm> `remove'
+# * <old-prerm> `upgrade' <new-version>
+# * <new-prerm> `failed-upgrade' <old-version>
+# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
+# * <deconfigured's-prerm> `deconfigure' `in-favour'
+# <package-being-installed> <version> `removing'
+# <conflicting-package> <version>
+# 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: <insert document author here>
+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 <katolaz@freaknet.org>
+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 <http://www.gnu.org/licenses/>.
+#
+# ----------------------------------------------------------------------
+#
+# 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 <<EOF > ${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 <<EOF > ${TMPFILE}
+
+ -+- setnet.sh ${VERSION} -+-
+
+--------------------------------------------------------------------
+
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 2016, 2017
+
+--------------------------------------------------------------------
+
+
+EOF
+ eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
+ return
+}
+
+
+##function
+show_license(){
+
+ cat <<EOF > ${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 <http://www.gnu.org/licenses/>.
+
+--------------------------------------------------------------------
+
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 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 <<EOF > ${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 <katolaz@freaknet.org>
+ 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
--- /dev/null
+++ b/debian_package/setnet-0.2/debian/setnet/usr/share/doc/setnet/changelog.Debian.gz
Binary files 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: <http://kalos.mine.nu/setnet>
+
+Files: debian/*
+Copyright: 2016 Vincenzo (KatolaZ) Nicosia <katolaz@freaknet.org>
+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 <https://www.gnu.org/licenses/>
+ .
+
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%<project>-$1.tar.gz%" \
+# https://github.com/<user>/setnet/tags \
+# (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate
+
+# PyPI
+# https://pypi.python.org/packages/source/<initial>/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 <http://www.gnu.org/licenses/>.
+#
+# ----------------------------------------------------------------------
+#
+# 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 <<EOF > ${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 <<EOF > ${TMPFILE}
+
+ -+- setnet.sh ${VERSION} -+-
+
+--------------------------------------------------------------------
+
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 2016, 2017
+
+--------------------------------------------------------------------
+
+
+EOF
+ eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
+ return
+}
+
+
+##function
+show_license(){
+
+ cat <<EOF > ${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 <http://www.gnu.org/licenses/>.
+
+--------------------------------------------------------------------
+
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 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 <<EOF > ${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
--- a/debian_package/setnet_0.1-1.debian.tar.xz
+++ b/debian_package/setnet_0.1-1.debian.tar.xz
Binary files 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
--- a/debian_package/setnet_0.1-1_all.deb
+++ b/debian_package/setnet_0.1-1_all.deb
Binary files 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) <nnnn is the bug number of your ITP>
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
--- a/debian_package/setnet_0.1.orig.tar.xz
+++ b/debian_package/setnet_0.1.orig.tar.xz
Binary files 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
--- /dev/null
+++ b/debian_package/setnet_0.2-1.debian.tar.xz
Binary files 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 <katolaz@freaknet.org>
+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
--- /dev/null
+++ b/debian_package/setnet_0.2-1_all.deb
Binary files 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 <katolaz@freaknet.org>
+Changed-By: Vincenzo (KatolaZ) Nicosia <katolaz@freaknet.org>
+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
--- /dev/null
+++ b/debian_package/setnet_0.2.orig.tar.xz
Binary files differ
diff --git a/setnet.sh b/setnet.sh
index b15ec25..a352b44 100755
--- a/setnet.sh
+++ b/setnet.sh
@@ -47,7 +47,7 @@ DIALOG="dialog --backtitle \"${TOPSTR}\" "
## the script will exit
##
-HARD_DEPS="ip dhclient dialog netstat"
+HARD_DEPS="ip dhclient dialog iwconfig"
##
## Suggested dependencies. The script will issue a warning if any of
@@ -1285,7 +1285,7 @@ netdiag_routes(){
HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
if [ ${HAS_NETSTAT} -ne 1 ]; then
- notfound "nestat"
+ notfound "netstat"
return
fi
@@ -1333,7 +1333,7 @@ netdiag_connections(){
HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
if [ ${HAS_NETSTAT} -ne 1 ]; then
- notfound "nestat"
+ notfound "netstat"
return
fi
@@ -1362,7 +1362,7 @@ netdiag_services(){
HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
if [ ${HAS_NETSTAT} -ne 1 ]; then
- notfound "nestat"
+ notfound "netstat"
return
fi
@@ -1469,7 +1469,6 @@ netdiag_query(){
kill -9 ${QUERYPID}
fi
fi
-
}
##function
diff --git a/setnetrc b/setnetrc
index 3f18bcc..180420c 100644
--- a/setnetrc
+++ b/setnetrc
@@ -16,7 +16,7 @@ WPA_FILE=/etc/wpa_supplicant/wpa_setnet.conf
LOGFILE=/var/log/setnet.log
##
-##
+## Truncate the log file at startup
##
TRUNCATE_LOG="yes"