auth-setkey-warnings-cleanup-20010705
[openafs.git] / src / auth / setkey.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afs/param.h>
11 #include <afsconfig.h>
12 #include <sys/types.h>
13 #include <stdio.h>
14 #include <stdlib.h>
15 #ifdef AFS_NT40_ENV
16 #include <winsock2.h>
17 #include <WINNT/afsreg.h>
18 #include <WINNT/afsevent.h>
19 #endif
20 #ifdef HAVE_STRINGS_H
21 #include <strings.h>
22 #else
23 #ifdef HAVE_STRING_H
24 #include <string.h>
25 #endif
26 #endif
27 #ifdef HAVE_NETINET_IN_H
28 #include <netinet/in.h>
29 #endif
30 #ifdef HAVE_NETDB_H
31 #include <netdb.h>
32 #endif
33 #include "cellconfig.h"
34 #include "keys.h"
35 #include <afs/afsutil.h>
36
37 #include "AFS_component_version_number.c"
38 static int char2hex(char c);
39 static int hex2char(char c);
40
41 int
42 main(argc, argv)
43 int argc;
44 char **argv; {
45     struct afsconf_dir *tdir;
46     register afs_int32 code;
47     int i;
48     char *cp;
49
50     if (argc == 1) {
51         printf("setkey: usage is 'setkey <opcode> options, e.g.\n");
52         printf("    setkey add <kvno> <key>\n");
53         printf("      note: <key> should be an 8byte hex representation \n");
54         printf("            Ex: setkey add 0 \"80b6a7cd7a9dadb6\"\n");
55         printf("    setkey delete <kvno>\n");
56         printf("    setkey list\n");
57         exit(1);
58     }
59
60     tdir = afsconf_Open(AFSDIR_SERVER_ETC_DIRPATH);
61     if (!tdir) {
62         printf("setkey: can't initialize conf dir '%s'\n", AFSDIR_SERVER_ETC_DIRPATH);
63         exit(1);
64     }
65     if (strcmp(argv[1], "add")==0) {
66         char tkey[8];
67         if (argc != 4) {
68             printf("setkey add: usage is 'setkey add <kvno> <key>\n");
69             exit(1);
70         }
71         if (strlen(argv[3]) != 16) {
72           printf("key %s is not in right format\n", argv[3]);
73           printf(" <key> should be an 8byte hex representation \n");
74           printf("  Ex: setkey add 0 \"80b6a7cd7a9dadb6\"\n");
75           exit(1);
76         }
77         bzero(tkey, sizeof(tkey));
78         for(i=7, cp = argv[3] + 15;i>=0; i--,cp-=2)
79           tkey[i] = char2hex(*cp) + char2hex(*(cp-1))*16;
80
81         code = afsconf_AddKey(tdir, atoi(argv[2]), tkey, 1);
82         if (code) {
83             printf("setkey: failed to set key, code %d.\n", (int) code);
84             exit(1);
85         }
86     }
87     else if (strcmp(argv[1], "delete")==0) {
88         afs_int32 kvno;
89         if (argc != 3) {
90             printf("setkey delete: usage is 'setkey delete <kvno>\n");
91             exit(1);
92         }
93         kvno = atoi(argv[2]);
94         code = afsconf_DeleteKey(tdir, kvno);
95         if (code) {
96             printf("setkey: failed to delete key %d, (code %d)\n", (int) kvno, (int) code);
97             exit(1);
98         }
99     }
100     else if (strcmp(argv[1], "list") == 0) {
101         struct afsconf_keys tkeys;
102         register int i;
103         char tbuffer[9];
104         
105         code = afsconf_GetKeys(tdir, &tkeys);
106         if (code) {
107             printf("setkey: failed to get keys, code %d\n", (int) code);
108             exit(1);
109         }
110         for(i=0;i<tkeys.nkeys;i++) {
111           if (tkeys.key[i].kvno != -1) {
112             char hexbuf[17];
113             unsigned char c;
114             int j;
115             bcopy(tkeys.key[i].key, tbuffer, 8);
116             tbuffer[8] = 0;
117             for(j=0;j<8;j++) {
118               c = tbuffer[j];
119               hexbuf[j*2] = hex2char( c / 16 );
120               hexbuf[j*2+1] =  hex2char( c  % 16);
121             }
122             hexbuf[16]='\0';
123             printf("kvno %4d: key is '%s' (0x%s)\n", (int) tkeys.key[i].kvno, tbuffer, hexbuf);
124           }
125         }
126         printf("All done.\n");
127     }
128     else {
129         printf("setkey: unknown operation '%s', type 'setkey' for assistance\n", argv[1]);
130         exit(1);
131     }
132     exit(0);
133 }
134
135 static int char2hex(char c)
136 {
137   if (c >= '0' && c <='9')
138     return ( c - 48);
139   if ( (c >= 'a') && (c <= 'f') )
140     return (c-'a' + 10);
141   
142   if ( (c >= 'A') && (c <='F') )
143     return (c-'A' + 10);
144   
145   return -1;
146 }
147
148 static int hex2char(char c)
149 {
150   if (c <=9)
151     return (c+48);
152
153   return (c - 10 + 'a');
154 }