Esempio n. 1
0
int
wind_stringprep(const uint32_t *in, size_t in_len,
                uint32_t *out, size_t *out_len,
                wind_profile_flags flags)
{
    size_t tmp_len = in_len * 3;
    uint32_t *tmp;
    int ret;
    size_t olen;

    if (in_len == 0) {
        *out_len = 0;
        return 0;
    }

    tmp = malloc(tmp_len * sizeof(uint32_t));
    if (tmp == NULL)
        return ENOMEM;

    ret = _wind_stringprep_map(in, in_len, tmp, &tmp_len, flags);
    if (ret) {
        free(tmp);
        return ret;
    }

    olen = *out_len;
    ret = _wind_stringprep_normalize(tmp, tmp_len, tmp, &olen);
    if (ret) {
        free(tmp);
        return ret;
    }
    ret = _wind_stringprep_prohibited(tmp, olen, flags);
    if (ret) {
        free(tmp);
        return ret;
    }
    ret = _wind_stringprep_testbidi(tmp, olen, flags);
    if (ret) {
        free(tmp);
        return ret;
    }

    /* Insignificant Character Handling for ldap-prep */
    if (flags & WIND_PROFILE_LDAP_CASE_EXACT_ATTRIBUTE) {
        ret = _wind_ldap_case_exact_attribute(tmp, olen, out, out_len);
#if 0
    } else if (flags & WIND_PROFILE_LDAP_CASE_EXACT_ASSERTION) {
    } else if (flags & WIND_PROFILE_LDAP_NUMERIC) {
    } else if (flags & WIND_PROFILE_LDAP_TELEPHONE) {
#endif
    } else {
        memcpy(out, tmp, sizeof(out[0]) * olen);
        *out_len = olen;
    }
    free(tmp);

    return ret;
}
Esempio n. 2
0
int
main(void)
{
    uint32_t out[MAX_LENGTH];
    unsigned failures = 0;
    unsigned i;
    size_t olen;
    int ret;


    for (i = 0; i < sizeof(testcases)/sizeof(testcases[0]); ++i) {
	const struct testcase *t = &testcases[i];

	olen = sizeof(out)/sizeof(out[0]);
	assert(olen > t->olen);

	ret = _wind_ldap_case_exact_attribute(t->in, t->ilen, out, &olen);
	if (ret) {
	    printf("wlcea: %u: %d\n", i, ret);
	    ++failures;
	    continue;
	}
	if (olen != t->olen) {
	    printf("len: %u %u != %u\n", i,
		   (unsigned)olen, (unsigned)t->olen);
	    failures++;
	    continue;
	}
	if (memcmp(t->out, out, sizeof(out[0]) * olen) != 0) {
	    printf("memcmp: %u\n", i);
	    failures++;
	    continue;
	}
    }

    return failures != 0;
}