@@ -1,12 +1,12 @@
dnl Checks for libevent
AC_DEFUN([AC_LIBEVENT], [
- dnl Check for libevent, but do not add -levent to LIBS
- AC_CHECK_LIB([event], [event_dispatch], [LIBEVENT=-levent],
+ dnl Check for libevent, but do not add -levent_core to LIBS
+ AC_CHECK_LIB([event_core], [event_base_dispatch], [LIBEVENT=-levent_core],
[AC_MSG_ERROR([libevent not found.])])
AC_SUBST(LIBEVENT)
- AC_CHECK_HEADERS([event.h], ,
+ AC_CHECK_HEADERS([event2/event.h], ,
[AC_MSG_ERROR([libevent headers not found.])])
])dnl
@@ -64,7 +64,7 @@
#include <fcntl.h>
#include <dirent.h>
#include <netdb.h>
-#include <event.h>
+#include <event2/event.h>
#include "gssd.h"
#include "err_util.h"
@@ -77,7 +77,7 @@ static char *pipefs_path = GSSD_PIPEFS_DIR;
static DIR *pipefs_dir;
static int pipefs_fd;
static int inotify_fd;
-struct event inotify_ev;
+struct event *inotify_ev;
char *keytabfile = GSSD_DEFAULT_KEYTAB_FILE;
char **ccachesearch;
@@ -91,6 +91,7 @@ char *ccachedir = NULL;
static bool avoid_dns = true;
static bool use_gssproxy = false;
pthread_mutex_t clp_lock = PTHREAD_MUTEX_INITIALIZER;
+static struct event_base *evbase = NULL;
TAILQ_HEAD(topdir_list_head, topdir) topdir_list;
@@ -394,11 +395,17 @@ gssd_destroy_client(struct clnt_info *clp)
{
printerr(3, "destroying client %s\n", clp->relpath);
- if (clp->krb5_fd >= 0)
- event_del(&clp->krb5_ev);
+ if (clp->krb5_ev) {
+ event_del(clp->krb5_ev);
+ event_free(clp->krb5_ev);
+ clp->krb5_ev = NULL;
+ }
- if (clp->gssd_fd >= 0)
- event_del(&clp->gssd_ev);
+ if (clp->gssd_ev) {
+ event_del(clp->gssd_ev);
+ event_free(clp->gssd_ev);
+ clp->gssd_ev = NULL;
+ }
inotify_rm_watch(inotify_fd, clp->wd);
gssd_free_client(clp);
@@ -571,15 +578,15 @@ gssd_scan_clnt(struct clnt_info *clp)
clp->krb5_fd = openat(clntfd, "krb5", O_RDWR | O_NONBLOCK);
if (gssd_was_closed && clp->gssd_fd >= 0) {
- event_set(&clp->gssd_ev, clp->gssd_fd, EV_READ | EV_PERSIST,
- gssd_clnt_gssd_cb, clp);
- event_add(&clp->gssd_ev, NULL);
+ clp->gssd_ev = event_new(evbase, clp->gssd_fd, EV_READ | EV_PERSIST,
+ gssd_clnt_gssd_cb, clp);
+ event_add(clp->gssd_ev, NULL);
}
if (krb5_was_closed && clp->krb5_fd >= 0) {
- event_set(&clp->krb5_ev, clp->krb5_fd, EV_READ | EV_PERSIST,
- gssd_clnt_krb5_cb, clp);
- event_add(&clp->krb5_ev, NULL);
+ clp->krb5_ev = event_new(evbase, clp->krb5_fd, EV_READ | EV_PERSIST,
+ gssd_clnt_krb5_cb, clp);
+ event_add(clp->krb5_ev, NULL);
}
if (clp->krb5_fd == -1 && clp->gssd_fd == -1)
@@ -783,12 +790,16 @@ gssd_inotify_clnt(struct topdir *tdi, struct clnt_info *clp, const struct inotif
} else if (ev->mask & IN_DELETE) {
if (!strcmp(ev->name, "gssd") && clp->gssd_fd >= 0) {
close(clp->gssd_fd);
- event_del(&clp->gssd_ev);
+ event_del(clp->gssd_ev);
+ event_free(clp->gssd_ev);
+ clp->gssd_ev = NULL;
clp->gssd_fd = -1;
} else if (!strcmp(ev->name, "krb5") && clp->krb5_fd >= 0) {
close(clp->krb5_fd);
- event_del(&clp->krb5_ev);
+ event_del(clp->krb5_ev);
+ event_free(clp->krb5_ev);
+ clp->krb5_ev = NULL;
clp->krb5_fd = -1;
}
@@ -923,7 +934,7 @@ main(int argc, char *argv[])
int i;
extern char *optarg;
char *progname;
- struct event sighup_ev;
+ struct event *sighup_ev;
read_gss_conf();
@@ -1062,7 +1073,11 @@ main(int argc, char *argv[])
if (gssd_check_mechs() != 0)
errx(1, "Problem with gssapi library");
- event_init();
+ evbase = event_base_new();
+ if (!evbase) {
+ printerr(0, "ERROR: failed to create event base\n");
+ exit(EXIT_FAILURE);
+ }
pipefs_dir = opendir(pipefs_path);
if (!pipefs_dir) {
@@ -1084,16 +1099,17 @@ main(int argc, char *argv[])
signal(SIGINT, sig_die);
signal(SIGTERM, sig_die);
- signal_set(&sighup_ev, SIGHUP, gssd_scan_cb, NULL);
- signal_add(&sighup_ev, NULL);
- event_set(&inotify_ev, inotify_fd, EV_READ | EV_PERSIST, gssd_inotify_cb, NULL);
- event_add(&inotify_ev, NULL);
+ sighup_ev = evsignal_new(evbase, SIGHUP, gssd_scan_cb, NULL);
+ evsignal_add(sighup_ev, NULL);
+ inotify_ev = event_new(evbase, inotify_fd, EV_READ | EV_PERSIST,
+ gssd_inotify_cb, NULL);
+ event_add(inotify_ev, NULL);
TAILQ_INIT(&topdir_list);
gssd_scan();
daemon_ready();
- event_dispatch();
+ event_base_dispatch(evbase);
printerr(0, "ERROR: event_dispatch() returned!\n");
return EXIT_FAILURE;
@@ -77,9 +77,9 @@ struct clnt_info {
int vers;
char *protocol;
int krb5_fd;
- struct event krb5_ev;
+ struct event *krb5_ev;
int gssd_fd;
- struct event gssd_ev;
+ struct event *gssd_ev;
struct sockaddr_storage addr;
};
@@ -49,7 +49,7 @@
#include <err.h>
#include <errno.h>
-#include <event.h>
+#include <event2/event.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
@@ -115,7 +115,7 @@ struct idmap_client {
int ic_fd;
int ic_dirfd;
int ic_scanned;
- struct event ic_event;
+ struct event *ic_event;
TAILQ_ENTRY(idmap_client) ic_next;
};
static struct idmap_client nfsd_ic[2] = {
@@ -166,6 +166,7 @@ static char pipefsdir[PATH_MAX];
static char *nobodyuser, *nobodygroup;
static uid_t nobodyuid;
static gid_t nobodygid;
+static struct event_base *evbase = NULL;
static int
flush_nfsd_cache(char *path, time_t now)
@@ -209,8 +210,8 @@ main(int argc, char **argv)
{
int wd = -1, opt, fg = 0, nfsdret = -1;
struct idmap_clientq icq;
- struct event rootdirev, clntdirev, svrdirev, inotifyev;
- struct event initialize;
+ struct event *rootdirev, *clntdirev, *svrdirev, *inotifyev;
+ struct event *initialize;
struct passwd *pw;
struct group *gr;
struct stat sb;
@@ -341,7 +342,9 @@ main(int argc, char **argv)
if (nfs4_init_name_mapping(conf_path))
errx(1, "Unable to create name to user id mappings.");
- event_init();
+ evbase = event_base_new();
+ if (evbase == NULL)
+ errx(1, "Failed to create event base.");
if (verbose > 0)
xlog_warn("Expiration time is %d seconds.",
@@ -396,22 +399,22 @@ main(int argc, char **argv)
TAILQ_INIT(&icq);
/* These events are persistent */
- signal_set(&rootdirev, SIGUSR1, dirscancb, &icq);
- signal_add(&rootdirev, NULL);
- signal_set(&clntdirev, SIGUSR2, clntscancb, &icq);
- signal_add(&clntdirev, NULL);
- signal_set(&svrdirev, SIGHUP, svrreopen, NULL);
- signal_add(&svrdirev, NULL);
+ rootdirev = evsignal_new(evbase, SIGUSR1, dirscancb, &icq);
+ evsignal_add(rootdirev, NULL);
+ clntdirev = evsignal_new(evbase, SIGUSR2, clntscancb, &icq);
+ evsignal_add(clntdirev, NULL);
+ svrdirev = evsignal_new(evbase, SIGHUP, svrreopen, NULL);
+ evsignal_add(svrdirev, NULL);
if ( wd >= 0) {
- event_set(&inotifyev, inotify_fd, EV_READ, dirscancb, &icq);
- event_add(&inotifyev, NULL);
+ inotifyev = event_new(evbase, inotify_fd, EV_READ, dirscancb, &icq);
+ event_add(inotifyev, NULL);
}
/* Fetch current state */
/* (Delay till start of event_dispatch to avoid possibly losing
* a SIGUSR1 between here and the call to event_dispatch().) */
- evtimer_set(&initialize, dirscancb, &icq);
- evtimer_add(&initialize, &now);
+ initialize = evtimer_new(evbase, dirscancb, &icq);
+ evtimer_add(initialize, &now);
}
if (nfsdret != 0 && wd < 0)
@@ -419,7 +422,7 @@ main(int argc, char **argv)
daemon_ready();
- if (event_dispatch() < 0)
+ if (event_base_dispatch(evbase) < 0)
xlog_err("main: event_dispatch returns errno %d (%s)",
errno, strerror(errno));
/* NOTREACHED */
@@ -490,7 +493,8 @@ dirscancb(int UNUSED(fd), short UNUSED(which), void *data)
while(ic != NULL) {
nextic=TAILQ_NEXT(ic, ic_next);
if (!ic->ic_scanned) {
- event_del(&ic->ic_event);
+ event_del(ic->ic_event);
+ event_free(ic->ic_event);
close(ic->ic_fd);
close(ic->ic_dirfd);
TAILQ_REMOVE(icq, ic, ic_next);
@@ -677,7 +681,7 @@ nfsdcb(int UNUSED(fd), short which, void *data)
ic->ic_path, errno, strerror(errno));
out:
- event_add(&ic->ic_event, NULL);
+ event_add(ic->ic_event, NULL);
}
static void
@@ -743,7 +747,7 @@ nfscb(int UNUSED(fd), short which, void *data)
if (atomicio((void*)write, ic->ic_fd, &im, sizeof(im)) != sizeof(im))
xlog_warn("nfscb: write(%s): %s", ic->ic_path, strerror(errno));
out:
- event_add(&ic->ic_event, NULL);
+ event_add(ic->ic_event, NULL);
}
static void
@@ -755,14 +759,16 @@ nfsdreopen_one(struct idmap_client *ic)
xlog_warn("ReOpening %s", ic->ic_path);
if ((fd = open(ic->ic_path, O_RDWR, 0)) != -1) {
- if ((event_initialized(&ic->ic_event)))
- event_del(&ic->ic_event);
+ if (ic->ic_event && event_initialized(ic->ic_event)) {
+ event_del(ic->ic_event);
+ event_free(ic->ic_event);
+ }
if (ic->ic_fd != -1)
close(ic->ic_fd);
- ic->ic_event.ev_fd = ic->ic_fd = fd;
- event_set(&ic->ic_event, ic->ic_fd, EV_READ, nfsdcb, ic);
- event_add(&ic->ic_event, NULL);
+ ic->ic_fd = fd;
+ ic->ic_event = event_new(evbase, ic->ic_fd, EV_READ, nfsdcb, ic);
+ event_add(ic->ic_event, NULL);
} else {
xlog_warn("nfsdreopen: Opening '%s' failed: errno %d (%s)",
ic->ic_path, errno, strerror(errno));
@@ -795,8 +801,8 @@ nfsdopenone(struct idmap_client *ic)
return (-1);
}
- event_set(&ic->ic_event, ic->ic_fd, EV_READ, nfsdcb, ic);
- event_add(&ic->ic_event, NULL);
+ ic->ic_event = event_new(evbase, ic->ic_fd, EV_READ, nfsdcb, ic);
+ event_add(ic->ic_event, NULL);
if (verbose > 0)
xlog_warn("Opened %s", ic->ic_path);
@@ -819,8 +825,8 @@ nfsopen(struct idmap_client *ic)
return (-1);
}
} else {
- event_set(&ic->ic_event, ic->ic_fd, EV_READ, nfscb, ic);
- event_add(&ic->ic_event, NULL);
+ ic->ic_event = event_new(evbase, ic->ic_fd, EV_READ, nfscb, ic);
+ event_add(ic->ic_event, NULL);
fcntl(ic->ic_dirfd, F_NOTIFY, 0);
fcntl(ic->ic_dirfd, F_SETSIG, 0);
if (verbose > 0)
@@ -26,7 +26,7 @@
struct cld_client {
int cl_fd;
- struct event cl_event;
+ struct event *cl_event;
union {
struct cld_msg cl_msg;
#if UPCALL_VERSION >= 2
@@ -24,7 +24,7 @@
#endif /* HAVE_CONFIG_H */
#include <errno.h>
-#include <event.h>
+#include <event2/event.h>
#include <stdbool.h>
#include <getopt.h>
#include <string.h>
@@ -66,7 +66,8 @@
static char pipefs_dir[PATH_MAX] = DEFAULT_PIPEFS_DIR;
static char pipepath[PATH_MAX];
static int inotify_fd = -1;
-static struct event pipedir_event;
+static struct event *pipedir_event;
+static struct event_base *evbase;
static bool old_kernel = false;
uint64_t current_epoch;
@@ -149,13 +150,15 @@ cld_pipe_open(struct cld_client *clnt)
return -errno;
}
- if (event_initialized(&clnt->cl_event))
- event_del(&clnt->cl_event);
+ if (clnt->cl_event && event_initialized(clnt->cl_event)) {
+ event_del(clnt->cl_event);
+ event_free(clnt->cl_event);
+ }
if (clnt->cl_fd >= 0)
close(clnt->cl_fd);
clnt->cl_fd = fd;
- event_set(&clnt->cl_event, clnt->cl_fd, EV_READ, cldcb, clnt);
+ clnt->cl_event = event_new(evbase, clnt->cl_fd, EV_READ, cldcb, clnt);
/* event_add is done by the caller */
return 0;
}
@@ -208,7 +211,7 @@ cld_inotify_cb(int UNUSED(fd), short which, void *data)
switch (ret) {
case 0:
/* readd the event for the cl_event pipe */
- event_add(&clnt->cl_event, NULL);
+ event_add(clnt->cl_event, NULL);
break;
case -ENOENT:
/* pipe must have disappeared, wait for it to come back */
@@ -221,7 +224,7 @@ cld_inotify_cb(int UNUSED(fd), short which, void *data)
}
out:
- event_add(&pipedir_event, NULL);
+ event_add(pipedir_event, NULL);
free(dirc);
}
@@ -286,7 +289,7 @@ cld_pipe_init(struct cld_client *clnt)
switch (ret) {
case 0:
/* add the event and we're good to go */
- event_add(&clnt->cl_event, NULL);
+ event_add(clnt->cl_event, NULL);
break;
case -ENOENT:
/* ignore this error -- cld_inotify_cb will handle it */
@@ -299,8 +302,8 @@ cld_pipe_init(struct cld_client *clnt)
}
/* set event for inotify read */
- event_set(&pipedir_event, inotify_fd, EV_READ, cld_inotify_cb, clnt);
- event_add(&pipedir_event, NULL);
+ pipedir_event = event_new(evbase, inotify_fd, EV_READ, cld_inotify_cb, clnt);
+ event_add(pipedir_event, NULL);
out:
return ret;
}
@@ -737,7 +740,7 @@ cldcb(int UNUSED(fd), short which, void *data)
cld_not_implemented(clnt);
}
out:
- event_add(&clnt->cl_event, NULL);
+ event_add(clnt->cl_event, NULL);
}
int
@@ -762,7 +765,7 @@ main(int argc, char **argv)
return 1;
}
- event_init();
+ evbase = event_base_new();
xlog_syslog(0);
xlog_stderr(1);
@@ -860,7 +863,7 @@ main(int argc, char **argv)
goto out;
xlog(D_GENERAL, "%s: Starting event dispatch handler.", __func__);
- rc = event_dispatch();
+ rc = event_base_dispatch(evbase);
if (rc < 0)
xlog(L_ERROR, "%s: event_dispatch failed: %m", __func__);
@@ -48,7 +48,6 @@
#include <dirent.h>
#include <errno.h>
-#include <event.h>
#include <stdbool.h>
#include <string.h>
#include <sys/stat.h>
@@ -40,7 +40,7 @@
#include <dirent.h>
#include <errno.h>
-#include <event.h>
+#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <sys/stat.h>
Signed-off-by: Doug Nazar <nazard@nazar.ca> --- aclocal/libevent.m4 | 6 ++-- utils/gssd/gssd.c | 58 +++++++++++++++++++++------------ utils/gssd/gssd.h | 4 +-- utils/idmapd/idmapd.c | 62 ++++++++++++++++++++---------------- utils/nfsdcld/cld-internal.h | 2 +- utils/nfsdcld/nfsdcld.c | 29 +++++++++-------- utils/nfsdcld/sqlite.c | 1 - utils/nfsdcltrack/sqlite.c | 2 +- 8 files changed, 94 insertions(+), 70 deletions(-)