mirror of
https://github.com/hashcat/hashcat.git
synced 2025-01-03 12:21:07 +00:00
Make it possible to access error messages without using an event
This commit is contained in:
parent
fc2d242f50
commit
8de576f5e9
@ -1400,7 +1400,11 @@ typedef struct hashcat_user
|
|||||||
|
|
||||||
typedef struct event_ctx
|
typedef struct event_ctx
|
||||||
{
|
{
|
||||||
int last_len;
|
char msg_buf[HCBUFSIZ_TINY];
|
||||||
|
int msg_len;
|
||||||
|
bool msg_newline;
|
||||||
|
|
||||||
|
int prev_len;
|
||||||
|
|
||||||
hc_thread_mutex_t mux_event;
|
hc_thread_mutex_t mux_event;
|
||||||
|
|
||||||
|
109
src/event.c
109
src/event.c
@ -47,15 +47,19 @@ size_t event_log_info_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
event_call (EVENT_LOG_INFO, hashcat_ctx, buf, len);
|
event_ctx->msg_newline = false;
|
||||||
|
|
||||||
return len;
|
event_call (EVENT_LOG_INFO, hashcat_ctx, NULL, 0);
|
||||||
|
|
||||||
|
return event_ctx->msg_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t event_log_warning_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
size_t event_log_warning_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
||||||
@ -64,15 +68,19 @@ size_t event_log_warning_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
event_call (EVENT_LOG_WARNING, hashcat_ctx, buf, len);
|
event_ctx->msg_newline = false;
|
||||||
|
|
||||||
return len;
|
event_call (EVENT_LOG_WARNING, hashcat_ctx, NULL, 0);
|
||||||
|
|
||||||
|
return event_ctx->msg_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t event_log_error_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
size_t event_log_error_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
||||||
@ -81,15 +89,19 @@ size_t event_log_error_nn (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
event_call (EVENT_LOG_ERROR, hashcat_ctx, buf, len);
|
event_ctx->msg_newline = false;
|
||||||
|
|
||||||
return len;
|
event_call (EVENT_LOG_ERROR, hashcat_ctx, NULL, 0);
|
||||||
|
|
||||||
|
return event_ctx->msg_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t event_log_info (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
size_t event_log_info (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
||||||
@ -98,28 +110,19 @@ size_t event_log_info (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
#if defined (_WIN)
|
event_ctx->msg_newline = true;
|
||||||
|
|
||||||
buf[len + 0] = '\r';
|
event_call (EVENT_LOG_INFO, hashcat_ctx, NULL, 0);
|
||||||
buf[len + 1] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_INFO, hashcat_ctx, buf, len + 2);
|
return event_ctx->msg_len;
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
buf[len] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_INFO, hashcat_ctx, buf, len + 1);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t event_log_warning (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
size_t event_log_warning (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
||||||
@ -128,28 +131,19 @@ size_t event_log_warning (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
#if defined (_WIN)
|
event_ctx->msg_newline = true;
|
||||||
|
|
||||||
buf[len + 0] = '\r';
|
event_call (EVENT_LOG_WARNING, hashcat_ctx, NULL, 0);
|
||||||
buf[len + 1] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_WARNING, hashcat_ctx, buf, len + 2);
|
return event_ctx->msg_len;
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
buf[len] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_WARNING, hashcat_ctx, buf, len + 1);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t event_log_error (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
size_t event_log_error (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
||||||
@ -158,28 +152,19 @@ size_t event_log_error (hashcat_ctx_t *hashcat_ctx, const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
|
|
||||||
char buf[BUFSIZ];
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
const size_t len = event_log (fmt, ap, buf, sizeof (buf));
|
event_ctx->msg_len = event_log (fmt, ap, event_ctx->msg_buf, HCBUFSIZ_TINY - 1);
|
||||||
|
|
||||||
|
event_ctx->msg_buf[event_ctx->msg_len] = 0;
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
#if defined (_WIN)
|
event_ctx->msg_newline = true;
|
||||||
|
|
||||||
buf[len + 0] = '\r';
|
event_call (EVENT_LOG_ERROR, hashcat_ctx, NULL, 0);
|
||||||
buf[len + 1] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_ERROR, hashcat_ctx, buf, len + 2);
|
return event_ctx->msg_len;
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
buf[len] = '\n';
|
|
||||||
|
|
||||||
event_call (EVENT_LOG_ERROR, hashcat_ctx, buf, len + 1);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int event_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
int event_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||||
@ -188,7 +173,7 @@ int event_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
hc_thread_mutex_init (event_ctx->mux_event);
|
hc_thread_mutex_init (event_ctx->mux_event);
|
||||||
|
|
||||||
event_ctx->last_len = 0;
|
event_ctx->msg_len = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -199,5 +184,5 @@ void event_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
hc_thread_mutex_delete (event_ctx->mux_event);
|
hc_thread_mutex_delete (event_ctx->mux_event);
|
||||||
|
|
||||||
event_ctx->last_len = 0;
|
event_ctx->msg_len = 0;
|
||||||
}
|
}
|
||||||
|
33
src/main.c
33
src/main.c
@ -19,19 +19,23 @@
|
|||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
static void main_log (hashcat_ctx_t *hashcat_ctx, const char *buf, const size_t len, FILE *fp)
|
static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp)
|
||||||
{
|
{
|
||||||
if (len == 0) return;
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
|
const char *msg_buf = event_ctx->msg_buf;
|
||||||
|
const int msg_len = event_ctx->msg_len;
|
||||||
|
const bool msg_newline = event_ctx->msg_newline;
|
||||||
|
|
||||||
// handle last_len
|
// handle last_len
|
||||||
|
|
||||||
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
const int prev_len = event_ctx->prev_len;
|
||||||
|
|
||||||
if (event_ctx->last_len)
|
if (prev_len)
|
||||||
{
|
{
|
||||||
fputc ('\r', fp);
|
fputc ('\r', fp);
|
||||||
|
|
||||||
for (int i = 0; i < event_ctx->last_len; i++)
|
for (int i = 0; i < prev_len; i++)
|
||||||
{
|
{
|
||||||
fputc (' ', fp);
|
fputc (' ', fp);
|
||||||
}
|
}
|
||||||
@ -39,25 +43,30 @@ static void main_log (hashcat_ctx_t *hashcat_ctx, const char *buf, const size_t
|
|||||||
fputc ('\r', fp);
|
fputc ('\r', fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf[len - 1] == '\n')
|
if (msg_newline == true)
|
||||||
{
|
{
|
||||||
event_ctx->last_len = 0;
|
event_ctx->prev_len = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
event_ctx->last_len = len;
|
event_ctx->prev_len = msg_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// finally, print
|
// finally, print
|
||||||
|
|
||||||
fwrite (buf, len, 1, fp);
|
fwrite (msg_buf, msg_len, 1, fp);
|
||||||
|
|
||||||
|
if (msg_newline == true)
|
||||||
|
{
|
||||||
|
fwrite (EOL, sizeof (EOL), 1, fp);
|
||||||
|
}
|
||||||
|
|
||||||
fflush (fp);
|
fflush (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void main_log_info (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
static void main_log_info (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
||||||
{
|
{
|
||||||
main_log (hashcat_ctx, buf, len, stdout);
|
main_log (hashcat_ctx, stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void main_log_warning (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
static void main_log_warning (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
||||||
@ -66,7 +75,7 @@ static void main_log_warning (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNU
|
|||||||
|
|
||||||
fwrite (PREFIX_WARNING, sizeof (PREFIX_WARNING), 1, stdout);
|
fwrite (PREFIX_WARNING, sizeof (PREFIX_WARNING), 1, stdout);
|
||||||
|
|
||||||
main_log (hashcat_ctx, buf, len, stdout);
|
main_log (hashcat_ctx, stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void main_log_error (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
static void main_log_error (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
||||||
@ -75,7 +84,7 @@ static void main_log_error (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSE
|
|||||||
|
|
||||||
fwrite (PREFIX_ERROR, sizeof (PREFIX_ERROR), 1, stderr);
|
fwrite (PREFIX_ERROR, sizeof (PREFIX_ERROR), 1, stderr);
|
||||||
|
|
||||||
main_log (hashcat_ctx, buf, len, stderr);
|
main_log (hashcat_ctx, stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void main_welcome_screen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
static void main_welcome_screen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
|
||||||
|
@ -4,12 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "event.h"
|
|
||||||
#include "user_options.h"
|
#include "user_options.h"
|
||||||
#include "hashcat.h"
|
#include "hashcat.h"
|
||||||
|
|
||||||
@ -35,7 +34,9 @@ int main ()
|
|||||||
{
|
{
|
||||||
// hashcat main context
|
// hashcat main context
|
||||||
|
|
||||||
hashcat_ctx_t *hashcat_ctx = (hashcat_ctx_t *) malloc (sizeof (hashcat_ctx_t)); VERIFY_PTR (hashcat_ctx);
|
hashcat_ctx_t *hashcat_ctx = (hashcat_ctx_t *) malloc (sizeof (hashcat_ctx_t));
|
||||||
|
|
||||||
|
assert (hashcat_ctx);
|
||||||
|
|
||||||
const int rc_hashcat_init = hashcat_ctx_init (hashcat_ctx, event);
|
const int rc_hashcat_init = hashcat_ctx_init (hashcat_ctx, event);
|
||||||
|
|
||||||
@ -74,6 +75,12 @@ int main ()
|
|||||||
{
|
{
|
||||||
puts ("YAY, all hashes cracked!!");
|
puts ("YAY, all hashes cracked!!");
|
||||||
}
|
}
|
||||||
|
else if (rc_hashcat == -1)
|
||||||
|
{
|
||||||
|
event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
|
||||||
|
|
||||||
|
fprintf (stderr, "%s\n", event_ctx->msg_buf);
|
||||||
|
}
|
||||||
|
|
||||||
hashcat_ctx_destroy (hashcat_ctx);
|
hashcat_ctx_destroy (hashcat_ctx);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user