int sess_delete(session *sess) { rb_node *node = tree_delete(&sess_head, sess->fd); sess_free(sess); free(node); return 0; }
int main() { session_t sess; datum id; time_t create_time, last_seen; bool do_allow; char *reason; openlog("dorian/query", LOG_PID, LOG_MAIL); for (;;) { do_allow = false; if ((sess = sess_req(stdin)) == NULL) break; /* white listing */ for_each(i, whitelist_prefix) if (!strncasecmp(whitelist_prefix[i], sess->attr[Krecipient], strlen(whitelist_prefix[i]))) { do_allow = true; reason = "whitelist address"; break; } if (!do_allow) { sess_derive_key(sess, &id); { if (seen(id, &create_time, &last_seen)) { if (create_time < expired()) { bump(id, create_time); do_allow = true; reason = "in database"; } } else add(id); } free(id.dptr); } sess_free(&sess); if (do_allow) allow(reason); else defer(); } closelog(); return 0; }