lineedit: create history files with mode 0600
authorWolfram Sang <w.sang@pengutronix.de>
Mon, 15 Nov 2010 01:58:28 +0000 (02:58 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 15 Nov 2010 01:58:28 +0000 (02:58 +0100)
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/lineedit.c

index 68006ffba1aa154a0547f20f0de94f077082c0ce..d6c33541ecafb15fcba1e2dc189b48ed01a54c69 100644 (file)
@@ -1336,7 +1336,7 @@ static void save_history(char *str)
        int fd;
        int len, len2;
 
-       fd = open(state->hist_file, O_WRONLY | O_CREAT | O_APPEND, 0666);
+       fd = open(state->hist_file, O_WRONLY | O_CREAT | O_APPEND, 0600);
        if (fd < 0)
                return;
        xlseek(fd, 0, SEEK_END); /* paranoia */
@@ -1351,10 +1351,8 @@ static void save_history(char *str)
        /* did we write so much that history file needs trimming? */
        state->cnt_history_in_file++;
        if (state->cnt_history_in_file > MAX_HISTORY * 4) {
-               FILE *fp;
                char *new_name;
                line_input_t *st_temp;
-               int i;
 
                /* we may have concurrently written entries from others.
                 * load them */
@@ -1364,8 +1362,12 @@ static void save_history(char *str)
 
                /* write out temp file and replace hist_file atomically */
                new_name = xasprintf("%s.%u.new", state->hist_file, (int) getpid());
-               fp = fopen_for_write(new_name);
-               if (fp) {
+               fd = open(state->hist_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+               if (fd >= 0) {
+                       FILE *fp;
+                       int i;
+
+                       fp = xfdopen_for_write(fd);
                        for (i = 0; i < st_temp->cnt_history; i++)
                                fprintf(fp, "%s\n", st_temp->history[i]);
                        fclose(fp);