]>
Commit | Line | Data |
---|---|---|
a3cf6921 | 1 | /* |
2 | * $Source$ | |
3 | * $Author$ | |
4 | * $Header$ | |
5 | * | |
6 | * Copyright (C) 1987 by the Massachusetts Institute of Technology | |
7 | * | |
8 | * $Log$ | |
23e476e8 | 9 | * Revision 1.7 1987-09-12 20:42:05 wesommer |
10 | * Be paranoid. | |
a3cf6921 | 11 | * |
23e476e8 | 12 | * Revision 1.6 87/08/04 02:40:47 wesommer |
13 | * Clean up messages. | |
14 | * | |
f17535a4 | 15 | * Revision 1.5 87/07/14 00:40:18 wesommer |
16 | * Rearranged logging. | |
17 | * | |
060e9c63 | 18 | * Revision 1.4 87/06/30 20:03:46 wesommer |
19 | * Put parsed kerberos principal name into the per-client structure. | |
20 | * | |
8a36ddfe | 21 | * Revision 1.3 87/06/21 16:40:10 wesommer |
22 | * Performance work, rearrangement of include files. | |
23 | * | |
c27b3454 | 24 | * Revision 1.2 87/06/04 01:34:35 wesommer |
25 | * Added logging of arguments for some perverse reason. | |
26 | * | |
6c4883d3 | 27 | * Revision 1.1 87/06/02 20:06:57 wesommer |
28 | * Initial revision | |
29 | * | |
a3cf6921 | 30 | */ |
31 | ||
32 | #ifndef lint | |
33 | static char *rcsid_sms_sauth_c = "$Header$"; | |
34 | #endif lint | |
35 | ||
36 | extern int krb_err_base; | |
a3cf6921 | 37 | #include <strings.h> |
a3cf6921 | 38 | #include "sms_server.h" |
39 | ||
40 | extern char buf1[]; | |
41 | extern char *whoami; | |
42 | extern char *malloc(); | |
43 | ||
44 | /* | |
45 | * Handle a SMS_AUTH RPC request. | |
46 | * | |
47 | * argv[0] is a kerberos authenticator. Decompose it, and if | |
48 | * successful, store the name the user authenticated to in | |
49 | * cl->cl_name. | |
50 | */ | |
51 | ||
52 | void | |
53 | do_auth(cl) | |
54 | client *cl; | |
55 | { | |
56 | KTEXT_ST auth; | |
57 | AUTH_DAT ad; | |
58 | int status; | |
59 | char buf[REALM_SZ+INST_SZ+ANAME_SZ]; | |
60 | extern int krb_err_base; | |
61 | ||
23e476e8 | 62 | if (cl->clname) { |
63 | free(cl->clname); | |
64 | cl->clname = 0; | |
65 | bzero(&cl->kname, sizeof(cl->kname)); | |
66 | } | |
67 | ||
a3cf6921 | 68 | auth.length = cl->args->sms_argl[0]; |
69 | bcopy(cl->args->sms_argv[0], (char *)auth.dat, auth.length); | |
70 | auth.mbz = 0; | |
71 | ||
72 | if ((status = rd_ap_req (&auth, "sms", "sms", cl->haddr.sin_addr, | |
73 | &ad, "")) != KSUCCESS) { | |
74 | status += krb_err_base; | |
75 | cl->reply.sms_status = status; | |
060e9c63 | 76 | if (log_flags & LOG_RES) |
77 | com_err(whoami, status, "(authentication failed)"); | |
a3cf6921 | 78 | return; |
79 | } | |
8a36ddfe | 80 | bcopy(ad.pname, cl->kname.name, ANAME_SZ); |
81 | bcopy(ad.pinst, cl->kname.inst, INST_SZ); | |
82 | bcopy(ad.prealm, cl->kname.realm, REALM_SZ); | |
83 | ||
a3cf6921 | 84 | (void) strcpy(buf, ad.pname); |
85 | if(ad.pinst[0]) { | |
86 | (void) strcat(buf, "."); | |
87 | (void) strcat(buf, ad.pinst); | |
88 | } | |
89 | (void) strcat(buf, "@"); | |
90 | (void) strcat(buf, ad.prealm); | |
91 | if (cl->clname) free((char *)cl->clname); | |
92 | ||
93 | cl->clname = (char *)malloc((unsigned)(strlen(buf)+1)); | |
94 | (void) strcpy(cl->clname, buf); | |
23e476e8 | 95 | bzero(&ad, sizeof(ad)); /* Clean up session key, etc. */ |
060e9c63 | 96 | if (log_flags & LOG_RES) { |
f17535a4 | 97 | com_err(whoami, 0, "Authenticated to %s", cl->clname); |
060e9c63 | 98 | } |
a3cf6921 | 99 | } |