Convert sudo to use BSD TAILQ macros instead of home ground tail

queue functions.  This includes a private queue.h header derived
from FreeBSD.  It is simpler to just use our own header rather than
try to deal with macros that may or may not be present in various
queue.h incarnations.
This commit is contained in:
Todd C. Miller
2013-10-22 09:00:37 -06:00
parent fe0e953e9b
commit 923edabe6c
31 changed files with 962 additions and 299 deletions

View File

@@ -147,6 +147,7 @@ include/gettext.h
include/lbuf.h include/lbuf.h
include/list.h include/list.h
include/missing.h include/missing.h
include/queue.h
include/secure_path.h include/secure_path.h
include/sudo_conf.h include/sudo_conf.h
include/sudo_debug.h include/sudo_debug.h

View File

@@ -170,22 +170,22 @@ atoid.lo: $(srcdir)/atoid.c $(top_builddir)/config.h \
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/atoid.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/atoid.c
conf_test.lo: $(srcdir)/regress/sudo_conf/conf_test.c $(top_builddir)/config.h \ conf_test.lo: $(srcdir)/regress/sudo_conf/conf_test.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/sudo_conf.h $(incdir)/list.h $(incdir)/sudo_conf.h $(incdir)/queue.h
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_conf/conf_test.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_conf/conf_test.c
event.lo: $(srcdir)/event.c $(top_builddir)/config.h \ event.lo: $(srcdir)/event.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \
$(incdir)/fatal.h $(incdir)/list.h $(incdir)/sudo_debug.h \ $(incdir)/fatal.h $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \
$(incdir)/sudo_event.h $(incdir)/queue.h
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event.c
event_poll.lo: $(srcdir)/event_poll.c $(top_builddir)/config.h \ event_poll.lo: $(srcdir)/event_poll.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/list.h \ $(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/sudo_debug.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_event.h $(incdir)/sudo_event.h $(incdir)/queue.h
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_poll.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_poll.c
event_select.lo: $(srcdir)/event_select.c $(top_builddir)/config.h \ event_select.lo: $(srcdir)/event_select.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/list.h \ $(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/sudo_debug.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_event.h $(incdir)/sudo_event.h $(incdir)/queue.h
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_select.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_select.c
fatal.lo: $(srcdir)/fatal.c $(top_builddir)/config.h \ fatal.lo: $(srcdir)/fatal.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \
@@ -224,7 +224,7 @@ sudo_conf.lo: $(srcdir)/sudo_conf.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \
$(top_builddir)/pathnames.h $(incdir)/sudo_plugin.h \ $(top_builddir)/pathnames.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_conf.h $(incdir)/list.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_conf.h $(incdir)/queue.h $(incdir)/sudo_debug.h \
$(incdir)/secure_path.h $(incdir)/gettext.h $(incdir)/secure_path.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_conf.c $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_conf.c
sudo_debug.lo: $(srcdir)/sudo_debug.c $(top_builddir)/config.h \ sudo_debug.lo: $(srcdir)/sudo_debug.c $(top_builddir)/config.h \

View File

@@ -45,7 +45,6 @@
#include "missing.h" #include "missing.h"
#include "alloc.h" #include "alloc.h"
#include "fatal.h" #include "fatal.h"
#include "list.h"
#include "sudo_debug.h" #include "sudo_debug.h"
#include "sudo_event.h" #include "sudo_event.h"
@@ -58,6 +57,7 @@ sudo_ev_base_alloc(void)
debug_decl(sudo_ev_base_alloc, SUDO_DEBUG_EVENT) debug_decl(sudo_ev_base_alloc, SUDO_DEBUG_EVENT)
base = ecalloc(1, sizeof(*base)); base = ecalloc(1, sizeof(*base));
TAILQ_INIT(&base->events);
if (sudo_ev_base_alloc_impl(base) != 0) { if (sudo_ev_base_alloc_impl(base) != 0) {
efree(base); efree(base);
base = NULL; base = NULL;
@@ -110,9 +110,9 @@ sudo_ev_add(struct sudo_event_base *base, struct sudo_event *ev, bool tohead)
debug_return_int(-1); debug_return_int(-1);
ev->base = base; ev->base = base;
if (tohead) { if (tohead) {
tq_insert_head(base, ev); TAILQ_INSERT_HEAD(&base->events, ev, entries);
} else { } else {
tq_insert_tail(base, ev); TAILQ_INSERT_TAIL(&base->events, ev, entries);
} }
} }
/* Clear pending delete so adding from callback works properly. */ /* Clear pending delete so adding from callback works properly. */
@@ -149,17 +149,15 @@ sudo_ev_del(struct sudo_event_base *base, struct sudo_event *ev)
debug_return_int(-1); debug_return_int(-1);
/* Unlink from list. */ /* Unlink from list. */
tq_remove(base, ev); TAILQ_REMOVE(&base->events, ev, entries);
/* If we removed the pending event, replace it with the next one. */ /* If we removed the pending event, replace it with the next one. */
if (base->pending == ev) if (base->pending == ev)
base->pending = ev->next; base->pending = TAILQ_NEXT(ev, entries);
/* Mark event unused. */ /* Mark event unused. */
ev->pfd_idx = -1; ev->pfd_idx = -1;
ev->base = NULL; ev->base = NULL;
ev->prev = NULL;
ev->next = NULL;
debug_return_int(0); debug_return_int(0);
} }

View File

