From: Andrey Rys Date: Sun, 28 Nov 2021 13:27:08 +0000 (+0100) Subject: -O pid: show/log process id of running tfcrypt. X-Git-Url: https://jxself.org/git/?p=tfcrypt.git;a=commitdiff_plain;h=cdd9119e29f2f865403303adb8b6004b863db968 -O pid: show/log process id of running tfcrypt. --- diff --git a/VERSION b/VERSION index 95f9650..e373ee6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -49 +50 diff --git a/tfc_bench.c b/tfc_bench.c index 435354b..e8ddaa3 100644 --- a/tfc_bench.c +++ b/tfc_bench.c @@ -54,7 +54,7 @@ void do_benchmark(tfc_useconds useconds, double dseconds) if (ctr_mode == TFC_MODE_STREAM) tfe_init_iv(&tfe, key, ctr); if (ctr_mode == TFC_MODE_XTS) tfc_getrandom(xtskey, sizeof(xtskey)); - tfc_nfsay(stdout, "%s: doing %s benchmark for %.4f seconds ... ", progname, tfc_modename(ctr_mode), dseconds); + tfc_nfsay(stdout, "%s: doing %s benchmark for %.4f seconds ... ", tfc_format_pid(progname), tfc_modename(ctr_mode), dseconds); do_stop = NO; while (1) { diff --git a/tfc_error.c b/tfc_error.c index d95f420..9bface1 100644 --- a/tfc_error.c +++ b/tfc_error.c @@ -39,7 +39,7 @@ void xerror(tfc_yesno noexit, tfc_yesno noerrno, tfc_yesno nostats, const char * if (statline_was_shown == YES && do_statline_dynamic == YES) tfc_esay("\n"); - tfc_nfsay(stderr, "%s: ", progname); + tfc_nfsay(stderr, "%s: ", tfc_format_pid(progname)); tfc_vfsay(stderr, NO, fmt, ap); if (errno && noerrno == NO) { s = strerror(errno); @@ -317,6 +317,7 @@ void usage(void) tfc_say(" norepeat: do not ask for any possible password confirmations."); tfc_say(" showsecrets: show passwords in plaintext instead of masking them."); tfc_say(" finished: add \"finished\" word before status line when work is finished."); + tfc_say(" pid: show %s's process id near it's name in error messages, logs etc.", progname); tfc_say(" prompt=str: set main password prompts to this string."); tfc_say(" macprompt=str: set MAC password prompts to this string."); tfc_say(" shorthex: with -H, do not print printable characters, dump only hex string."); diff --git a/tfc_misc.c b/tfc_misc.c index a39f459..44e1117 100644 --- a/tfc_misc.c +++ b/tfc_misc.c @@ -116,6 +116,17 @@ char *tfc_format_time(tfc_useconds t) return r; } +char *tfc_format_pid(const char *str) +{ + static char r[128]; + size_t n; + + n = xstrlcpy(r, str, sizeof(r)); + if (show_pid == YES && sizeof(r)-n >= 22) sprintf(r+n, "[%lu]", (unsigned long)progpid); + + return r; +} + tfc_fsize tfc_fdsize(int fd) { off_t l, cur; diff --git a/tfc_random.c b/tfc_random.c index 360b658..9f9105a 100644 --- a/tfc_random.c +++ b/tfc_random.c @@ -138,7 +138,7 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) if (ctr_mode == TFC_MODE_PLAIN) memset(srcblk, 0, sizeof(srcblk)); if (verbose) tfc_nfsay(stderr, "%s: writing %lld bytes to %s ... ", - progname, nrbytes, foutname); + tfc_format_pid(progname), nrbytes, foutname); errno = 0; do_stop = NO; diff --git a/tfc_signal.c b/tfc_signal.c index b0d6e48..25d765e 100644 --- a/tfc_signal.c +++ b/tfc_signal.c @@ -81,7 +81,7 @@ void print_crypt_status(int signal) if (bench_timer) { tfc_say("done!"); - tfc_say("%s %s benchmark results:", progname, tfc_modename(ctr_mode)); + tfc_say("%s %s benchmark results:", tfc_format_pid(progname), tfc_modename(ctr_mode)); tfc_nfsay(stdout, "%s %llu (%.2f%s) bytes, " "avg. speed %llu (%.2f%s) B/s, time %.4fs.", oper_mode, @@ -98,7 +98,7 @@ void print_crypt_status(int signal) tfc_nfsay(stderr, "%s%s%s:" " %s %.2f%s," " %.2f%s B/s @%s", - inplace, (last && show_when_done) ? "finished: " : "", progname, + inplace, (last && show_when_done) ? "finished: " : "", tfc_format_pid(progname), oper_mode, human_totalproc_dst, tfc_getscale(dst_scale_idx), human_wr_speed, tfc_getscale(wr_speed_scale), tfc_format_time(total_time)); @@ -107,7 +107,7 @@ void print_crypt_status(int signal) if (ctr_mode <= TFC_MODE_PLAIN) tfc_nfsay(stderr, "%s%s%s: read: %llu (%.2f%s)," " %s %llu (%.2f%s) bytes," " (%llu (%.2f%s) B/s), time %s", - inplace, (last && show_when_done) ? "finished: " : "", progname, + inplace, (last && show_when_done) ? "finished: " : "", tfc_format_pid(progname), total_processed_src, human_totalproc_src, tfc_getscale(src_scale_idx), oper_mode, total_processed_dst, human_totalproc_dst, tfc_getscale(dst_scale_idx), @@ -116,7 +116,7 @@ void print_crypt_status(int signal) " %s %s %llu (%.2f%s) bytes," " written %llu (%.2f%s) bytes," " (%llu (%.2f%s) B/s), time %s", - inplace, (last && show_when_done) ? "finished: " : "", progname, + inplace, (last && show_when_done) ? "finished: " : "", tfc_format_pid(progname), total_processed_src, human_totalproc_src, tfc_getscale(src_scale_idx), tfc_modename(ctr_mode), oper_mode, total_processed_dst, human_totalproc_dst, tfc_getscale(dst_scale_idx), @@ -160,7 +160,7 @@ void change_status_timer(int signal) else status_timer *= 2; if (verbose) tfc_esay("%s: status timer was changed to %.2fs", - progname, TFC_UTODSECS(status_timer)); + tfc_format_pid(progname), TFC_UTODSECS(status_timer)); setup_next_alarm(status_timer); } diff --git a/tfc_skein.c b/tfc_skein.c index 8102f70..58cd36e 100644 --- a/tfc_skein.c +++ b/tfc_skein.c @@ -252,7 +252,7 @@ _dothat: fclose(f); if (failed) { tfc_esay("%s: WARNING: %u of %u computed checksums did NOT match", - progname, failed, totaltested); + tfc_format_pid(progname), failed, totaltested); exitcode = 1; } xexit(exitcode); diff --git a/tfc_vars.c b/tfc_vars.c index 0148f77..6ef6e59 100644 --- a/tfc_vars.c +++ b/tfc_vars.c @@ -31,6 +31,7 @@ char *progname; int exitcode; +pid_t progpid; tfc_byte key[TF_KEY_SIZE], ctr[TF_BLOCK_SIZE], xtskey[TF_KEY_SIZE], mackey[TF_FROM_BITS(TF_MAX_BITS)], tweak[TF_TWEAK_SIZE]; struct skein sk; @@ -63,7 +64,7 @@ int do_edcrypt = TFC_DO_ENCRYPT, do_stop, quiet, error_action; int counter_opt, mackey_opt, do_mac, do_outfmt = TFC_OUTFMT_B64, rawkey; int idx, write_flags; tfc_yesno catch_all_errors, ignore_seek_errors, password, overwrite_source, do_fsync, do_pad, do_ftrunc = TFC_NO_FTRUNC; -tfc_yesno do_preserve_time, do_stats_in_gibs, do_statline_dynamic = YES, do_less_stats; +tfc_yesno do_preserve_time, do_stats_in_gibs, do_statline_dynamic = YES, do_less_stats, show_pid; tfc_yesno no_repeat, do_full_hexdump = YES, verbose, statline_was_shown, show_secrets, show_when_done; char *srcfname = TFC_STDIN_NAME, *dstfname = TFC_STDOUT_NAME, *do_mac_file, *counter_file, *sksum_hashlist_file; char *saltf, *genkeyf, *mackeyf, *tweakf; diff --git a/tfcrypt.c b/tfcrypt.c index 4eb2b04..dd137ae 100644 --- a/tfcrypt.c +++ b/tfcrypt.c @@ -131,6 +131,7 @@ int main(int argc, char **argv) size_t x, n; tfc_fsize rwd; + progpid = getpid(); progname = basename(argv[0]); if (!isatty(2)) do_statline_dynamic = NO; @@ -336,6 +337,8 @@ _baddfname: show_secrets = YES; else if (!strcmp(s, "finished")) show_when_done = YES; + else if (!strcmp(s, "pid")) + show_pid = YES; else if (!strncmp(s, "logfile", 7) && *(s+7) == '=') open_log(s+8); else if (!strncmp(s, "iobs", 4) && *(s+4) == '=') { @@ -767,7 +770,7 @@ _nokeyfd: if (do_edcrypt == TFC_DO_DECRYPT && do_mac != NO && maxlen != NOFSIZE) { if (verbose) tfc_esay("%s: disabling signature verification on " - "requested partial decryption.", progname); + "requested partial decryption.", tfc_format_pid(progname)); do_mac = NO; } @@ -842,7 +845,7 @@ _ctrskip1: if (ctr_mode == TFC_MODE_PLAIN) goto _plain; - if (verbose) tfc_esay("%s: hashing password", progname); + if (verbose) tfc_esay("%s: hashing password", tfc_format_pid(progname)); if (rawkey == TFC_RAWKEY_KEYFILE) { tfc_yesno xtskeyset = NO; @@ -1000,9 +1003,9 @@ _pwdagain: memset(&getps, 0, sizeof(struct getpasswd_state)); _xts2genkey: if (xwrite(krfd, pblk, TF_FROM_BITS(TFC_KEY_BITS)) == NOSIZE) xerror(NO, NO, YES, "%s", genkeyf); if (do_fsync && fsync(krfd) == -1) xerror(NO, NO, YES, "%s", genkeyf); if (verbose && xtskeyset == NO) { - tfc_esay("%s: password hashing done", progname); - tfc_esay("%s: rawkey written to %s.", progname, genkeyf); - tfc_esay("%s: Have a nice day!", progname); + tfc_esay("%s: password hashing done", tfc_format_pid(progname)); + tfc_esay("%s: rawkey written to %s.", tfc_format_pid(progname), genkeyf); + tfc_esay("%s: Have a nice day!", tfc_format_pid(progname)); } if (ctr_mode == TFC_MODE_XTS) { @@ -1020,7 +1023,7 @@ _xts2genkey: if (xwrite(krfd, pblk, TF_FROM_BITS(TFC_KEY_BITS)) == NOSIZE) xerro if (iseek_blocks && (do_edcrypt == TFC_DO_DECRYPT && do_mac != NO)) { if (verbose) tfc_esay("%s: disabling signature verification on " - "requested partial decryption.", progname); + "requested partial decryption.", tfc_format_pid(progname)); do_mac = NO; } @@ -1028,7 +1031,7 @@ _xts2genkey: if (xwrite(krfd, pblk, TF_FROM_BITS(TFC_KEY_BITS)) == NOSIZE) xerro if (mackey_opt == TFC_MACKEY_RAWKEY) skein(mackey, TF_MAX_BITS, key, key, TF_FROM_BITS(TFC_KEY_BITS)); if (ctr_mode < TFC_MODE_OCB) { if (verbose) tfc_esay("%s: doing MAC calculation, processing speed " - "will be slower.", progname); + "will be slower.", tfc_format_pid(progname)); if (mackey_opt) skein_init_key(&sk, mackey, macbits); else skein_init(&sk, macbits); } @@ -1066,7 +1069,7 @@ _ctrskip2: xclose(kfd); kfd = -1; } - if (verbose) tfc_esay("%s: password hashing done", progname); + if (verbose) tfc_esay("%s: password hashing done", tfc_format_pid(progname)); if (overwrite_source && srcfname) argv[idx] = srcfname; @@ -1138,7 +1141,7 @@ _ctrwagain: lio = xwrite(dfd, pblk, lrem); if (do_mac == TFC_MAC_JUST_VRFY2) { rwd = tfc_fdgetpos(sfd); if (rwd == NOFSIZE) { - tfc_esay("%s: WARNING: input is not seekable, disabling MAC testing mode", progname); + tfc_esay("%s: WARNING: input is not seekable, disabling MAC testing mode", tfc_format_pid(progname)); do_mac = TFC_MAC_VRFY; } goto _nodecrypt_again_vrfy2; @@ -1298,7 +1301,7 @@ _macragain: lio = xread(sfd, pblk, lrem); if (ldone < TF_FROM_BITS(macbits)) { if (quiet == NO) tfc_esay("%s: short signature (%zu), " - "not verifying", progname, ldone); + "not verifying", tfc_format_pid(progname), ldone); exitcode = 1; goto _shortmac; } @@ -1315,14 +1318,14 @@ _macragain: lio = xread(sfd, pblk, lrem); if (!memcmp(tmpdata, macresult, TF_FROM_BITS(macbits))) { if (quiet == NO) { - tfc_esay("%s: signature is good", progname); + tfc_esay("%s: signature is good", tfc_format_pid(progname)); if (verbose) { if (do_outfmt == TFC_OUTFMT_B64) tfc_printbase64(stderr, macresult, TF_FROM_BITS(macbits), YES); else mehexdump(macresult, TF_FROM_BITS(macbits), TF_FROM_BITS(macbits), YES); } } if (do_mac == TFC_MAC_JUST_VRFY2) { - if (verbose) tfc_esay("%s: -u: MAC signature is valid, proceeding with decrypting it again", progname); + if (verbose) tfc_esay("%s: -u: MAC signature is valid, proceeding with decrypting it again", tfc_format_pid(progname)); do_mac = TFC_MAC_DROP; goto _decrypt_again_vrfy2; } @@ -1330,8 +1333,8 @@ _macragain: lio = xread(sfd, pblk, lrem); else { if (quiet == NO) { tfc_esay("%s: signature is BAD: " - "wrong password, key, mode, or file is not signed", progname); - if (do_mac == TFC_MAC_JUST_VRFY2) tfc_esay("%s: -u: MAC signature is invalid, not decrypting it again", progname); + "wrong password, key, mode, or file is not signed", tfc_format_pid(progname)); + if (do_mac == TFC_MAC_JUST_VRFY2) tfc_esay("%s: -u: MAC signature is invalid, not decrypting it again", tfc_format_pid(progname)); } exitcode = 1; } diff --git a/tfcrypt.h b/tfcrypt.h index 1b5f811..569e82c 100644 --- a/tfcrypt.h +++ b/tfcrypt.h @@ -132,6 +132,7 @@ extern tfc_yesno do_full_key; extern char *progname; extern int exitcode; +extern pid_t progpid; extern tfc_byte key[TF_KEY_SIZE], ctr[TF_BLOCK_SIZE], xtskey[TF_KEY_SIZE], mackey[TF_FROM_BITS(TF_MAX_BITS)], tweak[TF_TWEAK_SIZE]; extern struct skein sk; extern struct tfe_stream tfe; @@ -157,7 +158,7 @@ extern int do_edcrypt, do_stop, quiet, error_action; extern int counter_opt, mackey_opt, do_mac, do_outfmt, rawkey; extern int idx, write_flags; extern tfc_yesno catch_all_errors, ignore_seek_errors, password, overwrite_source, do_fsync, do_pad, do_ftrunc; -extern tfc_yesno do_preserve_time, do_stats_in_gibs, do_statline_dynamic, do_less_stats; +extern tfc_yesno do_preserve_time, do_stats_in_gibs, do_statline_dynamic, do_less_stats, show_pid; extern tfc_yesno no_repeat, do_full_hexdump, verbose, statline_was_shown, show_secrets, show_when_done; extern char *srcfname, *dstfname, *do_mac_file, *counter_file, *sksum_hashlist_file; extern char *saltf, *genkeyf, *mackeyf, *tweakf; @@ -190,6 +191,7 @@ void xclose(int fd); const char *tfc_modename(int mode); void tfc_getcurtime(tfc_useconds *tx); char *tfc_format_time(tfc_useconds t); +char *tfc_format_pid(const char *str); tfc_fsize tfc_fdsize(int fd); tfc_fsize tfc_fdgetpos(int fd); tfc_fsize tfc_fnamesize(char *fname, tfc_yesno noexit);