aboutsummaryrefslogtreecommitdiffstats
path: root/main/nfdump
diff options
context:
space:
mode:
authorLeonardo Arena <rnalrd@alpinelinux.org>2016-05-19 09:23:47 +0000
committerLeonardo Arena <rnalrd@alpinelinux.org>2016-05-19 09:26:03 +0000
commit67d6ce49c6349f7f1316aca24ecbec22c5c2b444 (patch)
tree0b484ab821f6f29a77b70a56ac08454b3edc9c78 /main/nfdump
parent3f7f468646b60bd49dc0d33533086d15a2348692 (diff)
downloadaports-67d6ce49c6349f7f1316aca24ecbec22c5c2b444.tar.bz2
aports-67d6ce49c6349f7f1316aca24ecbec22c5c2b444.tar.xz
main/nfdump: fix security issue and shared libs
Diffstat (limited to 'main/nfdump')
-rw-r--r--main/nfdump/APKBUILD11
-rw-r--r--main/nfdump/fix-security-issues-in-netflow_v9-and-ipfix.patch680
-rw-r--r--main/nfdump/fix-shared-libs.patch604
3 files changed, 1294 insertions, 1 deletions
diff --git a/main/nfdump/APKBUILD b/main/nfdump/APKBUILD
index 8fe09ababb..e9db67b8e8 100644
--- a/main/nfdump/APKBUILD
+++ b/main/nfdump/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=nfdump
pkgver=1.6.14
-pkgrel=0
+pkgrel=1
pkgdesc="The nfdump tools collect and process netflow data on the command line."
url="http://nfdump.sourceforge.net/"
arch="all"
@@ -14,6 +14,8 @@ install=""
subpackages="$pkgname-doc $pkgname-dbg nfprofile sfcapd"
source="$pkgname-$pkgver.tar.gz::https://github.com/phaag/nfdump/archive/v$pkgver.tar.gz
fix-64bit-fts-compat.patch
+ fix-shared-libs.patch
+ fix-security-issues-in-netflow_v9-and-ipfix.patch
nfcapd.confd
nfcapd.initd
sfcapd.confd
@@ -39,6 +41,7 @@ build() {
--prefix=/usr \
--enable-nfprofile \
--enable-sflow \
+ --enable-shared \
|| return 1
make -j1 || return 1
}
@@ -74,18 +77,24 @@ sfcapd() {
md5sums="41fd9c3669455cdc05dd3917e13cc2f2 nfdump-1.6.14.tar.gz
e7f9467142159da5ebbb4aa858aae142 fix-64bit-fts-compat.patch
+be3bba5d4889960a5e5f8ab44b39f360 fix-shared-libs.patch
+6b3ce61436a209a2f46e46c80d8ae223 fix-security-issues-in-netflow_v9-and-ipfix.patch
541c45b9ac0e85ac955dd58919972b18 nfcapd.confd
a82001153dbdfa6c4125064fcc7cd090 nfcapd.initd
443ef11c9b458c12d0efea627742732c sfcapd.confd
1ac7c20be80b87fc725310747125e081 sfcapd.initd"
sha256sums="7bf1b17cdcf81c399c6aaf87e0a8cbe12d81a9e33831629eb3a792878d5f80b1 nfdump-1.6.14.tar.gz
8ffd9160bb5cb639cec08ac68be5cbd33ef918e41630d02c18a75e03881cb5a9 fix-64bit-fts-compat.patch
+abaa5461a96be24fae7b959aadc2d804ed5382382e92c260a9f0dc4acf14b8dd fix-shared-libs.patch
+39d1f37abee626863ad589439235d4e182eb9faf90bcbd0a75582aacee63a185 fix-security-issues-in-netflow_v9-and-ipfix.patch
7cb26698b26f5cd6c9c6cb2b49bb7be3cc0faffe851c5ac5c78e0a41984a276f nfcapd.confd
33c3b5c42655410661f1019e3b8bccb8b875400861a945a7dd784f80520f8a97 nfcapd.initd
4559669b23534a7bec9cc9d342e7abd55316393ccb4dc57e9b335ac27bdf920c sfcapd.confd
4fd63dee5323ce4116fffffa7573bb6a0f781d36867204e7d3670c182a078c56 sfcapd.initd"
sha512sums="c5e5540526dfce3798728930576e4c7930c3ff80893a94d7f9e65c7c577d1e78bdc47a99c47cee837327ad202197afc378d2408b1b9b847044d0110146055ffe nfdump-1.6.14.tar.gz
71a838d493658a3a8479bc9eca70a857fd8629937d4954d21c1d5453d6cc122c089f72e3e109425c902439ee8cfaa273b4089ac347d1fe926473ce6062b7c49a fix-64bit-fts-compat.patch
+29c2da71f139da273de221a5c4a07ceb6603060840dea9a34934316fe9a627b170540d1e3d9ed03b0d7ccf431171cb713ccd99aa82cdd3f8df9cf787a390e5d3 fix-shared-libs.patch
+ee3b82f1283f3dceb36cf60abcee7f5a8fb6c8fe257e2233c3fbb9a34b3c5608dfa101fd473c8b839356a9d1c294a37b9e65657ff1b2d5c015015ff90b2d2c97 fix-security-issues-in-netflow_v9-and-ipfix.patch
fcb467f819f2b73ac0e13de6de4d6c94cafd3866a7a56685d5d4a048fa975135299655e896ff8370c8c5061d03ab38644623f8be455c08dfe5f630f152820148 nfcapd.confd
97e432e884dd1cc8f27c2d7398bb0320164d46dea06c64ad72fa385d190998b3d62356634962f42652daf6e31f237baa2f3f3efad47c3fc38cc6bea799db61cc nfcapd.initd
abe594a95a9320bec1d6ee6af6b75cd4d176526d4b10d07aa7ed79fc292b51c341339ba8e1e468df9ec2aae138b1dd66e3a291921938217835ac33819da9d153 sfcapd.confd
diff --git a/main/nfdump/fix-security-issues-in-netflow_v9-and-ipfix.patch b/main/nfdump/fix-security-issues-in-netflow_v9-and-ipfix.patch
new file mode 100644
index 0000000000..b16dba0ff0
--- /dev/null
+++ b/main/nfdump/fix-security-issues-in-netflow_v9-and-ipfix.patch
@@ -0,0 +1,680 @@
+From ff0e855bd1f51bed9fc5d8559c64d3cfb475a5d8 Mon Sep 17 00:00:00 2001
+From: Peter Haag <peter@Peters-Mac.local>
+Date: Sat, 7 May 2016 08:35:34 +0200
+Subject: [PATCH] Fix security issues in netflow_v9.c and ipfix.c
+
+---
+ bin/ipfix.c | 88 +++++++++++++++++++++++++++++++++++---------------------
+ bin/netflow_v9.c | 81 +++++++++++++++++++++++++++------------------------
+ 2 files changed, 98 insertions(+), 71 deletions(-)
+
+diff --git a/bin/ipfix.c b/bin/ipfix.c
+index ba071ea..f998b72 100644
+--- a/bin/ipfix.c
++++ b/bin/ipfix.c
+@@ -42,7 +42,6 @@
+ #include <sys/socket.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+-#include <syslog.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <time.h>
+@@ -322,7 +321,7 @@ int i;
+ cache.lookup_info = (struct element_param_s *)calloc(65536, sizeof(struct element_param_s));
+ cache.common_extensions = (uint32_t *)malloc((Max_num_extensions+1)*sizeof(uint32_t));
+ if ( !cache.common_extensions || !cache.lookup_info ) {
+- syslog(LOG_ERR, "Process_ipfix: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError("Process_ipfix: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return 0;
+ }
+
+@@ -336,7 +335,7 @@ int i;
+ }
+ cache.max_ipfix_elements = i;
+
+- syslog(LOG_DEBUG,"Init IPFIX: Max number of IPFIX tags: %u", cache.max_ipfix_elements);
++ LogError("Init IPFIX: Max number of IPFIX tags: %u", cache.max_ipfix_elements);
+
+ return 1;
+
+@@ -370,7 +369,7 @@ uint32_t ObservationDomain = ntohl(ipfix_header->ObservationDomain);
+ // nothing found
+ *e = (exporter_ipfix_domain_t *)malloc(sizeof(exporter_ipfix_domain_t));
+ if ( !(*e)) {
+- syslog(LOG_ERR, "Process_ipfix: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError("Process_ipfix: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ memset((void *)(*e), 0, sizeof(exporter_ipfix_domain_t));
+@@ -392,7 +391,7 @@ uint32_t ObservationDomain = ntohl(ipfix_header->ObservationDomain);
+
+ dbg_printf("[%u] New exporter: SysID: %u, Observation domain %u from: %s\n",
+ ObservationDomain, (*e)->info.sysid, ObservationDomain, ipstr);
+- syslog(LOG_INFO, "Process_ipfix: New exporter: SysID: %u, Observation domain %u from: %s\n",
++ LogInfo("Process_ipfix: New exporter: SysID: %u, Observation domain %u from: %s\n",
+ (*e)->info.sysid, ObservationDomain, ipstr);
+
+
+@@ -460,12 +459,12 @@ input_translation_t **table;
+ // so template refreshing may change the table size without danger of overflowing
+ *table = calloc(1, sizeof(input_translation_t));
+ if ( !(*table) ) {
+- syslog(LOG_ERR, "Process_ipfix: Panic! calloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError("Process_ipfix: Panic! calloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ (*table)->sequence = calloc(cache.max_ipfix_elements, sizeof(sequence_map_t));
+ if ( !(*table)->sequence ) {
+- syslog(LOG_ERR, "Process_ipfix: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError("Process_ipfix: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+
+@@ -481,7 +480,7 @@ input_translation_t **table;
+ static void remove_translation_table(FlowSource_t *fs, exporter_ipfix_domain_t *exporter, uint16_t id) {
+ input_translation_t *table, *parent;
+
+- syslog(LOG_INFO, "Process_ipfix: [%u] Withdraw template id: %i",
++ LogInfo("Process_ipfix: [%u] Withdraw template id: %i",
+ exporter->info.id, id);
+
+ parent = NULL;
+@@ -492,7 +491,7 @@ input_translation_t *table, *parent;
+ }
+
+ if ( table == NULL ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] Withdraw template id: %i. translation table not found",
++ LogError("Process_ipfix: [%u] Withdraw template id: %i. translation table not found",
+ exporter->info.id, id);
+ return;
+ }
+@@ -521,7 +520,7 @@ input_translation_t *table, *parent;
+ static void remove_all_translation_tables(exporter_ipfix_domain_t *exporter) {
+ input_translation_t *table, *next;
+
+- syslog(LOG_INFO, "Process_ipfix: Withdraw all templates from observation domain %u\n",
++ LogInfo("Process_ipfix: Withdraw all templates from observation domain %u\n",
+ exporter->info.id);
+
+ table = exporter->input_translation_table;
+@@ -548,7 +547,7 @@ uint32_t i = table->number_of_sequences;
+ uint32_t index = cache.lookup_info[Type].index;
+
+ if ( table->number_of_sequences >= cache.max_ipfix_elements ) {
+- syslog(LOG_ERR, "Process_ipfix: Software bug! Sequence table full. at %s line %d",
++ LogError("Process_ipfix: Software bug! Sequence table full. at %s line %d",
+ __FILE__, __LINE__);
+ dbg_printf("Software bug! Sequence table full. at %s line %d",
+ __FILE__, __LINE__);
+@@ -584,7 +583,7 @@ size_t size_required;
+
+ table = GetTranslationTable(exporter, id);
+ if ( !table ) {
+- syslog(LOG_INFO, "Process_ipfix: [%u] Add template %u", exporter->info.id, id);
++ LogInfo("Process_ipfix: [%u] Add template %u", exporter->info.id, id);
+ table = add_translation_table(exporter, id);
+ if ( !table ) {
+ return NULL;
+@@ -597,7 +596,7 @@ size_t size_required;
+ size_required = (size_required + 3) &~(size_t)3;
+ extension_map = malloc(size_required);
+ if ( !extension_map ) {
+- syslog(LOG_ERR, "Process_ipfix: Panic! malloc() error in %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError("Process_ipfix: Panic! malloc() error in %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ extension_map->type = ExtensionMapType;
+@@ -912,6 +911,13 @@ uint16_t Offset = 0;
+ // a template flowset can contain multiple records ( templates )
+ while ( size_left ) {
+
++ if ( size_left && size_left < 4 ) {
++ LogError("Process_ipfix [%u] Template size error at %s line %u" ,
++ exporter->info.id, __FILE__, __LINE__, strerror (errno));
++ size_left = 0;
++ continue;
++ }
++
+ // clear helper tables
+ memset((void *)cache.common_extensions, 0, (Max_num_extensions+1)*sizeof(uint32_t));
+ memset((void *)cache.lookup_info, 0, 65536 * sizeof(struct element_param_s));
+@@ -940,7 +946,7 @@ uint16_t Offset = 0;
+ size_required = 4*count;
+ if ( size_left < size_required ) {
+ // if we fail this check, this flowset must be skipped.
+- syslog(LOG_ERR, "Process_ipfix: [%u] Not enough data for template elements! required: %i, left: %u",
++ LogError("Process_ipfix: [%u] Not enough data for template elements! required: %i, left: %u",
+ exporter->info.id, size_required, size_left);
+ dbg_printf("ERROR: Not enough data for template elements! required: %i, left: %u", size_required, size_left);
+ return;
+@@ -974,7 +980,7 @@ uint16_t Offset = 0;
+ ipfix_template_elements_e_t *e = (ipfix_template_elements_e_t *)NextElement;
+ size_required += 4; // ad 4 for enterprise value
+ if ( size_left < size_required ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] Not enough data for template elements! required: %i, left: %u",
++ LogError("Process_ipfix: [%u] Not enough data for template elements! required: %i, left: %u",
+ exporter->info.id, size_required, size_left);
+ dbg_printf("ERROR: Not enough data for template elements! required: %i, left: %u", size_required, size_left);
+ return;
+@@ -1097,7 +1103,7 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ i = 0; // keep compiler happy
+ size_left = GET_FLOWSET_LENGTH(option_template_flowset) - 4; // -4 for flowset header -> id and length
+ if ( size_left < 6 ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] option template length error: size left %u too small for an options template",
++ LogError("Process_ipfix: [%u] option template length error: size left %u too small for an options template",
+ exporter->info.id, size_left);
+ return;
+ }
+@@ -1110,16 +1116,16 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ size_left -= 6;
+
+ if ( scope_field_count == 0 ) {
+- syslog(LOG_ERR, "Process_ipfx: [%u] scope field count error: length must not be zero",
++ LogError("Process_ipfx: [%u] scope field count error: length must not be zero",
+ exporter->info.id);
+ dbg_printf("scope field count error: length must not be zero\n");
+ return;
+ }
+
+- size_required = field_count * 2 * sizeof(uint16_t);
++ size_required = (field_count + scope_field_count) * 2 * sizeof(uint16_t);
+ dbg_printf("Size left: %u, size required: %u\n", size_left, size_required);
+ if ( size_left < size_required ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
++ LogError("Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
+ exporter->info.id, size_left, field_count, scope_field_count);
+ dbg_printf("option template length error: size left %u too small for field_count %u\n",
+ size_left, field_count);
+@@ -1130,7 +1136,7 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ id, field_count, scope_field_count);
+
+ if ( scope_field_count == 0 ) {
+- syslog(LOG_ERR, "Process_ipfxi: [%u] scope field count error: length must not be zero",
++ LogError("Process_ipfxi: [%u] scope field count error: length must not be zero",
+ exporter->info.id);
+ return;
+ }
+@@ -1140,14 +1146,20 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ uint16_t id, length;
+ int Enterprise;
+
++ if ( size_left && size_left < 4 ) {
++ LogError("Process_ipfix [%u] Template size error at %s line %u" ,
++ exporter->info.id, __FILE__, __LINE__, strerror (errno));
++ return;
++ }
+ id = Get_val16(DataPtr); DataPtr += 2;
+ length = Get_val16(DataPtr); DataPtr += 2;
++ size_left -= 4;
+ Enterprise = id & 0x8000 ? 1 : 0;
+ if ( Enterprise ) {
+ size_required += 4;
+ dbg_printf("Adjusted: Size left: %u, size required: %u\n", size_left, size_required);
+ if ( size_left < size_required ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
++ LogError("Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
+ exporter->info.id, size_left, field_count, scope_field_count);
+ dbg_printf("option template length error: size left %u too small for field_count %u\n",
+ size_left, field_count);
+@@ -1155,6 +1167,7 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ }
+ enterprise_value = Get_val32(DataPtr);
+ DataPtr += 4;
++ size_left -= 4;
+ dbg_printf(" [%i] Enterprise: 1, scope id: %u, scope length %u enterprise value: %u\n",
+ i, id, length, enterprise_value);
+ } else {
+@@ -1168,12 +1181,13 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+
+ id = Get_val16(DataPtr); DataPtr += 2;
+ length = Get_val16(DataPtr); DataPtr += 2;
++ size_left -= 4;
+ Enterprise = id & 0x8000 ? 1 : 0;
+ if ( Enterprise ) {
+ size_required += 4;
+ dbg_printf("Adjusted: Size left: %u, size required: %u\n", size_left, size_required);
+ if ( size_left < size_required ) {
+- syslog(LOG_ERR, "Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
++ LogError("Process_ipfix: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
+ exporter->info.id, size_left, field_count, scope_field_count);
+ dbg_printf("option template length error: size left %u too small for field_count %u\n",
+ size_left, field_count);
+@@ -1181,6 +1195,7 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ }
+ enterprise_value = Get_val32(DataPtr);
+ DataPtr += 4;
++ size_left -= 4;
+ dbg_printf(" [%i] Enterprise: 1, option id: %u, option length %u enterprise value: %u\n",
+ i, id, length, enterprise_value);
+ } else {
+@@ -1300,7 +1315,7 @@ char *string;
+
+ if ( (size_left < table->input_record_size) ) {
+ if ( size_left > 3 ) {
+- syslog(LOG_WARNING,"Process_ipfix: Corrupt data flowset? Pad bytes: %u", size_left);
++ LogError("Process_ipfix: Corrupt data flowset? Pad bytes: %u", size_left);
+ dbg_printf("Process_ipfix: Corrupt data flowset? Pad bytes: %u, table record_size: %u\n",
+ size_left, table->input_record_size);
+ }
+@@ -1311,7 +1326,7 @@ char *string;
+ // check for enough space in output buffer
+ if ( !CheckBufferSpace(fs->nffile, table->output_record_size) ) {
+ // this should really never occur, because the buffer gets flushed ealier
+- syslog(LOG_ERR,"Process_ipfix: output buffer size error. Abort ipfix record processing");
++ LogError("Process_ipfix: output buffer size error. Abort ipfix record processing");
+ dbg_printf("Process_ipfix: output buffer size error. Abort ipfix record processing");
+ return;
+ }
+@@ -1455,7 +1470,7 @@ char *string;
+ break;
+
+ default:
+- syslog(LOG_ERR, "Process_ipfix: Software bug! Unknown Sequence: %u. at %s line %d",
++ LogError("Process_ipfix: Software bug! Unknown Sequence: %u. at %s line %d",
+ table->sequence[i].id, __FILE__, __LINE__);
+ dbg_printf("Software bug! Unknown Sequence: %u. at %s line %d\n",
+ table->sequence[i].id, __FILE__, __LINE__);
+@@ -1587,9 +1602,9 @@ char *string;
+ // buffer size sanity check
+ if ( fs->nffile->block_header->size > BUFFSIZE ) {
+ // should never happen
+- syslog(LOG_ERR,"### Software error ###: %s line %d", __FILE__, __LINE__);
+- syslog(LOG_ERR,"Process ipfix: Output buffer overflow! Flush buffer and skip records.");
+- syslog(LOG_ERR,"Buffer size: %u > %u", fs->nffile->block_header->size, BUFFSIZE);
++ LogError("### Software error ###: %s line %d", __FILE__, __LINE__);
++ LogError("Process ipfix: Output buffer overflow! Flush buffer and skip records.");
++ LogError("Buffer size: %u > %u", fs->nffile->block_header->size, BUFFSIZE);
+
+ // reset buffer
+ fs->nffile->block_header->size = 0;
+@@ -1614,7 +1629,7 @@ static uint32_t packet_cntr = 0;
+
+ size_left = in_buff_cnt;
+ if ( size_left < IPFIX_HEADER_LENGTH ) {
+- syslog(LOG_ERR, "Process_ipfix: Too little data for ipfix packet: '%lli'", (long long)size_left);
++ LogError("Process_ipfix: Too little data for ipfix packet: '%lli'", (long long)size_left);
+ return;
+ }
+
+@@ -1625,7 +1640,7 @@ static uint32_t packet_cntr = 0;
+
+ exporter = GetExporter(fs, ipfix_header);
+ if ( !exporter ) {
+- syslog(LOG_ERR,"Process_ipfix: Exporter NULL: Abort ipfix record processing");
++ LogError("Process_ipfix: Exporter NULL: Abort ipfix record processing");
+ return;
+ }
+ exporter->packets++;
+@@ -1665,6 +1680,13 @@ static uint32_t packet_cntr = 0;
+ while (size_left) {
+ uint16_t flowset_id;
+
++ if ( size_left && size_left < 4 ) {
++ LogError("Process_ipfix [%u] Template size error at %s line %u" ,
++ exporter->info.id, __FILE__, __LINE__, strerror (errno));
++ size_left = 0;
++ continue;
++ }
++
+ flowset_header = flowset_header + flowset_length;
+
+ flowset_id = GET_FLOWSET_ID(flowset_header);
+@@ -1677,7 +1699,7 @@ static uint32_t packet_cntr = 0;
+ and smaller is an illegal flowset anyway ...
+ if it happends, we can't determine the next flowset, so skip the entire export packet
+ */
+- syslog(LOG_ERR,"Process_ipfix: flowset zero length error.");
++ LogError("Process_ipfix: flowset zero length error.");
+ dbg_printf("Process_ipfix: flowset zero length error.\n");
+ return;
+
+@@ -1690,7 +1712,7 @@ static uint32_t packet_cntr = 0;
+ }
+
+ if ( flowset_length > size_left ) {
+- syslog(LOG_ERR,"Process_ipfix: flowset length error. Expected bytes: %u > buffersize: %lli",
++ LogError("Process_ipfix: flowset length error. Expected bytes: %u > buffersize: %lli",
+ flowset_length, (long long)size_left);
+ size_left = 0;
+ continue;
+@@ -1713,7 +1735,7 @@ static uint32_t packet_cntr = 0;
+ default: {
+ if ( flowset_id < IPFIX_MIN_RECORD_FLOWSET_ID ) {
+ dbg_printf("Invalid flowset id: %u. Skip flowset\n", flowset_id);
+- syslog(LOG_ERR,"Process_ipfix: Invalid flowset id: %u. Skip flowset", flowset_id);
++ LogError("Process_ipfix: Invalid flowset id: %u. Skip flowset", flowset_id);
+ } else {
+ input_translation_t *table;
+ dbg_printf("Process data flowset, length: %u\n", flowset_length);
+diff --git a/bin/netflow_v9.c b/bin/netflow_v9.c
+index 1264ee3..55386c7 100644
+--- a/bin/netflow_v9.c
++++ b/bin/netflow_v9.c
+@@ -43,7 +43,6 @@
+ #include <sys/socket.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+-#include <syslog.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <time.h>
+@@ -451,7 +450,7 @@ int i;
+ cache.lookup_info = (struct element_param_s *)calloc(65536, sizeof(struct element_param_s));
+ cache.common_extensions = (uint32_t *)malloc((Max_num_extensions+1)*sizeof(uint32_t));
+ if ( !cache.common_extensions || !cache.lookup_info ) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return 0;
+ }
+
+@@ -465,7 +464,7 @@ int i;
+ }
+ cache.max_v9_elements = i;
+
+- syslog(LOG_DEBUG,"Init v9: Max number of v9 tags: %u", cache.max_v9_elements);
++ dbg_printf("Init v9: Max number of v9 tags: %u", cache.max_v9_elements);
+
+
+ return 1;
+@@ -499,7 +498,7 @@ exporter_v9_domain_t **e = (exporter_v9_domain_t **)&(fs->exporter_data);
+ // nothing found
+ *e = (exporter_v9_domain_t *)malloc(sizeof(exporter_v9_domain_t));
+ if ( !(*e)) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ memset((void *)(*e), 0, sizeof(exporter_v9_domain_t));
+@@ -521,7 +520,7 @@ exporter_v9_domain_t **e = (exporter_v9_domain_t **)&(fs->exporter_data);
+
+ dbg_printf("Process_v9: New exporter: SysID: %u, Domain: %u, IP: %s\n",
+ (*e)->info.sysid, exporter_id, ipstr);
+- syslog(LOG_INFO, "Process_v9: New exporter: SysID: %u, Domain: %u, IP: %s\n",
++ LogInfo("Process_v9: New exporter: SysID: %u, Domain: %u, IP: %s\n",
+ (*e)->info.sysid, exporter_id, ipstr);
+
+
+@@ -591,12 +590,12 @@ input_translation_t **table;
+ // so template refreshing may change the table size without danger of overflowing
+ *table = calloc(1, sizeof(input_translation_t));
+ if ( !(*table) ) {
+- syslog(LOG_ERR, "Process_v9: Panic! calloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! calloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ (*table)->sequence = calloc(cache.max_v9_elements, sizeof(sequence_map_t));
+ if ( !(*table)->sequence ) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc() %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+
+@@ -614,7 +613,7 @@ uint32_t i = table->number_of_sequences;
+ uint32_t index = cache.lookup_info[Type].index;
+
+ if ( table->number_of_sequences >= cache.max_v9_elements ) {
+- syslog(LOG_ERR, "Process_v9: Software bug! Sequence table full. at %s line %d",
++ LogError( "Process_v9: Software bug! Sequence table full. at %s line %d",
+ __FILE__, __LINE__);
+ dbg_printf("Software bug! Sequence table full. at %s line %d",
+ __FILE__, __LINE__);
+@@ -656,7 +655,7 @@ size_t size_required;
+
+ table = GetTranslationTable(exporter, id);
+ if ( !table ) {
+- syslog(LOG_INFO, "Process_v9: [%u] Add template %u", exporter->info.id, id);
++ LogInfo( "Process_v9: [%u] Add template %u", exporter->info.id, id);
+ dbg_printf("[%u] Add template %u\n", exporter->info.id, id);
+ table = add_translation_table(exporter, id);
+ if ( !table ) {
+@@ -670,7 +669,7 @@ size_t size_required;
+ size_required = (size_required + 3) &~(size_t)3;
+ extension_map = malloc(size_required);
+ if ( !extension_map ) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc() error in %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc() error in %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return NULL;
+ }
+ extension_map->type = ExtensionMapType;
+@@ -1099,7 +1098,7 @@ size_t size_required;
+ dbg_printf("%d byte Sampling ID included at offset %u\n", length, table->sampler_offset);
+ break;
+ default:
+- syslog(LOG_ERR, "Process_v9: Unexpected SAMPLER ID field length: %d",
++ LogError( "Process_v9: Unexpected SAMPLER ID field length: %d",
+ cache.lookup_info[NF9_FLOW_SAMPLER_ID].length);
+ dbg_printf("Unexpected SAMPLER ID field length: %d",
+ cache.lookup_info[NF9_FLOW_SAMPLER_ID].length);
+@@ -1189,7 +1188,7 @@ option_offset_t **t;
+ fprintf(stderr, "malloc() allocation error: %s\n", strerror(errno));
+ return ;
+ }
+- syslog(LOG_ERR, "Process_v9: New std sampler: interval: %i, algorithm: %i",
++ LogError( "Process_v9: New std sampler: interval: %i, algorithm: %i",
+ offset_std_sampler_interval, offset_std_sampler_algorithm);
+ } // else existing table
+
+@@ -1240,7 +1239,7 @@ int i;
+ dbg_printf("template size: %u buffersize: %u\n", size_required, size_left);
+
+ if ( size_left < size_required ) {
+- syslog(LOG_ERR, "Process_v9: [%u] buffer size error: expected %u available %u",
++ LogError( "Process_v9: [%u] buffer size error: expected %u available %u",
+ exporter->info.id, size_required, size_left);
+ size_left = 0;
+ continue;
+@@ -1348,19 +1347,19 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ option_length = GET_OPTION_TEMPLATE_OPTION_LENGTH(option_template);
+
+ if ( scope_length & 0x3 ) {
+- syslog(LOG_ERR, "Process_v9: [%u] scope length error: length %u not multiple of 4",
++ LogError( "Process_v9: [%u] scope length error: length %u not multiple of 4",
+ exporter->info.id, scope_length);
+ return;
+ }
+
+ if ( option_length & 0x3 ) {
+- syslog(LOG_ERR, "Process_v9: [%u] option length error: length %u not multiple of 4",
++ LogError( "Process_v9: [%u] option length error: length %u not multiple of 4",
+ exporter->info.id, option_length);
+ return;
+ }
+
+ if ( (scope_length + option_length) > size_left ) {
+- syslog(LOG_ERR, "Process_v9: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
++ LogError( "Process_v9: [%u] option template length error: size left %u too small for %u scopes length and %u options length",
+ exporter->info.id, size_left, scope_length, option_length);
+ return;
+ }
+@@ -1410,7 +1409,7 @@ uint16_t offset_std_sampler_interval, offset_std_sampler_algorithm, found_std_sa
+ }
+
+ if ( index && v9_element_map[index].length != length ) {
+- syslog(LOG_ERR,"Process_v9: Option field Type: %u, length %u not supported\n", type, length);
++ LogError("Process_v9: Option field Type: %u, length %u not supported\n", type, length);
+ dbg_printf("Process_v9: Option field Type: %u, length %u not supported\n", type, length);
+ continue;
+ }
+@@ -1529,9 +1528,15 @@ char *string;
+ while (size_left) {
+ common_record_t *data_record;
+
++ if ( (table->input_record_size == 0 )) {
++ LogError("Process_v9: Corrupt data flowset? table input_record_sizei = 0 ");
++ size_left = 0;
++ continue;
++ }
++
+ if ( (size_left < table->input_record_size) ) {
+ if ( size_left > 3 ) {
+- syslog(LOG_WARNING,"Process_v9: Corrupt data flowset? Pad bytes: %u", size_left);
++ LogError("Process_v9: Corrupt data flowset? Pad bytes: %u", size_left);
+ dbg_printf("Process_v9: Corrupt data flowset? Pad bytes: %u, table record_size: %u\n",
+ size_left, table->input_record_size);
+ }
+@@ -1542,7 +1547,7 @@ char *string;
+ // check for enough space in output buffer
+ if ( !CheckBufferSpace(fs->nffile, table->output_record_size) ) {
+ // this should really never occur, because the buffer gets flushed ealier
+- syslog(LOG_ERR,"Process_v9: output buffer size error. Abort v9 record processing");
++ LogError("Process_v9: output buffer size error. Abort v9 record processing");
+ dbg_printf("Process_v9: output buffer size error. Abort v9 record processing");
+ return;
+ }
+@@ -1738,7 +1743,7 @@ char *string;
+ *((uint32_t *)&out[output_offset+12]) = 0;
+ } break;
+ default:
+- syslog(LOG_ERR, "Process_v9: Software bug! Unknown Sequence: %u. at %s line %d",
++ LogError( "Process_v9: Software bug! Unknown Sequence: %u. at %s line %d",
+ table->sequence[i].id, __FILE__, __LINE__);
+ dbg_printf("Software bug! Unknown Sequence: %u. at %s line %d",
+ table->sequence[i].id, __FILE__, __LINE__);
+@@ -1936,9 +1941,9 @@ char *string;
+ // buffer size sanity check
+ if ( fs->nffile->block_header->size > BUFFSIZE ) {
+ // should never happen
+- syslog(LOG_ERR,"### Software error ###: %s line %d", __FILE__, __LINE__);
+- syslog(LOG_ERR,"Process v9: Output buffer overflow! Flush buffer and skip records.");
+- syslog(LOG_ERR,"Buffer size: %u > %u", fs->nffile->block_header->size, BUFFSIZE);
++ LogError("### Software error ###: %s line %d", __FILE__, __LINE__);
++ LogError("Process v9: Output buffer overflow! Flush buffer and skip records.");
++ LogError("Buffer size: %u > %u", fs->nffile->block_header->size, BUFFSIZE);
+
+ // reset buffer
+ fs->nffile->block_header->size = 0;
+@@ -1963,7 +1968,7 @@ uint8_t *in;
+
+ if ( !offset_table ) {
+ // should never happen - catch it anyway
+- syslog(LOG_ERR, "Process_v9: Panic! - No Offset table found! : %s line %d", __FILE__, __LINE__);
++ LogError( "Process_v9: Panic! - No Offset table found! : %s line %d", __FILE__, __LINE__);
+ return;
+ }
+
+@@ -2007,7 +2012,7 @@ uint8_t *in;
+ dbg_printf("Sampler algorithm: %u\n", mode);
+ dbg_printf("Sampler interval : %u\n", interval);
+
+- syslog(LOG_INFO, "Set std sampler: algorithm: %u, interval: %u\n",
++ LogInfo( "Set std sampler: algorithm: %u, interval: %u\n",
+ mode, interval);
+ dbg_printf("Set std sampler: algorithm: %u, interval: %u\n",
+ mode, interval);
+@@ -2029,7 +2034,7 @@ static int pkg_num = 0;
+ pkg_num++;
+ size_left = in_buff_cnt;
+ if ( size_left < NETFLOW_V9_HEADER_LENGTH ) {
+- syslog(LOG_ERR, "Process_v9: Too little data for v9 packet: '%lli'", (long long)size_left);
++ LogError( "Process_v9: Too little data for v9 packet: '%lli'", (long long)size_left);
+ return;
+ }
+
+@@ -2039,7 +2044,7 @@ static int pkg_num = 0;
+
+ exporter = GetExporter(fs, exporter_id);
+ if ( !exporter ) {
+- syslog(LOG_ERR,"Process_v9: Exporter NULL: Abort v9 record processing");
++ LogError("Process_v9: Exporter NULL: Abort v9 record processing");
+ return;
+ }
+ exporter->packets++;
+@@ -2078,7 +2083,7 @@ static int pkg_num = 0;
+ exporter->info.id, (long long)exporter->last_sequence, (long long)exporter->sequence, (long long)distance);
+ /*
+ if ( report_seq )
+- syslog(LOG_ERR,"Flow sequence mismatch. Missing: %lli packets", delta(last_count,distance));
++ LogError("Flow sequence mismatch. Missing: %lli packets", delta(last_count,distance));
+ */
+ }
+ }
+@@ -2102,7 +2107,7 @@ static int pkg_num = 0;
+ and smaller is an illegal flowset anyway ...
+ if it happends, we can't determine the next flowset, so skip the entire export packet
+ */
+- syslog(LOG_ERR,"Process_v9: flowset zero length error.");
++ LogError("Process_v9: flowset zero length error.");
+ dbg_printf("Process_v9: flowset zero length error.\n");
+ return;
+ }
+@@ -2116,7 +2121,7 @@ static int pkg_num = 0;
+ if ( flowset_length > size_left ) {
+ dbg_printf("flowset length error. Expected bytes: %u > buffersize: %lli",
+ flowset_length, (long long)size_left);
+- syslog(LOG_ERR,"Process_v9: flowset length error. Expected bytes: %u > buffersize: %lli",
++ LogError("Process_v9: flowset length error. Expected bytes: %u > buffersize: %lli",
+ flowset_length, (long long)size_left);
+ size_left = 0;
+ continue;
+@@ -2135,14 +2140,14 @@ static int pkg_num = 0;
+ break;
+ case NF9_OPTIONS_FLOWSET_ID:
+ option_flowset = (option_template_flowset_t *)flowset_header;
+- syslog(LOG_DEBUG,"Process_v9: Found options flowset: template %u", ntohs(option_flowset->template_id));
++ dbg_printf("Process_v9: Found options flowset: template %u", ntohs(option_flowset->template_id));
+ Process_v9_option_templates(exporter, flowset_header, fs);
+ break;
+ default: {
+ input_translation_t *table;
+ if ( flowset_id < NF9_MIN_RECORD_FLOWSET_ID ) {
+ dbg_printf("Invalid flowset id: %u\n", flowset_id);
+- syslog(LOG_ERR,"Process_v9: Invalid flowset id: %u", flowset_id);
++ LogError("Process_v9: Invalid flowset id: %u", flowset_id);
+ } else {
+
+ dbg_printf("[%u] ID %u Data flowset\n", exporter->info.id, flowset_id);
+@@ -2168,7 +2173,7 @@ static int pkg_num = 0;
+
+ #ifdef DEVEL
+ if ( processed_records != expected_records ) {
+- syslog(LOG_ERR, "Process_v9: Processed records %u, expected %u", processed_records, expected_records);
++ LogError( "Process_v9: Processed records %u, expected %u", processed_records, expected_records);
+ printf("Process_v9: Processed records %u, expected %u\n", processed_records, expected_records);
+ }
+ #endif
+@@ -2990,7 +2995,7 @@ generic_sampler_t *sampler;
+ // no samplers so far
+ sampler = (generic_sampler_t *)malloc(sizeof(generic_sampler_t));
+ if ( !sampler ) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return;
+ }
+
+@@ -3004,7 +3009,7 @@ generic_sampler_t *sampler;
+ exporter->sampler = sampler;
+
+ FlushInfoSampler(fs, &(sampler->info));
+- syslog(LOG_INFO, "Add new sampler: ID: %i, mode: %u, interval: %u\n",
++ LogInfo( "Add new sampler: ID: %i, mode: %u, interval: %u\n",
+ id, mode, interval);
+ dbg_printf("Add new sampler: ID: %i, mode: %u, interval: %u\n",
+ id, mode, interval);
+@@ -3015,7 +3020,7 @@ generic_sampler_t *sampler;
+ // test for update of existing sampler
+ if ( sampler->info.id == id ) {
+ // found same sampler id - update record
+- syslog(LOG_INFO, "Update existing sampler id: %i, mode: %u, interval: %u\n",
++ LogInfo( "Update existing sampler id: %i, mode: %u, interval: %u\n",
+ id, mode, interval);
+ dbg_printf("Update existing sampler id: %i, mode: %u, interval: %u\n",
+ id, mode, interval);
+@@ -3037,7 +3042,7 @@ generic_sampler_t *sampler;
+ // end of sampler chain - insert new sampler
+ sampler->next = (generic_sampler_t *)malloc(sizeof(generic_sampler_t));
+ if ( !sampler->next ) {
+- syslog(LOG_ERR, "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
++ LogError( "Process_v9: Panic! malloc(): %s line %d: %s", __FILE__, __LINE__, strerror (errno));
+ return;
+ }
+ sampler = sampler->next;
+@@ -3053,7 +3058,7 @@ generic_sampler_t *sampler;
+ FlushInfoSampler(fs, &(sampler->info));
+
+
+- syslog(LOG_INFO, "Append new sampler: ID: %u, mode: %u, interval: %u\n",
++ LogInfo( "Append new sampler: ID: %u, mode: %u, interval: %u\n",
+ id, mode, interval);
+ dbg_printf("Append new sampler: ID: %u, mode: %u, interval: %u\n",
+ id, mode, interval);
diff --git a/main/nfdump/fix-shared-libs.patch b/main/nfdump/fix-shared-libs.patch
new file mode 100644
index 0000000000..d636c2118a
--- /dev/null
+++ b/main/nfdump/fix-shared-libs.patch
@@ -0,0 +1,604 @@
+From aeb703c7622da7f66d5d609a8aa88f1c11df6bdd Mon Sep 17 00:00:00 2001
+From: Peter Haag <peter@Peters-Mac.local>
+Date: Fri, 6 May 2016 15:06:08 +0200
+Subject: [PATCH] Fix shared library build issue. --enable-shared=no and yes
+ are honored correctly.
+
+---
+ autom4te.cache/requests | 468 ++++++++++++++++++++++++------------------------
+ bin/Makefile.am | 2 +-
+ bin/Makefile.in | 2 +-
+ bin/pcap_reader.c | 7 +
+ 4 files changed, 243 insertions(+), 236 deletions(-)
+
+diff --git a/autom4te.cache/requests b/autom4te.cache/requests
+index fd25b66..986b741 100644
+--- a/autom4te.cache/requests
++++ b/autom4te.cache/requests
+@@ -34,47 +34,47 @@
+ 'configure.ac'
+ ],
+ {
+- 'AC_CONFIG_MACRO_DIR' => 1,
+- 'AC_DEFUN_ONCE' => 1,
+- '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+- 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+- 'AM_SET_DEPDIR' => 1,
+- '_AM_SET_OPTIONS' => 1,
+- '_AM_CONFIG_MACRO_DIRS' => 1,
++ '_m4_warn' => 1,
++ '_AM_PROG_CC_C_O' => 1,
++ 'AM_DEP_TRACK' => 1,
++ '_AM_AUTOCONF_VERSION' => 1,
+ '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+- 'AM_PROG_INSTALL_STRIP' => 1,
+ '_AM_SUBST_NOTMAKE' => 1,
+- 'AM_RUN_LOG' => 1,
++ 'include' => 1,
++ 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
++ 'AU_DEFUN' => 1,
++ 'm4_pattern_forbid' => 1,
++ 'AM_PROG_INSTALL_STRIP' => 1,
+ '_AM_SET_OPTION' => 1,
+- 'AM_SET_LEADING_DOT' => 1,
+- 'AM_AUX_DIR_EXPAND' => 1,
+- 'AM_SILENT_RULES' => 1,
+- 'AM_MISSING_HAS_RUN' => 1,
+- 'AM_PROG_INSTALL_SH' => 1,
+- 'AM_PROG_CC_C_O' => 1,
++ 'AM_SANITY_CHECK' => 1,
++ 'AC_DEFUN_ONCE' => 1,
++ 'AM_AUTOMAKE_VERSION' => 1,
+ 'AM_MISSING_PROG' => 1,
+- 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+- '_m4_warn' => 1,
+- 'AM_INIT_AUTOMAKE' => 1,
+- 'm4_include' => 1,
+- '_AM_PROG_CC_C_O' => 1,
+- 'AC_DEFUN' => 1,
+- '_AM_DEPENDENCIES' => 1,
+ '_AM_PROG_TAR' => 1,
+- 'AM_DEP_TRACK' => 1,
+- 'AM_AUTOMAKE_VERSION' => 1,
+ 'AM_MAKE_INCLUDE' => 1,
+- '_AM_AUTOCONF_VERSION' => 1,
+- 'm4_pattern_forbid' => 1,
++ 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
++ '_AM_SET_OPTIONS' => 1,
++ '_AM_DEPENDENCIES' => 1,
++ 'AM_AUX_DIR_EXPAND' => 1,
++ '_AC_AM_CONFIG_HEADER_HOOK' => 1,
++ 'm4_include' => 1,
++ 'AM_INIT_AUTOMAKE' => 1,
++ 'AM_PROG_INSTALL_SH' => 1,
++ 'AM_SILENT_RULES' => 1,
++ 'AM_RUN_LOG' => 1,
++ '_AM_MANGLE_OPTION' => 1,
++ '_AM_IF_OPTION' => 1,
+ 'AM_SUBST_NOTMAKE' => 1,
++ 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+ 'AM_CONDITIONAL' => 1,
++ 'AM_MISSING_HAS_RUN' => 1,
+ 'm4_pattern_allow' => 1,
+- '_AM_MANGLE_OPTION' => 1,
+- '_AM_IF_OPTION' => 1,
+- 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+- 'AM_SANITY_CHECK' => 1,
+- 'AU_DEFUN' => 1,
+- 'include' => 1
++ 'AM_SET_LEADING_DOT' => 1,
++ 'AC_DEFUN' => 1,
++ '_AM_CONFIG_MACRO_DIRS' => 1,
++ 'AM_PROG_CC_C_O' => 1,
++ 'AM_SET_DEPDIR' => 1,
++ 'AC_CONFIG_MACRO_DIR' => 1
+ }
+ ], 'Autom4te::Request' ),
+ bless( [
+@@ -89,65 +89,65 @@
+ 'configure.ac'
+ ],
+ {
+- 'AM_PROG_CXX_C_O' => 1,
+- 'AC_CONFIG_HEADERS' => 1,
+- 'include' => 1,
+- 'AC_FC_PP_SRCEXT' => 1,
+- 'AM_PROG_FC_C_O' => 1,
+- 'AC_CONFIG_FILES' => 1,
+- 'AC_FC_PP_DEFINE' => 1,
+- 'AC_CONFIG_SUBDIRS' => 1,
+- 'AM_MAINTAINER_MODE' => 1,
+- 'AC_FC_SRCEXT' => 1,
+- 'AC_DEFINE_TRACE_LITERAL' => 1,
+- 'LT_INIT' => 1,
+- 'AM_NLS' => 1,
+- 'AC_CANONICAL_SYSTEM' => 1,
++ 'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+ 'AC_CONFIG_AUX_DIR' => 1,
+- 'AC_PROG_LIBTOOL' => 1,
+- 'm4_pattern_allow' => 1,
+- 'AM_CONDITIONAL' => 1,
+- 'm4_pattern_forbid' => 1,
+- 'AM_PROG_MOC' => 1,
+- 'AC_CONFIG_LIBOBJ_DIR' => 1,
+- '_LT_AC_TAGCONFIG' => 1,
+- 'LT_CONFIG_LTDL_DIR' => 1,
+- 'AC_SUBST' => 1,
+- 'AM_MAKEFILE_INCLUDE' => 1,
+ 'AM_AUTOMAKE_VERSION' => 1,
+- 'AM_PROG_MKDIR_P' => 1,
+- 'AM_XGETTEXT_OPTION' => 1,
+- 'AC_CANONICAL_HOST' => 1,
+- 'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+- 'AC_CONFIG_LINKS' => 1,
++ 'AM_GNU_GETTEXT' => 1,
++ 'AC_CONFIG_SUBDIRS' => 1,
++ 'AM_POT_TOOLS' => 1,
++ 'LT_SUPPORTED_TAG' => 1,
++ 'AC_FC_FREEFORM' => 1,
++ 'AC_INIT' => 1,
++ 'AC_DEFINE_TRACE_LITERAL' => 1,
++ '_AM_COND_ELSE' => 1,
++ 'AC_SUBST_TRACE' => 1,
++ '_AM_SUBST_NOTMAKE' => 1,
+ '_AM_MAKEFILE_INCLUDE' => 1,
+- 'AC_CANONICAL_TARGET' => 1,
+- 'm4_include' => 1,
+- 'AM_INIT_AUTOMAKE' => 1,
++ 'AC_CANONICAL_BUILD' => 1,
++ 'AM_PROG_MOC' => 1,
+ '_m4_warn' => 1,
++ 'AH_OUTPUT' => 1,
++ 'm4_pattern_forbid' => 1,
+ 'AM_PATH_GUILE' => 1,
++ 'AM_XGETTEXT_OPTION' => 1,
++ '_LT_AC_TAGCONFIG' => 1,
++ 'AC_CONFIG_HEADERS' => 1,
+ 'AM_PROG_AR' => 1,
+- 'AM_PROG_F77_C_O' => 1,
++ 'include' => 1,
++ '_AM_COND_IF' => 1,
++ 'AC_CANONICAL_HOST' => 1,
++ 'AC_SUBST' => 1,
++ 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
++ 'm4_pattern_allow' => 1,
++ 'LT_CONFIG_LTDL_DIR' => 1,
+ 'AC_REQUIRE_AUX_FILE' => 1,
++ 'AM_CONDITIONAL' => 1,
++ 'AC_PROG_LIBTOOL' => 1,
+ 'AM_ENABLE_MULTILIB' => 1,
+- '_AM_COND_ELSE' => 1,
+- 'AM_POT_TOOLS' => 1,
++ 'AM_PROG_CC_C_O' => 1,
++ 'AC_FC_PP_SRCEXT' => 1,
++ 'AC_CONFIG_LIBOBJ_DIR' => 1,
++ 'AM_PROG_CXX_C_O' => 1,
+ 'AC_LIBSOURCE' => 1,
++ 'AC_CANONICAL_TARGET' => 1,
++ 'sinclude' => 1,
++ 'AM_PROG_MKDIR_P' => 1,
++ 'AM_MAINTAINER_MODE' => 1,
+ 'm4_sinclude' => 1,
+- 'AM_PROG_CC_C_O' => 1,
+- '_AM_COND_ENDIF' => 1,
+- 'AM_GNU_GETTEXT' => 1,
+- 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
+- '_AM_SUBST_NOTMAKE' => 1,
+- 'AC_FC_FREEFORM' => 1,
+- 'LT_SUPPORTED_TAG' => 1,
+ 'AM_SILENT_RULES' => 1,
+- 'AC_INIT' => 1,
+- 'AC_CANONICAL_BUILD' => 1,
+- '_AM_COND_IF' => 1,
+- 'AC_SUBST_TRACE' => 1,
+- 'AH_OUTPUT' => 1,
+- 'sinclude' => 1
++ 'AM_NLS' => 1,
++ 'AM_INIT_AUTOMAKE' => 1,
++ 'AC_CONFIG_FILES' => 1,
++ 'AM_MAKEFILE_INCLUDE' => 1,
++ 'm4_include' => 1,
++ 'AC_CANONICAL_SYSTEM' => 1,
++ '_AM_COND_ENDIF' => 1,
++ 'AM_PROG_F77_C_O' => 1,
++ 'AC_FC_PP_DEFINE' => 1,
++ 'AC_CONFIG_LINKS' => 1,
++ 'AM_PROG_FC_C_O' => 1,
++ 'AC_FC_SRCEXT' => 1,
++ 'LT_INIT' => 1
+ }
+ ], 'Autom4te::Request' ),
+ bless( [
+@@ -188,185 +188,185 @@
+ 'configure.ac'
+ ],
+ {
+- 'AM_RUN_LOG' => 1,
+- 'LT_PATH_NM' => 1,
+- '_AM_SUBST_NOTMAKE' => 1,
+- 'AM_SILENT_RULES' => 1,
+- 'AM_SET_LEADING_DOT' => 1,
+- 'LT_SYS_DLSEARCH_PATH' => 1,
+- 'LT_AC_PROG_GCJ' => 1,
+- 'LTDL_INSTALLABLE' => 1,
+- 'AM_PROG_LIBTOOL' => 1,
+ 'AM_PROG_INSTALL_STRIP' => 1,
+- 'AC_ENABLE_SHARED' => 1,
+- 'LT_SYS_SYMBOL_USCORE' => 1,
+- 'AC_DISABLE_FAST_INSTALL' => 1,
+- 'AM_INIT_AUTOMAKE' => 1,
+- 'AC_LIBTOOL_PROG_CC_C_O' => 1,
+- 'LTOBSOLETE_VERSION' => 1,
+- '_AM_PROG_CC_C_O' => 1,
+- 'AM_DISABLE_STATIC' => 1,
+- 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
+- 'AC_PROG_LD_GNU' => 1,
+- 'LT_LIB_M' => 1,
+- 'AM_MAKE_INCLUDE' => 1,
++ 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
+ '_LT_REQUIRED_DARWIN_CHECKS' => 1,
+- 'AC_LIBTOOL_LANG_C_CONFIG' => 1,
+- '_LT_AC_TRY_DLOPEN_SELF' => 1,
+- '_LT_AC_PROG_CXXCPP' => 1,
+- 'LTDL_CONVENIENCE' => 1,
++ '_AM_SET_OPTION' => 1,
++ 'LTOPTIONS_VERSION' => 1,
++ 'LT_SYS_MODULE_PATH' => 1,
++ 'LT_FUNC_DLSYM_USCORE' => 1,
++ 'AC_LTDL_SHLIBEXT' => 1,
++ 'AC_LTDL_SYMBOL_USCORE' => 1,
++ 'AC_LIBTOOL_DLOPEN' => 1,
++ 'AC_LTDL_ENABLE_INSTALL' => 1,
++ 'LT_OUTPUT' => 1,
++ '_AM_SET_OPTIONS' => 1,
++ 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
++ 'AM_ENABLE_SHARED' => 1,
++ 'LT_SYS_MODULE_EXT' => 1,
++ '_LT_PROG_ECHO_BACKSLASH' => 1,
++ 'AC_LTDL_SYSSEARCHPATH' => 1,
++ 'LT_CMD_MAX_LEN' => 1,
++ 'AU_DEFUN' => 1,
++ 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
++ 'AM_CONDITIONAL' => 1,
++ 'AC_LIBTOOL_F77' => 1,
+ 'AC_DISABLE_SHARED' => 1,
+- 'LT_WITH_LTDL' => 1,
++ '_LT_AC_LOCK' => 1,
++ 'AC_PATH_MAGIC' => 1,
+ 'AC_LIBTOOL_COMPILER_OPTION' => 1,
+- '_LT_COMPILER_BOILERPLATE' => 1,
+- 'AC_LTDL_SYSSEARCHPATH' => 1,
+- 'AM_PROG_NM' => 1,
+- 'LT_CONFIG_LTDL_DIR' => 1,
+- 'AC_LIBTOOL_LINKER_OPTION' => 1,
+- 'AM_AUTOMAKE_VERSION' => 1,
+- 'AC_DISABLE_STATIC' => 1,
+ 'AC_DEPLIBS_CHECK_METHOD' => 1,
+- 'AC_ENABLE_FAST_INSTALL' => 1,
+- '_LT_PREPARE_SED_QUOTE_VARS' => 1,
+- '_LT_AC_SYS_LIBPATH_AIX' => 1,
+- 'LT_INIT' => 1,
+- '_LT_AC_CHECK_DLFCN' => 1,
+- 'AC_LIBLTDL_CONVENIENCE' => 1,
+- 'AC_LIBTOOL_PICMODE' => 1,
+- 'LT_SUPPORTED_TAG' => 1,
+- 'AM_AUX_DIR_EXPAND' => 1,
+- 'LT_PROG_GCJ' => 1,
+- 'AC_PATH_MAGIC' => 1,
+- 'LT_SYS_DLOPEN_SELF' => 1,
+- '_LT_LINKER_OPTION' => 1,
+- 'AC_LTDL_DLLIB' => 1,
+- 'AC_LIBTOOL_WIN32_DLL' => 1,
+- 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
+- 'LT_FUNC_ARGZ' => 1,
+- '_AM_SET_OPTIONS' => 1,
+- 'AC_LTDL_ENABLE_INSTALL' => 1,
+- 'AM_DISABLE_SHARED' => 1,
+- '_LT_AC_LANG_CXX' => 1,
+- 'AC_LIBTOOL_FC' => 1,
+- 'AC_DEFUN' => 1,
+- 'LT_PATH_LD' => 1,
+- '_LT_DLL_DEF_P' => 1,
++ 'LT_LIB_M' => 1,
+ 'AM_ENABLE_STATIC' => 1,
+- 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
+- 'LT_LIB_DLLOAD' => 1,
+- 'LT_SYS_MODULE_EXT' => 1,
+- 'AC_LIBLTDL_INSTALLABLE' => 1,
+- 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
+ 'AC_PROG_LD_RELOAD_FLAG' => 1,
++ 'AC_LIBTOOL_CXX' => 1,
++ '_LT_AC_SHELL_INIT' => 1,
++ 'AM_DISABLE_STATIC' => 1,
++ '_LT_AC_SYS_COMPILER' => 1,
++ 'LTSUGAR_VERSION' => 1,
++ '_AM_MANGLE_OPTION' => 1,
+ 'AC_LTDL_OBJDIR' => 1,
+- 'AM_MISSING_PROG' => 1,
+- '_LT_AC_TAGVAR' => 1,
+- 'LT_FUNC_DLSYM_USCORE' => 1,
+- 'AC_CHECK_LIBM' => 1,
+ 'AM_SUBST_NOTMAKE' => 1,
+- 'LT_OUTPUT' => 1,
+- '_LT_AC_PROG_ECHO_BACKSLASH' => 1,
+- '_LT_AC_LANG_F77_CONFIG' => 1,
+- '_LTDL_SETUP' => 1,
+- 'LT_SYS_MODULE_PATH' => 1,
+- '_AM_PROG_TAR' => 1,
+- 'AC_LIBTOOL_F77' => 1,
+- 'AC_PATH_TOOL_PREFIX' => 1,
+ 'AM_SANITY_CHECK' => 1,
+- 'AC_LIBTOOL_OBJDIR' => 1,
++ 'LT_SYS_DLOPEN_DEPLIBS' => 1,
++ 'AC_LTDL_DLSYM_USCORE' => 1,
++ 'AM_MAKE_INCLUDE' => 1,
++ '_AM_PROG_TAR' => 1,
++ '_LT_COMPILER_OPTION' => 1,
++ '_LT_AC_LANG_CXX' => 1,
++ 'AC_LIBTOOL_CONFIG' => 1,
++ 'AM_AUX_DIR_EXPAND' => 1,
++ 'AC_LTDL_SHLIBPATH' => 1,
++ '_AM_PROG_CC_C_O' => 1,
++ '_LT_AC_PROG_CXXCPP' => 1,
++ 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
++ 'AC_LTDL_DLLIB' => 1,
++ '_LT_AC_TAGCONFIG' => 1,
++ '_LT_AC_LANG_GCJ' => 1,
++ 'LT_LIB_DLLOAD' => 1,
++ 'm4_pattern_forbid' => 1,
+ '_LT_AC_LANG_F77' => 1,
+- 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
+- 'LTSUGAR_VERSION' => 1,
+- 'include' => 1,
+- 'AM_PROG_LD' => 1,
+- '_LT_LIBOBJ' => 1,
+- 'LT_AC_PROG_EGREP' => 1,
+- 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
++ 'AC_PROG_LIBTOOL' => 1,
++ '_LT_AC_FILE_LTDLL_C' => 1,
++ '_LT_PREPARE_SED_QUOTE_VARS' => 1,
++ 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
++ 'AM_MISSING_HAS_RUN' => 1,
++ 'AC_ENABLE_STATIC' => 1,
+ '_LT_LINKER_BOILERPLATE' => 1,
++ 'm4_pattern_allow' => 1,
++ 'AC_LIBTOOL_DLOPEN_SELF' => 1,
++ 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
++ 'AC_DEFUN' => 1,
+ 'AC_LIBTOOL_SETUP' => 1,
+- 'AC_LIBTOOL_CONFIG' => 1,
+- '_AC_PROG_LIBTOOL' => 1,
+- 'AC_CONFIG_MACRO_DIR' => 1,
+- '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+- 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
+- '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
++ 'AC_LIBLTDL_CONVENIENCE' => 1,
+ '_AM_CONFIG_MACRO_DIRS' => 1,
++ '_LT_PROG_F77' => 1,
++ 'LT_SYS_DLSEARCH_PATH' => 1,
+ 'm4_include' => 1,
+- 'AC_LTDL_SHLIBEXT' => 1,
++ 'AM_INIT_AUTOMAKE' => 1,
++ '_LT_AC_TRY_DLOPEN_SELF' => 1,
++ 'LT_INIT' => 1,
++ 'LT_PATH_LD' => 1,
++ 'AC_DISABLE_FAST_INSTALL' => 1,
++ 'AC_LIBTOOL_WIN32_DLL' => 1,
++ 'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
++ 'LT_AC_PROG_GCJ' => 1,
++ 'LT_PROG_GCJ' => 1,
++ 'AC_LIBTOOL_OBJDIR' => 1,
++ 'LT_AC_PROG_SED' => 1,
++ 'AC_PROG_NM' => 1,
++ 'LTVERSION_VERSION' => 1,
++ 'AC_DEFUN_ONCE' => 1,
++ 'AC_PATH_TOOL_PREFIX' => 1,
++ 'AM_MISSING_PROG' => 1,
++ '_LT_PATH_TOOL_PREFIX' => 1,
++ 'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
++ 'LTDL_INIT' => 1,
++ 'AC_LIBTOOL_LANG_C_CONFIG' => 1,
++ '_LT_PROG_CXX' => 1,
++ 'LT_SYS_SYMBOL_USCORE' => 1,
++ 'AM_PROG_LIBTOOL' => 1,
++ '_LT_AC_CHECK_DLFCN' => 1,
++ 'LT_AC_PROG_EGREP' => 1,
++ 'AC_LIB_LTDL' => 1,
+ '_m4_warn' => 1,
+- 'AC_LTDL_SHLIBPATH' => 1,
+- 'LT_AC_PROG_RC' => 1,
+- '_LT_PROG_F77' => 1,
+- 'AC_LIBTOOL_DLOPEN_SELF' => 1,
++ '_LT_AC_LANG_RC_CONFIG' => 1,
++ 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
++ 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
++ 'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
++ '_LT_AC_LANG_F77_CONFIG' => 1,
+ 'LT_LANG' => 1,
+- 'AC_LTDL_DLSYM_USCORE' => 1,
+- 'LT_SYS_DLOPEN_DEPLIBS' => 1,
+- 'AM_MISSING_HAS_RUN' => 1,
+- '_LT_PATH_TOOL_PREFIX' => 1,
+- 'AC_WITH_LTDL' => 1,
+- '_LT_PROG_ECHO_BACKSLASH' => 1,
+- 'AM_PROG_INSTALL_SH' => 1,
+- 'AM_PROG_CC_C_O' => 1,
+- 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
+- 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
+- 'm4_pattern_allow' => 1,
+- 'AM_CONDITIONAL' => 1,
+- 'AC_ENABLE_STATIC' => 1,
+- 'LT_CMD_MAX_LEN' => 1,
+- '_LT_AC_TAGCONFIG' => 1,
+- '_LT_WITH_SYSROOT' => 1,
++ 'LT_PATH_NM' => 1,
++ '_AM_SUBST_NOTMAKE' => 1,
++ 'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
++ 'include' => 1,
++ 'AC_LIBLTDL_INSTALLABLE' => 1,
+ '_LT_PROG_FC' => 1,
+- 'AM_DEP_TRACK' => 1,
++ 'LT_SYS_DLOPEN_SELF' => 1,
++ 'LT_FUNC_ARGZ' => 1,
++ 'LT_AC_PROG_RC' => 1,
++ 'LT_CONFIG_LTDL_DIR' => 1,
++ 'AM_PROG_LD' => 1,
++ 'LT_PROG_GO' => 1,
++ 'AC_ENABLE_FAST_INSTALL' => 1,
+ '_LT_AC_LANG_CXX_CONFIG' => 1,
+- 'AC_LIBTOOL_GCJ' => 1,
+- '_LT_AC_FILE_LTDLL_C' => 1,
++ 'LTOBSOLETE_VERSION' => 1,
++ 'AM_SET_DEPDIR' => 1,
++ 'AC_CONFIG_MACRO_DIR' => 1,
++ 'AM_PROG_CC_C_O' => 1,
++ 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
++ 'AM_PROG_INSTALL_SH' => 1,
++ 'AC_WITH_LTDL' => 1,
++ 'AM_SILENT_RULES' => 1,
++ 'AM_RUN_LOG' => 1,
++ '_LT_LINKER_OPTION' => 1,
++ 'AM_PROG_NM' => 1,
++ 'AC_LTDL_PREOPEN' => 1,
++ 'AC_LIBTOOL_PICMODE' => 1,
+ '_AM_IF_OPTION' => 1,
+- 'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
+- '_LT_PROG_CXX' => 1,
+- '_LT_AC_LANG_RC_CONFIG' => 1,
+- '_AM_MANGLE_OPTION' => 1,
+- 'LT_AC_PROG_SED' => 1,
+- 'AC_LTDL_SYMBOL_USCORE' => 1,
+- '_AM_SET_OPTION' => 1,
+- 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
+- 'LTOPTIONS_VERSION' => 1,
++ 'AC_PROG_EGREP' => 1,
++ 'AC_LIBTOOL_LINKER_OPTION' => 1,
++ '_LT_WITH_SYSROOT' => 1,
++ 'AC_CHECK_LIBM' => 1,
++ 'AM_AUTOMAKE_VERSION' => 1,
++ 'LTDL_CONVENIENCE' => 1,
++ 'AC_PROG_LD_GNU' => 1,
++ 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
++ 'LT_WITH_LTDL' => 1,
++ '_LT_COMPILER_BOILERPLATE' => 1,
++ 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
++ '_LT_AC_SYS_LIBPATH_AIX' => 1,
++ 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
++ 'LT_SUPPORTED_TAG' => 1,
++ '_AM_DEPENDENCIES' => 1,
++ 'AC_DISABLE_STATIC' => 1,
++ 'AM_DISABLE_SHARED' => 1,
++ '_LT_LIBOBJ' => 1,
++ '_AM_AUTOCONF_VERSION' => 1,
++ 'AM_DEP_TRACK' => 1,
++ '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+ 'AC_LIBTOOL_RC' => 1,
+- 'LT_PROG_RC' => 1,
+- 'LTDL_INIT' => 1,
+- 'AC_DEFUN_ONCE' => 1,
+- 'AC_LIB_LTDL' => 1,
+- 'AC_LIBTOOL_DLOPEN' => 1,
+- 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
++ '_LT_AC_LANG_C_CONFIG' => 1,
++ '_LT_AC_PROG_ECHO_BACKSLASH' => 1,
+ 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+- 'AM_SET_DEPDIR' => 1,
+- '_LT_AC_SYS_COMPILER' => 1,
+- 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+- 'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
+- '_AM_DEPENDENCIES' => 1,
++ '_LT_DLL_DEF_P' => 1,
++ 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
++ '_LTDL_SETUP' => 1,
++ 'AM_SET_LEADING_DOT' => 1,
++ 'AC_LIBTOOL_GCJ' => 1,
++ 'LT_PROG_RC' => 1,
++ 'LTDL_INSTALLABLE' => 1,
++ 'AC_LIBTOOL_PROG_CC_C_O' => 1,
++ 'AC_ENABLE_SHARED' => 1,
++ '_LT_PROG_LTMAIN' => 1,
++ '_AC_PROG_LIBTOOL' => 1,
+ 'AC_PROG_LD' => 1,
+- '_LT_AC_LANG_GCJ' => 1,
+- '_LT_COMPILER_OPTION' => 1,
+- '_LT_AC_SHELL_INIT' => 1,
+- '_LT_AC_LOCK' => 1,
+- 'AC_PROG_NM' => 1,
++ '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+ '_LT_AC_LANG_GCJ_CONFIG' => 1,
+- 'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
+- 'AM_ENABLE_SHARED' => 1,
+- 'AC_LIBTOOL_CXX' => 1,
+- '_LT_PROG_LTMAIN' => 1,
+- '_AM_AUTOCONF_VERSION' => 1,
++ '_LT_AC_TAGVAR' => 1,
+ '_LT_CC_BASENAME' => 1,
+- 'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
+- 'AC_PROG_LIBTOOL' => 1,
+- 'm4_pattern_forbid' => 1,
+- 'LT_PROG_GO' => 1,
+- 'AC_LTDL_PREOPEN' => 1,
+- 'LTVERSION_VERSION' => 1,
+- 'AU_DEFUN' => 1,
+- '_LT_AC_LANG_C_CONFIG' => 1,
+- 'AC_PROG_EGREP' => 1,
+- 'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+- 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1
++ 'AC_LIBTOOL_FC' => 1,
++ 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1
+ }
+ ], 'Autom4te::Request' )
+ );
+diff --git a/bin/Makefile.am b/bin/Makefile.am
+index 486afc0..8bd5a0f 100755
+--- a/bin/Makefile.am
++++ b/bin/Makefile.am
+@@ -60,7 +60,7 @@ launch = launch.c launch.h
+ lib_LTLIBRARIES = libnfdump.la
+ libnfdump_la_SOURCES = $(common) $(util) $(filelzo) $(nflist) $(filter) $(exporter)
+ #libnfdump_la_LIBADD = -lz
+-libnfdump_la_LDFLAGS = -release 1.6.14 -shared
++libnfdump_la_LDFLAGS = -release 1.6.14
+
+
+ nfdump_SOURCES = nfdump.c nfdump.h nfstat.c nfstat.h nfexport.c nfexport.h \
+diff --git a/bin/Makefile.in b/bin/Makefile.in
+index cc1ccde..a2d31d2 100644
+--- a/bin/Makefile.in
++++ b/bin/Makefile.in
+@@ -719,7 +719,7 @@ launch = launch.c launch.h
+ lib_LTLIBRARIES = libnfdump.la
+ libnfdump_la_SOURCES = $(common) $(util) $(filelzo) $(nflist) $(filter) $(exporter)
+ #libnfdump_la_LIBADD = -lz
+-libnfdump_la_LDFLAGS = -release 1.6.14 -shared
++libnfdump_la_LDFLAGS = -release 1.6.14
+ nfdump_SOURCES = nfdump.c nfdump.h nfstat.c nfstat.h nfexport.c nfexport.h \
+ $(nflowcache) $(nfprof)
+
+diff --git a/bin/pcap_reader.c b/bin/pcap_reader.c
+index 8b0ebfa..363aa4e 100755
+--- a/bin/pcap_reader.c
++++ b/bin/pcap_reader.c
+@@ -148,6 +148,7 @@ struct sockaddr_in *in_sock = (struct sockaddr_in *)sock;
+ * extract the first byte and make it the big byte and then extract
+ * the next byte and make it the small byte.
+ */
++ REDO_LINK:
+ switch (pkt[12] << 0x08 | pkt[13]) {
+ case 0x0800:
+ /* IPv4 */
+@@ -162,8 +163,14 @@ struct sockaddr_in *in_sock = (struct sockaddr_in *)sock;
+ /* ARP */
+ arp_count++;
+ break;
++ case 0x8100: // VLAN
++ pkt += 4; // strip off vlan
++ printf("Skip VLAN labels\n");
++ goto REDO_LINK;
++ break;
+ default:
+ /* We're not bothering with 802.3 or anything else */
++ printf("PCAP unknown linktype %u%u\n", pkt[12], pkt[13]);
+ unknow_count++;
+ break;
+ }