diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-26 15:45:17 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-26 15:45:17 +0000 |
commit | cf749bc10c9e7b38217e102d0d3e7044e5515b4f (patch) | |
tree | af6c1681e91a3e5c13bf3dce8aa798c07462468a /miscutils/crontab.c | |
parent | c1660fea6da93f4f8aacf0a9a65c2880ac58209a (diff) | |
download | busybox-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.c | 7 |
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); |