X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/de56407f0fd27d5366a936b872972630f1683f0f..refs/heads/LOCKING:/update/ticket.c diff --git a/update/ticket.c b/update/ticket.c index c27f3738..f07ed326 100644 --- a/update/ticket.c +++ b/update/ticket.c @@ -2,68 +2,91 @@ * $Source$ * $Header$ */ +/* (c) Copyright 1988 by the Massachusetts Institute of Technology. */ +/* For copying and distribution information, please see the file */ +/* . */ #ifndef lint static char *rcsid_ticket_c = "$Header$"; #endif lint +#include #include #include #include #include -#include -#include "sms_update_int.h" -#include "com_err.h" -#include "kludge.h" +#include +#include +#include +#include /* too bad we can't set the pathname easily */ -/*static char tkt_pathname[] = "/tmp/tkt:sms";*/ -static char *srvtab = SRVTAB; /* default == /etc/srvtab */ +static char *srvtab = KEYFILE; /* default == /etc/srvtab */ static char realm[REALM_SZ]; -static char sms[] = "sms"; +static char master[INST_SZ] = "sms"; +static char service[ANAME_SZ] = "rcmd"; +C_Block session; -extern char *tkt_string(), *PrincipalHostname(); -static int initialized = 0; -#define init() { if (!initialized) { get_krbrlm(realm,0); initialized=1; }} +static init() +{ + static int initialized = 0; + + if (!initialized) { + if (krb_get_lrealm(realm, 1)) + strcpy(realm, KRB_REALM); + initialize_krb_error_table(); + initialized=1; + } +} + int -get_sms_update_ticket(host, ticket) +get_mr_update_ticket(host, ticket) char *host; KTEXT ticket; { register int code; register int pass; char phost[BUFSIZ]; + CREDENTIALS cr; pass = 1; init(); - strcpy(phost, PrincipalHostname(host)); + strcpy(phost, krb_get_phost(host)); try_it: - code = mk_ap_req(ticket, sms, phost, realm, (long)0); - if (pass == 1) { - /* maybe we're taking too long? */ - if ((code = get_sms_tgt()) != 0) { - /* don't need phost buffer any more */ - sprintf(phost, "%s: can't get Kerberos TGT", - error_message(code)); - sms_log_error(phost); - return(code); + code = krb_mk_req(ticket, service, phost, realm, (long)0); + if (code) { + if (pass == 1) { + /* maybe we're taking too long? */ + if ((code = get_mr_tgt()) != 0) { + com_err(whoami, code, " can't get Kerberos TGT"); + return(code); + } + pass++; + goto try_it; } - pass++; - goto try_it; + com_err(whoami, code, "in krb_mk_req"); + } else { + code = krb_get_cred(service, phost, realm, &cr); + memcpy(session, cr.session, sizeof(session)); } - return(krb_err_frob(code)); + return(code); } int -get_sms_tgt() +get_mr_tgt() { register int code; + char linst[INST_SZ], kinst[INST_SZ]; + init(); - code = get_svc_in_tkt(sms, "", realm, "krbtgt", realm, 1, srvtab); + linst[0] = '\0'; + strcpy(kinst, "krbtgt"); + code = krb_get_svc_in_tkt(master, linst, realm, kinst, realm, + DEFAULT_TKT_LIFE, srvtab); if (!code) return(0); else - return(krb_err_frob(code)); + return(code + ERROR_TABLE_BASE_krb); }