#include <mLib/dstr.h>
#include <mLib/fdflags.h>
#include <mLib/fwatch.h>
+#include <mLib/macros.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
#include <mLib/report.h>
enum { L, R, NDIR };
/* Response types, and the data needed to represent any associated data. A
- * U(MEMB, TYPE) constructs a union member; an N means no associated data.
+ * U_(MEMB, TYPE) constructs a union member; an N_ means no associated data.
*/
#define RESPONSE(_) \
- _(ERROR, U(error, unsigned)) \
- _(UID, U(uid, uid_t)) \
- _(NAT, U(nat, struct socket))
+ _(ERROR, U_(error, unsigned)) \
+ _(UID, U_(uid, uid_t)) \
+ _(NAT, U_(nat, struct socket))
enum {
#define DEFENUM(what, branch) R_##what,
unsigned resp; /* Our response type */
union { /* A union of response data */
#define DEFBRANCH(WHAT, branch) branch
-#define U(memb, ty) ty memb;
-#define N
+#define U_(memb, ty) ty memb;
+#define N_
RESPONSE(DEFBRANCH)
-#undef U
-#undef N
+#undef U_
+#undef N_
#undef DEFBRANCH
} u;
} query;
/* Format and log MSG somewhere sensible, at the syslog(3) priority PRIO.
* Prefix it with a description of the query Q, if non-null.
*/
-extern void logmsg(const struct query */*q*/,
- int /*prio*/, const char */*msg*/, ...);
+extern void PRINTF_LIKE(3, 4)
+ logmsg(const struct query */*q*/, int /*prio*/, const char */*msg*/, ...);
/*----- System-specific connection identification code --------------------*/
enum {
T_OK, /* Successful: results returned */
T_EOL, /* End-of-line found immediately */
- T_EOF, /* End-of-file found immediately */
- T_ERROR /* Some kind of error occurred */
+ T_ERROR, /* Some kind of error occurred */
+ T_EOF /* End-of-file found immediately */
};
/* A context for parsing a policy file. */
/* Open a policy file by NAME. The description WHAT and query Q are used for
* formatting error messages for the log.
+ *
+ * This function is somewhat careful only to read from actual regular files,
+ * though (if the filesystem object identified by NAME is a symlink, say) it
+ * might open a device node or other exotic thing without reading it. This
+ * is likely harmless, since we're running as an unprivileged user anyway.
*/
extern int open_policy_file(struct policy_file */*pf*/, const char */*name*/,
const char */*what*/, const struct query */*q*/,