X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/5c87ce3452f9832fcb8c1c3957b1bd78e0bbe5c4..refs/heads/LOCKING:/update/ticket.c diff --git a/update/ticket.c b/update/ticket.c index 4a478aed..f07ed326 100644 --- a/update/ticket.c +++ b/update/ticket.c @@ -2,77 +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 #include #include +#include /* too bad we can't set the pathname easily */ static char *srvtab = KEYFILE; /* default == /etc/srvtab */ static char realm[REALM_SZ]; -static char master[] = "sms"; -static char service[] = "rcmd"; +static char master[INST_SZ] = "sms"; +static char service[ANAME_SZ] = "rcmd"; +C_Block session; -extern char *tkt_string(), *PrincipalHostname(); -extern int krb_err_base; static init() { static int initialized = 0; if (!initialized) { - get_krbrlm(realm, 1); - init_krb_err_tbl(); + 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 = krb_mk_req(ticket, service, phost, realm, (long)0); - if (code) - code += krb_err_base; - if (pass == 1) { - /* maybe we're taking too long? */ - if ((code = get_sms_tgt()) != 0) { - /* don't need phost buffer any more */ - com_err(whoami, code, " can't get Kerberos TGT"); - return(code); + 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(code); } int -get_sms_tgt() +get_mr_tgt() { register int code; + char linst[INST_SZ], kinst[INST_SZ]; + init(); - code = get_svc_in_tkt(master, "", 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(code + krb_err_base); + return(code + ERROR_TABLE_BASE_krb); }