Whamcloud - gitweb
tune2fs: fix an error message
[tools/e2fsprogs.git] / misc / e4crypt.c
index 3efbf6e..67d25d8 100644 (file)
@@ -26,6 +26,7 @@
 #include <getopt.h>
 #include <dirent.h>
 #include <errno.h>
+#include <stdbool.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -652,6 +653,7 @@ static void do_help(int argc, char **argv, const struct cmd_desc *cmd);
 static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
 {
        struct salt *salt;
+       bool explicit_salt = false;
        char *keyring = NULL;
        int i, opt, pad = 4;
        unsigned j;
@@ -666,8 +668,13 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                        pad = atoi(optarg);
                        break;
                case 'S':
+                       if (explicit_salt) {
+                               fputs("May only provide -S once\n", stderr);
+                               exit(1);
+                       }
                        /* Salt value for passphrase. */
                        parse_salt(optarg, 0);
+                       explicit_salt = true;
                        break;
                case 'v':
                        options |= OPT_VERBOSE;
@@ -692,8 +699,9 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                exit(1);
        }
        validate_paths(argc, argv, optind);
-       for (i = optind; i < argc; i++)
-               parse_salt(argv[i], PARSE_FLAGS_FORCE_FN);
+       if (!explicit_salt)
+               for (i = optind; i < argc; i++)
+                       parse_salt(argv[i], PARSE_FLAGS_FORCE_FN);
        printf("Enter passphrase (echo disabled): ");
        get_passphrase(in_passphrase, sizeof(in_passphrase));
        for (j = 0, salt = salt_list; j < num_salt; j++, salt++) {
@@ -702,8 +710,10 @@ static void do_add_key(int argc, char **argv, const struct cmd_desc *cmd)
                generate_key_ref_str(salt);
                insert_key_into_keyring(keyring, salt);
        }
-       if (optind != argc)
-               set_policy(NULL, pad, argc, argv, optind);
+       if (optind != argc) {
+               salt = explicit_salt ? salt_list : NULL;
+               set_policy(salt, pad, argc, argv, optind);
+       }
        clear_secrets();
        exit(0);
 }
@@ -760,7 +770,6 @@ static void do_set_policy(int argc, char **argv, const struct cmd_desc *cmd)
 static void do_get_policy(int argc, char **argv, const struct cmd_desc *cmd)
 {
        struct ext4_encryption_policy policy;
-       struct stat st;
        int i, j, fd, rc;
 
        if (argc < 2) {
@@ -771,12 +780,7 @@ static void do_get_policy(int argc, char **argv, const struct cmd_desc *cmd)
        }
 
        for (i = 1; i < argc; i++) {
-               if (stat(argv[i], &st) < 0) {
-                       perror(argv[i]);
-                       continue;
-               }
-               fd = open(argv[i],
-                         S_ISDIR(st.st_mode) ? O_DIRECTORY : O_RDONLY);
+               fd = open(argv[i], O_RDONLY);
                if (fd == -1) {
                        perror(argv[i]);
                        exit(1);