Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / log / kseal.c
1 /*
2  * (C) COPYRIGHT IBM CORPORATION 1987, 1998
3  * LICENSED MATERIALS - PROPERTY OF IBM
4  */
5
6 #include <afs/param.h>
7 #include <sys/types.h>
8 #include <netinet/in.h>
9 #ifdef  AFS_AIX32_ENV
10 #include <signal.h>
11 #endif
12 #include <afs/cellconfig.h>
13 #include <afs/afsutil.h>
14 #include <afs/auth.h>
15 #include <rx/xdr.h>
16 #include <rx/rx.h>
17 #include <des.h>
18 #include <rx/rxkad.h>
19
20 #include "AFS_component_version_number.c"
21
22 main(argc, argv)
23 int argc;
24 char **argv; {
25     struct ktc_token token;
26     struct ktc_principal sname;
27     register afs_int32 code;
28     struct afsconf_dir *dir;
29     afs_int32 now;
30     char skey[9];
31     char cellName[MAXKTCNAMELEN];
32     char session[8];
33
34 #ifdef  AFS_AIX32_ENV
35     /*
36      * The following signal action for AIX is necessary so that in case of a 
37      * crash (i.e. core is generated) we can include the user's data section 
38      * in the core dump. Unfortunately, by default, only a partial core is
39      * generated which, in many cases, isn't too useful.
40      */
41     struct sigaction nsa;
42     
43     sigemptyset(&nsa.sa_mask);
44     nsa.sa_handler = SIG_DFL;
45     nsa.sa_flags = SA_FULLDUMP;
46     sigaction(SIGSEGV, &nsa, NULL);
47 #endif
48     if (argc != 3) {
49         printf("kseal: usage is 'kseal <username> <server key>\n");
50         exit(1);
51     }
52
53     /* lookup configuration info */
54     dir = afsconf_Open(AFSDIR_CLIENT_ETC_DIRPATH);
55     if (!dir) {
56         printf("kseal: can't open config dir (%s)\n", AFSDIR_CLIENT_ETC_DIRPATH);
57         exit(1);
58     }
59     code = afsconf_GetLocalCell(dir, cellName, sizeof(cellName));
60     if (code) {
61         printf("kseal: failed to get local cell name, code %d\n", code);
62         exit(1);
63     }
64
65     /* setup key for sealing */
66     string_to_key(argv[2], skey);
67
68     now = time(0);
69     bcopy(&now, session, 4);    /* but this is only a test pgm */
70     bcopy(&now, session+4, 4);
71     code = tkt_MakeTicket(token.ticket, &token.ticketLen, skey, argv[1], "", cellName,
72         now-300, now+25*3600, session, /* host */ 0, "afs", "");
73     if (code) {
74         printf("kseal: could not seal ticket, code %d!\n", code);
75         exit(1);
76     }
77     
78     /* now send the ticket to the ticket cache */
79     strcpy(sname.name, "afs");
80     strcpy(sname.instance, "");
81     strcpy(sname.cell, cellName);
82     token.startTime = 0;
83     token.endTime = 0x7fffffff;
84     bcopy(session, &token.sessionKey, 8);
85     token.kvno = 0;
86     code = ktc_SetToken (&sname, &token, (char *) 0, 0);
87     if (code) {
88         printf("kseal: could not install newly-sealed ticket, code %d\n", code);
89         exit(1);
90     }
91
92     /* all done */
93     afsconf_Close(dir);
94     exit(0);
95 }