1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Worker #ifndef _GNU_SOURCE
6*bb4ee6a4SAndroid Build Coastguard Worker #define _GNU_SOURCE
7*bb4ee6a4SAndroid Build Coastguard Worker #endif
8*bb4ee6a4SAndroid Build Coastguard Worker
9*bb4ee6a4SAndroid Build Coastguard Worker #include <errno.h>
10*bb4ee6a4SAndroid Build Coastguard Worker #include <fcntl.h>
11*bb4ee6a4SAndroid Build Coastguard Worker #include <linux/fs.h>
12*bb4ee6a4SAndroid Build Coastguard Worker #include <stdio.h>
13*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/stat.h>
14*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/types.h>
15*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/ioctl.h>
16*bb4ee6a4SAndroid Build Coastguard Worker #include <unistd.h>
17*bb4ee6a4SAndroid Build Coastguard Worker
18*bb4ee6a4SAndroid Build Coastguard Worker extern char* program_invocation_short_name;
19*bb4ee6a4SAndroid Build Coastguard Worker
main(int argc,char ** argv)20*bb4ee6a4SAndroid Build Coastguard Worker int main(int argc, char** argv) {
21*bb4ee6a4SAndroid Build Coastguard Worker if (argc != 2) {
22*bb4ee6a4SAndroid Build Coastguard Worker printf("Usage: %s <path_to_directory>\n", program_invocation_short_name);
23*bb4ee6a4SAndroid Build Coastguard Worker return 1;
24*bb4ee6a4SAndroid Build Coastguard Worker }
25*bb4ee6a4SAndroid Build Coastguard Worker
26*bb4ee6a4SAndroid Build Coastguard Worker int dir = open(argv[1], O_DIRECTORY | O_CLOEXEC);
27*bb4ee6a4SAndroid Build Coastguard Worker if (dir < 0) {
28*bb4ee6a4SAndroid Build Coastguard Worker perror("Failed to open directory");
29*bb4ee6a4SAndroid Build Coastguard Worker return 1;
30*bb4ee6a4SAndroid Build Coastguard Worker }
31*bb4ee6a4SAndroid Build Coastguard Worker
32*bb4ee6a4SAndroid Build Coastguard Worker struct fscrypt_policy policy;
33*bb4ee6a4SAndroid Build Coastguard Worker int ret = ioctl(dir, FS_IOC_GET_ENCRYPTION_POLICY, &policy);
34*bb4ee6a4SAndroid Build Coastguard Worker if (ret < 0) {
35*bb4ee6a4SAndroid Build Coastguard Worker perror("FS_IOC_GET_ENCRYPTION_POLICY failed");
36*bb4ee6a4SAndroid Build Coastguard Worker return 1;
37*bb4ee6a4SAndroid Build Coastguard Worker }
38*bb4ee6a4SAndroid Build Coastguard Worker
39*bb4ee6a4SAndroid Build Coastguard Worker printf("File system encryption policy:\n");
40*bb4ee6a4SAndroid Build Coastguard Worker printf("\tversion = %#x\n", policy.version);
41*bb4ee6a4SAndroid Build Coastguard Worker printf("\tcontents_encryption_mode = %#x\n", policy.contents_encryption_mode);
42*bb4ee6a4SAndroid Build Coastguard Worker printf("\tfilenames_encryption_mode = %#x\n",
43*bb4ee6a4SAndroid Build Coastguard Worker policy.filenames_encryption_mode);
44*bb4ee6a4SAndroid Build Coastguard Worker printf("\tflags = %#x\n", policy.flags);
45*bb4ee6a4SAndroid Build Coastguard Worker printf("\tmaster_key_descriptor = 0x");
46*bb4ee6a4SAndroid Build Coastguard Worker for (int i = 0; i < FS_KEY_DESCRIPTOR_SIZE; ++i) {
47*bb4ee6a4SAndroid Build Coastguard Worker printf("%x", policy.master_key_descriptor[i]);
48*bb4ee6a4SAndroid Build Coastguard Worker }
49*bb4ee6a4SAndroid Build Coastguard Worker printf("\n");
50*bb4ee6a4SAndroid Build Coastguard Worker
51*bb4ee6a4SAndroid Build Coastguard Worker ret = ioctl(dir, FS_IOC_SET_ENCRYPTION_POLICY, &policy);
52*bb4ee6a4SAndroid Build Coastguard Worker if (ret < 0) {
53*bb4ee6a4SAndroid Build Coastguard Worker perror("FS_IOC_SET_ENCRYPTION_POLICY failed");
54*bb4ee6a4SAndroid Build Coastguard Worker return 1;
55*bb4ee6a4SAndroid Build Coastguard Worker }
56*bb4ee6a4SAndroid Build Coastguard Worker
57*bb4ee6a4SAndroid Build Coastguard Worker return 0;
58*bb4ee6a4SAndroid Build Coastguard Worker }
59