idm
TAILQ_FOREACH(h, &idm->idm_addr, next) {
idm->idm_state = STATE_DNS_DONE;
idm->idm_state = STATE_DNS_DONE;
client_addr_free(struct idm *idm)
while (!TAILQ_EMPTY(&idm->idm_addr)) {
h = TAILQ_FIRST(&idm->idm_addr);
TAILQ_REMOVE(&idm->idm_addr, h, next);
struct idm *idm;
TAILQ_FOREACH(idm, &env->sc_idms, idm_entry)
if (idm->idm_id == imsg.hdr.peerid)
if (idm == NULL) {
if (!TAILQ_EMPTY(&idm->idm_addr)) {
idm->idm_state = STATE_DNS_TEMPFAIL;
TAILQ_INSERT_HEAD(&idm->idm_addr, h, next);
client_addr_init(idm);
TAILQ_FOREACH(idm, &env->sc_idms, idm_entry) {
if (client_try_idm(env, idm) == -1)
idm->idm_state = STATE_LDAP_FAIL;
if (idm->idm_state < STATE_LDAP_DONE)
struct idm *idm;
if ((idm = calloc(1, sizeof(*idm))) == NULL)
memcpy(idm, imsg.data, sizeof(*idm));
idm->idm_env = env;
TAILQ_INSERT_TAIL(&env->sc_idms, idm, idm_entry);
client_build_req(struct idm *idm, struct idm_req *ir, struct aldap_message *m,
if (idm->idm_flags & F_FIXED_ATTR(i)) {
if (strlcat(ir->ir_line, idm->idm_attrs[i],
idm->idm_attrs[i], 0,
idm->idm_attrs[i], 0,
} else if (idm->idm_list & F_LIST(i)) {
aldap_match_attr(m, idm->idm_attrs[i], &ldap_attrs);
if (aldap_match_attr(m, idm->idm_attrs[i], &ldap_attrs) == -1)
client_search_idm(struct env *env, struct idm *idm, struct aldap *al,
int client_build_req(struct idm *, struct idm_req *, struct aldap_message *,
dn = idm->idm_basedn;
if (type == IMSG_GRP_ENTRY && idm->idm_groupdn[0] != '\0')
dn = idm->idm_groupdn;
int client_search_idm(struct env *, struct idm *, struct aldap *,
if (client_build_req(idm, &ir, m, min_attr, max_attr) == 0)
int client_try_idm(struct env *, struct idm *);
int client_addr_init(struct idm *);
client_try_idm(struct env *env, struct idm *idm)
int client_addr_free(struct idm *);
if ((al = client_aldap_open(&idm->idm_addr)) == NULL)
if (idm->idm_flags & F_NEEDAUTH) {
if (aldap_bind(al, idm->idm_binddn, idm->idm_bindcred) == -1)
if (idm->idm_flags & F_FIXED_ATTR(i))
attrs[j++] = idm->idm_attrs[i];
if (client_search_idm(env, idm, al, attrs,
idm->idm_filters[FILTER_USER], 0, ATTR_MAX, IMSG_PW_ENTRY) == -1)
if (idm->idm_flags & F_FIXED_ATTR(i))
attrs[j++] = idm->idm_attrs[i];
if (client_search_idm(env, idm, al, attrs,
idm->idm_filters[FILTER_GROUP], ATTR_GR_MIN, ATTR_GR_MAX,
idm->idm_state = STATE_LDAP_DONE;
log_debug("directory %s errored out in %s", idm->idm_name, where);
struct idm *idm;
TAILQ_FOREACH(idm, &env->sc_idms, idm_entry) {
if (idm->idm_state < STATE_LDAP_DONE)
idm->idm_state = STATE_NONE;
client_addr_free(idm);
struct idm *idm;
TAILQ_FOREACH(idm, &env->sc_idms, idm_entry) {
dlen = strlen(idm->idm_name) + 1;
imsg_compose_event(env->sc_iev_dns, IMSG_HOST_DNS, idm->idm_id,
0, -1, idm->idm_name, dlen);
client_addr_init(struct idm *idm)
idm->idm_flags |= F_NEEDAUTH;
if (strlcpy(idm->idm_binddn, $2,
sizeof(idm->idm_binddn)) >=
sizeof(idm->idm_binddn)) {
idm->idm_flags |= F_NEEDAUTH;
if (strlcpy(idm->idm_bindcred, $2,
sizeof(idm->idm_bindcred)) >=
sizeof(idm->idm_bindcred)) {
if (strlcpy(idm->idm_basedn, $2,
sizeof(idm->idm_basedn)) >=
sizeof(idm->idm_basedn)) {
if(strlcpy(idm->idm_groupdn, $2,
sizeof(idm->idm_groupdn)) >=
sizeof(idm->idm_groupdn)) {
if (strlcpy(idm->idm_filters[$1], $3,
sizeof(idm->idm_filters[$1])) >=
sizeof(idm->idm_filters[$1])) {
if (strlcpy(idm->idm_attrs[$2], $5,
sizeof(idm->idm_attrs[$2])) >=
sizeof(idm->idm_attrs[$2])) {
if (strlcpy(idm->idm_attrs[$3], $4,
sizeof(idm->idm_attrs[$3])) >=
sizeof(idm->idm_attrs[$3])) {
idm->idm_flags |= F_FIXED_ATTR($3);
if (strlcpy(idm->idm_attrs[$2], $5,
sizeof(idm->idm_attrs[$2])) >=
sizeof(idm->idm_attrs[$2])) {
idm->idm_list |= F_LIST($2);
if ((idm = calloc(1, sizeof(*idm))) == NULL)
idm->idm_id = conf->sc_maxid++;
if (strlcpy(idm->idm_name, $2,
sizeof(idm->idm_name)) >=
sizeof(idm->idm_name)) {
TAILQ_INSERT_TAIL(&conf->sc_idms, idm, idm_entry);
idm = NULL;
struct idm *idm = NULL;
struct idm *idm;
TAILQ_FOREACH(idm, &env->sc_idms, idm_entry) {
idm, sizeof(*idm));
struct idm *idm;
while ((idm = TAILQ_FIRST(&env->sc_idms)) != NULL) {
TAILQ_REMOVE(&env->sc_idms, idm, idm_entry);
free(idm);
TAILQ_HEAD(idm_list, idm) sc_idms;
TAILQ_ENTRY(idm) idm_entry;