aboutsummaryrefslogtreecommitdiff
path: root/db2
diff options
context:
space:
mode:
Diffstat (limited to 'db2')
-rw-r--r--db2/makedb.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/db2/makedb.c b/db2/makedb.c
index d7821036f8..d20befc053 100644
--- a/db2/makedb.c
+++ b/db2/makedb.c
@@ -29,6 +29,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/stat.h>
/* Get libc version number. */
#include "../version.h"
@@ -100,6 +101,7 @@ main (argc, argv)
DB *db_file;
int status;
int remaining;
+ int mode = 0666;
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
@@ -157,15 +159,22 @@ main (argc, argv)
input_file = stdin;
else
{
+ struct stat st;
+
input_file = fopen (input_name, "r");
if (input_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open input file `%s'"),
input_name);
+
+ /* Get the access rights from the source file. The output file should
+ have the same. */
+ if (fstat (fileno (input_file), &st) >= 0)
+ mode = st.st_mode & ACCESSPERMS;
}
/* Open output file. This must not be standard output so we don't
handle "-" and "/dev/stdout" special. */
- db_file = dbopen (output_name, O_CREAT | O_RDWR | O_TRUNC, 0666,
+ db_file = dbopen (output_name, O_CREAT | O_RDWR | O_TRUNC, mode,
DB_BTREE, NULL);
if (db_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"),