@@ -46,7 +46,6 @@
#include "missing.h" #include "missing.h"
#include "alloc.h" #include "alloc.h"
#include "fatal.h" #include "fatal.h"
#include "list.h"
#include "sudo_debug.h" #include "sudo_debug.h"
#include "sudo_event.h" #include "sudo_event.h"
@@ -154,8 +153,7 @@ rescan:
break; break;
default: default:
/* Service each event that fired. */ /* Service each event that fired. */
for (ev = tq_first(base); ev != NULL; ev = base->pending) { TAILQ_FOREACH_SAFE(ev, &base->events, entries, base->pending) {
base->pending = list_next(ev);
if (ev->pfd_idx != -1 && base->pfds[ev->pfd_idx].revents) { if (ev->pfd_idx != -1 && base->pfds[ev->pfd_idx].revents) {
int what = 0; int what = 0;
if (base->pfds[ev->pfd_idx].revents & (POLLIN|POLLHUP|POLLNVAL|POLLERR)) if (base->pfds[ev->pfd_idx].revents & (POLLIN|POLLHUP|POLLNVAL|POLLERR))

View File

@@ -51,7 +51,6 @@
#include "missing.h" #include "missing.h"
#include "alloc.h" #include "alloc.h"
#include "fatal.h" #include "fatal.h"
#include "list.h"
#include "sudo_debug.h" #include "sudo_debug.h"
#include "sudo_event.h" #include "sudo_event.h"
@@ -133,7 +132,7 @@ rescan:
/* For select we need to redo readfds and writefds each time. */ /* For select we need to redo readfds and writefds each time. */
memset(base->readfds, 0, howmany(base->maxfd + 1, NFDBITS) * sizeof(fd_mask)); memset(base->readfds, 0, howmany(base->maxfd + 1, NFDBITS) * sizeof(fd_mask));
memset(base->writefds, 0, howmany(base->maxfd + 1, NFDBITS) * sizeof(fd_mask)); memset(base->writefds, 0, howmany(base->maxfd + 1, NFDBITS) * sizeof(fd_mask));
tq_foreach_fwd(base, ev) { TAILQ_FOREACH(ev, &base->events, entries) {
if (ISSET(ev->events, SUDO_EV_READ)) { if (ISSET(ev->events, SUDO_EV_READ)) {
sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s: added fd %d to readfs", sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s: added fd %d to readfs",
__func__, ev->fd); __func__, ev->fd);
@@ -164,7 +163,7 @@ rescan:
break; break;
default: default:
/* Service each event that fired. */ /* Service each event that fired. */
for (ev = tq_first(base); ev != NULL; ev = base->pending) { TAILQ_FOREACH_SAFE(ev, &base->events, entries, base->pending) {
int what = 0; int what = 0;
base->pending = list_next(ev); base->pending = list_next(ev);
if (FD_ISSET(ev->fd, base->readfds)) if (FD_ISSET(ev->fd, base->readfds))

View File

@@ -129,42 +129,6 @@ tq_append(void *vh, void *vl)
h->last = tail; h->last = tail;
} }
/*
* Insert a single item at the head of the queue.
*/
void
tq_insert_head(void *vh, void *vl)
{
struct list_head_proto *h = (struct list_head_proto *)vh;
struct list_proto *l = (struct list_proto *)vl;
l->prev = NULL;
l->next = h->first;
if (tq_empty(h))
h->last = l;
else
h->first->prev = l;
h->first = l;
}
/*
* Insert a single item at the tail of the queue.
*/
void
tq_insert_tail(void *vh, void *vl)
{
struct list_head_proto *h = (struct list_head_proto *)vh;
struct list_proto *l = (struct list_proto *)vl;
l->prev = h->last;
l->next = NULL;
if (tq_empty(h))
h->first = l;
else
h->last->next = l;
h->last = l;
}
/* /*
* Remove element from the tail_queue * Remove element from the tail_queue
*/ */
@@ -182,7 +146,7 @@ tq_remove(void *vh, void *vl)
/* At least two elements in the list. */ /* At least two elements in the list. */
if (h->first == l) { if (h->first == l) {
h->first = l->next; h->first = l->next;
h->first->prev = h->first; /* XXX - do we rely on this behavior? */ h->first->prev = h->first;
} else if (h->last == l) { } else if (h->last == l) {
h->last = l->prev; h->last = l->prev;
h->last->next = NULL; h->last->next = NULL;

View File

@@ -86,7 +86,7 @@ sudo_conf_dump(void)
if (sudo_conf_noexec_path() != NULL) if (sudo_conf_noexec_path() != NULL)
printf("Path noexec %s\n", sudo_conf_noexec_path()); printf("Path noexec %s\n", sudo_conf_noexec_path());
#endif #endif
tq_foreach_fwd(plugins, info) { TAILQ_FOREACH(info, plugins, entries) {
printf("Plugin %s %s", info->symbol_name, info->path); printf("Plugin %s %s", info->symbol_name, info->path);
if (info->options) { if (info->options) {
char * const * op; char * const * op;

View File

@@ -110,13 +110,14 @@ static struct sudo_conf_data {
int group_source; int group_source;
int max_groups; int max_groups;
const char *debug_flags; const char *debug_flags;
struct sudo_conf_paths paths[5];
struct plugin_info_list plugins; struct plugin_info_list plugins;
struct sudo_conf_paths paths[5];
} sudo_conf_data = { } sudo_conf_data = {
true, true,
GROUP_SOURCE_ADAPTIVE, GROUP_SOURCE_ADAPTIVE,
-1, -1,
NULL, NULL,
TAILQ_HEAD_INITIALIZER(sudo_conf_data.plugins),
{ {
#define SUDO_CONF_ASKPASS_IDX 0 #define SUDO_CONF_ASKPASS_IDX 0
{ "askpass", sizeof("askpass") - 1, _PATH_SUDO_ASKPASS }, { "askpass", sizeof("askpass") - 1, _PATH_SUDO_ASKPASS },
@@ -302,10 +303,8 @@ set_plugin(const char *entry, const char *conf_file)
info->symbol_name = estrndup(name, namelen); info->symbol_name = estrndup(name, namelen);
info->path = estrndup(path, pathlen); info->path = estrndup(path, pathlen);
info->options = options; info->options = options;
info->prev = info;
/* info->next = NULL; */
info->lineno = conf_lineno; info->lineno = conf_lineno;
tq_append(&sudo_conf_data.plugins, info); TAILQ_INSERT_TAIL(&sudo_conf_data.plugins, info, entries);
} }
const char * const char *

View File

@@ -41,7 +41,8 @@ The file redblack.c bears the following license:
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The files getcwd.c, glob.c, glob.h and snprintf.c bear the following license: The files getcwd.c, glob.c, glob.h, snprintf.c and queue.h bear the
following license:
Copyright (c) 1989, 1990, 1991, 1993 Copyright (c) 1989, 1990, 1991, 1993
The Regents of the University of California. All rights reserved. The Regents of the University of California. All rights reserved.

View File

@@ -69,8 +69,6 @@ struct n##_list { \
*/ */
void *tq_pop(void *); void *tq_pop(void *);
void tq_append(void *, void *); void tq_append(void *, void *);
void tq_insert_head(void *, void *);
void tq_insert_tail(void *, void *);
void tq_remove(void *, void *); void tq_remove(void *, void *);
void list_append(void *, void *); void list_append(void *, void *);
void list2tq(void *, void *); void list2tq(void *, void *);

View File

@@ -73,6 +73,14 @@
# endif # endif
#endif #endif
/*
* Given the pointer x to the member m of the struct s, return
* a pointer to the containing structure.
*/
#ifndef __containerof
# define __containerof(x, s, m) ((s *)((char *)(x) - offsetof(s, m)))
#endif
#ifndef __dso_public #ifndef __dso_public
# ifdef HAVE_DSO_VISIBILITY # ifdef HAVE_DSO_VISIBILITY
# if defined(__GNUC__) # if defined(__GNUC__)

715
include/queue.h Normal file
View File

@@ -0,0 +1,715 @@
/*
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)queue.h 8.5 (Berkeley) 8/20/94
* $FreeBSD: head/sys/sys/queue.h 251887 2013-06-18 02:57:56Z lstewart $
*/
#ifndef _SUDO_QUEUE_H_
#define _SUDO_QUEUE_H_
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
*
* A singly-linked list is headed by a single forward pointer. The elements
* are singly linked for minimum space and pointer manipulation overhead at
* the expense of O(n) removal for arbitrary elements. New elements can be
* added to the list after an existing element or at the head of the list.
* Elements being removed from the head of the list should use the explicit
* macro for this purpose for optimum efficiency. A singly-linked list may
* only be traversed in the forward direction. Singly-linked lists are ideal
* for applications with large datasets and few or no removals or for
* implementing a LIFO queue.
*
* A singly-linked tail queue is headed by a pair of pointers, one to the
* head of the list and the other to the tail of the list. The elements are
* singly linked for minimum space and pointer manipulation overhead at the
* expense of O(n) removal for arbitrary elements. New elements can be added
* to the list after an existing element, at the head of the list, or at the
* end of the list. Elements being removed from the head of the tail queue
* should use the explicit macro for this purpose for optimum efficiency.
* A singly-linked tail queue may only be traversed in the forward direction.
* Singly-linked tail queues are ideal for applications with large datasets
* and few or no removals or for implementing a FIFO queue.
*
* A list is headed by a single forward pointer (or an array of forward
* pointers for a hash table header). The elements are doubly linked
* so that an arbitrary element can be removed without a need to
* traverse the list. New elements can be added to the list before
* or after an existing element or at the head of the list. A list
* may be traversed in either direction.
*
* A tail queue is headed by a pair of pointers, one to the head of the
* list and the other to the tail of the list. The elements are doubly
* linked so that an arbitrary element can be removed without a need to
* traverse the list. New elements can be added to the list before or
* after an existing element, at the head of the list, or at the end of
* the list. A tail queue may be traversed in either direction.
*
* For details on the use of these macros, see the queue(3) manual page.
*
*
* SLIST LIST STAILQ TAILQ
* _HEAD + + + +
* _HEAD_INITIALIZER + + + +
* _ENTRY + + + +
* _INIT + + + +
* _EMPTY + + + +
* _FIRST + + + +
* _NEXT + + + +
* _PREV - + - +
* _LAST - - + +
* _FOREACH + + + +
* _FOREACH_FROM + + + +
* _FOREACH_SAFE + + + +
* _FOREACH_FROM_SAFE + + + +
* _FOREACH_REVERSE - - - +
* _FOREACH_REVERSE_FROM - - - +
* _FOREACH_REVERSE_SAFE - - - +
* _FOREACH_REVERSE_FROM_SAFE - - - +
* _INSERT_HEAD + + + +
* _INSERT_BEFORE - + - +
* _INSERT_AFTER + + + +
* _INSERT_TAIL - - + +
* _CONCAT - - + +
* _REMOVE_AFTER + - + -
* _REMOVE_HEAD + - + -
* _REMOVE + + + +
* _SWAP + + + +
*
*/
#ifdef QUEUE_MACRO_DEBUG
/* Store the last 2 places the queue element or head was altered */
struct qm_trace {
unsigned long lastline;
unsigned long prevline;
const char *lastfile;
const char *prevfile;
};
#undef TRACEBUF
#define TRACEBUF struct qm_trace trace;
#undef TRACEBUF_INITIALIZER
#define TRACEBUF_INITIALIZER { __FILE__, __LINE__, NULL, 0 } ,
#undef TRASHIT
#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
#undef QMD_SAVELINK
#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
#undef QMD_TRACE_HEAD
#define QMD_TRACE_HEAD(head) do { \
(head)->trace.prevline = (head)->trace.lastline; \
(head)->trace.prevfile = (head)->trace.lastfile; \
(head)->trace.lastline = __LINE__; \
(head)->trace.lastfile = __FILE__; \
} while (0)
#undef QMD_TRACE_ELEM
#define QMD_TRACE_ELEM(elem) do { \
(elem)->trace.prevline = (elem)->trace.lastline; \
(elem)->trace.prevfile = (elem)->trace.lastfile; \
(elem)->trace.lastline = __LINE__; \
(elem)->trace.lastfile = __FILE__; \
} while (0)
#else
#undef QMD_TRACE_ELEM
#define QMD_TRACE_ELEM(elem)
#undef QMD_TRACE_HEAD
#define QMD_TRACE_HEAD(head)
#undef QMD_SAVELINK
#define QMD_SAVELINK(name, link)
#undef TRACEBUF
#define TRACEBUF
#undef TRACEBUF_INITIALIZER
#define TRACEBUF_INITIALIZER
#undef TRASHIT
#define TRASHIT(x)
#endif /* QUEUE_MACRO_DEBUG */
/*
* Singly-linked List declarations.
*/
#undef SLIST_HEAD
#define SLIST_HEAD(name, type) \
struct name { \
struct type *slh_first; /* first element */ \
}
#undef SLIST_HEAD_INITIALIZER
#define SLIST_HEAD_INITIALIZER(head) \
{ NULL }
#undef SLIST_ENTRY
#define SLIST_ENTRY(type) \
struct { \
struct type *sle_next; /* next element */ \
}
/*
* Singly-linked List functions.
*/
#undef SLIST_EMPTY
#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
#undef SLIST_FIRST
#define SLIST_FIRST(head) ((head)->slh_first)
#undef SLIST_FOREACH
#define SLIST_FOREACH(var, head, field) \
for ((var) = SLIST_FIRST((head)); \
(var); \
(var) = SLIST_NEXT((var), field))
#undef SLIST_FOREACH_FROM
#define SLIST_FOREACH_FROM(var, head, field) \
for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
(var); \
(var) = SLIST_NEXT((var), field))
#undef SLIST_FOREACH_SAFE
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = SLIST_FIRST((head)); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
#undef SLIST_FOREACH_FROM_SAFE
#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
#undef SLIST_FOREACH_PREVPTR
#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
for ((varp) = &SLIST_FIRST((head)); \
((var) = *(varp)) != NULL; \
(varp) = &SLIST_NEXT((var), field))
#undef SLIST_INIT
#define SLIST_INIT(head) do { \
SLIST_FIRST((head)) = NULL; \
} while (0)
#undef SLIST_INSERT_AFTER
#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
SLIST_NEXT((slistelm), field) = (elm); \
} while (0)
#undef SLIST_INSERT_HEAD
#define SLIST_INSERT_HEAD(head, elm, field) do { \
SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
SLIST_FIRST((head)) = (elm); \
} while (0)
#undef SLIST_NEXT
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
#undef SLIST_REMOVE
#define SLIST_REMOVE(head, elm, type, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
if (SLIST_FIRST((head)) == (elm)) { \
SLIST_REMOVE_HEAD((head), field); \
} \
else { \
struct type *curelm = SLIST_FIRST((head)); \
while (SLIST_NEXT(curelm, field) != (elm)) \
curelm = SLIST_NEXT(curelm, field); \
SLIST_REMOVE_AFTER(curelm, field); \
} \
TRASHIT(*oldnext); \
} while (0)
#undef SLIST_REMOVE_AFTER
#define SLIST_REMOVE_AFTER(elm, field) do { \
SLIST_NEXT(elm, field) = \
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
} while (0)
#undef SLIST_REMOVE_HEAD
#define SLIST_REMOVE_HEAD(head, field) do { \
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
} while (0)
#undef SLIST_SWAP
#define SLIST_SWAP(head1, head2, type) do { \
struct type *swap_first = SLIST_FIRST(head1); \
SLIST_FIRST(head1) = SLIST_FIRST(head2); \
SLIST_FIRST(head2) = swap_first; \
} while (0)
/*
* Singly-linked Tail queue declarations.
*/
#undef STAILQ_HEAD
#define STAILQ_HEAD(name, type) \
struct name { \
struct type *stqh_first;/* first element */ \
struct type **stqh_last;/* addr of last next element */ \
}
#undef STAILQ_HEAD_INITIALIZER
#define STAILQ_HEAD_INITIALIZER(head) \
{ NULL, &(head).stqh_first }
#undef STAILQ_ENTRY
#define STAILQ_ENTRY(type) \
struct { \
struct type *stqe_next; /* next element */ \
}
/*
* Singly-linked Tail queue functions.
*/
#undef STAILQ_CONCAT
#define STAILQ_CONCAT(head1, head2) do { \
if (!STAILQ_EMPTY((head2))) { \
*(head1)->stqh_last = (head2)->stqh_first; \
(head1)->stqh_last = (head2)->stqh_last; \
STAILQ_INIT((head2)); \
} \
} while (0)
#undef STAILQ_EMPTY
#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
#undef STAILQ_FIRST
#define STAILQ_FIRST(head) ((head)->stqh_first)
#undef STAILQ_FOREACH
#define STAILQ_FOREACH(var, head, field) \
for ((var) = STAILQ_FIRST((head)); \
(var); \
(var) = STAILQ_NEXT((var), field))
#undef STAILQ_FOREACH_FROM
#define STAILQ_FOREACH_FROM(var, head, field) \
for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
(var); \
(var) = STAILQ_NEXT((var), field))
#undef STAILQ_FOREACH_SAFE
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = STAILQ_FIRST((head)); \
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
#undef STAILQ_FOREACH_FROM_SAFE
#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
#undef STAILQ_INIT
#define STAILQ_INIT(head) do { \
STAILQ_FIRST((head)) = NULL; \
(head)->stqh_last = &STAILQ_FIRST((head)); \
} while (0)
#undef STAILQ_INSERT_AFTER
#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
STAILQ_NEXT((tqelm), field) = (elm); \
} while (0)
#undef STAILQ_INSERT_HEAD
#define STAILQ_INSERT_HEAD(head, elm, field) do { \
if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
STAILQ_FIRST((head)) = (elm); \
} while (0)
#undef STAILQ_INSERT_TAIL
#define STAILQ_INSERT_TAIL(head, elm, field) do { \
STAILQ_NEXT((elm), field) = NULL; \
*(head)->stqh_last = (elm); \
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
} while (0)
#undef STAILQ_LAST
#define STAILQ_LAST(head, type, field) \
(STAILQ_EMPTY((head)) ? NULL : \
__containerof((head)->stqh_last, struct type, field.stqe_next))
#undef STAILQ_NEXT
#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
#undef STAILQ_REMOVE
#define STAILQ_REMOVE(head, elm, type, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
if (STAILQ_FIRST((head)) == (elm)) { \
STAILQ_REMOVE_HEAD((head), field); \
} \
else { \
struct type *curelm = STAILQ_FIRST((head)); \
while (STAILQ_NEXT(curelm, field) != (elm)) \
curelm = STAILQ_NEXT(curelm, field); \
STAILQ_REMOVE_AFTER(head, curelm, field); \
} \
TRASHIT(*oldnext); \
} while (0)
#undef STAILQ_REMOVE_AFTER
#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
if ((STAILQ_NEXT(elm, field) = \
STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
} while (0)
#undef STAILQ_REMOVE_HEAD
#define STAILQ_REMOVE_HEAD(head, field) do { \
if ((STAILQ_FIRST((head)) = \
STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
(head)->stqh_last = &STAILQ_FIRST((head)); \
} while (0)
#undef STAILQ_SWAP
#define STAILQ_SWAP(head1, head2, type) do { \
struct type *swap_first = STAILQ_FIRST(head1); \
struct type **swap_last = (head1)->stqh_last; \
STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
(head1)->stqh_last = (head2)->stqh_last; \
STAILQ_FIRST(head2) = swap_first; \
(head2)->stqh_last = swap_last; \
if (STAILQ_EMPTY(head1)) \
(head1)->stqh_last = &STAILQ_FIRST(head1); \
if (STAILQ_EMPTY(head2)) \
(head2)->stqh_last = &STAILQ_FIRST(head2); \
} while (0)
/*
* List declarations.
*/
#undef LIST_HEAD
#define LIST_HEAD(name, type) \
struct name { \
struct type *lh_first; /* first element */ \
}
#undef LIST_HEAD_INITIALIZER
#define LIST_HEAD_INITIALIZER(head) \
{ NULL }
#undef LIST_ENTRY
#define LIST_ENTRY(type) \
struct { \
struct type *le_next; /* next element */ \
struct type **le_prev; /* address of previous next element */ \
}
/*
* List functions.
*/
#undef LIST_EMPTY
#define LIST_EMPTY(head) ((head)->lh_first == NULL)
#undef LIST_FIRST
#define LIST_FIRST(head) ((head)->lh_first)
#undef LIST_FOREACH
#define LIST_FOREACH(var, head, field) \
for ((var) = LIST_FIRST((head)); \
(var); \
(var) = LIST_NEXT((var), field))
#undef LIST_FOREACH_FROM
#define LIST_FOREACH_FROM(var, head, field) \
for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
(var); \
(var) = LIST_NEXT((var), field))
#undef LIST_FOREACH_SAFE
#define LIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = LIST_FIRST((head)); \
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
(var) = (tvar))
#undef LIST_FOREACH_FROM_SAFE
#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
(var) = (tvar))
#undef LIST_INIT
#define LIST_INIT(head) do { \
LIST_FIRST((head)) = NULL; \
} while (0)
#undef LIST_INSERT_AFTER
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
LIST_NEXT((listelm), field)->field.le_prev = \
&LIST_NEXT((elm), field); \
LIST_NEXT((listelm), field) = (elm); \
(elm)->field.le_prev = &LIST_NEXT((listelm), field); \
} while (0)
#undef LIST_INSERT_BEFORE
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
(elm)->field.le_prev = (listelm)->field.le_prev; \
LIST_NEXT((elm), field) = (listelm); \
*(listelm)->field.le_prev = (elm); \
(listelm)->field.le_prev = &LIST_NEXT((elm), field); \
} while (0)
#undef LIST_INSERT_HEAD
#define LIST_INSERT_HEAD(head, elm, field) do { \
if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
LIST_FIRST((head)) = (elm); \
(elm)->field.le_prev = &LIST_FIRST((head)); \
} while (0)
#undef LIST_NEXT
#define LIST_NEXT(elm, field) ((elm)->field.le_next)
#undef LIST_PREV
#define LIST_PREV(elm, head, type, field) \
((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
__containerof((elm)->field.le_prev, struct type, field.le_next))
#undef LIST_REMOVE
#define LIST_REMOVE(elm, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.le_next); \
QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
if (LIST_NEXT((elm), field) != NULL) \
LIST_NEXT((elm), field)->field.le_prev = \
(elm)->field.le_prev; \
*(elm)->field.le_prev = LIST_NEXT((elm), field); \
TRASHIT(*oldnext); \
TRASHIT(*oldprev); \
} while (0)
#undef LIST_SWAP
#define LIST_SWAP(head1, head2, type, field) do { \
struct type *swap_tmp = LIST_FIRST((head1)); \
LIST_FIRST((head1)) = LIST_FIRST((head2)); \
LIST_FIRST((head2)) = swap_tmp; \
if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
} while (0)
/*
* Tail queue declarations.
*/
#undef TAILQ_HEAD
#define TAILQ_HEAD(name, type) \
struct name { \
struct type *tqh_first; /* first element */ \
struct type **tqh_last; /* addr of last next element */ \
TRACEBUF \
}
#undef TAILQ_HEAD_INITIALIZER
#define TAILQ_HEAD_INITIALIZER(head) \
{ NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
#undef TAILQ_ENTRY
#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
TRACEBUF \
}
/*
* Tail queue functions.
*/
#undef TAILQ_CONCAT
#define TAILQ_CONCAT(head1, head2, field) do { \
if (!TAILQ_EMPTY(head2)) { \
*(head1)->tqh_last = (head2)->tqh_first; \
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
(head1)->tqh_last = (head2)->tqh_last; \
TAILQ_INIT((head2)); \
QMD_TRACE_HEAD(head1); \
QMD_TRACE_HEAD(head2); \
} \
} while (0)
#undef TAILQ_EMPTY
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
#undef TAILQ_FIRST
#define TAILQ_FIRST(head) ((head)->tqh_first)
#undef TAILQ_FOREACH
#define TAILQ_FOREACH(var, head, field) \
for ((var) = TAILQ_FIRST((head)); \
(var); \
(var) = TAILQ_NEXT((var), field))
#undef TAILQ_FOREACH_FROM
#define TAILQ_FOREACH_FROM(var, head, field) \
for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
(var); \
(var) = TAILQ_NEXT((var), field))
#undef TAILQ_FOREACH_SAFE
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = TAILQ_FIRST((head)); \
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
(var) = (tvar))
#undef TAILQ_FOREACH_FROM_SAFE
#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
(var) = (tvar))
#undef TAILQ_FOREACH_REVERSE
#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
for ((var) = TAILQ_LAST((head), headname); \
(var); \
(var) = TAILQ_PREV((var), headname, field))
#undef TAILQ_FOREACH_REVERSE_FROM
#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \
for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
(var); \
(var) = TAILQ_PREV((var), headname, field))
#undef TAILQ_FOREACH_REVERSE_SAFE
#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
for ((var) = TAILQ_LAST((head), headname); \
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
(var) = (tvar))
#undef TAILQ_FOREACH_REVERSE_FROM_SAFE
#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
(var) = (tvar))
#undef TAILQ_INIT
#define TAILQ_INIT(head) do { \
TAILQ_FIRST((head)) = NULL; \
(head)->tqh_last = &TAILQ_FIRST((head)); \
QMD_TRACE_HEAD(head); \
} while (0)
#undef TAILQ_INSERT_AFTER
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
TAILQ_NEXT((elm), field)->field.tqe_prev = \
&TAILQ_NEXT((elm), field); \
else { \
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
QMD_TRACE_HEAD(head); \
} \
TAILQ_NEXT((listelm), field) = (elm); \
(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
QMD_TRACE_ELEM(&(elm)->field); \
QMD_TRACE_ELEM(&listelm->field); \
} while (0)
#undef TAILQ_INSERT_BEFORE
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
TAILQ_NEXT((elm), field) = (listelm); \
*(listelm)->field.tqe_prev = (elm); \
(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
QMD_TRACE_ELEM(&(elm)->field); \
QMD_TRACE_ELEM(&listelm->field); \
} while (0)
#undef TAILQ_INSERT_HEAD
#define TAILQ_INSERT_HEAD(head, elm, field) do { \
if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
TAILQ_FIRST((head))->field.tqe_prev = \
&TAILQ_NEXT((elm), field); \
else \
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
TAILQ_FIRST((head)) = (elm); \
(elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
QMD_TRACE_HEAD(head); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
#undef TAILQ_INSERT_TAIL
#define TAILQ_INSERT_TAIL(head, elm, field) do { \
TAILQ_NEXT((elm), field) = NULL; \
(elm)->field.tqe_prev = (head)->tqh_last; \
*(head)->tqh_last = (elm); \
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
QMD_TRACE_HEAD(head); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
#undef TAILQ_LAST
#define TAILQ_LAST(head, headname) \
(*(((struct headname *)((head)->tqh_last))->tqh_last))
#undef TAILQ_NEXT
#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
#undef TAILQ_PREV
#define TAILQ_PREV(elm, headname, field) \
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
#undef TAILQ_REMOVE
#define TAILQ_REMOVE(head, elm, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
if ((TAILQ_NEXT((elm), field)) != NULL) \
TAILQ_NEXT((elm), field)->field.tqe_prev = \
(elm)->field.tqe_prev; \
else { \
(head)->tqh_last = (elm)->field.tqe_prev; \
QMD_TRACE_HEAD(head); \
} \
*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
TRASHIT(*oldnext); \
TRASHIT(*oldprev); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
#undef TAILQ_SWAP
#define TAILQ_SWAP(head1, head2, type, field) do { \
struct type *swap_first = (head1)->tqh_first; \
struct type **swap_last = (head1)->tqh_last; \
(head1)->tqh_first = (head2)->tqh_first; \
(head1)->tqh_last = (head2)->tqh_last; \
(head2)->tqh_first = swap_first; \
(head2)->tqh_last = swap_last; \
if ((swap_first = (head1)->tqh_first) != NULL) \
swap_first->field.tqe_prev = &(head1)->tqh_first; \
else \
(head1)->tqh_last = &(head1)->tqh_first; \
if ((swap_first = (head2)->tqh_first) != NULL) \
swap_first->field.tqe_prev = &(head2)->tqh_first; \
else \
(head2)->tqh_last = &(head2)->tqh_first; \
} while (0)
#endif /* !_SUDO_QUEUE_H_ */

