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; }
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); }