]> andersk Git - moira.git/blame - lib/mr_auth.c
Update for current file locations (/moira, not /u1/sms) and Oracle
[moira.git] / lib / mr_auth.c
CommitLineData
e2a67c78 1/*
2 * $Source$
3 * $Author$
4 * $Header$
5 *
8defc06b 6 * Copyright (C) 1987, 1990 by the Massachusetts Institute of Technology
babbc197 7 * For copying and distribution information, please see the file
8 * <mit-copyright.h>.
e2a67c78 9 *
10 * Handles the client side of the sending of authenticators to
5eaef520 11 * the mr server.
e2a67c78 12 */
13
14#ifndef lint
15static char *rcsid_sms_auth_c = "$Header$";
a43ce477 16#endif
e2a67c78 17
babbc197 18#include <mit-copyright.h>
8defc06b 19#include "mr_private.h"
713cf9c9 20#include <ctype.h>
e2a67c78 21#include <krb.h>
11cf0ee5 22#include <krb_et.h>
8fd777cf 23#include <string.h>
20e1c093 24
8defc06b 25/* Authenticate this client with the MR server. prog is the name of the
6e20c6e8 26 * client program, and will be recorded in the database.
27 */
28
5eaef520 29int mr_auth(char *prog)
e2a67c78 30{
44d12d58 31 int status;
5eaef520 32 mr_params params_st;
33 char *args[2];
34 int argl[2];
35 char realm[REALM_SZ], host[BUFSIZ], *p;
a29db7d1 36
44d12d58 37 mr_params *params = &params_st;
5eaef520 38 mr_params *reply = NULL;
39 KTEXT_ST auth;
83e80378 40
5eaef520 41 CHECK_CONNECTED;
11cf0ee5 42
5eaef520 43 /* Build a Kerberos authenticator. */
44
45 memset(host, 0, sizeof(host));
46 if ((status = mr_host(host, sizeof(host) - 1)))
47 return status;
48
49 strcpy(realm, (char *)krb_realmofhost(host));
50 for (p = host; *p && *p != '.'; p++)
51 {
713cf9c9 52 if (isupper(*p))
53 *p = tolower(*p);
5eaef520 54 }
55 *p = '\0';
11cf0ee5 56
5eaef520 57 status = krb_mk_req(&auth, MOIRA_SNAME, host, realm, 0);
58 if (status != KSUCCESS)
59 {
60 status += ERROR_TABLE_BASE_krb;
61 return status;
62 }
63 params->mr_version_no = sending_version_no;
64 params->mr_procno = MR_AUTH;
65 params->mr_argc = 2;
66 params->mr_argv = args;
67 params->mr_argl = argl;
68 params->mr_argv[0] = (char *)auth.dat;
69 params->mr_argl[0] = auth.length;
70 params->mr_argv[1] = prog;
71 params->mr_argl[1] = strlen(prog) + 1;
6e20c6e8 72
5eaef520 73 if (sending_version_no == MR_VERSION_1)
74 params->mr_argc = 1;
e2a67c78 75
5eaef520 76 if ((status = mr_do_call(params, &reply)) == 0)
77 status = reply->mr_status;
83e80378 78
5eaef520 79 mr_destroy_reply(reply);
80
81 return status;
e2a67c78 82}
This page took 3.147619 seconds and 5 git commands to generate.