-O pid: show/log process id of running tfcrypt.
authorAndrey Rys <rys@lynxlynx.ru>
Sun, 28 Nov 2021 13:27:08 +0000 (14:27 +0100)
committerAndrey Rys <rys@lynxlynx.ru>
Sun, 28 Nov 2021 13:27:08 +0000 (14:27 +0100)
VERSION
tfc_bench.c
tfc_error.c
tfc_misc.c
tfc_random.c
tfc_signal.c
tfc_skein.c
tfc_vars.c
tfcrypt.c
tfcrypt.h

diff --git a/VERSION b/VERSION
index 95f9650f0151d7c0d3aecf40355d88effbd5b7a7..e373ee695f6e76d7d3f8f8c4e92d1d60995352e5 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-49
+50
index 435354b27aeb96cceef6628db524c89c8ac39280..e8ddaa3a7f5803b9890c54552cc6928de89cac4d 100644 (file)
@@ -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) {
index d95f420f2f13d33dc00716a31d58a70964eab560..9bface14b50b5b13535f703ce82c188df21ecf1f 100644 (file)
@@ -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.");
index a39f4591831ddf988f8cbcb74ab323658c74b76a..44e1117be6342ec710d8e6848824cd55b9d6f895 100644 (file)
@@ -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;
index 360b6584e8c2e0ed273235b519aa89d9b6f2e1ad..9f9105af68fdaf9a53beca93f24ff1e43882309d 100644 (file)
@@ -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;
index b0d6e482f1bb7fabb82ae0f5df6b7bad60848fe0..25d765e7ed0f9a6806a7f2717b45b22462f0161c 100644 (file)
@@ -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);
 }
 
index 8102f70af122cff0cbeb7055150ea83267238494..58cd36e716bf6e72453217a517b68d3ea4abbca4 100644 (file)
@@ -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);
index 0148f771dd94505bb96506ac6cb0f0536a6e53e7..6ef6e59286fda23055e2b27ce75a1de0fd8b0c7d 100644 (file)
@@ -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;
index 4eb2b04cc5d620af0741ed66af20c1f7998d54e1..dd137ae6ba4d9ac26d05fd5596bee5c4e9d22d6e 100644 (file)
--- 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;
                }
index 1b5f8116faf7977db863e3c0ecc55dbe4c724853..569e82ca76f6ba1d58a50827e7ae26b848f83287 100644 (file)
--- 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);