summaryrefslogtreecommitdiff
path: root/src/utils/ecryptfs-stat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/ecryptfs-stat.c')
-rw-r--r--src/utils/ecryptfs-stat.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/utils/ecryptfs-stat.c b/src/utils/ecryptfs-stat.c
new file mode 100644
index 0000000..dda3310
--- /dev/null
+++ b/src/utils/ecryptfs-stat.c
@@ -0,0 +1,75 @@
+/**
+ * Present statistics on encrypted eCryptfs file attributes
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "../include/ecryptfs.h"
+
+static void usage(const char *filename)
+{
+ printf("Usage:\n\n"
+ "%s <filename>\n", filename);
+}
+
+int main(int argc, const char *argv[])
+{
+ const char *filename;
+ int fd = -1;
+ ssize_t quant_read;
+ struct ecryptfs_crypt_stat_user crypt_stat;
+ char buf[4096];
+ int rc = 0;
+
+ if (argc == 1) {
+ usage(argv[0]);
+ goto out;
+ }
+ filename = argv[1];
+ fd = open(filename, O_RDONLY);
+ if (fd == -1) {
+ printf("Error opening file [%s] for RD_ONLY access; errno msg "
+ "= [%m]\n", filename);
+ rc = -EIO;
+ goto out;
+ }
+ quant_read = read(fd, buf, 4096);
+ if (quant_read == -1) {
+ printf("Error attempting to read from file [%s]; errno msg "
+ "= [%m]\n", filename);
+ rc = -EIO;
+ goto out;
+ }
+ rc = ecryptfs_parse_stat(&crypt_stat, buf, quant_read);
+ if (rc) {
+ printf("Valid eCryptfs metadata information not found in [%s]"
+ "\n", filename);
+ rc = 0;
+ goto out;
+ }
+ printf("File version: [%d]\n", crypt_stat.file_version);
+ printf("Decrypted file size: [%llu]\n",
+ (unsigned long long)crypt_stat.file_size);
+ printf("Number of header bytes at front of file: [%zu]\n",
+ crypt_stat.num_header_bytes_at_front);
+ if (crypt_stat.flags & ECRYPTFS_METADATA_IN_XATTR)
+ printf("Metadata in the extended attribute region\n");
+ else
+ printf("Metadata in the header region\n");
+ if (crypt_stat.flags & ECRYPTFS_ENCRYPTED)
+ printf("Encrypted\n");
+ else
+ printf("Plaintext\n");
+ if (crypt_stat.flags & ECRYPTFS_ENABLE_HMAC)
+ printf("HMAC enabled\n");
+ else
+ printf("HMAC disabled\n");
+out:
+ if (fd != -1)
+ close(fd);
+ return rc;
+}