View File

@@ -17,21 +17,20 @@
#ifndef _SUDO_CONF_H #ifndef _SUDO_CONF_H
#define _SUDO_CONF_H #define _SUDO_CONF_H
#include "list.h" #include "queue.h"
#define GROUP_SOURCE_ADAPTIVE 0 #define GROUP_SOURCE_ADAPTIVE 0
#define GROUP_SOURCE_STATIC 1 #define GROUP_SOURCE_STATIC 1
#define GROUP_SOURCE_DYNAMIC 2 #define GROUP_SOURCE_DYNAMIC 2
struct plugin_info { struct plugin_info {
struct plugin_info *prev; /* required */ TAILQ_ENTRY(plugin_info) entries;
struct plugin_info *next; /* required */
const char *path; const char *path;
const char *symbol_name; const char *symbol_name;
char * const * options; char * const * options;
int lineno; int lineno;
}; };
TQ_DECLARE(plugin_info) TAILQ_HEAD(plugin_info_list, plugin_info);
/* Read main sudo.conf file. */ /* Read main sudo.conf file. */
void sudo_conf_read(const char *); void sudo_conf_read(const char *);

View File

@@ -17,6 +17,8 @@
#ifndef _SUDO_EVENT_H #ifndef _SUDO_EVENT_H
#define _SUDO_EVENT_H #define _SUDO_EVENT_H
#include "queue.h"
/* Event types */ /* Event types */
#define SUDO_EV_READ 0x01 /* fire when readable */ #define SUDO_EV_READ 0x01 /* fire when readable */
#define SUDO_EV_WRITE 0x02 /* fire when writable */ #define SUDO_EV_WRITE 0x02 /* fire when writable */
@@ -39,8 +41,7 @@ typedef void (*sudo_ev_callback_t)(int fd, int what, void *closure);
/* Member of struct sudo_event_base. */ /* Member of struct sudo_event_base. */
struct sudo_event { struct sudo_event {
struct sudo_event *prev; /* must be first element in struct */ TAILQ_ENTRY(sudo_event) entries;
struct sudo_event *next; /* must be second element in struct */
struct sudo_event_base *base; /* base this event belongs to */ struct sudo_event_base *base; /* base this event belongs to */
int fd; /* fd we are interested in */ int fd; /* fd we are interested in */
short events; /* SUDO_EV_* flags */ short events; /* SUDO_EV_* flags */
@@ -49,11 +50,12 @@ struct sudo_event {
void *closure; /* user-provided data pointer */ void *closure; /* user-provided data pointer */
}; };
/* Tail queue of events. */ TAILQ_HEAD(sudo_event_list, sudo_event);
struct sudo_event_base { struct sudo_event_base {
struct sudo_event *first; /* must be first element in struct */ struct sudo_event_list events; /* tail queue of events */
struct sudo_event *last; /* must be second element in struct */ /* XXX - also list of active events and timed events */
struct sudo_event *pending; /* next event to be run in the event loop */ struct sudo_event *pending; /* next event to be run in the event loop XXX */
#ifdef HAVE_POLL #ifdef HAVE_POLL
struct pollfd *pfds; /* array of struct pollfd */ struct pollfd *pfds; /* array of struct pollfd */
int pfd_max; /* size of the pfds array */ int pfd_max; /* size of the pfds array */

View File

@@ -432,14 +432,14 @@ cleandir: realclean
afs.lo: $(authdir)/afs.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ afs.lo: $(authdir)/afs.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/afs.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/afs.c
aix_auth.lo: $(authdir)/aix_auth.c $(top_builddir)/config.h \ aix_auth.lo: $(authdir)/aix_auth.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -447,10 +447,11 @@ aix_auth.lo: $(authdir)/aix_auth.c $(top_builddir)/config.h \
alias.lo: $(srcdir)/alias.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ alias.lo: $(srcdir)/alias.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/parse.h $(srcdir)/redblack.h $(devdir)/gram.h $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/redblack.h \
$(devdir)/gram.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/alias.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/alias.c
audit.lo: $(srcdir)/audit.c $(top_builddir)/config.h \ audit.lo: $(srcdir)/audit.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
@@ -467,7 +468,7 @@ boottime.lo: $(srcdir)/boottime.c $(top_builddir)/config.h $(incdir)/missing.h \
bsdauth.lo: $(authdir)/bsdauth.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ bsdauth.lo: $(authdir)/bsdauth.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/bsdauth.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/bsdauth.c
@@ -478,7 +479,7 @@ bsm_audit.lo: $(srcdir)/bsm_audit.c $(top_builddir)/config.h \
check.lo: $(srcdir)/check.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ check.lo: $(srcdir)/check.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/check.h $(srcdir)/check.h
@@ -486,11 +487,11 @@ check.lo: $(srcdir)/check.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
check_addr.o: $(srcdir)/regress/parser/check_addr.c $(top_builddir)/config.h \ check_addr.o: $(srcdir)/regress/parser/check_addr.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/parse.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/parse.h \
$(srcdir)/interfaces.h $(incdir)/list.h $(srcdir)/interfaces.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_addr.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_addr.c
check_base64.o: $(srcdir)/regress/parser/check_base64.c \ check_base64.o: $(srcdir)/regress/parser/check_base64.c \
$(top_builddir)/config.h $(incdir)/missing.h $(top_builddir)/config.h $(incdir)/missing.h
@@ -500,14 +501,14 @@ check_digest.o: $(srcdir)/regress/parser/check_digest.c \
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_digest.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_digest.c
check_fill.o: $(srcdir)/regress/parser/check_fill.c $(top_builddir)/config.h \ check_fill.o: $(srcdir)/regress/parser/check_fill.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/list.h $(srcdir)/parse.h $(srcdir)/toke.h \ $(incdir)/list.h $(srcdir)/parse.h $(incdir)/list.h \
$(incdir)/sudo_plugin.h $(devdir)/gram.h $(srcdir)/toke.h $(incdir)/sudo_plugin.h $(devdir)/gram.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_fill.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_fill.c
check_iolog_path.o: $(srcdir)/regress/iolog_path/check_iolog_path.c \ check_iolog_path.o: $(srcdir)/regress/iolog_path/check_iolog_path.c \
$(top_builddir)/config.h $(srcdir)/sudoers.h \ $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h \ $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h \
@@ -523,30 +524,30 @@ check_wrap.o: $(srcdir)/regress/logging/check_wrap.c $(top_builddir)/config.h \
dce.lo: $(authdir)/dce.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ dce.lo: $(authdir)/dce.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/dce.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/dce.c
defaults.lo: $(srcdir)/defaults.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ defaults.lo: $(srcdir)/defaults.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(srcdir)/parse.h $(devdir)/gram.h \ $(incdir)/gettext.h $(srcdir)/parse.h $(incdir)/list.h \
$(devdir)/def_data.c $(devdir)/gram.h $(devdir)/def_data.c
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/defaults.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/defaults.c
env.lo: $(srcdir)/env.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ env.lo: $(srcdir)/env.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env.c
find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \ find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -555,7 +556,7 @@ find_path.o: find_path.lo
fwtk.lo: $(authdir)/fwtk.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ fwtk.lo: $(authdir)/fwtk.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/fwtk.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/fwtk.c
@@ -565,7 +566,7 @@ getdate.o: $(devdir)/getdate.c $(top_builddir)/config.h \
getspwuid.lo: $(srcdir)/getspwuid.c $(top_builddir)/config.h \ getspwuid.lo: $(srcdir)/getspwuid.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -573,7 +574,7 @@ getspwuid.lo: $(srcdir)/getspwuid.c $(top_builddir)/config.h \
goodpath.lo: $(srcdir)/goodpath.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ goodpath.lo: $(srcdir)/goodpath.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/goodpath.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/goodpath.c
@@ -581,16 +582,16 @@ goodpath.o: goodpath.lo
gram.lo: $(devdir)/gram.c $(top_builddir)/config.h $(top_builddir)/config.h \ gram.lo: $(devdir)/gram.c $(top_builddir)/config.h $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(srcdir)/parse.h $(srcdir)/toke.h $(incdir)/gettext.h $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/toke.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/gram.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/gram.c
group_plugin.lo: $(srcdir)/group_plugin.c $(top_builddir)/config.h \ group_plugin.lo: $(srcdir)/group_plugin.c $(top_builddir)/config.h \
$(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \ $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(incdir)/gettext.h
@@ -603,7 +604,7 @@ hexchar.o: hexchar.lo
interfaces.lo: $(srcdir)/interfaces.c $(top_builddir)/config.h \ interfaces.lo: $(srcdir)/interfaces.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
@@ -613,7 +614,7 @@ interfaces.o: interfaces.lo
iolog.lo: $(srcdir)/iolog.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ iolog.lo: $(srcdir)/iolog.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/iolog.h $(srcdir)/iolog.h
@@ -621,7 +622,7 @@ iolog.lo: $(srcdir)/iolog.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
iolog_path.lo: $(srcdir)/iolog_path.c $(top_builddir)/config.h \ iolog_path.lo: $(srcdir)/iolog_path.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
@@ -631,7 +632,7 @@ iolog_path.o: iolog_path.lo
kerb5.lo: $(authdir)/kerb5.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ kerb5.lo: $(authdir)/kerb5.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/kerb5.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/kerb5.c
@@ -639,10 +640,10 @@ ldap.lo: $(srcdir)/ldap.c $(top_builddir)/config.h \
$(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \ $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/parse.h $(incdir)/lbuf.h $(srcdir)/parse.h $(incdir)/list.h $(incdir)/lbuf.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ldap.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ldap.c
linux_audit.lo: $(srcdir)/linux_audit.c $(top_builddir)/config.h \ linux_audit.lo: $(srcdir)/linux_audit.c $(top_builddir)/config.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
@@ -658,14 +659,14 @@ locale.o: locale.lo
logging.lo: $(srcdir)/logging.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ logging.lo: $(srcdir)/logging.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logging.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logging.c
logwrap.lo: $(srcdir)/logwrap.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ logwrap.lo: $(srcdir)/logwrap.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logwrap.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logwrap.c
@@ -674,16 +675,16 @@ match.lo: $(srcdir)/match.c $(top_builddir)/config.h \
$(top_srcdir)/compat/fnmatch.h $(top_srcdir)/compat/glob.h \ $(top_srcdir)/compat/fnmatch.h $(top_srcdir)/compat/glob.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(srcdir)/parse.h $(srcdir)/sha2.h \ $(incdir)/gettext.h $(srcdir)/parse.h $(incdir)/list.h \
$(devdir)/gram.h $(srcdir)/sha2.h $(devdir)/gram.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/match.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/match.c
match_addr.lo: $(srcdir)/match_addr.c $(top_builddir)/config.h \ match_addr.lo: $(srcdir)/match_addr.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
@@ -697,29 +698,29 @@ net_ifs.o: $(top_srcdir)/src/net_ifs.c $(top_builddir)/config.h \
pam.lo: $(authdir)/pam.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ pam.lo: $(authdir)/pam.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/pam.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/pam.c
parse.lo: $(srcdir)/parse.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ parse.lo: $(srcdir)/parse.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/parse.h $(incdir)/lbuf.h $(devdir)/gram.h $(srcdir)/parse.h $(incdir)/list.h $(incdir)/lbuf.h $(devdir)/gram.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse.c
passwd.lo: $(authdir)/passwd.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ passwd.lo: $(authdir)/passwd.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/passwd.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/passwd.c
policy.lo: $(srcdir)/policy.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ policy.lo: $(srcdir)/policy.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/sudoers_version.h $(srcdir)/interfaces.h $(srcdir)/sudoers_version.h $(srcdir)/interfaces.h
@@ -727,14 +728,14 @@ policy.lo: $(srcdir)/policy.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
prompt.lo: $(srcdir)/prompt.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ prompt.lo: $(srcdir)/prompt.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/prompt.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/prompt.c
pwutil.lo: $(srcdir)/pwutil.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ pwutil.lo: $(srcdir)/pwutil.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/redblack.h $(srcdir)/pwutil.h $(srcdir)/redblack.h $(srcdir)/pwutil.h
@@ -743,7 +744,7 @@ pwutil.o: pwutil.lo
pwutil_impl.lo: $(srcdir)/pwutil_impl.c $(top_builddir)/config.h \ pwutil_impl.lo: $(srcdir)/pwutil_impl.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
@@ -757,14 +758,14 @@ redblack.o: redblack.lo
rfc1938.lo: $(authdir)/rfc1938.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ rfc1938.lo: $(authdir)/rfc1938.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/rfc1938.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/rfc1938.c
secureware.lo: $(authdir)/secureware.c $(top_builddir)/config.h \ secureware.lo: $(authdir)/secureware.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
@@ -773,7 +774,7 @@ secureware.lo: $(authdir)/secureware.c $(top_builddir)/config.h \
securid5.lo: $(authdir)/securid5.c $(top_builddir)/config.h \ securid5.lo: $(authdir)/securid5.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -781,7 +782,7 @@ securid5.lo: $(authdir)/securid5.c $(top_builddir)/config.h \
set_perms.lo: $(srcdir)/set_perms.c $(top_builddir)/config.h \ set_perms.lo: $(srcdir)/set_perms.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -793,7 +794,7 @@ sha2.o: sha2.lo
sia.lo: $(authdir)/sia.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ sia.lo: $(authdir)/sia.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/sia.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/sia.c
@@ -801,15 +802,16 @@ sssd.lo: $(srcdir)/sssd.c $(top_builddir)/config.h \
$(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \ $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/parse.h $(incdir)/lbuf.h $(incdir)/sudo_debug.h $(srcdir)/parse.h $(incdir)/list.h $(incdir)/lbuf.h \
$(incdir)/sudo_debug.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sssd.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sssd.c
sudo_auth.lo: $(authdir)/sudo_auth.c $(top_builddir)/config.h \ sudo_auth.lo: $(authdir)/sudo_auth.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/insults.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/insults.h \
@@ -819,7 +821,7 @@ sudo_auth.lo: $(authdir)/sudo_auth.c $(top_builddir)/config.h \
sudo_nss.lo: $(srcdir)/sudo_nss.c $(top_builddir)/config.h $(srcdir)/sudoers.h \ sudo_nss.lo: $(srcdir)/sudo_nss.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(incdir)/lbuf.h $(incdir)/gettext.h $(incdir)/lbuf.h
@@ -828,7 +830,7 @@ sudoers.lo: $(srcdir)/sudoers.c $(top_builddir)/config.h \
$(top_srcdir)/compat/getaddrinfo.h $(top_builddir)/config.h \ $(top_srcdir)/compat/getaddrinfo.h $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h \
@@ -839,7 +841,7 @@ sudoreplay.o: $(srcdir)/sudoreplay.c $(top_builddir)/config.h \
$(top_srcdir)/compat/getopt.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/getopt.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/gettext.h $(srcdir)/logging.h $(srcdir)/iolog.h \ $(incdir)/gettext.h $(srcdir)/logging.h $(srcdir)/iolog.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_conf.h $(incdir)/list.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_debug.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudoreplay.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudoreplay.c
testsudoers.o: $(srcdir)/testsudoers.c $(top_builddir)/config.h \ testsudoers.o: $(srcdir)/testsudoers.c $(top_builddir)/config.h \
@@ -847,17 +849,17 @@ testsudoers.o: $(srcdir)/testsudoers.c $(top_builddir)/config.h \
$(top_builddir)/config.h $(srcdir)/sudoers.h \ $(top_builddir)/config.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(srcdir)/interfaces.h $(srcdir)/parse.h \ $(incdir)/gettext.h $(srcdir)/interfaces.h $(srcdir)/parse.h \
$(incdir)/sudo_conf.h $(incdir)/list.h $(incdir)/secure_path.h \ $(incdir)/list.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(devdir)/gram.h $(incdir)/secure_path.h $(devdir)/gram.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/testsudoers.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/testsudoers.c
timestamp.lo: $(srcdir)/timestamp.c $(top_builddir)/config.h \ timestamp.lo: $(srcdir)/timestamp.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/check.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/check.h
@@ -867,28 +869,28 @@ timestr.lo: $(srcdir)/timestr.c $(top_builddir)/config.h $(incdir)/missing.h
toke.lo: $(devdir)/toke.c $(top_builddir)/config.h $(top_builddir)/config.h \ toke.lo: $(devdir)/toke.c $(top_builddir)/config.h $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h \
$(incdir)/gettext.h $(srcdir)/parse.h $(srcdir)/toke.h \ $(incdir)/gettext.h $(srcdir)/parse.h $(incdir)/list.h \
$(devdir)/gram.h $(incdir)/lbuf.h $(srcdir)/sha2.h \ $(srcdir)/toke.h $(devdir)/gram.h $(incdir)/lbuf.h $(srcdir)/sha2.h \
$(incdir)/secure_path.h $(incdir)/secure_path.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/toke.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/toke.c
toke_util.lo: $(srcdir)/toke_util.c $(top_builddir)/config.h \ toke_util.lo: $(srcdir)/toke_util.c $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h \
$(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/alloc.h $(incdir)/queue.h \
$(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \ $(incdir)/fileops.h $(srcdir)/defaults.h $(devdir)/def_data.h \
$(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/parse.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/parse.h \
$(srcdir)/toke.h $(devdir)/gram.h $(incdir)/list.h $(srcdir)/toke.h $(devdir)/gram.h
$(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/toke_util.c $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/toke_util.c
toke_util.o: toke_util.lo toke_util.o: toke_util.lo
tsgetgrpw.o: $(srcdir)/tsgetgrpw.c $(top_builddir)/config.h \ tsgetgrpw.o: $(srcdir)/tsgetgrpw.c $(top_builddir)/config.h \
$(srcdir)/tsgetgrpw.h $(top_builddir)/config.h \ $(srcdir)/tsgetgrpw.h $(top_builddir)/config.h \
$(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \ $(srcdir)/sudoers.h $(top_srcdir)/compat/stdbool.h \
$(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \ $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/fatal.h \
$(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/queue.h $(incdir)/fileops.h \
$(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \ $(srcdir)/defaults.h $(devdir)/def_data.h $(srcdir)/logging.h \
$(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \ $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
@@ -897,10 +899,10 @@ visudo.o: $(srcdir)/visudo.c $(top_builddir)/config.h \
$(top_srcdir)/compat/getopt.h $(srcdir)/sudoers.h \ $(top_srcdir)/compat/getopt.h $(srcdir)/sudoers.h \
$(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \ $(top_srcdir)/compat/stdbool.h $(top_builddir)/pathnames.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \ $(incdir)/missing.h $(incdir)/fatal.h $(incdir)/alloc.h \
$(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \ $(incdir)/queue.h $(incdir)/fileops.h $(srcdir)/defaults.h \
$(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(devdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(srcdir)/parse.h $(srcdir)/redblack.h $(incdir)/gettext.h \ $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/redblack.h \
$(srcdir)/sudoers_version.h $(incdir)/sudo_conf.h $(incdir)/list.h \ $(incdir)/queue.h $(incdir)/gettext.h $(srcdir)/sudoers_version.h \
$(devdir)/gram.h $(incdir)/sudo_conf.h $(incdir)/queue.h $(devdir)/gram.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/visudo.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/visudo.c

View File

@@ -371,8 +371,7 @@ struct sudo_ldap_handle {
}; };
struct sudo_nss sudo_nss_ldap = { struct sudo_nss sudo_nss_ldap = {
&sudo_nss_ldap, { NULL, NULL },
NULL,
sudo_ldap_open, sudo_ldap_open,
sudo_ldap_close, sudo_ldap_close,
sudo_ldap_parse, sudo_ldap_parse,

View File

@@ -51,8 +51,7 @@
/* sudoers nsswitch routines */ /* sudoers nsswitch routines */
struct sudo_nss sudo_nss_file = { struct sudo_nss sudo_nss_file = {
&sudo_nss_file, { NULL, NULL },
NULL,
sudo_file_open, sudo_file_open,
sudo_file_close, sudo_file_close,
sudo_file_parse, sudo_file_parse,

View File

@@ -18,6 +18,8 @@
#ifndef _SUDOERS_PARSE_H #ifndef _SUDOERS_PARSE_H
#define _SUDOERS_PARSE_H #define _SUDOERS_PARSE_H
#include "list.h" /* XXX */
#undef UNSPEC #undef UNSPEC
#define UNSPEC -1 #define UNSPEC -1
#undef DENY #undef DENY

View File

@@ -226,8 +226,7 @@ sudo_sss_filter_result(struct sudo_sss_handle *handle,
} }
struct sudo_nss sudo_nss_sss = { struct sudo_nss sudo_nss_sss = {
&sudo_nss_sss, { NULL, NULL },
NULL,
sudo_sss_open, sudo_sss_open,
sudo_sss_close, sudo_sss_close,
sudo_sss_parse, sudo_sss_parse,

View File

@@ -69,7 +69,7 @@ sudo_read_nss(void)
bool saw_files = false; bool saw_files = false;
bool saw_ldap = false; bool saw_ldap = false;
bool got_match = false; bool got_match = false;
static struct sudo_nss_list snl; static struct sudo_nss_list snl = TAILQ_HEAD_INITIALIZER(snl);
debug_decl(sudo_read_nss, SUDO_DEBUG_NSS) debug_decl(sudo_read_nss, SUDO_DEBUG_NSS)
if ((fp = fopen(_PATH_NSSWITCH_CONF, "r")) == NULL) if ((fp = fopen(_PATH_NSSWITCH_CONF, "r")) == NULL)
@@ -87,25 +87,25 @@ sudo_read_nss(void)
/* Parse line */ /* Parse line */
for ((cp = strtok(line + 8, " \t")); cp != NULL; (cp = strtok(NULL, " \t"))) { for ((cp = strtok(line + 8, " \t")); cp != NULL; (cp = strtok(NULL, " \t"))) {
if (strcasecmp(cp, "files") == 0 && !saw_files) { if (strcasecmp(cp, "files") == 0 && !saw_files) {
tq_append(&snl, &sudo_nss_file); TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries);
got_match = true; got_match = true;
#ifdef HAVE_LDAP #ifdef HAVE_LDAP
} else if (strcasecmp(cp, "ldap") == 0 && !saw_ldap) { } else if (strcasecmp(cp, "ldap") == 0 && !saw_ldap) {
tq_append(&snl, &sudo_nss_ldap); TAILQ_INSERT_TAIL(&snl, &sudo_nss_ldap, entries);
got_match = true; got_match = true;
#endif #endif
#ifdef HAVE_SSSD #ifdef HAVE_SSSD
} else if (strcasecmp(cp, "sss") == 0 && !saw_sss) { } else if (strcasecmp(cp, "sss") == 0 && !saw_sss) {
tq_append(&snl, &sudo_nss_sss); TAILQ_INSERT_TAIL(&snl, &sudo_nss_sss, entries);
got_match = true; got_match = true;
#endif #endif
} else if (strcasecmp(cp, "[NOTFOUND=return]") == 0 && got_match) { } else if (strcasecmp(cp, "[NOTFOUND=return]") == 0 && got_match) {
/* NOTFOUND affects the most recent entry */ /* NOTFOUND affects the most recent entry */
tq_last(&snl)->ret_if_notfound = true; TAILQ_LAST(&snl, sudo_nss_list)->ret_if_notfound = true;
got_match = false; got_match = false;
} else if (strcasecmp(cp, "[SUCCESS=return]") == 0 && got_match) { } else if (strcasecmp(cp, "[SUCCESS=return]") == 0 && got_match) {
/* SUCCESS affects the most recent entry */ /* SUCCESS affects the most recent entry */
tq_last(&snl)->ret_if_found = true; TAILQ_LAST(&snl, sudo_nss_list)->ret_if_found = true;
got_match = false; got_match = false;
} else } else
got_match = false; got_match = false;
@@ -118,8 +118,8 @@ sudo_read_nss(void)
nomatch: nomatch:
/* Default to files only if no matches */ /* Default to files only if no matches */
if (tq_empty(&snl)) if (TAILQ_EMPTY(&snl))
tq_append(&snl, &sudo_nss_file); TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries);
debug_return_ptr(&snl); debug_return_ptr(&snl);
} }
@@ -144,7 +144,7 @@ sudo_read_nss(void)
bool saw_files = false; bool saw_files = false;
bool saw_ldap = false; bool saw_ldap = false;
bool got_match = false; bool got_match = false;
static struct sudo_nss_list snl; static struct sudo_nss_list snl = TAILQ_HEAD_INITIALIZER(snl);
debug_decl(sudo_read_nss, SUDO_DEBUG_NSS) debug_decl(sudo_read_nss, SUDO_DEBUG_NSS)
if ((fp = fopen(_PATH_NETSVC_CONF, "r")) == NULL) if ((fp = fopen(_PATH_NETSVC_CONF, "r")) == NULL)
@@ -172,20 +172,20 @@ sudo_read_nss(void)
if (!saw_files && strncasecmp(cp, "files", 5) == 0 && if (!saw_files && strncasecmp(cp, "files", 5) == 0 &&
(isspace((unsigned char)cp[5]) || cp[5] == '\0')) { (isspace((unsigned char)cp[5]) || cp[5] == '\0')) {
tq_append(&snl, &sudo_nss_file); TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries);
got_match = true; got_match = true;
ep = &cp[5]; ep = &cp[5];
#ifdef HAVE_LDAP #ifdef HAVE_LDAP
} else if (!saw_ldap && strncasecmp(cp, "ldap", 4) == 0 && } else if (!saw_ldap && strncasecmp(cp, "ldap", 4) == 0 &&
(isspace((unsigned char)cp[4]) || cp[4] == '\0')) { (isspace((unsigned char)cp[4]) || cp[4] == '\0')) {
tq_append(&snl, &sudo_nss_ldap); TAILQ_INSERT_TAIL(&snl, &sudo_nss_ldap, entries);
got_match = true; got_match = true;
ep = &cp[4]; ep = &cp[4];
#endif #endif
#ifdef HAVE_SSSD #ifdef HAVE_SSSD
} else if (!saw_sss && strncasecmp(cp, "sss", 3) == 0 && } else if (!saw_sss && strncasecmp(cp, "sss", 3) == 0 &&
(isspace((unsigned char)cp[3]) || cp[3] == '\0')) { (isspace((unsigned char)cp[3]) || cp[3] == '\0')) {
tq_append(&snl, &sudo_nss_sss); TAILQ_INSERT_TAIL(&snl, &sudo_nss_sss, entries);
got_match = true; got_match = true;
ep = &cp[3]; ep = &cp[3];
#endif #endif
@@ -200,7 +200,7 @@ sudo_read_nss(void)
cp++; cp++;
if (strncasecmp(cp, "auth", 4) == 0 && if (strncasecmp(cp, "auth", 4) == 0 &&
(isspace((unsigned char)cp[4]) || cp[4] == '\0')) { (isspace((unsigned char)cp[4]) || cp[4] == '\0')) {
tq_last(&snl)->ret_if_found = true; TAILQ_LAST(&snl, sudo_nss_list)->ret_if_found = true;
} }
} }
} }
@@ -211,8 +211,8 @@ sudo_read_nss(void)
nomatch: nomatch:
/* Default to files only if no matches */ /* Default to files only if no matches */
if (tq_empty(&snl)) if (TAILQ_EMPTY(&snl))
tq_append(&snl, &sudo_nss_file); TAILQ_INSERT_TAIL(&snl, &sudo_nss_files, entries);
debug_return_ptr(&snl); debug_return_ptr(&snl);
} }
@@ -225,16 +225,16 @@ nomatch:
struct sudo_nss_list * struct sudo_nss_list *
sudo_read_nss(void) sudo_read_nss(void)
{ {
static struct sudo_nss_list snl; static struct sudo_nss_list snl = TAILQ_HEAD_INITIALIZER(snl);
debug_decl(sudo_read_nss, SUDO_DEBUG_NSS) debug_decl(sudo_read_nss, SUDO_DEBUG_NSS)
# ifdef HAVE_SSSD # ifdef HAVE_SSSD
tq_append(&snl, &sudo_nss_sss); TAILQ_INSERT_TAIL(&snl, &sudo_nss_sss, entries);
# endif # endif
# ifdef HAVE_LDAP # ifdef HAVE_LDAP
tq_append(&snl, &sudo_nss_ldap); TAILQ_INSERT_TAIL(&snl, &sudo_nss_ldap, entries);
# endif # endif
tq_append(&snl, &sudo_nss_file); TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries);
debug_return_ptr(&snl); debug_return_ptr(&snl);
} }
@@ -283,7 +283,7 @@ display_privs(struct sudo_nss_list *snl, struct passwd *pw)
lbuf_append(&defs, _("Matching Defaults entries for %s on %s:\n"), lbuf_append(&defs, _("Matching Defaults entries for %s on %s:\n"),
pw->pw_name, user_srunhost); pw->pw_name, user_srunhost);
count = 0; count = 0;
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
count += nss->display_defaults(nss, pw, &defs); count += nss->display_defaults(nss, pw, &defs);
} }
if (count) if (count)
@@ -296,7 +296,7 @@ display_privs(struct sudo_nss_list *snl, struct passwd *pw)
lbuf_append(&defs, _("Runas and Command-specific defaults for %s:\n"), lbuf_append(&defs, _("Runas and Command-specific defaults for %s:\n"),
pw->pw_name); pw->pw_name);
count = 0; count = 0;
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
count += nss->display_bound_defaults(nss, pw, &defs); count += nss->display_bound_defaults(nss, pw, &defs);
} }
if (count) if (count)
@@ -309,7 +309,7 @@ display_privs(struct sudo_nss_list *snl, struct passwd *pw)
_("User %s may run the following commands on %s:\n"), _("User %s may run the following commands on %s:\n"),
pw->pw_name, user_srunhost); pw->pw_name, user_srunhost);
count = 0; count = 0;
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
count += nss->display_privs(nss, pw, &privs); count += nss->display_privs(nss, pw, &privs);
} }
if (count == 0) { if (count == 0) {
@@ -338,7 +338,7 @@ display_cmnd(struct sudo_nss_list *snl, struct passwd *pw)
struct sudo_nss *nss; struct sudo_nss *nss;
debug_decl(display_cmnd, SUDO_DEBUG_NSS) debug_decl(display_cmnd, SUDO_DEBUG_NSS)
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
if (nss->display_cmnd(nss, pw) == 0) if (nss->display_cmnd(nss, pw) == 0)
debug_return_bool(true); debug_return_bool(true);
} }

View File

@@ -21,8 +21,7 @@ struct lbuf;
struct passwd; struct passwd;
struct sudo_nss { struct sudo_nss {
struct sudo_nss *prev; TAILQ_ENTRY(sudo_nss) entries;
struct sudo_nss *next;
int (*open)(struct sudo_nss *nss); int (*open)(struct sudo_nss *nss);
int (*close)(struct sudo_nss *nss); int (*close)(struct sudo_nss *nss);
int (*parse)(struct sudo_nss *nss); int (*parse)(struct sudo_nss *nss);
@@ -37,7 +36,7 @@ struct sudo_nss {
short ret_if_notfound; short ret_if_notfound;
}; };
TQ_DECLARE(sudo_nss) TAILQ_HEAD(sudo_nss_list, sudo_nss);
struct sudo_nss_list *sudo_read_nss(void); struct sudo_nss_list *sudo_read_nss(void);

View File

@@ -150,14 +150,13 @@ sudoers_policy_init(void *info, char * const envp[])
set_perms(PERM_ROOT); set_perms(PERM_ROOT);
/* Open and parse sudoers, set global defaults */ /* Open and parse sudoers, set global defaults */
for (nss = snl->first; nss != NULL; nss = nss_next) { TAILQ_FOREACH_SAFE(nss, snl, entries, nss_next) {
nss_next = nss->next;
if (nss->open(nss) == 0 && nss->parse(nss) == 0) { if (nss->open(nss) == 0 && nss->parse(nss) == 0) {
sources++; sources++;
if (nss->setdefs(nss) != 0) if (nss->setdefs(nss) != 0)
log_warning(NO_STDERR, N_("problem with defaults entries")); log_warning(NO_STDERR, N_("problem with defaults entries"));
} else { } else {
tq_remove(snl, nss); TAILQ_REMOVE(snl, nss, entries);
} }
} }
if (sources == 0) { if (sources == 0) {
@@ -273,7 +272,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
*/ */
sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale);
validated = FLAG_NO_USER | FLAG_NO_HOST; validated = FLAG_NO_USER | FLAG_NO_HOST;
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
validated = nss->lookup(nss, validated, pwflag); validated = nss->lookup(nss, validated, pwflag);
if (ISSET(validated, VALIDATE_OK)) { if (ISSET(validated, VALIDATE_OK)) {
@@ -413,7 +412,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
display_privs(snl, list_pw ? list_pw : sudo_user.pw); /* XXX - return val */ display_privs(snl, list_pw ? list_pw : sudo_user.pw); /* XXX - return val */
/* Cleanup sudoers sources */ /* Cleanup sudoers sources */
tq_foreach_fwd(snl, nss) { TAILQ_FOREACH(nss, snl, entries) {
nss->close(nss); nss->close(nss);
} }
if (def_group_plugin) if (def_group_plugin)
@@ -902,8 +901,9 @@ sudoers_cleanup(void)
debug_decl(sudoers_cleanup, SUDO_DEBUG_PLUGIN) debug_decl(sudoers_cleanup, SUDO_DEBUG_PLUGIN)
if (snl != NULL) { if (snl != NULL) {
tq_foreach_fwd(snl, nss) TAILQ_FOREACH(nss, snl, entries) {
nss->close(nss); nss->close(nss);
}
} }
if (def_group_plugin) if (def_group_plugin)
group_plugin_unload(); group_plugin_unload();

View File

@@ -33,7 +33,7 @@
#include "missing.h" #include "missing.h"
#include "fatal.h" #include "fatal.h"
#include "alloc.h" #include "alloc.h"
#include "list.h" #include "queue.h"
#include "fileops.h" #include "fileops.h"
#include "defaults.h" #include "defaults.h"
#include "logging.h" #include "logging.h"

View File

@@ -79,20 +79,21 @@
#include "sudoers.h" #include "sudoers.h"
#include "parse.h" #include "parse.h"
#include "redblack.h" #include "redblack.h"
#include "queue.h"
#include "gettext.h" #include "gettext.h"
#include "sudoers_version.h" #include "sudoers_version.h"
#include "sudo_conf.h" #include "sudo_conf.h"
#include <gram.h> #include <gram.h>
struct sudoersfile { struct sudoersfile {
struct sudoersfile *prev, *next; TAILQ_ENTRY(sudoersfile) entries;
char *path; char *path;
char *tpath; char *tpath;
int fd; int fd;
int modified; int modified;
int doedit; int doedit;
}; };
TQ_DECLARE(sudoersfile) TAILQ_HEAD(sudoersfile_list, sudoersfile);
/* /*
* Function prototypes * Function prototypes
@@ -131,7 +132,7 @@ extern bool parse_error;
*/ */
struct sudo_user sudo_user; struct sudo_user sudo_user;
struct passwd *list_pw; struct passwd *list_pw;
static struct sudoersfile_list sudoerslist; static struct sudoersfile_list sudoerslist = TAILQ_HEAD_INITIALIZER(sudoerslist);
static struct rbtree *alias_freelist; static struct rbtree *alias_freelist;
static bool checkonly; static bool checkonly;
static const char short_opts[] = "cf:hqsV"; static const char short_opts[] = "cf:hqsV";
@@ -250,10 +251,10 @@ main(int argc, char *argv[])
setup_signals(); setup_signals();
/* Edit the sudoers file(s) */ /* Edit the sudoers file(s) */
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
if (!sp->doedit) if (!sp->doedit)
continue; continue;
if (sp != tq_first(&sudoerslist)) { if (sp != TAILQ_FIRST(&sudoerslist)) {
printf(_("press return to edit %s: "), sp->path); printf(_("press return to edit %s: "), sp->path);
while ((ch = getchar()) != EOF && ch != '\n') while ((ch = getchar()) != EOF && ch != '\n')
continue; continue;
@@ -266,7 +267,7 @@ main(int argc, char *argv[])
* and install the edited files as needed. * and install the edited files as needed.
*/ */
if (reparse_sudoers(editor, args, strict, quiet)) { if (reparse_sudoers(editor, args, strict, quiet)) {
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
(void) install_sudoers(sp, oldperms); (void) install_sudoers(sp, oldperms);
} }
} }
@@ -482,8 +483,8 @@ reparse_sudoers(char *editor, char *args, bool strict, bool quiet)
/* /*
* Parse the edited sudoers files and do sanity checking * Parse the edited sudoers files and do sanity checking
*/ */
while ((sp = tq_first(&sudoerslist)) != NULL) { while ((sp = TAILQ_FIRST(&sudoerslist)) != NULL) {
last = tq_last(&sudoerslist); last = TAILQ_LAST(&sudoerslist, sudoersfile_list);
fp = fopen(sp->tpath, "r+"); fp = fopen(sp->tpath, "r+");
if (fp == NULL) if (fp == NULL)
fatalx(_("unable to re-open temporary file (%s), %s unchanged."), fatalx(_("unable to re-open temporary file (%s), %s unchanged."),
@@ -524,7 +525,7 @@ reparse_sudoers(char *editor, char *args, bool strict, bool quiet)
case 'e': case 'e':
default: default:
/* Edit file with the parse error */ /* Edit file with the parse error */
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
if (errorfile == NULL || strcmp(sp->path, errorfile) == 0) { if (errorfile == NULL || strcmp(sp->path, errorfile) == 0) {
edit_sudoers(sp, editor, args, errorlineno); edit_sudoers(sp, editor, args, errorlineno);
if (errorfile != NULL) if (errorfile != NULL)
@@ -540,7 +541,7 @@ reparse_sudoers(char *editor, char *args, bool strict, bool quiet)
} }
/* If any new #include directives were added, edit them too. */ /* If any new #include directives were added, edit them too. */
for (sp = last->next; sp != NULL; sp = sp->next) { for (sp = TAILQ_NEXT(last, entries); sp != NULL; sp = TAILQ_NEXT(sp, entries)) {
printf(_("press return to edit %s: "), sp->path); printf(_("press return to edit %s: "), sp->path);
while ((ch = getchar()) != EOF && ch != '\n') while ((ch = getchar()) != EOF && ch != '\n')
continue; continue;
@@ -858,7 +859,7 @@ check_syntax(char *sudoers_path, bool quiet, bool strict, bool oldperms)
} else { } else {
ok = false; ok = false;
} }
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
if (oldperms || check_owner(sp->path, quiet)) { if (oldperms || check_owner(sp->path, quiet)) {
if (!quiet) if (!quiet)
(void) printf(_("%s: parsed OK\n"), sp->path); (void) printf(_("%s: parsed OK\n"), sp->path);
@@ -890,7 +891,7 @@ open_sudoers(const char *path, bool doedit, bool *keepopen)
open_flags = O_RDWR | O_CREAT; open_flags = O_RDWR | O_CREAT;
/* Check for existing entry */ /* Check for existing entry */
tq_foreach_fwd(&sudoerslist, entry) { TAILQ_FOREACH(entry, &sudoerslist, entries) {
if (strcmp(path, entry->path) == 0) if (strcmp(path, entry->path) == 0)
break; break;
} }
@@ -898,8 +899,6 @@ open_sudoers(const char *path, bool doedit, bool *keepopen)
entry = ecalloc(1, sizeof(*entry)); entry = ecalloc(1, sizeof(*entry));
entry->path = estrdup(path); entry->path = estrdup(path);
/* entry->modified = 0; */ /* entry->modified = 0; */
entry->prev = entry;
/* entry->next = NULL; */
entry->fd = open(entry->path, open_flags, SUDOERS_MODE); entry->fd = open(entry->path, open_flags, SUDOERS_MODE);
/* entry->tpath = NULL; */ /* entry->tpath = NULL; */
entry->doedit = doedit; entry->doedit = doedit;
@@ -912,7 +911,7 @@ open_sudoers(const char *path, bool doedit, bool *keepopen)
fatalx(_("%s busy, try again later"), entry->path); fatalx(_("%s busy, try again later"), entry->path);
if ((fp = fdopen(entry->fd, "r")) == NULL) if ((fp = fdopen(entry->fd, "r")) == NULL)
fatal("%s", entry->path); fatal("%s", entry->path);
tq_append(&sudoerslist, entry); TAILQ_INSERT_TAIL(&sudoerslist, entry, entries);
} else { } else {
/* Already exists, open .tmp version if there is one. */ /* Already exists, open .tmp version if there is one. */
if (entry->tpath != NULL) { if (entry->tpath != NULL) {
@@ -1271,7 +1270,7 @@ visudo_cleanup(void)
{ {
struct sudoersfile *sp; struct sudoersfile *sp;
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
if (sp->tpath != NULL) if (sp->tpath != NULL)
(void) unlink(sp->tpath); (void) unlink(sp->tpath);
} }
@@ -1288,7 +1287,7 @@ quit(int signo)
struct sudoersfile *sp; struct sudoersfile *sp;
struct iovec iov[4]; struct iovec iov[4];
tq_foreach_fwd(&sudoerslist, sp) { TAILQ_FOREACH(sp, &sudoerslist, entries) {
if (sp->tpath != NULL) if (sp->tpath != NULL)
(void) unlink(sp->tpath); (void) unlink(sp->tpath);
} }

View File

@@ -186,63 +186,61 @@ conversation.o: $(srcdir)/conversation.c $(top_builddir)/config.h \
$(srcdir)/sudo.h $(top_builddir)/pathnames.h \ $(srcdir)/sudo.h $(top_builddir)/pathnames.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \
$(incdir)/list.h $(incdir)/sudo_conf.h $(incdir)/list.h \ $(incdir)/sudo_conf.h $(incdir)/queue.h $(incdir)/sudo_debug.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/gettext.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h $(srcdir)/sudo_plugin_int.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/conversation.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/conversation.c
env_hooks.o: $(srcdir)/env_hooks.c $(top_builddir)/config.h \ env_hooks.o: $(srcdir)/env_hooks.c $(top_builddir)/config.h \
$(top_srcdir)/compat/dlfcn.h $(srcdir)/sudo.h \ $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h
$(incdir)/sudo_plugin.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env_hooks.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env_hooks.c
exec.o: $(srcdir)/exec.c $(top_builddir)/config.h $(srcdir)/sudo.h \ exec.o: $(srcdir)/exec.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/sudo_exec.h \
$(srcdir)/sudo_exec.h $(incdir)/sudo_plugin.h \ $(incdir)/sudo_event.h $(incdir)/queue.h $(incdir)/sudo_plugin.h \
$(srcdir)/sudo_plugin_int.h $(srcdir)/sudo_plugin_int.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec.c
exec_common.o: $(srcdir)/exec_common.c $(top_builddir)/config.h \ exec_common.o: $(srcdir)/exec_common.c $(top_builddir)/config.h \
$(srcdir)/sudo.h $(top_builddir)/pathnames.h \ $(srcdir)/sudo.h $(top_builddir)/pathnames.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h \
$(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \ $(incdir)/alloc.h $(incdir)/fatal.h $(incdir)/fileops.h \
$(incdir)/list.h $(incdir)/sudo_conf.h $(incdir)/list.h \ $(incdir)/sudo_conf.h $(incdir)/queue.h $(incdir)/sudo_debug.h \
$(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/sudo_exec.h $(incdir)/gettext.h $(srcdir)/sudo_exec.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_common.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_common.c
exec_pty.o: $(srcdir)/exec_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \ exec_pty.o: $(srcdir)/exec_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_event.h \
$(srcdir)/sudo_exec.h $(incdir)/sudo_plugin.h \ $(incdir)/queue.h $(srcdir)/sudo_exec.h $(incdir)/sudo_plugin.h \
$(srcdir)/sudo_plugin_int.h $(srcdir)/sudo_plugin_int.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_pty.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_pty.c
get_pty.o: $(srcdir)/get_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \ get_pty.o: $(srcdir)/get_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/get_pty.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/get_pty.c
hooks.o: $(srcdir)/hooks.c $(top_builddir)/config.h $(srcdir)/sudo.h \ hooks.o: $(srcdir)/hooks.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h \
$(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h \ $(srcdir)/sudo_plugin_int.h $(incdir)/sudo_debug.h
$(incdir)/sudo_debug.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/hooks.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/hooks.c
load_plugins.o: $(srcdir)/load_plugins.c $(top_builddir)/config.h \ load_plugins.o: $(srcdir)/load_plugins.c $(top_builddir)/config.h \
$(top_srcdir)/compat/dlfcn.h $(srcdir)/sudo.h \ $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h \ $(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h \
$(incdir)/sudo_conf.h $(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/sudo_conf.h $(incdir)/queue.h $(incdir)/sudo_debug.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/load_plugins.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/load_plugins.c
locale_stub.o: $(srcdir)/locale_stub.c $(top_builddir)/config.h \ locale_stub.o: $(srcdir)/locale_stub.c $(top_builddir)/config.h \
$(incdir)/missing.h $(incdir)/fatal.h $(incdir)/missing.h $(incdir)/fatal.h
@@ -254,56 +252,54 @@ net_ifs.o: $(srcdir)/net_ifs.c $(top_builddir)/config.h $(incdir)/missing.h \
openbsd.o: $(srcdir)/openbsd.c $(top_builddir)/config.h $(srcdir)/sudo.h \ openbsd.o: $(srcdir)/openbsd.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/openbsd.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/openbsd.c
parse_args.o: $(srcdir)/parse_args.c $(top_builddir)/config.h \ parse_args.o: $(srcdir)/parse_args.c $(top_builddir)/config.h \
$(top_srcdir)/compat/getopt.h ./sudo_usage.h $(srcdir)/sudo.h \ $(top_srcdir)/compat/getopt.h ./sudo_usage.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/lbuf.h
$(incdir)/lbuf.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse_args.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse_args.c
preload.o: $(srcdir)/preload.c $(top_builddir)/config.h $(incdir)/sudo_plugin.h preload.o: $(srcdir)/preload.c $(top_builddir)/config.h $(incdir)/sudo_plugin.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/preload.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/preload.c
selinux.o: $(srcdir)/selinux.c $(top_builddir)/config.h $(srcdir)/sudo.h \ selinux.o: $(srcdir)/selinux.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/sudo_exec.h
$(srcdir)/sudo_exec.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/selinux.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/selinux.c
sesh.o: $(srcdir)/sesh.c $(top_builddir)/config.h \ sesh.o: $(srcdir)/sesh.c $(top_builddir)/config.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \
$(incdir)/fatal.h $(incdir)/gettext.h $(incdir)/sudo_conf.h \ $(incdir)/fatal.h $(incdir)/gettext.h $(incdir)/sudo_conf.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(srcdir)/sudo_exec.h \ $(incdir)/queue.h $(incdir)/sudo_debug.h $(srcdir)/sudo_exec.h \
$(incdir)/sudo_plugin.h $(incdir)/sudo_plugin.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sesh.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sesh.c
signal.o: $(srcdir)/signal.c $(top_builddir)/config.h $(srcdir)/sudo.h \ signal.o: $(srcdir)/signal.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/signal.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/signal.c
solaris.o: $(srcdir)/solaris.c $(top_builddir)/config.h $(srcdir)/sudo.h \ solaris.o: $(srcdir)/solaris.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/solaris.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/solaris.c
sudo.o: $(srcdir)/sudo.c $(top_builddir)/config.h ./sudo_usage.h \ sudo.o: $(srcdir)/sudo.c $(top_builddir)/config.h ./sudo_usage.h \
$(srcdir)/sudo.h $(top_builddir)/pathnames.h \ $(srcdir)/sudo.h $(top_builddir)/pathnames.h \
$(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \ $(top_srcdir)/compat/stdbool.h $(incdir)/missing.h $(incdir)/alloc.h \
$(incdir)/fatal.h $(incdir)/fileops.h $(incdir)/list.h \ $(incdir)/fatal.h $(incdir)/fileops.h $(incdir)/sudo_conf.h \
$(incdir)/sudo_conf.h $(incdir)/list.h $(incdir)/sudo_debug.h \ $(incdir)/queue.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \
$(incdir)/gettext.h $(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h $(incdir)/sudo_plugin.h $(srcdir)/sudo_plugin_int.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo.c
sudo_edit.o: $(srcdir)/sudo_edit.c $(top_builddir)/config.h $(srcdir)/sudo.h \ sudo_edit.o: $(srcdir)/sudo_edit.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_edit.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_edit.c
sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(top_builddir)/config.h \ sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(top_builddir)/config.h \
$(incdir)/missing.h $(incdir)/missing.h
@@ -311,20 +307,18 @@ sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(top_builddir)/config.h \
tgetpass.o: $(srcdir)/tgetpass.c $(top_builddir)/config.h $(srcdir)/sudo.h \ tgetpass.o: $(srcdir)/tgetpass.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h
$(incdir)/sudo_plugin.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/tgetpass.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/tgetpass.c
ttyname.o: $(srcdir)/ttyname.c $(top_builddir)/config.h $(srcdir)/sudo.h \ ttyname.o: $(srcdir)/ttyname.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h $(incdir)/sudo_debug.h $(incdir)/gettext.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ttyname.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ttyname.c
utmp.o: $(srcdir)/utmp.c $(top_builddir)/config.h $(srcdir)/sudo.h \ utmp.o: $(srcdir)/utmp.c $(top_builddir)/config.h $(srcdir)/sudo.h \
$(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \ $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h \
$(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/fatal.h \
$(incdir)/fileops.h $(incdir)/list.h $(incdir)/sudo_conf.h \ $(incdir)/fileops.h $(incdir)/sudo_conf.h $(incdir)/queue.h \
$(incdir)/list.h $(incdir)/sudo_debug.h $(incdir)/gettext.h \ $(incdir)/sudo_debug.h $(incdir)/gettext.h $(srcdir)/sudo_exec.h
$(srcdir)/sudo_exec.h
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/utmp.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/utmp.c

View File

@@ -65,14 +65,13 @@ struct exec_closure {
/* We keep a tailq of signals to forward to child. */ /* We keep a tailq of signals to forward to child. */
struct sigforward { struct sigforward {
struct sigforward *prev, *next; TAILQ_ENTRY(sigforward) entries;
int signo; int signo;
}; };
static struct { TAILQ_HEAD(sigfwd_list, sigforward);
struct sigforward *first, *last; static struct sigfwd_list sigfwd_list = TAILQ_HEAD_INITIALIZER(sigfwd_list);
struct sudo_event *event;
} sigfwd_list;
static struct sudo_event *signal_event; static struct sudo_event *signal_event;
static struct sudo_event *sigfwd_event;
static struct sudo_event *backchannel_event; static struct sudo_event *backchannel_event;
static pid_t ppgrp = -1; static pid_t ppgrp = -1;
@@ -318,9 +317,9 @@ exec_event_setup(int backchannel, struct exec_closure *ec)
fatal(_("unable to add event to queue")); fatal(_("unable to add event to queue"));
/* The signal forwarding event gets added on demand. */ /* The signal forwarding event gets added on demand. */
sigfwd_list.event = sudo_ev_alloc(backchannel, sigfwd_event = sudo_ev_alloc(backchannel,
SUDO_EV_WRITE, forward_signals, NULL); SUDO_EV_WRITE, forward_signals, NULL);
if (sigfwd_list.event == NULL) if (sigfwd_event == NULL)
fatal(NULL); fatal(NULL);
sudo_debug_printf(SUDO_DEBUG_INFO, "signal pipe fd %d\n", signal_pipe[0]); sudo_debug_printf(SUDO_DEBUG_INFO, "signal pipe fd %d\n", signal_pipe[0]);
@@ -373,7 +372,7 @@ sudo_execute(struct command_details *details, struct command_status *cstat)
* need to allocate a pty. It is OK to set log_io in the pty-only case * need to allocate a pty. It is OK to set log_io in the pty-only case
* as the io plugin tailqueue will be empty and no I/O logging will occur. * as the io plugin tailqueue will be empty and no I/O logging will occur.
*/ */
if (!tq_empty(&io_plugins) || ISSET(details->flags, CD_USE_PTY)) { if (!TAILQ_EMPTY(&io_plugins) || ISSET(details->flags, CD_USE_PTY)) {
log_io = true; log_io = true;
if (ISSET(details->flags, CD_SET_UTMP)) if (ISSET(details->flags, CD_SET_UTMP))
utmp_user = details->utmp_user ? details->utmp_user : user_details.username; utmp_user = details->utmp_user ? details->utmp_user : user_details.username;
@@ -494,12 +493,12 @@ sudo_execute(struct command_details *details, struct command_status *cstat)
#endif #endif
/* Free things up. */ /* Free things up. */
while (!tq_empty(&sigfwd_list)) { while (!TAILQ_EMPTY(&sigfwd_list)) {
struct sigforward *sigfwd = tq_first(&sigfwd_list); struct sigforward *sigfwd = TAILQ_FIRST(&sigfwd_list);
tq_remove(&sigfwd_list, sigfwd); TAILQ_REMOVE(&sigfwd_list, sigfwd, entries);
efree(sigfwd); efree(sigfwd);
} }
sudo_ev_free(sigfwd_list.event); sudo_ev_free(sigfwd_event);
sudo_ev_free(signal_event); sudo_ev_free(signal_event);
sudo_ev_free(backchannel_event); sudo_ev_free(backchannel_event);
sudo_ev_base_free(evbase); sudo_ev_base_free(evbase);
@@ -782,8 +781,8 @@ forward_signals(int sock, int what, void *v)
ssize_t nsent; ssize_t nsent;
debug_decl(forward_signals, SUDO_DEBUG_EXEC) debug_decl(forward_signals, SUDO_DEBUG_EXEC)
while (!tq_empty(&sigfwd_list)) { while (!TAILQ_EMPTY(&sigfwd_list)) {
sigfwd = tq_first(&sigfwd_list); sigfwd = TAILQ_FIRST(&sigfwd_list);
if (sigfwd->signo == SIGCONT_FG) if (sigfwd->signo == SIGCONT_FG)
strlcpy(signame, "CONT_FG", sizeof(signame)); strlcpy(signame, "CONT_FG", sizeof(signame));
else if (sigfwd->signo == SIGCONT_BG) else if (sigfwd->signo == SIGCONT_BG)
@@ -797,16 +796,16 @@ forward_signals(int sock, int what, void *v)
do { do {
nsent = send(sock, &cstat, sizeof(cstat), 0); nsent = send(sock, &cstat, sizeof(cstat), 0);
} while (nsent == -1 && errno == EINTR); } while (nsent == -1 && errno == EINTR);
tq_remove(&sigfwd_list, sigfwd); TAILQ_REMOVE(&sigfwd_list, sigfwd, entries);
efree(sigfwd); efree(sigfwd);
if (nsent != sizeof(cstat)) { if (nsent != sizeof(cstat)) {
if (errno == EPIPE) { if (errno == EPIPE) {
sudo_debug_printf(SUDO_DEBUG_ERROR, sudo_debug_printf(SUDO_DEBUG_ERROR,
"broken pipe writing to child over backchannel"); "broken pipe writing to child over backchannel");
/* Other end of socket gone, empty out sigfwd_list. */ /* Other end of socket gone, empty out sigfwd_list. */
while (!tq_empty(&sigfwd_list)) { while (!TAILQ_EMPTY(&sigfwd_list)) {
sigfwd = tq_first(&sigfwd_list); sigfwd = TAILQ_FIRST(&sigfwd_list);
tq_remove(&sigfwd_list, sigfwd); TAILQ_REMOVE(&sigfwd_list, sigfwd, entries);
efree(sigfwd); efree(sigfwd);
} }
/* XXX - child (monitor) is dead, we should exit too? */ /* XXX - child (monitor) is dead, we should exit too? */
@@ -835,12 +834,10 @@ schedule_signal(struct sudo_event_base *evbase, int signo)
sudo_debug_printf(SUDO_DEBUG_DIAG, "scheduled SIG%s for child", signame); sudo_debug_printf(SUDO_DEBUG_DIAG, "scheduled SIG%s for child", signame);
sigfwd = ecalloc(1, sizeof(*sigfwd)); sigfwd = ecalloc(1, sizeof(*sigfwd));
sigfwd->prev = sigfwd;
/* sigfwd->next = NULL; */
sigfwd->signo = signo; sigfwd->signo = signo;
tq_append(&sigfwd_list, sigfwd); TAILQ_INSERT_TAIL(&sigfwd_list, sigfwd, entries);
if (sudo_ev_add(evbase, sigfwd_list.event, true) == -1) if (sudo_ev_add(evbase, sigfwd_event, true) == -1)
fatal(_("unable to add event to queue")); fatal(_("unable to add event to queue"));
debug_return; debug_return;

View File

@@ -117,7 +117,7 @@ pty_cleanup(void)
{ {
debug_decl(cleanup, SUDO_DEBUG_EXEC); debug_decl(cleanup, SUDO_DEBUG_EXEC);
if (!tq_empty(&io_plugins) && io_fds[SFD_USERTTY] != -1) { if (!TAILQ_EMPTY(&io_plugins) && io_fds[SFD_USERTTY] != -1) {
check_foreground(); check_foreground();
if (foreground) if (foreground)
term_restore(io_fds[SFD_USERTTY], 0); term_restore(io_fds[SFD_USERTTY], 0);
@@ -202,7 +202,7 @@ log_ttyin(const char *buf, unsigned int n)
debug_decl(log_ttyin, SUDO_DEBUG_EXEC); debug_decl(log_ttyin, SUDO_DEBUG_EXEC);
sigprocmask(SIG_BLOCK, &ttyblock, &omask); sigprocmask(SIG_BLOCK, &ttyblock, &omask);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
if (plugin->u.io->log_ttyin) { if (plugin->u.io->log_ttyin) {
if (!plugin->u.io->log_ttyin(buf, n)) { if (!plugin->u.io->log_ttyin(buf, n)) {
rval = false; rval = false;
@@ -225,7 +225,7 @@ log_stdin(const char *buf, unsigned int n)
debug_decl(log_stdin, SUDO_DEBUG_EXEC); debug_decl(log_stdin, SUDO_DEBUG_EXEC);
sigprocmask(SIG_BLOCK, &ttyblock, &omask); sigprocmask(SIG_BLOCK, &ttyblock, &omask);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
if (plugin->u.io->log_stdin) { if (plugin->u.io->log_stdin) {
if (!plugin->u.io->log_stdin(buf, n)) { if (!plugin->u.io->log_stdin(buf, n)) {
rval = false; rval = false;
@@ -248,7 +248,7 @@ log_ttyout(const char *buf, unsigned int n)
debug_decl(log_ttyout, SUDO_DEBUG_EXEC); debug_decl(log_ttyout, SUDO_DEBUG_EXEC);
sigprocmask(SIG_BLOCK, &ttyblock, &omask); sigprocmask(SIG_BLOCK, &ttyblock, &omask);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
if (plugin->u.io->log_ttyout) { if (plugin->u.io->log_ttyout) {
if (!plugin->u.io->log_ttyout(buf, n)) { if (!plugin->u.io->log_ttyout(buf, n)) {
rval = false; rval = false;
@@ -271,7 +271,7 @@ log_stdout(const char *buf, unsigned int n)
debug_decl(log_stdout, SUDO_DEBUG_EXEC); debug_decl(log_stdout, SUDO_DEBUG_EXEC);
sigprocmask(SIG_BLOCK, &ttyblock, &omask); sigprocmask(SIG_BLOCK, &ttyblock, &omask);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
if (plugin->u.io->log_stdout) { if (plugin->u.io->log_stdout) {
if (!plugin->u.io->log_stdout(buf, n)) { if (!plugin->u.io->log_stdout(buf, n)) {
rval = false; rval = false;
@@ -294,7 +294,7 @@ log_stderr(const char *buf, unsigned int n)
debug_decl(log_stderr, SUDO_DEBUG_EXEC); debug_decl(log_stderr, SUDO_DEBUG_EXEC);
sigprocmask(SIG_BLOCK, &ttyblock, &omask); sigprocmask(SIG_BLOCK, &ttyblock, &omask);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
if (plugin->u.io->log_stderr) { if (plugin->u.io->log_stderr) {
if (!plugin->u.io->log_stderr(buf, n)) { if (!plugin->u.io->log_stderr(buf, n)) {
rval = false; rval = false;

View File

@@ -231,7 +231,7 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
} }
} else if (plugin->type == SUDO_IO_PLUGIN) { } else if (plugin->type == SUDO_IO_PLUGIN) {
/* Check for duplicate entries. */ /* Check for duplicate entries. */
tq_foreach_fwd(io_plugins, container) { TAILQ_FOREACH(container, io_plugins, entries) {
if (strcmp(container->name, info->symbol_name) == 0) { if (strcmp(container->name, info->symbol_name) == 0) {
warningx(_("ignoring duplicate I/O plugin `%s' in %s, line %d"), warningx(_("ignoring duplicate I/O plugin `%s' in %s, line %d"),
info->symbol_name, _PATH_SUDO_CONF, info->lineno); info->symbol_name, _PATH_SUDO_CONF, info->lineno);
@@ -242,13 +242,11 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
} }
if (handle != NULL) { if (handle != NULL) {
container = ecalloc(1, sizeof(*container)); container = ecalloc(1, sizeof(*container));
container->prev = container;
/* container->next = NULL; */
container->handle = handle; container->handle = handle;
container->name = info->symbol_name; container->name = info->symbol_name;
container->options = info->options; container->options = info->options;
container->u.generic = plugin; container->u.generic = plugin;
tq_append(io_plugins, container); TAILQ_INSERT_TAIL(io_plugins, container, entries);
} }
} }
@@ -272,7 +270,7 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
/* Walk the plugin list from sudo.conf, if any. */ /* Walk the plugin list from sudo.conf, if any. */
plugins = sudo_conf_plugins(); plugins = sudo_conf_plugins();
tq_foreach_fwd(plugins, info) { TAILQ_FOREACH(info, plugins, entries) {
rval = sudo_load_plugin(policy_plugin, io_plugins, info); rval = sudo_load_plugin(policy_plugin, io_plugins, info);
if (!rval) if (!rval)
goto done; goto done;
@@ -288,21 +286,17 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
info->symbol_name = "sudoers_policy"; info->symbol_name = "sudoers_policy";
info->path = SUDOERS_PLUGIN; info->path = SUDOERS_PLUGIN;
/* info->options = NULL; */ /* info->options = NULL; */
info->prev = info;
/* info->next = NULL; */
rval = sudo_load_plugin(policy_plugin, io_plugins, info); rval = sudo_load_plugin(policy_plugin, io_plugins, info);
efree(info); efree(info);
if (!rval) if (!rval)
goto done; goto done;
/* Default I/O plugin */ /* Default I/O plugin */
if (tq_empty(io_plugins)) { if (TAILQ_EMPTY(io_plugins)) {
info = ecalloc(1, sizeof(*info)); info = ecalloc(1, sizeof(*info));
info->symbol_name = "sudoers_io"; info->symbol_name = "sudoers_io";
info->path = SUDOERS_PLUGIN; info->path = SUDOERS_PLUGIN;
/* info->options = NULL; */ /* info->options = NULL; */
info->prev = info;
/* info->next = NULL; */
rval = sudo_load_plugin(policy_plugin, io_plugins, info); rval = sudo_load_plugin(policy_plugin, io_plugins, info);
efree(info); efree(info);
if (!rval) if (!rval)
@@ -321,7 +315,7 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
if (policy_plugin->u.policy->register_hooks != NULL) if (policy_plugin->u.policy->register_hooks != NULL)
policy_plugin->u.policy->register_hooks(SUDO_HOOK_VERSION, register_hook); policy_plugin->u.policy->register_hooks(SUDO_HOOK_VERSION, register_hook);
} }
tq_foreach_fwd(io_plugins, container) { TAILQ_FOREACH(container, io_plugins, entries) {
if (container->u.io->version >= SUDO_API_MKVERSION(1, 2)) { if (container->u.io->version >= SUDO_API_MKVERSION(1, 2)) {
if (container->u.io->register_hooks != NULL) if (container->u.io->register_hooks != NULL)
container->u.io->register_hooks(SUDO_HOOK_VERSION, register_hook); container->u.io->register_hooks(SUDO_HOOK_VERSION, register_hook);

View File

@@ -92,7 +92,7 @@
* Local variables * Local variables
*/ */
struct plugin_container policy_plugin; struct plugin_container policy_plugin;
struct plugin_container_list io_plugins; struct plugin_container_list io_plugins = TAILQ_HEAD_INITIALIZER(io_plugins);
struct user_details user_details; struct user_details user_details;
const char *list_user; /* extern for parse_args.c */ const char *list_user; /* extern for parse_args.c */
static struct command_details command_details; static struct command_details command_details;
@@ -216,7 +216,7 @@ main(int argc, char *argv[], char *envp[])
switch (sudo_mode & MODE_MASK) { switch (sudo_mode & MODE_MASK) {
case MODE_VERSION: case MODE_VERSION:
policy_show_version(&policy_plugin, !user_details.uid); policy_show_version(&policy_plugin, !user_details.uid);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
ok = iolog_open(plugin, settings, user_info, NULL, ok = iolog_open(plugin, settings, user_info, NULL,
nargc, nargv, envp); nargc, nargv, envp);
if (ok != -1) if (ok != -1)
@@ -250,8 +250,7 @@ main(int argc, char *argv[], char *envp[])
exit(1); /* plugin printed error message */ exit(1); /* plugin printed error message */
} }
/* Open I/O plugins once policy plugin succeeds. */ /* Open I/O plugins once policy plugin succeeds. */
for (plugin = io_plugins.first; plugin != NULL; plugin = next) { TAILQ_FOREACH_SAFE(plugin, &io_plugins, entries, next) {
next = plugin->next;
ok = iolog_open(plugin, settings, user_info, ok = iolog_open(plugin, settings, user_info,
command_info, nargc, nargv, envp); command_info, nargc, nargv, envp);
switch (ok) { switch (ok) {
@@ -1051,7 +1050,7 @@ run_command(struct command_details *details)
sudo_debug_printf(SUDO_DEBUG_DEBUG, sudo_debug_printf(SUDO_DEBUG_DEBUG,
"calling policy close with errno %d", cstat.val); "calling policy close with errno %d", cstat.val);
policy_close(&policy_plugin, 0, cstat.val); policy_close(&policy_plugin, 0, cstat.val);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
sudo_debug_printf(SUDO_DEBUG_DEBUG, sudo_debug_printf(SUDO_DEBUG_DEBUG,
"calling I/O close with errno %d", cstat.val); "calling I/O close with errno %d", cstat.val);
iolog_close(plugin, 0, cstat.val); iolog_close(plugin, 0, cstat.val);
@@ -1063,7 +1062,7 @@ run_command(struct command_details *details)
sudo_debug_printf(SUDO_DEBUG_DEBUG, sudo_debug_printf(SUDO_DEBUG_DEBUG,
"calling policy close with wait status %d", cstat.val); "calling policy close with wait status %d", cstat.val);
policy_close(&policy_plugin, cstat.val, 0); policy_close(&policy_plugin, cstat.val, 0);
tq_foreach_fwd(&io_plugins, plugin) { TAILQ_FOREACH(plugin, &io_plugins, entries) {
sudo_debug_printf(SUDO_DEBUG_DEBUG, sudo_debug_printf(SUDO_DEBUG_DEBUG,
"calling I/O close with wait status %d", cstat.val); "calling I/O close with wait status %d", cstat.val);
iolog_close(plugin, cstat.val, 0); iolog_close(plugin, cstat.val, 0);
@@ -1262,7 +1261,7 @@ iolog_unlink(struct plugin_container *plugin)
deregister_hook); deregister_hook);
} }
/* Remove from io_plugins list and free. */ /* Remove from io_plugins list and free. */
tq_remove(&io_plugins, plugin); TAILQ_REMOVE(&io_plugins, plugin, entries);
efree(plugin); efree(plugin);
debug_return; debug_return;

View File

@@ -34,7 +34,6 @@
#include "alloc.h" #include "alloc.h"
#include "fatal.h" #include "fatal.h"
#include "fileops.h" #include "fileops.h"
#include "list.h"
#include "sudo_conf.h" #include "sudo_conf.h"
#include "sudo_debug.h" #include "sudo_debug.h"
#include "gettext.h" #include "gettext.h"

View File

@@ -81,8 +81,7 @@ struct io_plugin_1_1 {
* Sudo plugin internals. * Sudo plugin internals.
*/ */
struct plugin_container { struct plugin_container {
struct plugin_container *prev; /* required */ TAILQ_ENTRY(plugin_container) entries;
struct plugin_container *next; /* required */
const char *name; const char *name;
char * const *options; char * const *options;
void *handle; void *handle;
@@ -95,7 +94,7 @@ struct plugin_container {
struct io_plugin_1_1 *io_1_1; struct io_plugin_1_1 *io_1_1;
} u; } u;
}; };
TQ_DECLARE(plugin_container) TAILQ_HEAD(plugin_container_list, plugin_container);
extern struct plugin_container policy_plugin; extern struct plugin_container policy_plugin;
extern struct plugin_container_list io_plugins; extern struct plugin_container_list io_plugins;