mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-24 18:30:38 -05:00
2895. [func] genrandom: add support for the generation of multiple
files. [RT #20917]
This commit is contained in:
parent
7e621e1c51
commit
3ec79bbc03
3 changed files with 104 additions and 31 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
2895. [func] genrandom: add support for the generation of multiple
|
||||
files. [RT #20917]
|
||||
|
||||
2894. [contrib] DLZ LDAP support now use '$' not '%'. [RT #21294]
|
||||
|
||||
2893. [bug] Improve managed keys support. New named.conf option
|
||||
|
|
|
|||
|
|
@ -15,43 +15,39 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: genrandom.c,v 1.4 2009/03/07 23:47:45 tbox Exp $ */
|
||||
/* $Id: genrandom.c,v 1.5 2010/05/17 04:38:45 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <isc/commandline.h>
|
||||
#include <isc/stdlib.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
unsigned int bytes;
|
||||
unsigned int k;
|
||||
char *endp;
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
const char *program = "genrandom";
|
||||
|
||||
ISC_PLATFORM_NORETURN_PRE static void
|
||||
usage(void) ISC_PLATFORM_NORETURN_POST;
|
||||
|
||||
static void
|
||||
usage(void) {
|
||||
fprintf(stderr, "usage: %s [-n 2..9] k file\n", program);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
generate(char *filename, unsigned int bytes) {
|
||||
FILE *fp;
|
||||
|
||||
if (argc != 3) {
|
||||
printf("usage: genrandom k file\n");
|
||||
exit(1);
|
||||
}
|
||||
k = strtoul(argv[1], &endp, 10);
|
||||
if (*endp != 0) {
|
||||
printf("usage: genrandom k file\n");
|
||||
exit(1);
|
||||
}
|
||||
bytes = k << 10;
|
||||
|
||||
fp = fopen(argv[2], "w");
|
||||
fp = fopen(filename, "w");
|
||||
if (fp == NULL) {
|
||||
printf("failed to open %s\n", argv[2]);
|
||||
printf("failed to open %s\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifndef HAVE_ARC4RANDOM
|
||||
srand(0x12345678);
|
||||
#endif
|
||||
while (bytes > 0) {
|
||||
#ifndef HAVE_ARC4RANDOM
|
||||
unsigned short int x = (rand() & 0xFFFF);
|
||||
|
|
@ -60,17 +56,80 @@ main(int argc, char **argv) {
|
|||
#endif
|
||||
unsigned char c = x & 0xFF;
|
||||
if (putc(c, fp) == EOF) {
|
||||
printf("error writing to file\n");
|
||||
printf("error writing to %s\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
c = x >> 8;
|
||||
if (putc(c, fp) == EOF) {
|
||||
printf("error writing to file\n");
|
||||
printf("error writing to %s\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
bytes -= 2;
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
unsigned int bytes;
|
||||
unsigned int k;
|
||||
char *endp;
|
||||
int c, i, n = 1;
|
||||
size_t len;
|
||||
char *name;
|
||||
|
||||
isc_commandline_errprint = ISC_FALSE;
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv, "hn:")) != EOF) {
|
||||
switch (c) {
|
||||
case 'n':
|
||||
n = strtol(isc_commandline_argument, &endp, 10);
|
||||
if ((*endp != 0) || (n <= 1) || (n > 9))
|
||||
usage();
|
||||
break;
|
||||
|
||||
case '?':
|
||||
if (isc_commandline_option != '?')
|
||||
fprintf(stderr, "%s: invalid argument -%c\n",
|
||||
program, isc_commandline_option);
|
||||
case 'h':
|
||||
usage();
|
||||
|
||||
default:
|
||||
fprintf(stderr, "%s: unhandled option -%c\n",
|
||||
program, isc_commandline_option);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (isc_commandline_index + 2 != argc)
|
||||
usage();
|
||||
|
||||
k = strtoul(argv[isc_commandline_index++], &endp, 10);
|
||||
if (*endp != 0)
|
||||
usage();
|
||||
bytes = k << 10;
|
||||
|
||||
#ifndef HAVE_ARC4RANDOM
|
||||
srand(0x12345678);
|
||||
#endif
|
||||
if (n == 1) {
|
||||
generate(argv[isc_commandline_index], bytes);
|
||||
return (0);
|
||||
}
|
||||
|
||||
len = strlen(argv[isc_commandline_index]) + 2;
|
||||
name = (char *) malloc(len);
|
||||
if (name == NULL) {
|
||||
perror("malloc");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 1; i <= n; i++) {
|
||||
snprintf(name, len, "%s%d", argv[isc_commandline_index], i);
|
||||
generate(name, bytes);
|
||||
}
|
||||
free(name);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: genrandom.docbook,v 1.4 2009/09/18 13:14:47 fdupont Exp $ -->
|
||||
<!-- $Id: genrandom.docbook,v 1.5 2010/05/17 04:38:45 marka Exp $ -->
|
||||
<refentry id="man.genrandom">
|
||||
<refentryinfo>
|
||||
<date>Feb 19, 2009</date>
|
||||
|
|
@ -44,6 +44,7 @@
|
|||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>genrandom</command>
|
||||
<arg><option>-n <replaceable class="parameter">number</replaceable></option></arg>
|
||||
<arg choice="req"><replaceable class="parameter">size</replaceable></arg>
|
||||
<arg choice="req"><replaceable class="parameter">filename</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
|
|
@ -53,15 +54,25 @@
|
|||
<title>DESCRIPTION</title>
|
||||
<para>
|
||||
<command>genrandom</command>
|
||||
generates a file containing a specified quantity of pseudo-random
|
||||
data, which can be used as a source of entropy for other commands
|
||||
on systems with no random device.
|
||||
generates a file or a set of files containing a specified quantity
|
||||
of pseudo-random data, which can be used as a source of entropy for
|
||||
other commands on systems with no random device.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>ARGUMENTS</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>-n <replaceable class="parameter">number</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
In place of generating one file, generates <option>number</option>
|
||||
(from 2 to 9) files, appending <option>number</option> to the name.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>size</term>
|
||||
<listitem>
|
||||
|
|
|
|||
Loading…
Reference in a new issue