diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /ui/cli/tap-credentials.c | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ui/cli/tap-credentials.c')
-rw-r--r-- | ui/cli/tap-credentials.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/ui/cli/tap-credentials.c b/ui/cli/tap-credentials.c new file mode 100644 index 00000000..9a54a7eb --- /dev/null +++ b/ui/cli/tap-credentials.c @@ -0,0 +1,117 @@ +/* + * tap-credentials.c + * Copyright 2019 Dario Lombardo <lomato@gmail.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <glib.h> + +#include <epan/packet_info.h> +#include <epan/tap.h> +#include <epan/stat_tap_ui.h> + +#include <wsutil/cmdarg_err.h> +#include <ui/tap-credentials.h> + +void register_tap_listener_credentials(void); + +wmem_array_t* credentials = NULL; + +static tap_credential_t* tap_credential_clone(tap_credential_t* auth) +{ + tap_credential_t* clone = wmem_new0(NULL, tap_credential_t); + clone->num = auth->num; + clone->username_num = auth->username_num; + clone->password_hf_id = auth->password_hf_id; + if (auth->username) + clone->username = wmem_strdup(NULL, auth->username); + clone->proto = auth->proto; + if (auth->info) + clone->info = wmem_strdup(NULL, auth->info); + return clone; +} + +static tap_packet_status credentials_packet(void *p _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *pri, tap_flags_t flags _U_) +{ + tap_credential_t* clone = tap_credential_clone((tap_credential_t*)pri); + wmem_array_append(credentials, (void*)clone, 1); + return TAP_PACKET_REDRAW; +} + +static void credentials_reset(void* p) +{ + if (!p) + return; + tap_credential_t* auth = (tap_credential_t*)p; + wmem_free(NULL, auth->username); + wmem_free(NULL, auth->info); + wmem_free(NULL, auth); +} + +static void credentials_draw(void *p _U_) +{ + printf("===================================================================\n"); + printf("%-10s %-16s %-16s %-16s\n", "Packet", "Protocol", "Username", "Info"); + printf("------ -------- -------- --------\n"); + for (guint i = 0; i < wmem_array_get_count(credentials); i++) { + tap_credential_t* auth = (tap_credential_t*)wmem_array_index(credentials, i); + printf("%-10u %-16s %-16s %-16s\n", auth->num, auth->proto, auth->username, auth->info ? auth->info : ""); + } + printf("===================================================================\n"); +} + +static void credentials_init(const char *opt_arg _U_, void *userdata _U_) +{ + GString* error_string; + + error_string = register_tap_listener("credentials", NULL, NULL, TL_REQUIRES_NOTHING, + credentials_reset, credentials_packet, credentials_draw, NULL); + + if (error_string) { + /* error, we failed to attach to the tap. clean up */ + cmdarg_err("Couldn't register credentials tap: %s", error_string->str); + g_string_free(error_string, TRUE); + exit(1); + } + + credentials = wmem_array_new(wmem_epan_scope(), sizeof(tap_credential_t)); +} + +static stat_tap_ui credentials_ui = { + REGISTER_TOOLS_GROUP_UNSORTED, + "Username and passwords", + "credentials", + credentials_init, + 0, + NULL +}; + +void +register_tap_listener_credentials(void) +{ + register_stat_tap_ui(&credentials_ui, NULL); +} + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 8 + * tab-width: 8 + * indent-tabs-mode: t + * End: + * + * vi: set shiftwidth=8 tabstop=8 noexpandtab: + * :indentSize=8:tabSize=8:noTabs=false: + */ |