New Upstream Release - driftnet

Ready changes

Summary

Merged new upstream version: 1.5.0 (was: 1.4.0).

Resulting package

Built on 2023-06-08T23:21 (took 5m37s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases driftnet-dbgsymapt install -t fresh-releases driftnet

Lintian Result

Diff

diff --git a/.gitignore b/.gitignore
index 706084e..94bded9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ config.log
 config.status
 stamp-h1
 ar-lib
+test-driver
 driftnet
 
 # eclipse files
@@ -34,8 +35,11 @@ driftnet
 cmake-build-*
 docs/
 
-#coverage files
+# coverage files
 *.gcda
 *.gcno
 coverage.info
 coverage-docs/
+
+# generated files
+src/http_display/web_data.c
diff --git a/Makefile.am b/Makefile.am
index ecd8b69..23ebfdc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,12 @@ EXTRA_DIST = driftnet.1.in CREDITS Changelog
 MANPAGE = driftnet.1.gz
 MAN1DIR = $(DESTDIR)$(mandir)/man1/
 
-clean-local: clean-coverage clean-docs
+CLEAN_RULES = clean-docs
+if ENABLE_TESTS
+CLEAN_RULES += clean-coverage
+endif
+
+clean-local: $(CLEAN_RULES)
 	rm -f $(MANPAGE)
 
 install-data-local: driftnet.1.in
diff --git a/README.md b/README.md
index 0a0279c..fff70aa 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Driftnet watches network traffic, and picks out and displays JPEG, GIF and other
 News
 ------------
 
+    Migrate display to GKT3 (GTK2 still supported)
     Added WebP image format support
     Added new, http and websockets based, display
     Added basic windows support (cygwin)
@@ -38,7 +39,20 @@ You will need:
 * [libwebsockets](https://libwebsockets.org/) (if you want the http server)
 * [libgtk](https://www.gtk.org/) (if you want the GTK display)
 
-On most Linux distributions (APT based) these can be installed by executing `sudo apt-get install libpcap-dev libjpeg-dev libpng12-dev giflib-tools libwebp-dev`. If you don't want a version of driftnet which will display images itself, but just want  to use it to gather images for some other application, you only need `libpcap`. See comments in the Makefile for more information. To play MPEG audio, you need an MPEG player. By default, driftnet will use [mpg123](http://www.mpg123.de/).
+On most Linux distributions (APT based) these can be installed by executing `sudo apt-get install libpcap-dev libjpeg-dev libpng-dev libgif-dev libwebp-dev`. If you don't want a version of driftnet which will display images itself, but just want  to use it to gather images for some other application, you only need `libpcap`. See comments in the Makefile for more information. To play MPEG audio, you need an MPEG player. By default, driftnet will use [mpg123](http://www.mpg123.de/).
+
+### GTK display
+
+Driftnet links by default against GTK 3 (GTK2 is still supported disabling GTK3 in the configure script `./configure --disable-gtk3`).
+
+- GTK3 dependencies: `sudo apt-get install libgtk-3-dev`
+- GTK2 dependencies: `sudo apt-get install libgtk2.0-dev`
+
+### HTTP display
+
+Instead of the GTK interface you can use a new HTML based one (the display could be selected at launch time).
+
+Dependencies: `sudo apt-get install libwebsockets-dev`
 
 ## Windows (on cygwin)
 
diff --git a/configure.ac b/configure.ac
index 7355912..9c481fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 #
 
 AC_PREREQ([2.71])
-AC_INIT([driftnet],[1.4.0],[david.sephirot@gmail.com])
+AC_INIT([driftnet],[1.5.0],[david.sephirot@gmail.com])
 
 AC_CANONICAL_HOST
 AC_CANONICAL_TARGET
@@ -43,7 +43,8 @@ case "${host_os}" in
         ;;
 esac
 
-AC_ARG_ENABLE([display],
+AC_ARG_ENABLE(
+    [display],
     [AS_HELP_STRING([--disable-display],[disable display (default is no)])],
     ,
     [enable_display=yes])
@@ -53,6 +54,17 @@ if test "x$enable_display" = xno; then
 fi
 AM_CONDITIONAL(ENABLE_DISPLAY, test "x$enable_display" = xyes)
 
+AC_ARG_ENABLE(
+    [gtk3],
+    [AS_HELP_STRING([--disable-gtk3],[disable gtk+ 3.x and compile with gtk+ 2.x])],
+    ,
+    [enable_gtk3=yes])
+
+if test "x$enable_gtk3" = xno; then
+    AC_DEFINE([DISABLE_GTK3], [1], [Compile without support for gtk+ 3.x])
+fi
+AM_CONDITIONAL(ENABLE_GTK3, test "x$enable_gtk3" = xyes)
+
 AC_ARG_ENABLE([http-display],
     [AS_HELP_STRING([--disable-http-display],[disable http display (default is yes)])],
     ,
@@ -79,11 +91,6 @@ fi
 # Checks for programs.
 #
 
-# Check for pkg-config
-AC_CHECK_PROG([have_pkg_config],[pkg-config],[yes],[no])
-AM_CONDITIONAL([FOUND_PKGCONFIG], [test "x$have_pkg_config" = xyes])
-AM_COND_IF([FOUND_PKGCONFIG],,[AC_MSG_ERROR([required program 'pkg-config' not found])])
-
 AC_PROG_CC
 AC_PROG_INSTALL
 #AM_PROG_CC_C_O
@@ -119,40 +126,28 @@ AC_CHECK_LIB([pthread],
 
 if test "x$enable_display" = xyes; then
 
-	AC_CHECK_LIB([glib-2.0],
-        [g_free],
-        [],
-		[AC_MSG_ERROR([cannot find lib glib-2.x])])
-
-	AC_CHECK_LIB([gobject-2.0],
-        [g_signal_connect_data],
-        [],
-		[AC_MSG_ERROR([cannot find lib libgobject-2.0])])
-
-	AC_CHECK_LIB([gtk-x11-2.0],
-        [gtk_main],
-        [],
-		[AC_MSG_ERROR([cannot find lib gtk-2.x])])
-
-#	AC_CHECK_LIB([gthread-2.0],
-#        [g_thread_init],
-#        [],
-#		[AC_MSG_ERROR([cannot find lib libgthread-2.0])])
-
-	AC_CHECK_LIB([gdk-x11-2.0],
-        [gdk_window_get_state],
-        [],
-		[AC_MSG_ERROR([cannot find lib gdk-x11-2.0])])
-
-#	AC_CHECK_LIB([Xrender],
-#        [XRenderComposite],
-#        [],
-#		[AC_MSG_ERROR([cannot find lib XRender])])
-
-	GTK_CFLAGS="$(${PKG_CONFIG} --cflags gtk+-x11-2.0 glib-2.0 gobject-2.0 gdk-x11-2.0)"
-    #gthread-2.0)"
-
-    AC_SUBST(GTK_CFLAGS)
+    HAVE_GTK_VERSION3=false
+
+    if test "x$enable_gtk3" = "xyes" ; then
+        PKG_CHECK_EXISTS(
+            [gtk+-3.0 >= 3.0.0],
+            [HAVE_GTK_VERSION3=true],
+            [HAVE_GTK_VERSION3=false])
+    fi
+
+    if test "x$HAVE_GTK_VERSION3" = "xfalse"; then
+        PKG_CHECK_MODULES(
+            GTK,
+            gtk+-2.0 >= 2.0.0,
+            [gtk_version_to_link=2.x.x],
+            [AC_MSG_ERROR([cannot find gtk+-2.0 >= 2.0.0])])
+    else
+       PKG_CHECK_MODULES(
+            GTK,
+            gtk+-3.0 >= 3.0.0,
+            [gtk_version_to_link=3.x.x],
+            [AC_MSG_ERROR([cannot find gtk+-3.0 >= 3.0.0])])
+    fi
 
     AC_CHECK_LIB([gif],
     [DGifOpenFileHandle],
@@ -164,17 +159,20 @@ if test "x$enable_display" = xyes; then
     [],
     [AC_MSG_ERROR([cannot find lib png])] )
 
-    AC_CHECK_LIB([webp],
-    [WebPDecodeRGBInto],
-    [],
-    [AC_MSG_ERROR([cannot find lib webp])] )
-
     AC_CHECK_LIB([jpeg],
     [jpeg_read_header],
     [],
     [AC_MSG_ERROR([cannot find lib jpeg])] )
+else
+    gtk_version_to_link=none
 fi
 
+
+AC_CHECK_LIB([webp],
+    [WebPDecodeRGBInto],
+    [],
+    [AC_MSG_ERROR([cannot find lib webp])] )
+
 if test "x$enable_http_display" = xyes; then
     AC_CHECK_LIB([websockets],
         [lws_create_context],
@@ -279,6 +277,9 @@ echo \
 
  Package features:
    - enable display: ${enable_display}
+   - enable gtk3: ${enable_gtk3}
+   - GTK version found: ${gtk_version_to_link}
+   - enable http display: ${enable_http_display}
    - enable debug: ${enable_debug}
 
  Now type:
diff --git a/debian/changelog b/debian/changelog
index fd75894..d10b6c2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+driftnet (1.5.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Thu, 08 Jun 2023 23:17:04 -0000
+
 driftnet (1.4.0-2) unstable; urgency=medium
 
   * Bump debhelper compat.
diff --git a/driftnet.doxygen b/driftnet.doxygen
index c51cafa..38eb017 100644
--- a/driftnet.doxygen
+++ b/driftnet.doxygen
@@ -32,7 +32,7 @@ PROJECT_NAME           = "Driftnet"
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = 1.4.0
+PROJECT_NUMBER         = 1.5.0
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer
diff --git a/src/Makefile.am b/src/Makefile.am
index 99b90bb..da2db0a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ if ENABLE_DISPLAY
 SUBDIRS += display
 AM_CFLAGS += -I$(srcdir)/display
 driftnet_LDADD += display/libdisplay.a
+driftnet_LDADD += @GTK_LIBS@
 endif
 
 if ENABLE_HTTP_DISPLAY
diff --git a/src/display/display.c b/src/display/display.c
index d1d6932..f50547f 100644
--- a/src/display/display.c
+++ b/src/display/display.c
@@ -150,10 +150,30 @@ void make_backing_image() {
  * Copy the backing image onto the window. */
 void update_window() {
     if (backing_image) {
+#ifdef DISABLE_GTK3
         GdkGC *gc;
         gc = gdk_gc_new(drawable);
         gdk_draw_rgb_32_image(drawable, gc, 0, 0, width, height, GDK_RGB_DITHER_NORMAL, (guchar*)backing_image->flat, sizeof(pel) * width);
         g_object_unref(gc);
+#else
+        cairo_t *cr = gdk_cairo_create(drawable);
+
+        cairo_set_source_rgb(cr, 0.0, 0.0, 1.0);
+        cairo_rectangle(cr, 0.0, 0.0, width, height);
+        cairo_fill(cr);
+
+        cairo_surface_t *pSurface = cairo_image_surface_create_for_data(
+                (guchar*)backing_image->flat,
+                CAIRO_FORMAT_RGB24,
+                width,
+                height,
+                (width * 4));
+
+        cairo_set_source_surface(cr, pSurface, 0.0, 0.0);
+        cairo_paint(cr);
+
+        cairo_destroy(cr);
+#endif
     }
 }
 
@@ -220,8 +240,15 @@ struct imgrect *find_image_rectangle(const int x, const int y) {
 /* expose_event:
  * React to an expose event, perhaps changing the backing image size. */
 void expose_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
+#ifdef DISABLE_GTK3
     if (darea) drawable = darea->window;
     gdk_drawable_get_size(GDK_DRAWABLE(drawable), &width, &height);
+#else
+    if (darea) drawable = gtk_widget_get_window (darea);
+    width = gdk_window_get_width(drawable);
+    height = gdk_window_get_height(drawable);
+#endif
+
     if (!backing_image || backing_image->width != width || backing_image->height != height)
         make_backing_image();
 
@@ -231,8 +258,15 @@ void expose_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
 /* configure_event:
  * React to a configure event, perhaps changing the backing image size. */
 void configure_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
+#ifdef DISABLE_GTK3
     if (darea) drawable = darea->window;
     gdk_drawable_get_size(GDK_DRAWABLE(drawable), &width, &height);
+#else
+    if (darea) drawable = gtk_widget_get_window (darea);
+    width = gdk_window_get_width(drawable);
+    height = gdk_window_get_height(drawable);
+#endif
+
     if (!backing_image || backing_image->width != width || backing_image->height != height)
         make_backing_image();
 
@@ -302,11 +336,29 @@ void button_release_event(GtkWidget *widget, GdkEventButton *event) {
     if (ir && ir == find_image_rectangle((int)event->x, (int)event->y)) {
         /* We draw a little frame around the image while we're saving it, to
          * give some visual feedback. */
+#ifdef DISABLE_GTK3
         gdk_draw_rectangle(drawable, darea->style->white_gc, 0, ir->x - 2, ir->y - 2, ir->w + 3, ir->h + 3);
+#else
+        cairo_t *cr = gdk_cairo_create(drawable);
+
+        cairo_set_line_width (cr, 1.0);
+        cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+        cairo_rectangle(cr, ir->x, ir->y, ir->w+3, ir->h + 3);
+        cairo_stroke(cr);
+#endif
         gdk_flush();    /* force X to actually draw the damn thing. */
         save_image(ir);
         xnanosleep(100000000);
+#ifdef DISABLE_GTK3
         gdk_draw_rectangle(drawable, darea->style->black_gc, 0, ir->x - 2, ir->y - 2, ir->w + 3, ir->h + 3);
+#else
+        cairo_set_line_width (cr, 1.0);
+        cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+        cairo_rectangle(cr, ir->x, ir->y, ir->w+3, ir->h + 3);
+        cairo_stroke(cr);
+
+        cairo_destroy(cr);
+#endif
     }
 }
 
@@ -429,7 +481,9 @@ static void do_gtkdisplay(void)
     /* do some init thing */
     gtk_init(0, NULL);
 
+#ifdef DISABLE_GTK3
     gtk_widget_push_colormap(gdk_rgb_get_colormap());
+#endif
 
     /* Make our own window. */
     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -439,15 +493,20 @@ static void do_gtkdisplay(void)
     gtk_container_add(GTK_CONTAINER(window), darea);
     gtk_widget_set_events(darea, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
 
-    g_signal_connect(G_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL);
-    g_signal_connect(G_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy), NULL);
+    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL);
+    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
+
+#if DISABLE_GTK3
+    g_signal_connect(G_OBJECT(darea), "expose-event", G_CALLBACK(expose_event), NULL);
+#else
+    g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(expose_event), NULL);
+#endif
 
-    g_signal_connect(G_OBJECT(darea), "expose-event", GTK_SIGNAL_FUNC(expose_event), NULL);
-    g_signal_connect(G_OBJECT(darea), "configure_event", GTK_SIGNAL_FUNC(expose_event), NULL);
+    g_signal_connect(G_OBJECT(darea), "configure_event", G_CALLBACK(expose_event), NULL);
 
     /* mouse button press/release for saving images */
-    g_signal_connect(G_OBJECT(darea), "button_press_event", GTK_SIGNAL_FUNC(button_press_event), NULL);
-    g_signal_connect(G_OBJECT(darea), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL);
+    g_signal_connect(G_OBJECT(darea), "button_press_event", G_CALLBACK(button_press_event), NULL);
+    g_signal_connect(G_OBJECT(darea), "button_release_event", G_CALLBACK(button_release_event), NULL);
 
     gtk_widget_show_all(window);
 
@@ -460,7 +519,9 @@ static void do_gtkdisplay(void)
 
     img_delete(backing_image);
 
+#ifdef DISABLE_GTK3
     gtk_exit(0);
+#endif
 
     return; /* NOTREACHED */
 }
diff --git a/src/display/img.h b/src/display/img.h
index bdec81b..331095b 100644
--- a/src/display/img.h
+++ b/src/display/img.h
@@ -22,8 +22,15 @@
 typedef uint8_t chan;
 typedef uint32_t pel;
 
-/* Yuk. GDKRGB expects data in a specific ordering. */
+/*
+ * Yuk. GDKRGB expects data in a specific ordering:
+ */
 #if defined(DRIFTNET_LITTLE_ENDIAN)
+/*
+ *   - for GTK2 gdk_draw_rgb_32_image():               0x00BBGGRR
+ *   - for GTK3 cairo_image_surface_create_for_data(): 0x00RRGGBB
+ */
+#ifdef DISABLE_GTK3
 #   define PEL(r, g, b)        ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16)))
 #   define PELA(r, g, b, a)    ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16) | ((chan)(a) << 24)))
 
@@ -31,7 +38,21 @@ typedef uint32_t pel;
 #   define GETG(p)             ((chan)(((p) & (pel)0x0000ff00) >>  8))
 #   define GETB(p)             ((chan)(((p) & (pel)0x00ff0000) >> 16))
 #   define GETA(p)             ((chan)(((p) & (pel)0xff000000) >> 24))
+#else
+#   define PEL(r, g, b)        ((pel)((chan)(r) << 16 | ((chan)(g) << 8) | ((chan)(b))))
+#   define PELA(r, g, b, a)    ((pel)((chan)(r) << 16 | ((chan)(g) << 8) | ((chan)(b)) | ((chan)(a) << 24)))
+
+#   define GETR(p)             ((chan)(((p) & (pel)0x00ff0000) >> 16))
+#   define GETG(p)             ((chan)(((p) & (pel)0x0000ff00) >>  8))
+#   define GETB(p)             ((chan)(((p) & (pel)0x000000ff)      ))
+#   define GETA(p)             ((chan)(((p) & (pel)0xff000000) >> 24))
+#endif
 #elif defined(DRIFTNET_BIG_ENDIAN)
+/*
+ *  - for GTK2 gdk_draw_rgb_32_image():               0xRRGGBB00
+ *  - for GTK3 cairo_image_surface_create_for_data(): 0xBBGGRR00
+ */
+#ifdef DISABLE_GTK3
 #   define PEL(r, g, b)        ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8)))
 #   define PELA(r, g, b, a)    ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8) | ((chan)(a))))
 
@@ -40,6 +61,14 @@ typedef uint32_t pel;
 #   define GETB(p)             ((chan)(((p) & (pel)0x0000ff00) >>  8))
 #   define GETA(p)             ((chan)(((p) & (pel)0x000000ff)      ))
 #else
+#   define PEL(r, g, b)        ((pel)(((chan)(r) << 8) | ((chan)(g) << 16) | ((chan)(b) << 24)))
+#   define PELA(r, g, b, a)    ((pel)(((chan)(r) << 8) | ((chan)(g) << 16) | ((chan)(b) << 24) | ((chan)(a))))
+
+#   define GETR(p)             ((chan)(((p) & (pel)0x0000ff00) >>  8))
+#   define GETG(p)             ((chan)(((p) & (pel)0x00ff0000) >> 16))
+#   define GETB(p)             ((chan)(((p) & (pel)0xff000000) >> 24))
+#   define GETA(p)             ((chan)(((p) & (pel)0x000000ff)      ))
+#endif
 #   error "no endianness defined"
 #endif
 
diff --git a/src/display/png.c b/src/display/png.c
index 15c4422..e3e038e 100644
--- a/src/display/png.c
+++ b/src/display/png.c
@@ -92,7 +92,8 @@ int png_abort_load(img I) {
 }
 
 int png_load_img(img I) {
-    unsigned char **p, **q;
+    pel **p;
+    unsigned char **q;
     png_structp png_ptr;
     png_infop info_ptr;
     png_uint_32 width, height;
@@ -168,12 +169,12 @@ int png_load_img(img I) {
     /* Read in the image and copy it to the gdk img structure */
     png_read_image(png_ptr, row_pointers);
 
-    p = (unsigned char **)I->data;
+    p = I->data;
     q = (unsigned char **)row_pointers;
 
     for (i = 0; i < height; i++) {
-        for (j = 0; j < png_get_rowbytes(png_ptr, info_ptr); j++) {
-           p[i][j] = q[i][j];
+        for (j = 0; j < png_get_rowbytes(png_ptr, info_ptr); j = j+4) {
+            p[i][j/4] = PEL(q[i][j], q[i][j+1], q[i][j+2]);
         }
     }
 
diff --git a/src/display/webp.c b/src/display/webp.c
index 08b5aaa..5b97110 100644
--- a/src/display/webp.c
+++ b/src/display/webp.c
@@ -1,3 +1,16 @@
+/*
+ * webp.c:
+ * WebP file support.
+ *
+ * Copyright (c) 2022 David Suárez.
+ * Email: david.sephirot@gmail.com
+ *
+ * Copyright (c) 2022 Martin.
+ * Email: martin@sandsmark.ninja
+ *
+ */
+
+
 #include <webp/decode.h>
 
 #include <string.h>
@@ -29,7 +42,7 @@ int webp_load_hdr(img I) {
     }
 
     actual = fread(internal->data, internal->size, 1, I->fp);
-    if (actual != internal->size) {
+    if (actual != 1) {
         // wtf;
         return 0;
     }
@@ -50,9 +63,23 @@ int webp_load_img(img I) {
     webp_internal *internal = (webp_internal*)I->us;
     size_t allocated_size;
 
+    img_alloc(I);
     allocated_size = I->height * sizeof(pel*) + I->width * I->height * sizeof(pel); // copied from img.c, because why the fuck not
-    decoded = WebPDecodeRGBInto(internal->data, internal->size,
-            (unsigned char*)*I->data, allocated_size, I->width); // apparently we always use dumb stride
+#ifdef DISABLE_GTK3
+    decoded = WebPDecodeRGBAInto(
+            internal->data,
+            internal->size,
+            (unsigned char*)*I->data,
+            allocated_size,
+            I->width*4);
+#else
+    decoded = WebPDecodeBGRAInto(
+            internal->data,
+            internal->size,
+            (unsigned char*)*I->data,
+            allocated_size,
+            I->width*4);
+#endif
 
     if (!decoded) {
         return 0;
diff --git a/src/driftnet.c b/src/driftnet.c
index eae3a90..eb5b0a8 100644
--- a/src/driftnet.c
+++ b/src/driftnet.c
@@ -264,6 +264,7 @@ int main(int argc, char *argv[])
      * Otherwise, check that it's a directory into which we may write files.
      */
     if (options->tmpdir) {
+        log_msg(LOG_INFO, "setting custom tmpdir in: %s", options->tmpdir);
         if (check_dir_is_rw(options->tmpdir) == FALSE) {
             log_msg(LOG_ERROR, "we can't write to the temporary directory");
             exit(1);
@@ -321,15 +322,23 @@ int main(int argc, char *argv[])
                     driver->dispatch_data = dispatch_image_to_stdout;
 
                 } else {
+#if !defined(NO_DISPLAY_WINDOW) && !defined(NO_HTTP_DISPLAY)
                     if (options->enable_gtk_display) {
-#ifndef NO_DISPLAY_WINDOW
                         driver->dispatch_data = dispatch_image_to_display;
-#endif
+
                     } else {
-#ifndef NO_HTTP_DISPLAY
                         driver->dispatch_data = dispatch_image_to_httpdisplay;
-#endif
                     }
+#elif !defined(NO_DISPLAY_WINDOW)
+                    driver->dispatch_data = dispatch_image_to_display;
+#elif !defined(NO_HTTP_DISPLAY)
+                    driver->dispatch_data = dispatch_image_to_httpdisplay;
+#else
+                    log_msg(
+                            LOG_ERROR,
+                            "driftnet was compiled without any display options, use adjunct mode only");
+                    return -1;
+#endif
                 }
                 break;
 
diff --git a/src/options.c b/src/options.c
index 67473b9..a610ac9 100644
--- a/src/options.c
+++ b/src/options.c
@@ -244,25 +244,25 @@ int validate_options(options_t* options)
      * Check for (at least) one display option (GTK by default), if not in adjunct mode.
      */
     if (!options->adjunct) {
+#if !defined(NO_DISPLAY_WINDOW) && !defined(NO_HTTP_DISPLAY)
         if (options->enable_gtk_display && options->enable_http_display) {
             log_msg(LOG_ERROR, "can't specify -w and -g");
             return FALSE;
         }
 
         if (!(options->enable_gtk_display || options->enable_http_display)) {
-#ifndef NO_DISPLAY_WINDOW
             options->enable_gtk_display = TRUE;
+        }
+#elif !defined(NO_DISPLAY_WINDOW)
+        options->enable_gtk_display = TRUE;
 
+#elif !defined(NO_HTTP_DISPLAY)
+        options->enable_http_display = TRUE;
 #else
-  #ifndef NO_DISPLAY_WINDOW
-            options->enable_http_display = TRUE;
-  #else
-            log_msg(LOG_WARNING, "this version of driftnet was compiled without any display support");
-            log_msg(LOG_WARNING, "switching to adjunct mode");
-            options->adjunct = TRUE;
-  #endif
+        log_msg(LOG_WARNING, "this version of driftnet was compiled without any display support");
+        log_msg(LOG_WARNING, "switching to adjunct mode");
+        options->adjunct = TRUE;
 #endif
-        }
     }
 
     return TRUE;
@@ -325,8 +325,8 @@ void usage(FILE *fp)
 "in its temporary directory. It is assumed that some other process is\n"
 "collecting and deleting the image files.\n"
 "\n"
-"driftnet, copyright (c) 2001-2 Chris Lightfoot <chris@ex-parrot.com>\n"
-"          copyright (c) 2012-18 David Suárez <david.sephirot@gmail.com>\n"
+"driftnet, copyright (c) 2001-2002 Chris Lightfoot <chris@ex-parrot.com>\n"
+"          copyright (c) 2012-2022 David Suárez <david.sephirot@gmail.com>\n"
 "home page: https://github.com/deiv/driftnet\n"
 "old home page: http://www.ex-parrot.com/~chris/driftnet/\n"
 "\n"

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/a5/b330c7ef69a8027e83f52563931f4b2afbf909.debug

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/b8/e8fe929f8bc0a086f1e595107deec9c4cfc03e.debug

Control files of package driftnet: lines which differ (wdiff format)

  • Depends: libc6 (>= 2.34), libcairo2 (>= 1.2.4), libgif7 (>= 5.1), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.8.0), 2.24.0), libjpeg62-turbo (>= 1.3.1), libpcap0.8 (>= 1.0.0), libpng16-16 (>= 1.6.2-1), libwebp7 (>= 1.2.4), libwebsockets17 (>= 2.4.1)

Control files of package driftnet-dbgsym: lines which differ (wdiff format)

  • Build-Ids: b8e8fe929f8bc0a086f1e595107deec9c4cfc03e a5b330c7ef69a8027e83f52563931f4b2afbf909

More details

Full run details