asetkey: Allow rxgk keys 66/12766/9
authorAndrew Deason <adeason@sinenomine.net>
Thu, 9 Nov 2017 06:03:04 +0000 (00:03 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 12 Apr 2019 14:03:25 +0000 (10:03 -0400)
Add rxgk support to asetkey. This just allows asetkey to display rxgk
keys more prettily, and allows the user to add literal rxgk key data
on the command line, or add keytab-derived keys.

Change-Id: Ic28fea628614be2b20276631bc7e7c2f85ccc154
Reviewed-on: https://gerrit.openafs.org/12766
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/aklog/asetkey.c

index 603a6e9..08ac742 100644 (file)
@@ -35,6 +35,8 @@ stringToType(const char *string) {
        return afsconf_rxkad;
     if (strcmp(string, "rxkad_krb5") == 0)
        return afsconf_rxkad_krb5;
+    if (strcmp(string, "rxgk") == 0)
+       return afsconf_rxgk;
 
     return atoi(string);
 }
@@ -134,7 +136,7 @@ keyFromKeytab(int kvno, afsconf_keyType type, int subtype, const char *keytab, c
            retval = krb5_kt_read_service_key(context, (char *)keytab,
                                              principal, kvno,
                                              ENCTYPE_DES_CBC_MD4, &key);
-    } else if (type == afsconf_rxkad_krb5) {
+    } else if (type == afsconf_rxkad_krb5 || type == afsconf_rxgk) {
        retval = krb5_kt_read_service_key(context, (char *)keytab, principal,
                                          kvno, subtype, &key);
     } else {
@@ -198,9 +200,8 @@ addKey(struct afsconf_dir *dir, int argc, char **argv) {
        kvno = atoi(argv[3]);
        if (type == afsconf_rxkad) {
            typedKey = keyFromCommandLine(afsconf_rxkad, kvno, 0, argv[5], 8);
-       } else if (type == afsconf_rxkad_krb5){
-           fprintf(stderr, "Raw keys for afsconf_rxkad_krb5 are unsupported");
-           exit(1);
+       } else if (type == afsconf_rxgk || type == afsconf_rxkad_krb5) {
+           typedKey = keyFromCommandLine(type, kvno, atoi(argv[4]), argv[5], strlen(argv[5])/2);
        } else {
            fprintf(stderr, "Unknown key type %s\n", argv[2]);
            exit(1);
@@ -209,7 +210,7 @@ addKey(struct afsconf_dir *dir, int argc, char **argv) {
       case 7:
        type = stringToType(argv[2]);
        kvno = atoi(argv[3]);
-       if (type == afsconf_rxkad || type == afsconf_rxkad_krb5) {
+       if (type == afsconf_rxkad || type == afsconf_rxkad_krb5 || type == afsconf_rxgk) {
            typedKey = keyFromKeytab(kvno, type, atoi(argv[4]), argv[5],
                                     argv[6]);
        } else {
@@ -289,6 +290,13 @@ listKey(struct afsconf_dir *dir, int argc, char **argv)
                printKey(keyMaterial);
            }
            break;
+         case afsconf_rxgk:
+           if (kvno != -1) {
+               printf("rxgk\tkvno %4d enctype %d; key is: ",
+                      kvno, minorType);
+               printKey(keyMaterial);
+           }
+           break;
          default:
            printf("unknown(%d)\tkvno %4d subtype %d; key is: ", type,
                   kvno, minorType);