aboutsummaryrefslogtreecommitdiff
path: root/miscutils/crontab.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-11-26 15:45:17 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-11-26 15:45:17 +0000
commitcf749bc10c9e7b38217e102d0d3e7044e5515b4f (patch)
treeaf6c1681e91a3e5c13bf3dce8aa798c07462468a /miscutils/crontab.c
parentc1660fea6da93f4f8aacf0a9a65c2880ac58209a (diff)
downloadbusybox-w32-cf749bc10c9e7b38217e102d0d3e7044e5515b4f.tar.gz
busybox-w32-cf749bc10c9e7b38217e102d0d3e7044e5515b4f.tar.bz2
busybox-w32-cf749bc10c9e7b38217e102d0d3e7044e5515b4f.zip
small fixes:
fix xstrdup to not grossly overallocate memory use xopen instean of xopen3 in several places etc.
Diffstat (limited to 'miscutils/crontab.c')
-rw-r--r--miscutils/crontab.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 743ac74ae..39d3aae41 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -156,6 +156,7 @@ int crontab_main(int ac, char **av)
156 break; 156 break;
157 case EDIT: 157 case EDIT:
158 { 158 {
159/* FIXME: messy code here! we have file copying helpers for this! */
159 FILE *fi; 160 FILE *fi;
160 int fd; 161 int fd;
161 int n; 162 int n;
@@ -163,11 +164,12 @@ int crontab_main(int ac, char **av)
163 164
164 snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid()); 165 snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid());
165 fd = xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600); 166 fd = xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600);
167/* race, use fchown */
166 chown(tmp, getuid(), getgid()); 168 chown(tmp, getuid(), getgid());
167 fi = fopen(pas->pw_name, "r"); 169 fi = fopen(pas->pw_name, "r");
168 if (fi) { 170 if (fi) {
169 while ((n = fread(buf, 1, sizeof(buf), fi)) > 0) 171 while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
170 write(fd, buf, n); 172 full_write(fd, buf, n);
171 } 173 }
172 EditFile(caller, tmp); 174 EditFile(caller, tmp);
173 remove(tmp); 175 remove(tmp);
@@ -178,6 +180,7 @@ int crontab_main(int ac, char **av)
178 /* fall through */ 180 /* fall through */
179 case REPLACE: 181 case REPLACE:
180 { 182 {
183/* same here */
181 char path[1024]; 184 char path[1024];
182 int fd; 185 int fd;
183 int n; 186 int n;
@@ -186,7 +189,7 @@ int crontab_main(int ac, char **av)
186 fd = open(path, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0600); 189 fd = open(path, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0600);
187 if (fd >= 0) { 190 if (fd >= 0) {
188 while ((n = read(repFd, buf, sizeof(buf))) > 0) { 191 while ((n = read(repFd, buf, sizeof(buf))) > 0) {
189 write(fd, buf, n); 192 full_write(fd, buf, n);
190 } 193 }
191 close(fd); 194 close(fd);
192 rename(path, pas->pw_name); 195 rename(path, pas->pw_name);