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) {
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);
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.");
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;
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;
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,
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));
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),
" %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),
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);
}
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);
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;
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;
size_t x, n;
tfc_fsize rwd;
+ progpid = getpid();
progname = basename(argv[0]);
if (!isatty(2)) do_statline_dynamic = NO;
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) == '=') {
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;
}
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;
_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) {
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;
}
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);
}
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;
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;
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;
}
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;
}
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;
}
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;
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;
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);