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 --------------------*/
/* Find out who is responsible for the connection described in the query Q.
*/
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*/,