aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/Makefile.am1
-rw-r--r--epan/dissectors/asn1/kerberos/packet-kerberos-template.c2
-rw-r--r--epan/dissectors/asn1/kerberos/packet-kerberos-template.h6
-rw-r--r--epan/dissectors/packet-dcerpc-netlogon.c2
-rw-r--r--epan/dissectors/packet-kerberos.c14
-rw-r--r--epan/dissectors/packet-kerberos.h8
-rw-r--r--epan/dissectors/packet-ntlmssp.c2
-rw-r--r--epan/dissectors/packet-smb2.c2
-rw-r--r--epan/dissectors/read_keytab_file.h43
-rw-r--r--tfshark.c70
-rw-r--r--tshark.c47
-rw-r--r--ui/commandline.c41
-rw-r--r--ui/dissect_opts.c45
-rw-r--r--ui/dissect_opts.h2
14 files changed, 125 insertions, 160 deletions
diff --git a/epan/dissectors/Makefile.am b/epan/dissectors/Makefile.am
index 75334b57e8..21f800dd53 100644
--- a/epan/dissectors/Makefile.am
+++ b/epan/dissectors/Makefile.am
@@ -1817,6 +1817,7 @@ DISSECTOR_INCLUDES = \
packet-zbee-zdp.h \
packet-zep.h \
packet-ziop.h \
+ read_keytab_file.h \
$(GENERATED_HEADER_FILES) \
$(CUSTOM_HEADER_FILES)
diff --git a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
index c1e3796401..7394e237a5 100644
--- a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
+++ b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
@@ -73,6 +73,8 @@
#include "packet-cms.h"
#include "packet-windows-common.h"
+#include "read_keytab_file.h"
+
#include "packet-dcerpc-netlogon.h"
#include "packet-dcerpc.h"
diff --git a/epan/dissectors/asn1/kerberos/packet-kerberos-template.h b/epan/dissectors/asn1/kerberos/packet-kerberos-template.h
index 2fd30c4163..8befbf8fa0 100644
--- a/epan/dissectors/asn1/kerberos/packet-kerberos-template.h
+++ b/epan/dissectors/asn1/kerberos/packet-kerberos-template.h
@@ -92,12 +92,6 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
extern gboolean krb_decrypt;
-WS_DLL_PUBLIC
-void read_keytab_file(const char *);
-
-WS_DLL_PUBLIC
-void read_keytab_file_from_preferences(void);
-
#endif /* HAVE_KERBEROS */
#include "packet-kerberos-exp.h"
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c
index 573f81fd38..aeae7a1c74 100644
--- a/epan/dissectors/packet-dcerpc-netlogon.c
+++ b/epan/dissectors/packet-dcerpc-netlogon.c
@@ -41,6 +41,8 @@
/* for keytab format */
#include <epan/asn1.h>
#include "packet-kerberos.h"
+/* for routines to read the keytab file */
+#include "read_keytab_file.h"
/* for decoding */
void proto_register_dcerpc_netlogon(void);
diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c
index 72a017661b..469da00b48 100644
--- a/epan/dissectors/packet-kerberos.c
+++ b/epan/dissectors/packet-kerberos.c
@@ -81,6 +81,8 @@
#include "packet-cms.h"
#include "packet-windows-common.h"
+#include "read_keytab_file.h"
+
#include "packet-dcerpc-netlogon.h"
#include "packet-dcerpc.h"
@@ -349,7 +351,7 @@ static int hf_kerberos_KDCOptions_renew = -1;
static int hf_kerberos_KDCOptions_validate = -1;
/*--- End of included file: packet-kerberos-hf.c ---*/
-#line 172 "./asn1/kerberos/packet-kerberos-template.c"
+#line 174 "./asn1/kerberos/packet-kerberos-template.c"
/* Initialize the subtree pointers */
static gint ett_kerberos = -1;
@@ -425,7 +427,7 @@ static gint ett_kerberos_KERB_PA_PAC_REQUEST = -1;
static gint ett_kerberos_ChangePasswdData = -1;
/*--- End of included file: packet-kerberos-ett.c ---*/
-#line 186 "./asn1/kerberos/packet-kerberos-template.c"
+#line 188 "./asn1/kerberos/packet-kerberos-template.c"
static expert_field ei_kerberos_decrypted_keytype = EI_INIT;
static expert_field ei_kerberos_address = EI_INIT;
@@ -454,7 +456,7 @@ static gboolean gbl_do_col_info;
#define KERBEROS_ADDR_TYPE_IPV6 24
/*--- End of included file: packet-kerberos-val.h ---*/
-#line 199 "./asn1/kerberos/packet-kerberos-template.c"
+#line 201 "./asn1/kerberos/packet-kerberos-template.c"
static void
call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int tag, kerberos_callbacks *cb)
@@ -4204,7 +4206,7 @@ dissect_kerberos_ChangePasswdData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
/*--- End of included file: packet-kerberos-fn.c ---*/
-#line 1848 "./asn1/kerberos/packet-kerberos-template.c"
+#line 1850 "./asn1/kerberos/packet-kerberos-template.c"
/* Make wrappers around exported functions for now */
int
@@ -5258,7 +5260,7 @@ void proto_register_kerberos(void) {
NULL, HFILL }},
/*--- End of included file: packet-kerberos-hfarr.c ---*/
-#line 2229 "./asn1/kerberos/packet-kerberos-template.c"
+#line 2231 "./asn1/kerberos/packet-kerberos-template.c"
};
/* List of subtrees */
@@ -5336,7 +5338,7 @@ void proto_register_kerberos(void) {
&ett_kerberos_ChangePasswdData,
/*--- End of included file: packet-kerberos-ettarr.c ---*/
-#line 2245 "./asn1/kerberos/packet-kerberos-template.c"
+#line 2247 "./asn1/kerberos/packet-kerberos-template.c"
};
static ei_register_info ei[] = {
diff --git a/epan/dissectors/packet-kerberos.h b/epan/dissectors/packet-kerberos.h
index d838e82a6e..901567ac50 100644
--- a/epan/dissectors/packet-kerberos.h
+++ b/epan/dissectors/packet-kerberos.h
@@ -100,12 +100,6 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
extern gboolean krb_decrypt;
-WS_DLL_PUBLIC
-void read_keytab_file(const char *);
-
-WS_DLL_PUBLIC
-void read_keytab_file_from_preferences(void);
-
#endif /* HAVE_KERBEROS */
@@ -134,7 +128,7 @@ void read_keytab_file_from_preferences(void);
int dissect_kerberos_ChangePasswdData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
/*--- End of included file: packet-kerberos-exp.h ---*/
-#line 104 "./asn1/kerberos/packet-kerberos-template.h"
+#line 98 "./asn1/kerberos/packet-kerberos-template.h"
#ifdef __cplusplus
}
diff --git a/epan/dissectors/packet-ntlmssp.c b/epan/dissectors/packet-ntlmssp.c
index 4ef5efa2e6..8ca4c2820c 100644
--- a/epan/dissectors/packet-ntlmssp.c
+++ b/epan/dissectors/packet-ntlmssp.c
@@ -52,6 +52,8 @@
#include "packet-dcerpc.h"
#include "packet-gssapi.h"
+#include "read_keytab_file.h"
+
#include "packet-ntlmssp.h"
void proto_register_ntlmssp(void);
diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c
index 0fc381706a..7c92ecb3ac 100644
--- a/epan/dissectors/packet-smb2.c
+++ b/epan/dissectors/packet-smb2.c
@@ -48,6 +48,8 @@
#include "packet-smb-common.h"
#include "packet-dcerpc-nt.h"
+#include "read_keytab_file.h"
+
#include <wsutil/wsgcrypt.h>
#define NT_STATUS_PENDING 0x00000103
diff --git a/epan/dissectors/read_keytab_file.h b/epan/dissectors/read_keytab_file.h
new file mode 100644
index 0000000000..bd34165418
--- /dev/null
+++ b/epan/dissectors/read_keytab_file.h
@@ -0,0 +1,43 @@
+/* read_keytab_file.h
+ * Routines for reading Kerberos keytab files
+ * Copyright 2007, Anders Broman <anders.broman@ericsson.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __READ_KEYTAB_FILE_H
+#define __READ_KEYTAB_FILE_H
+
+#include "ws_symbol_export.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+WS_DLL_PUBLIC
+void read_keytab_file(const char *);
+
+WS_DLL_PUBLIC
+void read_keytab_file_from_preferences(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __READ_KEYTAB_FILE_H */
diff --git a/tfshark.c b/tfshark.c
index 5b2fdaa338..292158ee6a 100644
--- a/tfshark.c
+++ b/tfshark.c
@@ -69,17 +69,13 @@
#include <epan/addr_resolv.h>
#include "ui/util.h"
#include "ui/decode_as_utils.h"
+#include "ui/dissect_opts.h"
#include "register.h"
#include <epan/epan_dissect.h>
#include <epan/tap.h>
#include <epan/stat_tap_ui.h>
#include <epan/ex-opt.h>
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
-#include <epan/asn1.h>
-#include <epan/dissectors/packet-kerberos.h>
-#endif
-
#ifdef HAVE_EXTCAP
#include "extcap.h"
#endif
@@ -688,15 +684,6 @@ main(int argc, char *argv[])
case 'C':
/* already processed; just ignore it now */
break;
- case 'd': /* Decode as rule */
- if (!decode_as_command_option(optarg))
- return 1;
- break;
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
- case 'K': /* Kerberos keytab file */
- read_keytab_file(optarg);
- break;
-#endif
case 'e':
/* Field entry */
output_fields_add(output_fields, optarg);
@@ -767,42 +754,6 @@ main(int argc, char *argv[])
case 'S': /* Set the line Separator to be printed between packets */
separator = g_strdup(optarg);
break;
- case 't': /* Time stamp type */
- if (strcmp(optarg, "r") == 0)
- timestamp_set_type(TS_RELATIVE);
- else if (strcmp(optarg, "a") == 0)
- timestamp_set_type(TS_ABSOLUTE);
- else if (strcmp(optarg, "ad") == 0)
- timestamp_set_type(TS_ABSOLUTE_WITH_YMD);
- else if (strcmp(optarg, "adoy") == 0)
- timestamp_set_type(TS_ABSOLUTE_WITH_YDOY);
- else if (strcmp(optarg, "d") == 0)
- timestamp_set_type(TS_DELTA);
- else if (strcmp(optarg, "dd") == 0)
- timestamp_set_type(TS_DELTA_DIS);
- else if (strcmp(optarg, "e") == 0)
- timestamp_set_type(TS_EPOCH);
- else if (strcmp(optarg, "u") == 0)
- timestamp_set_type(TS_UTC);
- else if (strcmp(optarg, "ud") == 0)
- timestamp_set_type(TS_UTC_WITH_YMD);
- else if (strcmp(optarg, "udoy") == 0)
- timestamp_set_type(TS_UTC_WITH_YDOY);
- else {
- cmdarg_err("Invalid time stamp type \"%s\"; it must be one of:", optarg);
- cmdarg_err_cont("\t\"a\" for absolute\n"
- "\t\"ad\" for absolute with YYYY-MM-DD date\n"
- "\t\"adoy\" for absolute with YYYY/DOY date\n"
- "\t\"d\" for delta\n"
- "\t\"dd\" for delta displayed\n"
- "\t\"e\" for epoch\n"
- "\t\"r\" for relative\n"
- "\t\"u\" for absolute UTC\n"
- "\t\"ud\" for absolute UTC with YYYY-MM-DD date\n"
- "\t\"udoy\" for absolute UTC with YYYY/DOY date");
- return 1;
- }
- break;
case 'T': /* printing Type */
if (strcmp(optarg, "text") == 0) {
output_action = WRITE_TEXT;
@@ -843,18 +794,6 @@ main(int argc, char *argv[])
return 1;
}
break;
- case 'u': /* Seconds type */
- if (strcmp(optarg, "s") == 0)
- timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
- else if (strcmp(optarg, "hms") == 0)
- timestamp_set_seconds_type(TS_SECONDS_HOUR_MIN_SEC);
- else {
- cmdarg_err("Invalid seconds type \"%s\"; it must be one of:", optarg);
- cmdarg_err_cont("\t\"s\" for seconds\n"
- "\t\"hms\" for hours, minutes and seconds");
- return 1;
- }
- break;
case 'v': /* Show version and exit */
comp_info_str = get_compiled_version_info(NULL, epan_get_compiled_version_info);
runtime_info_str = get_runtime_version_info(get_tfshark_runtime_version_info);
@@ -903,6 +842,13 @@ main(int argc, char *argv[])
return 1;
}
break;
+ case 'd': /* Decode as rule */
+ case 'K': /* Kerberos keytab file */
+ case 't': /* Time stamp type */
+ case 'u': /* Seconds type */
+ if (!dissect_opts_handle_opt(opt, optarg))
+ return 1;
+ break;
default:
case '?': /* Bad flag - print usage message */
print_usage(stderr);
diff --git a/tshark.c b/tshark.c
index 8f838726a6..d56bb6ed00 100644
--- a/tshark.c
+++ b/tshark.c
@@ -98,11 +98,6 @@
#include <epan/ex-opt.h>
#include <epan/exported_pdu.h>
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
-#include <epan/asn1.h>
-#include <epan/dissectors/packet-kerberos.h>
-#endif
-
#include "capture_opts.h"
#include "caputils/capture-pcap-util.h"
@@ -588,7 +583,6 @@ main(int argc, char *argv[])
dfilter_t *dfcode = NULL;
gchar *err_msg;
e_prefs *prefs_p;
- char badopt;
int log_flags;
gchar *output_only = NULL;
gchar *volatile pdu_export_arg = NULL;
@@ -613,7 +607,7 @@ main(int argc, char *argv[])
* We do *not* use a leading - because the behavior of a leading - is
* platform-dependent.
*/
-#define OPTSTRING "+2" OPTSTRING_CAPTURE_COMMON OPTSTRING_DISSECT_COMMON "C:e:E:F:gG:hH:j:" "K:lnN:o:O:PqQr:R:S:T:u:U:vVw:W:xX:Y:z:"
+#define OPTSTRING "+2" OPTSTRING_CAPTURE_COMMON OPTSTRING_DISSECT_COMMON "C:e:E:F:gG:hH:j:lo:O:PqQr:R:S:T:U:vVw:W:xX:Y:z:"
static const char optstring[] = OPTSTRING;
@@ -1027,11 +1021,6 @@ main(int argc, char *argv[])
case 'C':
/* already processed; just ignore it now */
break;
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
- case 'K': /* Kerberos keytab file */
- read_keytab_file(optarg);
- break;
-#endif
case 'D': /* Print a list of capture devices and exit */
#ifdef HAVE_LIBPCAP
if_list = capture_interface_list(&err, &err_str,NULL);
@@ -1125,23 +1114,6 @@ main(int argc, char *argv[])
arg_error = TRUE;
#endif
break;
- case 'n': /* No name resolution */
- disable_name_resolution();
- break;
- case 'N': /* Select what types of addresses/port #s to resolve */
- badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
- if (badopt != '\0') {
- cmdarg_err("-N specifies unknown resolving option '%c'; valid options are:",
- badopt);
- cmdarg_err_cont("\t'd' to enable address resolution from captured DNS packets\n"
- "\t'm' to enable MAC address resolution\n"
- "\t'n' to enable network address resolution\n"
- "\t'N' to enable using external resolvers (e.g., DNS)\n"
- "\t for network address resolution\n"
- "\t't' to enable transport-layer port number resolution");
- return 1;
- }
- break;
case 'o': /* Override preference from command line */
switch (prefs_set_pref(optarg)) {
@@ -1235,18 +1207,6 @@ main(int argc, char *argv[])
return 1;
}
break;
- case 'u': /* Seconds type */
- if (strcmp(optarg, "s") == 0)
- timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
- else if (strcmp(optarg, "hms") == 0)
- timestamp_set_seconds_type(TS_SECONDS_HOUR_MIN_SEC);
- else {
- cmdarg_err("Invalid seconds type \"%s\"; it must be one of:", optarg);
- cmdarg_err_cont("\t\"s\" for seconds\n"
- "\t\"hms\" for hours, minutes and seconds");
- return 1;
- }
- break;
case 'U': /* Export PDUs to file */
{
GSList *export_pdu_tap_name_list = NULL;
@@ -1311,14 +1271,17 @@ main(int argc, char *argv[])
}
break;
case 'd': /* Decode as rule */
+ case 'K': /* Kerberos keytab file */
+ case 'n': /* No name resolution */
+ case 'N': /* Select what types of addresses/port #s to resolve */
case 't': /* Time stamp type */
+ case 'u': /* Seconds type */
case LONGOPT_DISABLE_PROTOCOL: /* disable dissection of protocol */
case LONGOPT_ENABLE_HEURISTIC: /* enable heuristic dissection of protocol */
case LONGOPT_DISABLE_HEURISTIC: /* disable heuristic dissection of protocol */
if (!dissect_opts_handle_opt(opt, optarg))
return 1;
break;
-
default:
case '?': /* Bad flag - print usage message */
switch(optopt) {
diff --git a/ui/commandline.c b/ui/commandline.c
index 85f8375442..e12d9fe3d4 100644
--- a/ui/commandline.c
+++ b/ui/commandline.c
@@ -43,7 +43,6 @@
#include <wsutil/filesystem.h>
#include <epan/ex-opt.h>
-#include <epan/addr_resolv.h>
#include <epan/packet.h>
#include <epan/proto.h>
#include <epan/prefs.h>
@@ -57,11 +56,6 @@
#include "recent.h"
#include "decode_as_utils.h"
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
-#include <epan/asn1.h>
-#include <epan/dissectors/packet-kerberos.h>
-#endif
-
#include "../file.h"
#include "ui/dissect_opts.h"
@@ -195,7 +189,7 @@ commandline_print_usage(gboolean for_help_option) {
*/
#define LONGOPT_FULL_SCREEN 65536
-#define OPTSTRING OPTSTRING_CAPTURE_COMMON OPTSTRING_DISSECT_COMMON "C:g:Hh" "jJ:kK:lm:nN:o:P:r:R:Su:vw:X:Y:z:"
+#define OPTSTRING OPTSTRING_CAPTURE_COMMON OPTSTRING_DISSECT_COMMON "C:g:Hh" "jJ:klm:o:P:r:R:Svw:X:Y:z:"
static const struct option long_options[] = {
{"help", no_argument, NULL, 'h'},
{"read-file", required_argument, NULL, 'r' },
@@ -357,7 +351,6 @@ void commandline_other_options(int argc, char *argv[], gboolean opt_reset)
#else
gboolean capture_option_specified;
#endif
- char badopt;
/*
* To reset the options parser, set optreset to 1 on platforms that
@@ -445,12 +438,6 @@ void commandline_other_options(int argc, char *argv[], gboolean opt_reset)
#endif
break;
-#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
- case 'K': /* Kerberos keytab file */
- read_keytab_file(optarg);
- break;
-#endif
-
/*** all non capture option specific ***/
case 'C':
/* Configuration profile settings were already processed just ignore them this time*/
@@ -480,17 +467,6 @@ void commandline_other_options(int argc, char *argv[], gboolean opt_reset)
arg_error = TRUE;
#endif
break;
- case 'n': /* No name resolution */
- disable_name_resolution();
- break;
- case 'N': /* Select what types of addresses/port #s to resolve */
- badopt = string_to_name_resolve(optarg, &gbl_resolv_flags);
- if (badopt != '\0') {
- cmdarg_err("-N specifies unknown resolving option '%c'; valid options are 'd', m', 'n', 'N', and 't'",
- badopt);
- exit(1);
- }
- break;
case 'o': /* Override preference from command line */
switch (prefs_set_pref(optarg)) {
case PREFS_SET_OK:
@@ -540,17 +516,6 @@ void commandline_other_options(int argc, char *argv[], gboolean opt_reset)
case 'R': /* Read file filter */
global_commandline_info.rfilter = optarg;
break;
- case 'u': /* Seconds type */
- if (strcmp(optarg, "s") == 0)
- timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
- else if (strcmp(optarg, "hms") == 0)
- timestamp_set_seconds_type(TS_SECONDS_HOUR_MIN_SEC);
- else {
- cmdarg_err("Invalid seconds type \"%s\"", optarg);
- cmdarg_err_cont("It must be \"s\" for seconds or \"hms\" for hours, minutes and seconds.");
- exit(1);
- }
- break;
case 'X':
/* ext ops were already processed just ignore them this time*/
break;
@@ -576,7 +541,11 @@ void commandline_other_options(int argc, char *argv[], gboolean opt_reset)
}
break;
case 'd': /* Decode as rule */
+ case 'K': /* Kerberos keytab file */
+ case 'n': /* No name resolution */
+ case 'N': /* Select what types of addresses/port #s to resolve */
case 't': /* time stamp type */
+ case 'u': /* Seconds type */
case LONGOPT_DISABLE_PROTOCOL: /* disable dissection of protocol */
case LONGOPT_ENABLE_HEURISTIC: /* enable heuristic dissection of protocol */
case LONGOPT_DISABLE_HEURISTIC: /* disable heuristic dissection of protocol */
diff --git a/ui/dissect_opts.c b/ui/dissect_opts.c
index 471f0467fd..267b363669 100644
--- a/ui/dissect_opts.c
+++ b/ui/dissect_opts.c
@@ -31,10 +31,16 @@
#include <glib.h>
+#include <epan/prefs.h>
#include <epan/timestamp.h>
+#include <epan/addr_resolv.h>
#include "ui/decode_as_utils.h"
+#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
+#include <epan/dissectors/read_keytab_file.h>
+#endif
+
#include <wsutil/clopts_common.h>
#include <wsutil/cmdarg_err.h>
#include <wsutil/file_util.h>
@@ -55,11 +61,38 @@ dissect_opts_init(void)
gboolean
dissect_opts_handle_opt(int opt, char *optarg_str_p)
{
+ char badopt;
+
switch(opt) {
case 'd': /* Decode as rule */
if (!decode_as_command_option(optarg_str_p))
return FALSE;
break;
+ case 'K': /* Kerberos keytab file */
+#if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS)
+ read_keytab_file(optarg_str_p);
+#else
+ cmdarg_err("-K specified, but Kerberos keytab file support isn't present");
+ return FALSE;
+#endif
+ break;
+ case 'n': /* No name resolution */
+ disable_name_resolution();
+ break;
+ case 'N': /* Select what types of addresses/port #s to resolve */
+ badopt = string_to_name_resolve(optarg_str_p, &gbl_resolv_flags);
+ if (badopt != '\0') {
+ cmdarg_err("-N specifies unknown resolving option '%c'; valid options are:",
+ badopt);
+ cmdarg_err_cont("\t'd' to enable address resolution from captured DNS packets\n"
+ "\t'm' to enable MAC address resolution\n"
+ "\t'n' to enable network address resolution\n"
+ "\t'N' to enable using external resolvers (e.g., DNS)\n"
+ "\t for network address resolution\n"
+ "\t't' to enable transport-layer port number resolution");
+ return FALSE;
+ }
+ break;
case 't': /* Time stamp type */
if (strcmp(optarg_str_p, "r") == 0)
global_dissect_options.time_format = TS_RELATIVE;
@@ -96,6 +129,18 @@ dissect_opts_handle_opt(int opt, char *optarg_str_p)
return FALSE;
}
break;
+ case 'u': /* Seconds type */
+ if (strcmp(optarg_str_p, "s") == 0)
+ timestamp_set_seconds_type(TS_SECONDS_DEFAULT);
+ else if (strcmp(optarg_str_p, "hms") == 0)
+ timestamp_set_seconds_type(TS_SECONDS_HOUR_MIN_SEC);
+ else {
+ cmdarg_err("Invalid seconds type \"%s\"; it must be one of:", optarg_str_p);
+ cmdarg_err_cont("\t\"s\" for seconds\n"
+ "\t\"hms\" for hours, minutes and seconds");
+ return FALSE;
+ }
+ break;
case LONGOPT_DISABLE_PROTOCOL: /* disable dissection of protocol */
global_dissect_options.disable_protocol_slist = g_slist_append(global_dissect_options.disable_protocol_slist, optarg_str_p);
break;
diff --git a/ui/dissect_opts.h b/ui/dissect_opts.h
index 629136e131..9dd06e1a40 100644
--- a/ui/dissect_opts.h
+++ b/ui/dissect_opts.h
@@ -66,7 +66,7 @@ extern "C" {
{"disable-heuristic", required_argument, NULL, LONGOPT_DISABLE_HEURISTIC }, \
#define OPTSTRING_DISSECT_COMMON \
- "d:t:"
+ "d:K:nN:t:u:"
/** Capture options coming from user interface */
typedef struct dissect_options_tag {