krb5_error_code _krb5_einval(krb5_context context, const char *func, unsigned long argn) { #ifndef HEIMDAL_SMALLER krb5_set_error_message(context, EINVAL, N_("programmer error: invalid argument to %s argument %lu", "function:line"), func, argn); if (_krb5_have_debug(context, 10)) { _krb5_debug(context, 10, "invalid argument to function %s argument %lu", func, argn); _krb5_debug_backtrace(context); } #endif return EINVAL; }
static krb5_error_code tkt_referral_send(krb5_context context, krb5_tkt_creds_context ctx, krb5_data *in, krb5_data *out, krb5_realm *realm, unsigned int *flags) { krb5_error_code ret; TGS_REQ req; size_t len; METHOD_DATA padata; padata.val = NULL; padata.len = 0; krb5_generate_random_block(&ctx->nonce, sizeof(ctx->nonce)); ctx->nonce &= 0xffffffff; if (_krb5_have_debug(context, 10)) { char *sname, *tgtname; krb5_unparse_name(context, ctx->tgt.server, &tgtname); krb5_unparse_name(context, ctx->next.server, &sname); _krb5_debugx(context, 10, "sending TGS-REQ for %s using %s", sname, tgtname); } ret = _krb5_init_tgs_req(context, ctx->ccache, ctx->addreseses, ctx->kdc_flags, ctx->impersonate_principal, NULL, &ctx->next, &ctx->tgt, ctx->nonce, &padata, &ctx->subkey, &req); if (ret) goto out; ASN1_MALLOC_ENCODE(TGS_REQ, out->data, out->length, &req, &len, ret); if (ret) goto out; if(out->length != len) krb5_abortx(context, "internal error in ASN.1 encoder"); /* don't free addresses */ req.req_body.addresses = NULL; free_TGS_REQ(&req); *realm = ctx->tgt.server->name.name_string.val[1]; *flags |= KRB5_TKT_STATE_CONTINUE; ctx->error = 0; ctx->state = tkt_referral_recv; return 0; out: ctx->error = ret; ctx->state = NULL; return ret; }