示例#1
0
static int
process_ldif(struct aldap *ld, FILE *fp)
{
	struct ber_element	*elm, *root;
	int			 code = 0, lineno = 0;
	unsigned long long	 n = 0;

	fprintf(stderr, "reading ldif\n");

	while ((elm = ldif_parse_file(fp, &lineno)) != NULL) {
		root = ber_printf(NULL, "{de}", ++ld->msgid, elm);
		if (root == NULL)
			goto fail;
		elm = NULL;
		if (aldap_enqueue(ld, root) == -1)
			goto fail;
		code = aldap_result(ld, ld->msgid, NULL, NULL);
		fprintf(stderr, "got return code %i\n", code);
		if (code != 0)
			break;
		++n;
	}

	if (code == 0)
		fprintf(stderr, "loaded %llu entries\n", n);
	else
		fprintf(stderr, "%s\n", aldap_strerror(code));

	if (fp != stdin)
		fclose(fp);
	return code;

fail:
	if (fp != stdin)
		fclose(fp);
	if (root)
		ber_free_elements(root);
	if (elm)
		ber_free_elements(elm);
	return 1;
}
示例#2
0
int
mps_getbulkreq(struct snmp_message *msg, struct ber_element **root,
    struct ber_oid *o, int max)
{
	struct ber_element *c, *d, *e;
	size_t len;
	int j, ret;

	j = max;
	c = *root;

	for (d = NULL, len = 0; j > 0; j--) {
		e = ber_add_sequence(NULL);
		if (c == NULL)
			c = e;
		ret = mps_getnextreq(msg, e, o);
		if (ret == 1)
			return (1);
		if (ret == -1) {
			ber_free_elements(e);
			if (d == NULL)
				return (-1);
			break;
		}
		len += ber_calc_len(e);
		if (len > SNMPD_MAXVARBINDLEN) {
			ber_free_elements(e);
			break;
		}
		if (d != NULL)
			ber_link_elements(d, e);
		d = e;
	}

	*root = c;
	return (0);
}