static int pack_cred(CREDENTIALS *cred, unsigned char *buf) { unsigned char *p = buf; p += krb_put_nir(cred->service, cred->instance, cred->realm, p); memcpy(p, cred->session, 8); p += 8; *p++ = cred->lifetime; *p++ = cred->kvno; p += krb_put_int(cred->ticket_st.length, p, 4); memcpy(p, cred->ticket_st.dat, cred->ticket_st.length); p += cred->ticket_st.length; p += krb_put_int(cred->issue_date, p, 4); p += krb_put_nir(cred->pname, cred->pinst, NULL, p); return p - buf; }
static int build_request(KTEXT req, char *name, char *inst, char *realm, u_int32_t checksum) { struct timeval tv; unsigned char *p = req->dat; int tmp; size_t rem = sizeof(req->dat); tmp = krb_put_nir(name, inst, realm, p, rem); if (tmp < 0) return KFAILURE; p += tmp; rem -= tmp; tmp = krb_put_int(checksum, p, rem, 4); if (tmp < 0) return KFAILURE; p += tmp; rem -= tmp; /* Fill in the times on the request id */ krb_kdctimeofday(&tv); if (rem < 1) return KFAILURE; *p++ = tv.tv_usec / 5000; /* 5ms */ --rem; tmp = krb_put_int(tv.tv_sec, p, rem, 4); if (tmp < 0) return KFAILURE; p += tmp; rem -= tmp; /* Fill to a multiple of 8 bytes for DES */ req->length = ((p - req->dat + 7)/8) * 8; return 0; }