/*----- Static variables --------------------------------------------------*/
static FILE *natfp; /* File handle for NAT table */
+static int randfd; /* File descriptor for random data */
+
+/*----- Miscellaneous system services -------------------------------------*/
+
+/* 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.
+ */
+void fill_random(void *p, size_t sz)
+{
+ ssize_t n;
+
+ n = read(randfd, p, sz);
+ if (n < 0) die(1, "error reading `/dev/urandom': %s", strerror(errno));
+ else if (n < sz) die(1, "unexpected short read from `/dev/urandom'");
+}
/*----- Address-type operations -------------------------------------------*/
}
}
-#ifdef notdef
+#ifdef DEBUG
{
/* Print the record we found. */
dstr dd = DSTR_INIT;
/* Initialize the system-specific code. */
void init_sys(void)
{
+ /* Open the NAT connection map. */
if ((natfp = fopen("/proc/net/nf_conntrack", "r")) == 0 &&
errno != ENOENT) {
die(1, "failed to open `/proc/net/nf_conntrack' for reading: %s",
strerror(errno));
}
+
+ /* Open the random data source. */
+ if ((randfd = open("/dev/urandom", O_RDONLY)) < 0) {
+ die(1, "failed to open `/dev/urandom' for reading: %s",
+ strerror(errno));
+ }
}
/*----- That's all, folks -------------------------------------------------*/