]> andersk Git - moira.git/blob - server/mr_sauth.c
allow child exit status to be returned; GDB was catching signal
[moira.git] / server / mr_sauth.c
1 /*
2  *      $Source$
3  *      $Author$
4  *      $Header$
5  *
6  *      Copyright (C) 1987 by the Massachusetts Institute of Technology
7  *
8  *      $Log$
9  *      Revision 1.7  1987-09-12 20:42:05  wesommer
10  *      Be paranoid.
11  *
12  * Revision 1.6  87/08/04  02:40:47  wesommer
13  * Clean up messages.
14  * 
15  * Revision 1.5  87/07/14  00:40:18  wesommer
16  * Rearranged logging.
17  * 
18  * Revision 1.4  87/06/30  20:03:46  wesommer
19  * Put parsed kerberos principal name into the per-client structure.
20  * 
21  * Revision 1.3  87/06/21  16:40:10  wesommer
22  * Performance work, rearrangement of include files.
23  * 
24  * Revision 1.2  87/06/04  01:34:35  wesommer
25  * Added logging of arguments for some perverse reason.
26  * 
27  * Revision 1.1  87/06/02  20:06:57  wesommer
28  * Initial revision
29  * 
30  */
31
32 #ifndef lint
33 static char *rcsid_sms_sauth_c = "$Header$";
34 #endif lint
35
36 extern int krb_err_base;
37 #include <strings.h>
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         
62         if (cl->clname) {
63                 free(cl->clname);
64                 cl->clname = 0;
65                 bzero(&cl->kname, sizeof(cl->kname));
66         }
67         
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;
76                 if (log_flags & LOG_RES)
77                         com_err(whoami, status, "(authentication failed)");
78                 return;
79         }
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         
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);
95         bzero(&ad, sizeof(ad)); /* Clean up session key, etc. */
96         if (log_flags & LOG_RES) {
97                 com_err(whoami, 0, "Authenticated to %s", cl->clname);
98         }
99 }
This page took 0.103295 seconds and 5 git commands to generate.