]> andersk Git - moira.git/blob - server/mr_sauth.c
Added three error codes.
[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.3  1987-06-21 16:40:10  wesommer
10  *      Performance work, rearrangement of include files.
11  *
12  * Revision 1.2  87/06/04  01:34:35  wesommer
13  * Added logging of arguments for some perverse reason.
14  * 
15  * Revision 1.1  87/06/02  20:06:57  wesommer
16  * Initial revision
17  * 
18  */
19
20 #ifndef lint
21 static char *rcsid_sms_sauth_c = "$Header$";
22 #endif lint
23
24 extern int krb_err_base;
25 #include <krb.h>
26 #include <strings.h>
27 #include "sms_server.h"
28
29 extern char buf1[];
30 extern char *whoami;
31 extern char *malloc();
32
33 /*
34  * Handle a SMS_AUTH RPC request.
35  *
36  * argv[0] is a kerberos authenticator.  Decompose it, and if
37  * successful, store the name the user authenticated to in 
38  * cl->cl_name.
39  */
40
41 void
42 do_auth(cl)
43         client *cl;
44 {
45         KTEXT_ST auth;
46         AUTH_DAT ad;
47         int status;
48         char buf[REALM_SZ+INST_SZ+ANAME_SZ];
49         extern int krb_err_base;
50         
51         com_err(whoami, 0, "Processing auth: ");
52         log_args(cl->args->sms_argc, cl->args->sms_argv);
53
54         auth.length = cl->args->sms_argl[0];
55
56         bcopy(cl->args->sms_argv[0], (char *)auth.dat, auth.length);
57         auth.mbz = 0;
58         
59         if ((status = rd_ap_req (&auth, "sms", "sms", cl->haddr.sin_addr,
60                                  &ad, "")) != KSUCCESS) {
61                 status += krb_err_base;
62                 cl->reply.sms_status = status;
63                 com_err(whoami, status, "(authentication failed)");
64                 return;
65         }
66         (void) strcpy(buf, ad.pname);
67         if(ad.pinst[0]) {
68                 (void) strcat(buf, ".");
69                 (void) strcat(buf, ad.pinst);
70         }
71         (void) strcat(buf, "@");
72         (void) strcat(buf, ad.prealm);
73         if (cl->clname) free((char *)cl->clname);
74         
75         cl->clname = (char *)malloc((unsigned)(strlen(buf)+1));
76         (void) strcpy(cl->clname, buf);
77         (void) sprintf(buf1, "Authenticated to %s", cl->clname);
78         com_err(whoami, 0, buf1);
79 }
This page took 0.0500080000000001 seconds and 5 git commands to generate.