2895. [func] genrandom: add support for the generation of multiple
files. [RT #20917]
This commit is contained in:
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]
|
2894. [contrib] DLZ LDAP support now use '$' not '%'. [RT #21294]
|
||||||
|
|
||||||
2893. [bug] Improve managed keys support. New named.conf option
|
2893. [bug] Improve managed keys support. New named.conf option
|
||||||
|
|||||||
@@ -15,43 +15,39 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* 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 */
|
/*! \file */
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <isc/commandline.h>
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include <isc/stdlib.h>
|
#include <isc/stdlib.h>
|
||||||
|
#include <isc/util.h>
|
||||||
|
|
||||||
int
|
#include <stdio.h>
|
||||||
main(int argc, char **argv) {
|
#include <string.h>
|
||||||
unsigned int bytes;
|
|
||||||
unsigned int k;
|
const char *program = "genrandom";
|
||||||
char *endp;
|
|
||||||
|
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;
|
FILE *fp;
|
||||||
|
|
||||||
if (argc != 3) {
|
fp = fopen(filename, "w");
|
||||||
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");
|
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
printf("failed to open %s\n", argv[2]);
|
printf("failed to open %s\n", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_ARC4RANDOM
|
|
||||||
srand(0x12345678);
|
|
||||||
#endif
|
|
||||||
while (bytes > 0) {
|
while (bytes > 0) {
|
||||||
#ifndef HAVE_ARC4RANDOM
|
#ifndef HAVE_ARC4RANDOM
|
||||||
unsigned short int x = (rand() & 0xFFFF);
|
unsigned short int x = (rand() & 0xFFFF);
|
||||||
@@ -60,17 +56,80 @@ main(int argc, char **argv) {
|
|||||||
#endif
|
#endif
|
||||||
unsigned char c = x & 0xFF;
|
unsigned char c = x & 0xFF;
|
||||||
if (putc(c, fp) == EOF) {
|
if (putc(c, fp) == EOF) {
|
||||||
printf("error writing to file\n");
|
printf("error writing to %s\n", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
c = x >> 8;
|
c = x >> 8;
|
||||||
if (putc(c, fp) == EOF) {
|
if (putc(c, fp) == EOF) {
|
||||||
printf("error writing to file\n");
|
printf("error writing to %s\n", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
bytes -= 2;
|
bytes -= 2;
|
||||||
}
|
}
|
||||||
fclose(fp);
|
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);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
- PERFORMANCE OF THIS SOFTWARE.
|
- 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">
|
<refentry id="man.genrandom">
|
||||||
<refentryinfo>
|
<refentryinfo>
|
||||||
<date>Feb 19, 2009</date>
|
<date>Feb 19, 2009</date>
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>genrandom</command>
|
<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">size</replaceable></arg>
|
||||||
<arg choice="req"><replaceable class="parameter">filename</replaceable></arg>
|
<arg choice="req"><replaceable class="parameter">filename</replaceable></arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
@@ -53,15 +54,25 @@
|
|||||||
<title>DESCRIPTION</title>
|
<title>DESCRIPTION</title>
|
||||||
<para>
|
<para>
|
||||||
<command>genrandom</command>
|
<command>genrandom</command>
|
||||||
generates a file containing a specified quantity of pseudo-random
|
generates a file or a set of files containing a specified quantity
|
||||||
data, which can be used as a source of entropy for other commands
|
of pseudo-random data, which can be used as a source of entropy for
|
||||||
on systems with no random device.
|
other commands on systems with no random device.
|
||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>ARGUMENTS</title>
|
<title>ARGUMENTS</title>
|
||||||
<variablelist>
|
<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>
|
<varlistentry>
|
||||||
<term>size</term>
|
<term>size</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|||||||
Reference in New Issue
Block a user