summaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/crontab.c7
-rw-r--r--miscutils/rx.c2
2 files changed, 6 insertions, 3 deletions
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 743ac74..39d3aae 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -156,6 +156,7 @@ int crontab_main(int ac, char **av)
break;
case EDIT:
{
+/* FIXME: messy code here! we have file copying helpers for this! */
FILE *fi;
int fd;
int n;
@@ -163,11 +164,12 @@ int crontab_main(int ac, char **av)
snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid());
fd = xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600);
+/* race, use fchown */
chown(tmp, getuid(), getgid());
fi = fopen(pas->pw_name, "r");
if (fi) {
while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
- write(fd, buf, n);
+ full_write(fd, buf, n);
}
EditFile(caller, tmp);
remove(tmp);
@@ -178,6 +180,7 @@ int crontab_main(int ac, char **av)
/* fall through */
case REPLACE:
{
+/* same here */
char path[1024];
int fd;
int n;
@@ -186,7 +189,7 @@ int crontab_main(int ac, char **av)
fd = open(path, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0600);
if (fd >= 0) {
while ((n = read(repFd, buf, sizeof(buf))) > 0) {
- write(fd, buf, n);
+ full_write(fd, buf, n);
}
close(fd);
rename(path, pas->pw_name);
diff --git a/miscutils/rx.c b/miscutils/rx.c
index f723c16..9b9f6af 100644
--- a/miscutils/rx.c
+++ b/miscutils/rx.c
@@ -263,7 +263,7 @@ int rx_main(int argc, char **argv)
fn = argv[1];
ttyfd = xopen(CURRENT_TTY, O_RDWR);
- filefd = xopen3(fn, O_RDWR|O_CREAT|O_TRUNC, 0666);
+ filefd = xopen(fn, O_RDWR|O_CREAT|O_TRUNC);
if (tcgetattr(ttyfd, &tty) < 0)
bb_perror_msg_and_die("tcgetattr");