aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoni <matzeton@googlemail.com>2016-09-13 04:05:23 +0200
committertoni <matzeton@googlemail.com>2016-09-13 04:05:23 +0200
commit5b5939a58fcf80a17f13d190145474d2e9b9db6e (patch)
tree83ef660405896adbd439fc0051e9a3caffd9bc63
parentc17e62b78e8d03c58658b199bd1824a60099c27d (diff)
using network info for naskpass frontend
-rwxr-xr-xconfigure120
-rw-r--r--configure.ac18
-rw-r--r--src/Makefile.am7
-rw-r--r--src/Makefile.in37
-rw-r--r--src/aconfig.h.in6
-rw-r--r--src/main.c1
-rw-r--r--src/ui_nask.c48
7 files changed, 225 insertions, 12 deletions
diff --git a/configure b/configure
index 6769887..c27bef7 100755
--- a/configure
+++ b/configure
@@ -633,6 +633,8 @@ AM_CFLAGS
DEBUG_FALSE
DEBUG_TRUE
LIBOBJS
+RESOLVE_FALSE
+RESOLVE_TRUE
RANLIB
ac_ct_AR
AR
@@ -6440,6 +6442,120 @@ fi
done
+for ac_header in resolv.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "resolv.h" "ac_cv_header_resolv_h" "$ac_includes_default"
+if test "x$ac_cv_header_resolv_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_RESOLV_H 1
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __res_init" >&5
+$as_echo_n "checking for library containing __res_init... " >&6; }
+if ${ac_cv_search___res_init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char __res_init ();
+int
+main ()
+{
+return __res_init ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' resolv; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search___res_init=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search___res_init+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search___res_init+:} false; then :
+
+else
+ ac_cv_search___res_init=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___res_init" >&5
+$as_echo "$ac_cv_search___res_init" >&6; }
+ac_res=$ac_cv_search___res_init
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working resolve" >&5
+$as_echo_n "checking for working resolve... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <resolv.h>
+int
+main ()
+{
+res_init();
+ printf("%s\n", _res.defdname);
+ res_close();
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_RESOLVE 1
+_ACEOF
+
+ if true; then
+ RESOLVE_TRUE=
+ RESOLVE_FALSE='#'
+else
+ RESOLVE_TRUE='#'
+ RESOLVE_FALSE=
+fi
+
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** DNS information disabled" >&5
+$as_echo "$as_me: WARNING: *** DNS information disabled" >&2;}
+fi
+
+done
+
# Checks for typedefs, structures, and compiler characteristics.
if ac_fn_c_compute_int "$LINENO" "" "" ""; then :
@@ -9371,6 +9487,10 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${RESOLVE_TRUE}" && test -z "${RESOLVE_FALSE}"; then
+ as_fn_error $? "conditional \"RESOLVE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${DEBUG_TRUE}" && test -z "${DEBUG_FALSE}"; then
as_fn_error $? "conditional \"DEBUG\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/configure.ac b/configure.ac
index 2d079ff..8d35d4a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,6 +34,24 @@ AC_HEADER_STAT
AC_HEADER_DIRENT
AC_HEADER_ASSERT
AC_CHECK_HEADERS([glob.h stdio.h stdlib.h stdbool.h string.h unistd.h errno.h sys/stat.h sys/types.h sys/wait.h fcntl.h semaphore.h time.h mqueue.h syslog.h],[],[AC_MSG_ERROR([*** missing essential header files])])
+AC_CHECK_HEADERS([resolv.h],[
+ AC_SEARCH_LIBS([__res_init], [resolv],[
+ AC_MSG_CHECKING([for working resolve])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <resolv.h>]],
+ [[res_init();]]
+ [[printf("%s\n", _res.defdname);]]
+ [[res_close();]]
+ )],
+ [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED([HAVE_RESOLVE], 1, [Define to 1 if you have libc resolv.])
+ AM_CONDITIONAL(RESOLVE, true)
+ ],
+ [
+ AC_MSG_RESULT([no])
+ ]
+ ]),[AC_MSG_ERROR([*** Missing resolv library. -lresolv])])
+ ],[AC_MSG_WARN([*** DNS information disabled])])
# Checks for typedefs, structures, and compiler characteristics.
AC_COMPUTE_INT
diff --git a/src/Makefile.am b/src/Makefile.am
index 202e7a2..9fa6b3e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,6 @@
bin_PROGRAMS=naskpass naskshell naskpass_check
-naskpass_SOURCES=main.c log.c opt.c status.c ui_ani.c ui.c ui_input.c ui_ipc.c ui_txtwindow.c ui_statusbar.c ui_nask.c
+naskpass_SOURCES=main.c log.c opt.c utils.c status.c ui_ani.c ui.c ui_input.c ui_ipc.c ui_txtwindow.c ui_statusbar.c ui_nask.c
+naskpass_LDFLAGS=
naskpass_check_SOURCES=check/check.c
naskshell_SOURCES=shell/shell.c
if DEBUG
@@ -7,3 +8,7 @@ naskpass_CFLAGS=-O0 -g3 -DDEBUG
else
naskpass_CFLAGS=-fPIC -fomit-frame-pointer -fexpensive-optimizations -Os
endif
+if RESOLVE
+naskpass_CFLAGS+=-DHAVE_RESOLVE
+naskpass_LDFLAGS+=-lresolv
+endif
diff --git a/src/Makefile.in b/src/Makefile.in
index 4a5a4cf..718ab6d 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -80,6 +80,8 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = naskpass$(EXEEXT) naskshell$(EXEEXT) \
naskpass_check$(EXEEXT)
+@RESOLVE_TRUE@am__append_1 = -DHAVE_RESOLVE
+@RESOLVE_TRUE@am__append_2 = -lresolv
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/aconfig.h.in $(top_srcdir)/build/depcomp
@@ -94,15 +96,15 @@ CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_naskpass_OBJECTS = naskpass-main.$(OBJEXT) naskpass-log.$(OBJEXT) \
- naskpass-opt.$(OBJEXT) naskpass-status.$(OBJEXT) \
- naskpass-ui_ani.$(OBJEXT) naskpass-ui.$(OBJEXT) \
- naskpass-ui_input.$(OBJEXT) naskpass-ui_ipc.$(OBJEXT) \
- naskpass-ui_txtwindow.$(OBJEXT) \
+ naskpass-opt.$(OBJEXT) naskpass-utils.$(OBJEXT) \
+ naskpass-status.$(OBJEXT) naskpass-ui_ani.$(OBJEXT) \
+ naskpass-ui.$(OBJEXT) naskpass-ui_input.$(OBJEXT) \
+ naskpass-ui_ipc.$(OBJEXT) naskpass-ui_txtwindow.$(OBJEXT) \
naskpass-ui_statusbar.$(OBJEXT) naskpass-ui_nask.$(OBJEXT)
naskpass_OBJECTS = $(am_naskpass_OBJECTS)
naskpass_LDADD = $(LDADD)
-naskpass_LINK = $(CCLD) $(naskpass_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
+naskpass_LINK = $(CCLD) $(naskpass_CFLAGS) $(CFLAGS) \
+ $(naskpass_LDFLAGS) $(LDFLAGS) -o $@
am__dirstamp = $(am__leading_dot)dirstamp
am_naskpass_check_OBJECTS = check/check.$(OBJEXT)
naskpass_check_OBJECTS = $(am_naskpass_check_OBJECTS)
@@ -273,11 +275,13 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-naskpass_SOURCES = main.c log.c opt.c status.c ui_ani.c ui.c ui_input.c ui_ipc.c ui_txtwindow.c ui_statusbar.c ui_nask.c
+naskpass_SOURCES = main.c log.c opt.c utils.c status.c ui_ani.c ui.c ui_input.c ui_ipc.c ui_txtwindow.c ui_statusbar.c ui_nask.c
+naskpass_LDFLAGS = $(am__append_2)
naskpass_check_SOURCES = check/check.c
naskshell_SOURCES = shell/shell.c
-@DEBUG_FALSE@naskpass_CFLAGS = -fPIC -fomit-frame-pointer -fexpensive-optimizations -Os
-@DEBUG_TRUE@naskpass_CFLAGS = -O0 -g3 -DDEBUG
+@DEBUG_FALSE@naskpass_CFLAGS = -fPIC -fomit-frame-pointer \
+@DEBUG_FALSE@ -fexpensive-optimizations -Os $(am__append_1)
+@DEBUG_TRUE@naskpass_CFLAGS = -O0 -g3 -DDEBUG $(am__append_1)
all: aconfig.h
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -418,6 +422,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/naskpass-ui_nask.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/naskpass-ui_statusbar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/naskpass-ui_txtwindow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/naskpass-utils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@check/$(DEPDIR)/check.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@shell/$(DEPDIR)/shell.Po@am__quote@
@@ -479,6 +484,20 @@ naskpass-opt.obj: opt.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -c -o naskpass-opt.obj `if test -f 'opt.c'; then $(CYGPATH_W) 'opt.c'; else $(CYGPATH_W) '$(srcdir)/opt.c'; fi`
+naskpass-utils.o: utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -MT naskpass-utils.o -MD -MP -MF $(DEPDIR)/naskpass-utils.Tpo -c -o naskpass-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/naskpass-utils.Tpo $(DEPDIR)/naskpass-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='naskpass-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -c -o naskpass-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
+
+naskpass-utils.obj: utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -MT naskpass-utils.obj -MD -MP -MF $(DEPDIR)/naskpass-utils.Tpo -c -o naskpass-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/naskpass-utils.Tpo $(DEPDIR)/naskpass-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='naskpass-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -c -o naskpass-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
+
naskpass-status.o: status.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(naskpass_CFLAGS) $(CFLAGS) -MT naskpass-status.o -MD -MP -MF $(DEPDIR)/naskpass-status.Tpo -c -o naskpass-status.o `test -f 'status.c' || echo '$(srcdir)/'`status.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/naskpass-status.Tpo $(DEPDIR)/naskpass-status.Po
diff --git a/src/aconfig.h.in b/src/aconfig.h.in
index 333f005..cbae5a0 100644
--- a/src/aconfig.h.in
+++ b/src/aconfig.h.in
@@ -87,6 +87,12 @@
and to 0 otherwise. */
#undef HAVE_REALLOC
+/* Define to 1 if you have libc resolv. */
+#undef HAVE_RESOLVE
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#undef HAVE_RESOLV_H
+
/* Define to 1 if you have the <semaphore.h> header file. */
#undef HAVE_SEMAPHORE_H
diff --git a/src/main.c b/src/main.c
index a8a5903..7f04358 100644
--- a/src/main.c
+++ b/src/main.c
@@ -77,6 +77,7 @@ run_cryptcreate(char *pass, char *crypt_cmd)
void sigfunc(int signal)
{
switch (signal) {
+ case SIGSEGV:
case SIGTERM:
ui_ipc_semtrywait(SEM_UI);
break;
diff --git a/src/ui_nask.c b/src/ui_nask.c
index 4857de6..32a8dcc 100644
--- a/src/ui_nask.c
+++ b/src/ui_nask.c
@@ -11,10 +11,13 @@
#include "ui_txtwindow.h"
#include "ui_nask.h"
+#include "utils.h"
#include "status.h"
#define APP_TIMEOUT 60
#define APP_TIMEOUT_FMT "%02d"
+#define NETUPD_INTERVAL 5
+#define NETUPD_STRLEN 128
#define BSTR_LEN 3
#define PASSWD_WIDTH 35
#define PASSWD_HEIGHT 5
@@ -30,9 +33,10 @@
static struct input *pw_input;
static struct anic *heartbeat;
-static struct statusbar *higher, *lower;
+static struct statusbar *higher, *lower, *netinfo;
static struct txtwindow *busywnd, *errwnd;
-static int atmout = APP_TIMEOUT;
+static unsigned int atmout = APP_TIMEOUT;
+static unsigned int netupd = 0;
static char *title = NULL;
static char busy_str[BSTR_LEN+1] = ".\0\0\0";
@@ -54,6 +58,41 @@ higher_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout)
}
static int
+netinfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout)
+{
+ if (ui_timeout == TRUE) {
+ if (netupd == 0) {
+ netupd = NETUPD_INTERVAL;
+ size_t len = 0;
+ char buf[NETUPD_STRLEN+1];
+ char *dev, *gwIp, *myIp;
+ memset(buf, '\0', NETUPD_STRLEN+1);
+ if (utGetDefaultGwInfo(&dev, &gwIp) == 0) {
+ if (utGetIpFromNetDev(dev, &myIp) == 0) {
+#ifdef HAVE_RESOLVE
+ char *dom, *srv;
+ if (utGetDomainInfo(&dom, &srv) == 0) {
+ snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s // dns: %s // domain: %s", dev, myIp, gwIp, srv, dom);
+ }
+ free(dom);
+ free(srv);
+#else
+ snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s", dev, myIp, gwIp);
+#endif
+ free(myIp);
+ }
+ free(dev);
+ free(gwIp);
+ }
+ set_statusbar_text(bar, buf);
+ } else {
+ netupd--;
+ }
+ }
+ return DOUI_OK;
+}
+
+static int
busywnd_update(WINDOW *win, struct txtwindow *tw, bool ui_timeout)
{
if (ui_timeout == TRUE && tw->active == TRUE) {
@@ -153,6 +192,8 @@ init_ui_elements(unsigned int max_x, unsigned int max_y)
higher_statusbar_update);
lower = init_statusbar(max_y - 1, max_x, COLOR_PAIR(3),
lower_statusbar_update);
+ netinfo = init_statusbar(1, max_x, COLOR_PAIR(2),
+ netinfo_statusbar_update);
busywnd = init_txtwindow_centered(INFOWND_WIDTH, INFOWND_HEIGHT,
busywnd_update);
errwnd = init_txtwindow_centered(INFOWND_WIDTH, INFOWND_HEIGHT,
@@ -161,6 +202,7 @@ init_ui_elements(unsigned int max_x, unsigned int max_y)
register_input(NULL, pw_input, passwd_input_cb);
register_statusbar(higher);
register_statusbar(lower);
+ register_statusbar(netinfo);
register_anic_default(heartbeat);
register_txtwindow(busywnd);
register_txtwindow(errwnd);
@@ -173,12 +215,14 @@ free_ui_elements(void)
{
unregister_ui_elt(lower);
unregister_ui_elt(higher);
+ unregister_ui_elt(netinfo);
unregister_ui_elt(heartbeat);
unregister_ui_elt(pw_input);
free_input(pw_input);
free_anic_default(heartbeat);
free_statusbar(higher);
free_statusbar(lower);
+ free_statusbar(netinfo);
free_txtwindow(busywnd);
free_txtwindow(errwnd);
free_ui();