Verify hostname and test max-depth.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21274 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -651,6 +651,8 @@ certificate_copy(struct certificate_copy_options *opt, int argc, char **argv)
|
|||||||
struct verify {
|
struct verify {
|
||||||
hx509_verify_ctx ctx;
|
hx509_verify_ctx ctx;
|
||||||
hx509_certs chain;
|
hx509_certs chain;
|
||||||
|
const char *hostname;
|
||||||
|
int errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -664,10 +666,20 @@ verify_f(hx509_context hxcontext, void *ctx, hx509_cert c)
|
|||||||
char *s = hx509_get_error_string(hxcontext, ret);
|
char *s = hx509_get_error_string(hxcontext, ret);
|
||||||
printf("verify_path: %s: %d\n", s, ret);
|
printf("verify_path: %s: %d\n", s, ret);
|
||||||
free(s);
|
free(s);
|
||||||
|
v->errors++;
|
||||||
} else
|
} else
|
||||||
printf("path ok\n");
|
printf("path ok\n");
|
||||||
|
|
||||||
return ret;
|
if (v->hostname) {
|
||||||
|
ret = hx509_verify_hostname(hxcontext, c, 0, HX509_HN_HOSTNAME,
|
||||||
|
v->hostname, NULL, 0);
|
||||||
|
if (ret) {
|
||||||
|
printf("verify_hostname: %d\n", ret);
|
||||||
|
v->errors++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -679,6 +691,8 @@ pcert_verify(struct verify_options *opt, int argc, char **argv)
|
|||||||
struct verify v;
|
struct verify v;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
memset(&v, 0, sizeof(v));
|
||||||
|
|
||||||
if (opt->missing_revoke_flag)
|
if (opt->missing_revoke_flag)
|
||||||
hx509_context_set_missing_revoke(context, 1);
|
hx509_context_set_missing_revoke(context, 1);
|
||||||
|
|
||||||
@@ -707,6 +721,11 @@ pcert_verify(struct verify_options *opt, int argc, char **argv)
|
|||||||
hx509_verify_set_time(ctx, t);
|
hx509_verify_set_time(ctx, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt->hostname_string)
|
||||||
|
v.hostname = opt->hostname_string;
|
||||||
|
if (opt->max_depth_integer)
|
||||||
|
hx509_verify_set_max_depth(ctx, opt->max_depth_integer);
|
||||||
|
|
||||||
ret = hx509_revoke_init(context, &revoke_ctx);
|
ret = hx509_revoke_init(context, &revoke_ctx);
|
||||||
if (ret)
|
if (ret)
|
||||||
errx(1, "hx509_revoke_init: %d", ret);
|
errx(1, "hx509_revoke_init: %d", ret);
|
||||||
@@ -761,7 +780,7 @@ pcert_verify(struct verify_options *opt, int argc, char **argv)
|
|||||||
v.ctx = ctx;
|
v.ctx = ctx;
|
||||||
v.chain = chain;
|
v.chain = chain;
|
||||||
|
|
||||||
ret = hx509_certs_iter(context, certs, verify_f, &v);
|
hx509_certs_iter(context, certs, verify_f, &v);
|
||||||
|
|
||||||
hx509_verify_destroy_ctx(ctx);
|
hx509_verify_destroy_ctx(ctx);
|
||||||
|
|
||||||
@@ -771,7 +790,12 @@ pcert_verify(struct verify_options *opt, int argc, char **argv)
|
|||||||
|
|
||||||
hx509_revoke_free(&revoke_ctx);
|
hx509_revoke_free(&revoke_ctx);
|
||||||
|
|
||||||
return ret;
|
if (v.errors) {
|
||||||
|
printf("failed verifing %d checks\n", v.errors);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
Reference in New Issue
Block a user