#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>
/* 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*/, ...);
+
+/* Format and report MSG as a fatal error, and exit. */
+extern void PRINTF_LIKE(1, 2) fatal(const char */*msg*/, ...);
/*----- System-specific connection identification code --------------------*/
*/
extern void identify(struct query */*q*/);
+/* Fill the buffer at P with SZ random bytes. The buffer will be moderately
+ * large: this is intended to be a low-level interface, not a general-purpose
+ * utility.
+ */
+extern void fill_random(void */*p*/, size_t /*sz*/);
+
/* Initialize the system-specific code. */
extern void init_sys(void);
/* 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*/,