From dcd206abfd296f8cfacaa63987972e9e6a01ec44 Mon Sep 17 00:00:00 2001 From: Toni Uhlig Date: Wed, 12 Aug 2020 12:57:24 +0200 Subject: [PATCH] replaced deprecated pcap_lookupdev with pcap_findalldevs --- nDPId.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/nDPId.c b/nDPId.c index 9dd482489..90ae68e4c 100644 --- a/nDPId.c +++ b/nDPId.c @@ -232,7 +232,8 @@ static struct nDPId_workflow * init_workflow(char const * const file_or_device) if (workflow->pcap_handle == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "pcap_open_live / pcap_open_offline_with_tstamp_precision: %s", pcap_error_buffer); + syslog(LOG_DAEMON | LOG_ERR, "pcap_open_live / pcap_open_offline_with_tstamp_precision: %.*s", + (int)PCAP_ERRBUF_SIZE, pcap_error_buffer); free_workflow(&workflow); return NULL; } @@ -317,9 +318,25 @@ static void free_workflow(struct nDPId_workflow ** const workflow) *workflow = NULL; } +static char * get_default_pcapdev(char *errbuf) +{ + char * ifname; + pcap_if_t * all_devices = NULL; + + if (pcap_findalldevs(&all_devices, errbuf) != 0) + { + return NULL; + } + + ifname = strdup(all_devices[0].name); + pcap_freealldevs(all_devices); + + return ifname; +} + static int setup_reader_threads(char const * const file_or_device) { - char const * file_or_default_device; + char * file_or_default_device; char pcap_error_buffer[PCAP_ERRBUF_SIZE]; if (reader_thread_count > nDPId_MAX_READER_THREADS) @@ -329,16 +346,20 @@ static int setup_reader_threads(char const * const file_or_device) if (file_or_device == NULL) { - file_or_default_device = pcap_lookupdev(pcap_error_buffer); + file_or_default_device = get_default_pcapdev(pcap_error_buffer); if (file_or_default_device == NULL) { - syslog(LOG_DAEMON | LOG_ERR, "pcap_lookupdev: %s", pcap_error_buffer); + syslog(LOG_DAEMON | LOG_ERR, "pcap_lookupdev: %.*s", + (int) PCAP_ERRBUF_SIZE, pcap_error_buffer); return 1; } } else { - file_or_default_device = file_or_device; + file_or_default_device = strdup(file_or_device); + if (file_or_default_device == NULL) { + return 1; + } } for (int i = 0; i < reader_thread_count; ++i) @@ -346,10 +367,12 @@ static int setup_reader_threads(char const * const file_or_device) reader_threads[i].workflow = init_workflow(file_or_default_device); if (reader_threads[i].workflow == NULL) { + free(file_or_default_device); return 1; } } + free(file_or_default_device); return 0; }