Example #1
0
int
_hx509_name_ds_cmp(const DirectoryString *ds1,
		   const DirectoryString *ds2,
		   int *diff)
{
    uint32_t *ds1lp, *ds2lp;
    size_t ds1len, ds2len;
    int ret;

    ret = dsstringprep(ds1, &ds1lp, &ds1len);
    if (ret)
	return ret;
    ret = dsstringprep(ds2, &ds2lp, &ds2len);
    if (ret) {
	free(ds1lp);
	return ret;
    }

    if (ds1len != ds2len)
	*diff = ds1len - ds2len;
    else
	*diff = memcmp(ds1lp, ds2lp, ds1len * sizeof(ds1lp[0]));

    free(ds1lp);
    free(ds2lp);

    return 0;
}
Example #2
0
int
_hx509_name_ds_cmp(const DirectoryString *ds1,
		   const DirectoryString *ds2,
		   int *diff)
{
    uint32_t *ds1lp, *ds2lp;
    size_t ds1len, ds2len, i;
    int ret;

    ret = dsstringprep(ds1, &ds1lp, &ds1len);
    if (ret)
	return ret;
    ret = dsstringprep(ds2, &ds2lp, &ds2len);
    if (ret) {
	free(ds1lp);
	return ret;
    }

    if (ds1len != ds2len)
	*diff = ds1len - ds2len;
    else {
	for (i = 0; i < ds1len; i++) {
	    *diff = ds1lp[i] - ds2lp[i];
	    if (*diff)
		break;
	}
    }
    free(ds1lp);
    free(ds2lp);

    return 0;
}
int
hx509_name_get_component(hx509_name name, int rdn, const heim_oid *type, unsigned *count, char **str)
{
    Name *n = &name->der_name;
    size_t len, ulen;
    uint32_t *ds;
    unsigned i;
    int ret;

    if (str)
	*str = NULL;

    if (rdn >= n->u.rdnSequence.len)
	return ERANGE;
    
    for (i = *count; i < n->u.rdnSequence.val[rdn].len; i++) {
	if (der_heim_oid_cmp(&n->u.rdnSequence.val[rdn].val[i].type, type) == 0) {

	    *count = i + 1;

	    if (str == NULL)
		return HX509_NAME_MALFORMED;

	    ret = dsstringprep(&n->u.rdnSequence.val[rdn].val[i].value, &ds, &len);
	    if (ret)
		return ret;

	    ret = wind_ucs4utf8_length(ds, len, &ulen);
	    if (ret) {
		free(ds);
		return ret;
	    }

	    ulen += 1;

	    *str = malloc(ulen);
	    if (str == NULL) {
		free(ds);
		return ENOMEM;
	    }
	    ret = wind_ucs4utf8(ds, len, *str, &ulen);
	    free(ds);
	    if (ret) {
		free(*str);
		*str = NULL;
		return ret;
	    }
	    return 0;
	}
    }
    if (str == NULL)
	return 0;
    return HX509_NAME_MALFORMED;
}