use copy_match_f
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25019 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -108,6 +108,20 @@ parse_ticket_flags(krb5_context context,
|
|||||||
ret_flags->i = bitswap32(flags);
|
ret_flags->i = bitswap32(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ctx {
|
||||||
|
krb5_flags whichfields;
|
||||||
|
krb5_creds mcreds;
|
||||||
|
};
|
||||||
|
|
||||||
|
static krb5_boolean
|
||||||
|
matchfunc(krb5_context context, void *ptr, const krb5_creds *creds)
|
||||||
|
{
|
||||||
|
struct ctx *ctx = ptr;
|
||||||
|
if (krb5_compare_creds(context, ctx->whichfields, &ctx->mcreds, creds))
|
||||||
|
return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@@ -116,13 +130,12 @@ main(int argc, char **argv)
|
|||||||
int optidx = 0;
|
int optidx = 0;
|
||||||
const char *from_name, *to_name;
|
const char *from_name, *to_name;
|
||||||
krb5_ccache from_ccache, to_ccache;
|
krb5_ccache from_ccache, to_ccache;
|
||||||
krb5_flags whichfields = 0;
|
|
||||||
krb5_creds mcreds;
|
|
||||||
unsigned int matched;
|
unsigned int matched;
|
||||||
|
struct ctx ctx;
|
||||||
|
|
||||||
setprogname(argv[0]);
|
setprogname(argv[0]);
|
||||||
|
|
||||||
memset(&mcreds, 0, sizeof(mcreds));
|
memset(&ctx, 0, sizeof(ctx));
|
||||||
|
|
||||||
if (getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
|
if (getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
|
||||||
usage(1);
|
usage(1);
|
||||||
@@ -144,7 +157,7 @@ main(int argc, char **argv)
|
|||||||
errx(1, "krb5_init_context failed");
|
errx(1, "krb5_init_context failed");
|
||||||
|
|
||||||
if (service_string) {
|
if (service_string) {
|
||||||
ret = krb5_parse_name(context, service_string, &mcreds.server);
|
ret = krb5_parse_name(context, service_string, &ctx.mcreds.server);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "%s", service_string);
|
krb5_err(context, 1, ret, "%s", service_string);
|
||||||
}
|
}
|
||||||
@@ -153,19 +166,19 @@ main(int argc, char **argv)
|
|||||||
ret = krb5_string_to_enctype(context, enctype_string, &enctype);
|
ret = krb5_string_to_enctype(context, enctype_string, &enctype);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "%s", enctype_string);
|
krb5_err(context, 1, ret, "%s", enctype_string);
|
||||||
whichfields |= KRB5_TC_MATCH_KEYTYPE;
|
ctx.whichfields |= KRB5_TC_MATCH_KEYTYPE;
|
||||||
mcreds.session.keytype = enctype;
|
ctx.mcreds.session.keytype = enctype;
|
||||||
}
|
}
|
||||||
if (flags_string) {
|
if (flags_string) {
|
||||||
parse_ticket_flags(context, flags_string, &mcreds.flags);
|
parse_ticket_flags(context, flags_string, &ctx.mcreds.flags);
|
||||||
whichfields |= KRB5_TC_MATCH_FLAGS;
|
ctx.whichfields |= KRB5_TC_MATCH_FLAGS;
|
||||||
}
|
}
|
||||||
if (valid_string) {
|
if (valid_string) {
|
||||||
time_t t = parse_time(valid_string, "s");
|
time_t t = parse_time(valid_string, "s");
|
||||||
if(t < 0)
|
if(t < 0)
|
||||||
errx(1, "unknown time \"%s\"", valid_string);
|
errx(1, "unknown time \"%s\"", valid_string);
|
||||||
mcreds.times.endtime = time(NULL) + t;
|
ctx.mcreds.times.endtime = time(NULL) + t;
|
||||||
whichfields |= KRB5_TC_MATCH_TIMES;
|
ctx.whichfields |= KRB5_TC_MATCH_TIMES;
|
||||||
}
|
}
|
||||||
if (fcache_version)
|
if (fcache_version)
|
||||||
krb5_set_fcache_version(context, fcache_version);
|
krb5_set_fcache_version(context, fcache_version);
|
||||||
@@ -187,7 +200,7 @@ main(int argc, char **argv)
|
|||||||
ret = krb5_cc_get_principal(context, from_ccache, &client);
|
ret = krb5_cc_get_principal(context, from_ccache, &client);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "getting default principal");
|
krb5_err(context, 1, ret, "getting default principal");
|
||||||
ret = krb5_make_principal(context, &mcreds.server,
|
ret = krb5_make_principal(context, &ctx.mcreds.server,
|
||||||
krb5_principal_get_realm(context, client),
|
krb5_principal_get_realm(context, client),
|
||||||
KRB5_TGS_NAME,
|
KRB5_TGS_NAME,
|
||||||
krb5_principal_get_realm(context, client),
|
krb5_principal_get_realm(context, client),
|
||||||
@@ -200,8 +213,8 @@ main(int argc, char **argv)
|
|||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "%s", to_name);
|
krb5_err(context, 1, ret, "%s", to_name);
|
||||||
|
|
||||||
ret = krb5_cc_copy_cache_match(context, from_ccache, to_ccache,
|
ret = krb5_cc_copy_match_f(context, from_ccache, to_ccache,
|
||||||
whichfields, &mcreds, &matched);
|
matchfunc, &ctx, &matched);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "copying cred cache");
|
krb5_err(context, 1, ret, "copying cred cache");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user