static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target, int level, const char *text) { char windownum[MAX_INT_STRLEN]; char **targets, **tmp; LOG_REC *log; if (window != NULL) { /* save to log created with /WINDOW LOG */ ltoa(windownum, window->refnum); log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); if (log != NULL) log_write_rec(log, text, level); } if (target == NULL) log_file_write(server_tag, NULL, level, text, FALSE); else { /* there can be multiple items separated with comma */ targets = g_strsplit(target, ",", -1); for (tmp = targets; *tmp != NULL; tmp++) log_file_write(server_tag, *tmp, level, text, FALSE); g_strfreev(targets); } }
void log_event(const char *format, ...) { va_list args; int count1, count2; if (log.fd < 0) return; /* * Handle possible recursion: * log_*() -> ... -> pexit() -> ... -> log_event() */ if (in_logger) return; in_logger = 1; count1 = log_time(); if (count1 > 0 && count1 + strlen(format) < LINE_BUFFER_SIZE - 500 - 1) { log.ptr += count1; va_start(args, format); count2 = (int)vsprintf(log.ptr, format, args); va_end(args); if (count2 > 0) { log.ptr += count2; *log.ptr++ = '\n'; } else log.ptr -= count1; if (log_file_write(&log)) log_file_flush(&pot); } in_logger = 0; }
void log_event(const char *format, ...) { va_list args; int count1, count2; if (options.flags & FLG_LOG_STDERR) { unsigned int time; #ifndef HAVE_MPI if (options.fork) #else if (options.fork || mpi_p > 1) #endif fprintf(stderr, "%u ", options.node_min); time = pot.fd >= 0 ? status_get_time() : status_restored_time; fprintf(stderr, "%u:%02u:%02u:%02u ", time / 86400, time % 86400 / 3600, time % 3600 / 60, time % 60); va_start(args, format); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, "\n"); return; } if (log.fd < 0) return; /* * Handle possible recursion: * log_*() -> ... -> pexit() -> ... -> log_event() */ if (in_logger) return; in_logger = 1; count1 = log_time(); if (count1 > 0 && count1 + strlen(format) < LINE_BUFFER_SIZE - 500 - 1) { log.ptr += count1; va_start(args, format); count2 = (int)vsprintf(log.ptr, format, args); va_end(args); if (count2 > 0) { log.ptr += count2; *log.ptr++ = '\n'; } else log.ptr -= count1; if (log_file_write(&log)) log_file_flush(&pot); } in_logger = 0; }
void log_guess(char *login, char *ciphertext, char *plaintext) { int count1, count2; printf("%-16s (%s)\n", plaintext, login); in_logger = 1; if (pot.fd >= 0 && ciphertext && strlen(ciphertext) + strlen(plaintext) <= LINE_BUFFER_SIZE - 3) { count1 = (int)sprintf(pot.ptr, "%s:%s\n", ciphertext, plaintext); if (count1 > 0) pot.ptr += count1; } if (log.fd >= 0 && strlen(login) < LINE_BUFFER_SIZE - 64) { count1 = log_time(); if (count1 > 0) { log.ptr += count1; count2 = (int)sprintf(log.ptr, "+ Cracked %s\n", login); if (count2 > 0) log.ptr += count2; else log.ptr -= count1; } } /* Try to keep the two files in sync */ if (log_file_write(&pot)) log_file_flush(&log); else if (log_file_write(&log)) log_file_flush(&pot); in_logger = 0; if (cfg_beep) write_loop(fileno(stderr), "\007", 1); }
void log_output(log_type *log, char *format, ... ) { char buf[ 1024 ]; assert(log); assert(format); // I use vsprintf() from the C RTL instead of wvsprintf() from the // WIN API so that I can use floating point. vsprintf( buf, format, (char *)&format + sizeof( format ) ); strcat(buf,"\n"); log_file_write(log,buf); }
static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target, int level, const char *text) { char windownum[MAX_INT_STRLEN]; LOG_REC *log; if (window != NULL) { /* save to log created with /WINDOW LOG */ ltoa(windownum, window->refnum); log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); if (log != NULL) log_write_rec(log, text, level); } log_file_write(server_tag, target, level, text, FALSE); }
void log_guess(char *login, char *uid, char *ciphertext, char *rep_plain, char *store_plain, char field_sep, int index) { int count1, count2; int len; char spacer[] = " "; char *secret = ""; char uid_sep[2] = { 0 }; char *uid_out = ""; /* This is because printf("%-16s") does not line up multibyte UTF-8. We need to count characters, not octets. */ if (pers_opts.target_enc == UTF_8 || pers_opts.report_utf8) len = strlen8((UTF8*)rep_plain); else len = strlen(rep_plain); if (options.show_uid_on_crack && uid && *uid) { uid_sep[0] = field_sep; uid_out = uid; } if (options.verbosity > 1) { if (options.secure) { secret = components(rep_plain, len); printf("%-16s (%s%s%s)\n", secret, login, uid_sep, uid_out); } else { spacer[len > 16 ? 0 : 16 - len] = 0; printf("%s%s (%s%s%s)\n", rep_plain, spacer, login, uid_sep, uid_out); if (options.fork) fflush(stdout); } } in_logger = 1; if (pot.fd >= 0 && ciphertext ) { #ifndef DYNAMIC_DISABLED if (!strncmp(ciphertext, "$dynamic_", 9)) ciphertext = dynamic_FIX_SALT_TO_HEX(ciphertext); #endif if (strlen(ciphertext) + strlen(store_plain) <= LINE_BUFFER_SIZE - 3) { if (options.secure) { secret = components(store_plain, len); count1 = (int)sprintf(pot.ptr, "%s%c%s\n", ciphertext, field_sep, secret); } else count1 = (int)sprintf(pot.ptr, "%s%c%s\n", ciphertext, field_sep, store_plain); if (count1 > 0) pot.ptr += count1; } } if (log.fd >= 0 && strlen(login) < LINE_BUFFER_SIZE - 64) { count1 = log_time(); if (count1 > 0) { log.ptr += count1; count2 = (int)sprintf(log.ptr, "+ Cracked %s%s%s", login, uid_sep, uid_out); if (options.secure) { secret = components(rep_plain, len); count2 += (int)sprintf(log.ptr + count2, ": %s", secret); } else if (cfg_log_passwords) count2 += (int)sprintf(log.ptr + count2, ": %s", rep_plain); if (cfg_showcand) count2 += (int)sprintf(log.ptr + count2, " as candidate #"LLu"", ((unsigned long long) status.cands.hi << 32) + status.cands.lo + index + 1); count2 += (int)sprintf(log.ptr + count2, "\n"); if (count2 > 0) log.ptr += count2; else log.ptr -= count1; } } /* Try to keep the two files in sync */ if (log_file_write(&pot)) log_file_flush(&log); else if (log_file_write(&log)) log_file_flush(&pot); in_logger = 0; if (cfg_beep) write_loop(fileno(stderr), "\007", 1); }
void log_guess(char *login, char *ciphertext, char *rep_plain, char *store_plain, char field_sep) { int count1, count2; int len; char spacer[] = " "; // This is because printf("%-16s") does not line up multibyte UTF-8. // We need to count characters, not octets. if (options.utf8 || options.report_utf8) len = strlen8((UTF8*)rep_plain); else len = strlen(rep_plain); spacer[len > 16 ? 0 : 16 - len] = 0; #ifdef HAVE_MPI // All but node 0 has stdout closed so we output to stderr if (mpi_p > 1) fprintf(stderr, "%s%s (%s)\n", rep_plain, spacer, login); else #endif printf("%s%s (%s)\n", rep_plain, spacer, login); in_logger = 1; if (pot.fd >= 0 && ciphertext ) { if (!strncmp(ciphertext, "$dynamic_", 9)) ciphertext = dynamic_FIX_SALT_TO_HEX(ciphertext); if (strlen(ciphertext) + strlen(store_plain) <= LINE_BUFFER_SIZE - 3) { count1 = (int)sprintf(pot.ptr, "%s%c%s\n", ciphertext, field_sep, store_plain); if (count1 > 0) pot.ptr += count1; } } if (log.fd >= 0 && strlen(login) < LINE_BUFFER_SIZE - 64) { count1 = log_time(); if (count1 > 0) { log.ptr += count1; if (cfg_log_passwords) count2 = (int)sprintf(log.ptr, "+ Cracked %s: %s\n", login, rep_plain); else count2 = (int)sprintf(log.ptr, "+ Cracked %s\n", login); if (count2 > 0) log.ptr += count2; else log.ptr -= count1; } } /* Try to keep the two files in sync */ if (log_file_write(&pot)) log_file_flush(&log); else if (log_file_write(&log)) log_file_flush(&pot); in_logger = 0; if (cfg_beep) write_loop(fileno(stderr), "\007", 1); }