[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

kerberos5.c check_tgs_flags problem



>From RFC1510 section 3.3.3. Generation of KRB_TGS_REP message
   If the request specifies an endtime, then the endtime of the new
   ticket is set to the minimum of (a) that request, (b) the endtime
   from the TGT, and (c) the starttime of the TGT plus the minimum of
   the maximum life for the application server and the maximum life for
   the local realm (the maximum life for the requesting principal was
   already applied when the TGT was issued).  If the new ticket is to be
   a renewal, then the endtime above is replaced by the minimum of (a)
   the value of the renew_till field of the ticket and (b) the starttime
   for the new ticket plus the life (endtimestarttime) of the old
   ticket.


In check_tgs_flags:
    if(f.renew){
        time_t old_life;
        if(!tgt->flags.renewable || tgt->renew_till == NULL){
            kdc_log(0, "Request to renew non-renewable ticket");
            return KRB5KDC_ERR_BADOPTION;
        }
        old_life = tgt->endtime;
        if(tgt->starttime)
            old_life -= *tgt->starttime;
        else
            old_life -= tgt->authtime;
        et->endtime = min(*b->till, *et->starttime + old_life);
    }

I think that last line should read:
et->endtime = min(*et->renew_till, *et->starttime + old_life);

(e.g. be pulled from *b->rtime)

-D