- removed logfile open early. It did not have the proper permissions;
it was opened as root instead of the user. And we cannot change user
id yet, since chroot and bind ports need to be done.
+ - callback checks for event callbacks done from mini_event. Because
+ of deletions cannot do this from netevent. This means when using
+ libevent the protection does not work on event-callbacks.
5 October 2007: Wouter
- function pointer whitelist.
#ifdef USE_MINI_EVENT
#include <signal.h>
#include "util/mini_event.h"
+#include "util/fptr_wlist.h"
/** compare events in tree, based on timevalue, ptr for uniqueness */
int mini_ev_cmp(const void* a, const void* b)
/* event times out, remove it */
(void)rbtree_delete(base->times, p);
p->ev_events &= ~EV_TIMEOUT;
+ log_assert(fptr_whitelist_event(p->ev_callback));
(*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg);
}
}
}
bits &= base->fds[i]->ev_events;
if(bits) {
+ log_assert(fptr_whitelist_event(
+ base->fds[i]->ev_callback));
(*base->fds[i]->ev_callback)(base->fds[i]->ev_fd,
bits, base->fds[i]->ev_arg);
if(ret==0)
ev->ev_fd = fd;
ev->ev_events = bits;
ev->ev_callback = cb;
+ log_assert(fptr_whitelist_event(ev->ev_callback));
ev->ev_arg = arg;
ev->added = 0;
}
ev = signal_base->signals[sig];
if(!ev)
return;
+ log_assert(fptr_whitelist_event(ev->ev_callback));
(*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg);
}
(void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
(struct sockaddr*)&rep.addr, rep.addrlen);
}
- /* may be deleted
- log_assert(fptr_whitelist_event(rep.c->ev->ev.ev_callback)); */
}
/** Use a new tcp handler for new query fd, set to read query */
}
/* addr is dropped. Not needed for tcp reply. */
setup_tcp_handler(c_hdl, new_fd);
- /* may be deleted
- log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
}
/** Make tcp handler free for next assignment */
NETEVENT_CLOSED, NULL);
}
}
- /* may be deleted
- log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
if(event&EV_WRITE) {
NETEVENT_CLOSED, NULL);
}
}
- /*
- log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
if(event&EV_TIMEOUT) {
(void)(*c->callback)(c, c->cb_arg,
NETEVENT_TIMEOUT, NULL);
}
- /*
- log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
log_err("Ignored event %d for tcphdl.", event);
- /*
- log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
}
void comm_point_local_handle_callback(int fd, short event, void* arg)
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
NULL);
}
- /* log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
return;
}
log_err("Ignored event %d for localhdl.", event);
- /*log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
}
struct comm_point*
tm->ev_timer->enabled = 0;
log_assert(fptr_whitelist_comm_timer(tm->callback));
(*tm->callback)(tm->cb_arg);
- /* it was deleted log_assert(fptr_whitelist_event(tm->ev_timer->ev.ev_callback)); */
}
int
return;
log_assert(fptr_whitelist_comm_signal(comsig->callback));
(*comsig->callback)(sig, comsig->cb_arg);
- /*log_assert(fptr_whitelist_event(comsig->ev_signal->ev.ev_callback));*/
}
int