]> andersk Git - moira.git/blob - update/ticket.c
changed names for new kerberos library (qjb)
[moira.git] / update / ticket.c
1 /*
2  *      $Source$
3  *      $Header$
4  */
5 /*  (c) Copyright 1988 by the Massachusetts Institute of Technology. */
6 /*  For copying and distribution information, please see the file */
7 /*  <mit-copyright.h>. */
8
9 #ifndef lint
10 static char *rcsid_ticket_c = "$Header$";
11 #endif  lint
12
13 #include <mit-copyright.h>
14 #include <stdio.h>
15 #include <krb.h>
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <strings.h>
19 #include <update.h>
20 #include <com_err.h>
21 #include <krb_et.h>
22
23 /* too bad we can't set the pathname easily */
24 static char *srvtab = KEYFILE; /* default == /etc/srvtab */
25 static char realm[REALM_SZ];
26 static char master[] = "sms";
27 static char service[] = "rcmd";
28
29 extern char *tkt_string(), *PrincipalHostname();
30
31
32 static init()
33 {
34     static int initialized = 0;
35
36     if (!initialized) {
37         if (krb_get_lrealm(realm, 1))
38             strcpy(realm, KRB_REALM);
39         initialize_krb_error_table();
40         initialized=1;
41     }
42 }
43
44
45 int
46 get_sms_update_ticket(host, ticket)
47      char *host;
48      KTEXT ticket;
49 {
50      register int code;
51      register int pass;
52      char phost[BUFSIZ];
53
54      pass = 1;
55      init();
56      strcpy(phost, PrincipalHostname(host));
57  try_it:
58      code = krb_mk_req(ticket, service, phost, realm, (long)0);
59      if (code)
60        code += ERROR_TABLE_BASE_krb;
61      if (pass == 1) {
62          /* maybe we're taking too long? */
63          if ((code = get_sms_tgt()) != 0) {
64              /* don't need phost buffer any more */
65              com_err(whoami, code, " can't get Kerberos TGT");
66              return(code);
67          }
68          pass++;
69          goto try_it;
70      }
71      return(code);
72 }
73
74 int
75 get_sms_tgt()
76 {
77     register int code;
78     init();
79     code = get_svc_in_tkt(master, "", realm, "krbtgt", realm, 1, srvtab);
80     if (!code)
81         return(0);
82     else
83         return(code + ERROR_TABLE_BASE_krb);
84 }
This page took 0.041318 seconds and 5 git commands to generate.