#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
+#include <locale.h>
+#include <langinfo.h>
#include <systemd/sd-journal.h>
ACTION_NEW_ID128,
ACTION_PRINT_HEADER,
ACTION_SETUP_KEYS,
- ACTION_VERIFY
+ ACTION_VERIFY,
+ ACTION_DISK_USAGE,
} arg_action = ACTION_SHOW;
static int help(void) {
"Commands:\n"
" --new-id128 Generate a new 128 Bit ID\n"
" --header Show journal header information\n"
+ " --disk-usage Show total disk usage\n"
#ifdef HAVE_GCRYPT
" --setup-keys Generate new FSS key pair\n"
" --interval=TIME Time interval for changing the FSS sealing key\n"
ARG_SETUP_KEYS,
ARG_INTERVAL,
ARG_VERIFY,
- ARG_VERIFY_KEY
+ ARG_VERIFY_KEY,
+ ARG_DISK_USAGE
};
static const struct option options[] = {
{ "interval", required_argument, NULL, ARG_INTERVAL },
{ "verify", no_argument, NULL, ARG_VERIFY },
{ "verify-key", required_argument, NULL, ARG_VERIFY_KEY },
+ { "disk-usage", no_argument, NULL, ARG_DISK_USAGE },
{ NULL, 0, NULL, 0 }
};
arg_action = ACTION_VERIFY;
break;
+ case ARG_DISK_USAGE:
+ arg_action = ACTION_DISK_USAGE;
+ break;
+
#ifdef HAVE_GCRYPT
case ARG_SETUP_KEYS:
arg_action = ACTION_SETUP_KEYS;
fprintf(stderr, "\nThe keys have been generated for host " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(machine));
#ifdef HAVE_QRENCODE
- fprintf(stderr, "\nTo transfer the verification key to your phone please scan the QR code below:\n\n");
- print_qr_code(stderr, seed, seed_size, n, arg_interval, hn, machine);
+ /* If this is not an UTF-8 system don't print any QR codes */
+ setlocale(LC_CTYPE, "");
+
+ if (streq_ptr(nl_langinfo(CODESET), "UTF-8")) {
+ fputs("\nTo transfer the verification key to your phone please scan the QR code below:\n\n", stderr);
+ print_qr_code(stderr, seed, seed_size, n, arg_interval, hn, machine);
+ }
#endif
free(hn);
}
goto finish;
}
+ if (arg_action == ACTION_DISK_USAGE) {
+ uint64_t bytes;
+ char sbytes[FORMAT_BYTES_MAX];
+
+ r = sd_journal_get_usage(j, &bytes);
+ if (r < 0)
+ goto finish;
+
+ printf("Journals take up %s on disk.\n", format_bytes(sbytes, sizeof(sbytes), bytes));
+ r = 0;
+ goto finish;
+ }
+
#ifdef HAVE_ACL
if (access("/var/log/journal", F_OK) < 0 && geteuid() != 0 && in_group("adm") <= 0) {
log_error("Unprivileged users can't see messages unless persistent log storage is enabled. Users in the group 'adm' can always see messages.");