Whamcloud - gitweb
LU-6210 utils: Change positional struct initializers to C99
[fs/lustre-release.git] / lustre / utils / gss / lgss_sk.c
index de36817..f7254d2 100644 (file)
@@ -27,6 +27,7 @@
  * Author: Jeremy Filizetti <jfilizet@iu.edu>
  */
 
+#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <getopt.h>
@@ -61,11 +62,7 @@ char *sk_crypt2name[] = {
        [SK_CRYPT_AES256_CTR] = "AES-256-CTR",
 };
 
-char *sk_hmac2name[] = {
-       [SK_HMAC_EMPTY] = "NONE",
-       [SK_HMAC_SHA256] = "SHA256",
-       [SK_HMAC_SHA512] = "SHA512",
-};
+const char *sk_hmac2name[] = { "NONE", "SHA256", "SHA512" };
 
 static int sk_name2crypt(char *name)
 {
@@ -79,16 +76,26 @@ static int sk_name2crypt(char *name)
        return SK_CRYPT_INVALID;
 }
 
-static int sk_name2hmac(char *name)
+enum cfs_crypto_hash_alg sk_name2hmac(char *name)
 {
-       int i;
+       enum cfs_crypto_hash_alg algo;
+       int i = 0;
 
-       for (i = 0; i < SK_HMAC_MAX; i++) {
-               if (strcasecmp(name, sk_hmac2name[i]) == 0)
-                       return i;
+       /* convert to lower case */
+       while (name[i]) {
+               putchar(tolower(name[i]));
+               i++;
        }
 
-       return SK_HMAC_INVALID;
+       if (strcmp(name, "none"))
+               return CFS_HASH_ALG_NULL;
+
+       algo = cfs_crypto_hash_alg(name);
+       if ((algo != CFS_HASH_ALG_SHA256) ||
+           (algo != CFS_HASH_ALG_SHA512))
+               return SK_HMAC_INVALID;
+
+       return algo;
 }
 
 static void usage(FILE *fp, char *program)
@@ -109,7 +116,7 @@ static void usage(FILE *fp, char *program)
 
        fprintf(fp, "-i|--hmac       <num>      Hash algorithm for integrity "
                "(Default: SHA256)\n");
-       for (i = 1; i < SK_HMAC_MAX; i++)
+       for (i = 1; i < sizeof(sk_hmac2name) / sizeof(sk_hmac2name[0]); i++)
                fprintf(fp, "                        %s\n", sk_hmac2name[i]);
 
        fprintf(fp, "-e|--expire     <num>      Seconds before contexts from "
@@ -239,7 +246,7 @@ static int print_config(char *filename)
                printf(" client");
        printf("\n");
        printf("HMAC alg:       %s\n", sk_hmac2name[config->skc_hmac_alg]);
-       printf("Crypto alg:     %s\n", sk_crypt2name[config->skc_crypt_alg]);
+       printf("Crypto alg:     %s\n", cfs_crypto_hash_name(config->skc_hmac_alg));
        printf("Ctx Expiration: %u seconds\n", config->skc_expire);
        printf("Shared keylen:  %u bits\n", config->skc_shared_keylen);
        printf("Prime length:   %u bits\n", config->skc_prime_bits);
@@ -323,7 +330,7 @@ int main(int argc, char **argv)
        char *tmp;
        char *tmp2;
        int crypt = SK_CRYPT_EMPTY;
-       int hmac = SK_HMAC_EMPTY;
+       enum cfs_crypto_hash_alg hmac = CFS_HASH_ALG_NULL;
        int expire = -1;
        int shared_keylen = -1;
        int prime_bits = -1;
@@ -334,30 +341,29 @@ int main(int argc, char **argv)
        bool generate_prime = false;
        DH *dh;
 
-       static struct option long_opt[] = {
-               {"crypt", 1, 0, 'c'},
-               {"data", 1, 0, 'd'},
-               {"expire", 1, 0, 'e'},
-               {"fsname", 1, 0, 'f'},
-               {"mgsnids", 1, 0, 'g'},
-               {"help", 0, 0, 'h'},
-               {"hmac", 1, 0, 'i'},
-               {"integrity", 1, 0, 'i'},
-               {"key-bits", 1, 0, 'k'},
-               {"shared", 1, 0, 'k'},
-               {"load", 1, 0, 'l'},
-               {"modify", 1, 0, 'm'},
-               {"nodemap", 1, 0, 'n'},
-               {"prime-bits", 1, 0, 'p'},
-               {"read", 1, 0, 'r'},
-               {"type", 1, 0, 't'},
-               {"verbose", 0, 0, 'v'},
-               {"write", 1, 0, 'w'},
-               {0, 0, 0, 0},
-       };
+       static struct option long_opts[] = {
+       { .name = "crypt",      .has_arg = required_argument, .val = 'c'},
+       { .name = "data",       .has_arg = required_argument, .val = 'd'},
+       { .name = "expire",     .has_arg = required_argument, .val = 'e'},
+       { .name = "fsname",     .has_arg = required_argument, .val = 'f'},
+       { .name = "mgsnids",    .has_arg = required_argument, .val = 'g'},
+       { .name = "help",       .has_arg = no_argument,       .val = 'h'},
+       { .name = "hmac",       .has_arg = required_argument, .val = 'i'},
+       { .name = "integrity",  .has_arg = required_argument, .val = 'i'},
+       { .name = "key-bits",   .has_arg = required_argument, .val = 'k'},
+       { .name = "shared",     .has_arg = required_argument, .val = 'k'},
+       { .name = "load",       .has_arg = required_argument, .val = 'l'},
+       { .name = "modify",     .has_arg = required_argument, .val = 'm'},
+       { .name = "nodemap",    .has_arg = required_argument, .val = 'n'},
+       { .name = "prime-bits", .has_arg = required_argument, .val = 'p'},
+       { .name = "read",       .has_arg = required_argument, .val = 'r'},
+       { .name = "type",       .has_arg = required_argument, .val = 't'},
+       { .name = "verbose",    .has_arg = no_argument,       .val = 'v'},
+       { .name = "write",      .has_arg = required_argument, .val = 'w'},
+       { .name = NULL, } };
 
        while ((opt = getopt_long(argc, argv,
-                                 "c:d:e:f:g:hi:l:m:n:p:r:s:k:t:w:v", long_opt,
+                                 "c:d:e:f:g:hi:l:m:n:p:r:s:k:t:w:v", long_opts,
                                  NULL)) != EOF) {
                switch (opt) {
                case 'c':
@@ -532,7 +538,7 @@ int main(int argc, char **argv)
                config->skc_shared_keylen = SK_DEFAULT_SK_KEYLEN;
                config->skc_prime_bits = SK_DEFAULT_PRIME_BITS;
                config->skc_crypt_alg = SK_CRYPT_AES256_CTR;
-               config->skc_hmac_alg = SK_HMAC_SHA256;
+               config->skc_hmac_alg = CFS_HASH_ALG_SHA256;
                for (i = 0; i < MAX_MGSNIDS; i++)
                        config->skc_mgsnids[i] = LNET_NID_ANY;
 
@@ -552,7 +558,7 @@ int main(int argc, char **argv)
 
        if (crypt != SK_CRYPT_EMPTY)
                config->skc_crypt_alg = crypt;
-       if (hmac != SK_HMAC_EMPTY)
+       if (hmac != CFS_HASH_ALG_NULL)
                config->skc_hmac_alg = hmac;
        if (expire != -1)
                config->skc_expire = expire;