static idn_result_t label_bidicheck(idn_resconf_t ctx, labellist_t label) { const unsigned long *name, *found; idn_checker_t bidi_checker; idn_result_t r; name = labellist_getname(label); TRACE(("res bidicheck(label=\"%s\")\n", idn__debug_ucs4xstring(name, 50))); bidi_checker = idn_resconf_getbidichecker(ctx); if (bidi_checker == NULL) { r = idn_success; goto ret; } r = idn_checker_lookup(bidi_checker, name, &found); idn_checker_destroy(bidi_checker); if (r == idn_success && found != NULL) r = idn_prohibited; ret: TRACE(("res bidicheck(): %s\n", idn_result_tostring(r))); return (r); }
void idn_resconf_setbidichecker(idn_resconf_t ctx, idn_checker_t bidi_checker) { assert(ctx != NULL); TRACE(("idn_resconf_setbidichecker()\n")); if (ctx->bidi_checker != NULL) idn_checker_destroy(ctx->bidi_checker); ctx->bidi_checker = bidi_checker; if (bidi_checker != NULL) idn_checker_incrref(ctx->bidi_checker); }
void idn_resconf_setunassignedchecker(idn_resconf_t ctx, idn_checker_t unassigned_checker) { assert(ctx != NULL); TRACE(("idn_resconf_setunassignedchecker()\n")); if (ctx->unassigned_checker != NULL) idn_checker_destroy(ctx->unassigned_checker); ctx->unassigned_checker = unassigned_checker; if (unassigned_checker != NULL) idn_checker_incrref(ctx->unassigned_checker); }
void idn_resconf_setprohibitchecker(idn_resconf_t ctx, idn_checker_t prohibit_checker) { assert(ctx != NULL); TRACE(("idn_resconf_setprohibitchecker()\n")); if (ctx->prohibit_checker != NULL) idn_checker_destroy(ctx->prohibit_checker); ctx->prohibit_checker = prohibit_checker; if (prohibit_checker != NULL) idn_checker_incrref(ctx->prohibit_checker); }
idn_result_t idn_resconf_setnameprepversion(idn_resconf_t ctx, const char *version) { char prohibit_scheme_name[MAX_CONF_LINE_LENGTH + 1]; char unassigned_scheme_name[MAX_CONF_LINE_LENGTH + 1]; char bidi_scheme_name[MAX_CONF_LINE_LENGTH + 1]; idn_mapper_t mapper = NULL; idn_normalizer_t normalizer = NULL; idn_checker_t prohibit_checker = NULL; idn_checker_t unassigned_checker = NULL; idn_checker_t bidi_checker = NULL; idn_result_t r; assert(ctx != NULL && version != NULL); TRACE(("idn_resconf_setnameprepversion()\n")); /* * Set canonical scheme names. */ if (strlen(version) + strlen(IDN_CHECKER_PROHIBIT_PREFIX) > MAX_CONF_LINE_LENGTH) { r = idn_invalid_name; goto failure; } sprintf(prohibit_scheme_name, "%s%s", IDN_CHECKER_PROHIBIT_PREFIX, version); if (strlen(version) + strlen(IDN_CHECKER_UNASSIGNED_PREFIX) > MAX_CONF_LINE_LENGTH) { r = idn_invalid_name; goto failure; } sprintf(unassigned_scheme_name, "%s%s", IDN_CHECKER_UNASSIGNED_PREFIX, version); if (strlen(version) + strlen(IDN_CHECKER_BIDI_PREFIX) > MAX_CONF_LINE_LENGTH) { r = idn_invalid_name; goto failure; } sprintf(bidi_scheme_name, "%s%s", IDN_CHECKER_BIDI_PREFIX, version); /* * Create objects. */ r = idn_mapper_create(&mapper); if (r != idn_success) goto failure; r = idn_normalizer_create(&normalizer); if (r != idn_success) goto failure; r = idn_checker_create(&prohibit_checker); if (r != idn_success) goto failure; r = idn_checker_create(&unassigned_checker); if (r != idn_success) goto failure; r = idn_checker_create(&bidi_checker); if (r != idn_success) goto failure; r = idn_mapper_add(mapper, version); if (r != idn_success) goto failure; r = idn_normalizer_add(normalizer, version); if (r != idn_success) goto failure; r = idn_checker_add(prohibit_checker, prohibit_scheme_name); if (r != idn_success) goto failure; r = idn_checker_add(unassigned_checker, unassigned_scheme_name); if (r != idn_success) goto failure; r = idn_checker_add(bidi_checker, bidi_scheme_name); if (r != idn_success) goto failure; /* * Set the objects. */ idn_resconf_setmapper(ctx, mapper); idn_resconf_setnormalizer(ctx, normalizer); idn_resconf_setprohibitchecker(ctx, prohibit_checker); idn_resconf_setunassignedchecker(ctx, unassigned_checker); idn_resconf_setbidichecker(ctx, bidi_checker); /* * Destroy the objects. */ idn_mapper_destroy(mapper); idn_normalizer_destroy(normalizer); idn_checker_destroy(prohibit_checker); idn_checker_destroy(unassigned_checker); idn_checker_destroy(bidi_checker); return (idn_success); failure: if (mapper != NULL) idn_mapper_destroy(mapper); if (normalizer != NULL) idn_normalizer_destroy(normalizer); if (prohibit_checker != NULL) idn_checker_destroy(prohibit_checker); if (unassigned_checker != NULL) idn_checker_destroy(unassigned_checker); if (bidi_checker != NULL) idn_checker_destroy(bidi_checker); return (r); }