diff options
author | toni <matzeton@googlemail.com> | 2016-09-13 04:05:23 +0200 |
---|---|---|
committer | toni <matzeton@googlemail.com> | 2016-09-13 04:05:23 +0200 |
commit | 5b5939a58fcf80a17f13d190145474d2e9b9db6e (patch) | |
tree | 83ef660405896adbd439fc0051e9a3caffd9bc63 | |
parent | c17e62b78e8d03c58658b199bd1824a60099c27d (diff) |
using network info for naskpass frontend
-rwxr-xr-x | configure | 120 | ||||
-rw-r--r-- | configure.ac | 18 | ||||
-rw-r--r-- | src/Makefile.am | 7 | ||||
-rw-r--r-- | src/Makefile.in | 37 | ||||
-rw-r--r-- | src/aconfig.h.in | 6 | ||||
-rw-r--r-- | src/main.c | 1 | ||||
-rw-r--r-- | src/ui_nask.c | 48 |
7 files changed, 225 insertions, 12 deletions
@@ -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 @@ -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(); |