=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rdistd/server.c,v retrieving revision 1.18 retrieving revision 1.19 diff -c -r1.18 -r1.19 *** src/usr.bin/rdistd/server.c 2008/05/13 02:13:46 1.18 --- src/usr.bin/rdistd/server.c 2008/05/25 22:33:56 1.19 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.18 2008/05/13 02:13:46 ray Exp $ */ /* * Copyright (c) 1983 Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.19 2008/05/25 22:33:56 millert Exp $ */ /* * Copyright (c) 1983 Regents of the University of California. *************** *** 36,42 **** "$From: server.c,v 1.10 1999/08/04 15:57:33 christos Exp $"; #else static char RCSid[] __attribute__((__unused__)) = ! "$OpenBSD: server.c,v 1.18 2008/05/13 02:13:46 ray Exp $"; #endif static char sccsid[] __attribute__((__unused__)) = --- 36,42 ---- "$From: server.c,v 1.10 1999/08/04 15:57:33 christos Exp $"; #else static char RCSid[] __attribute__((__unused__)) = ! "$OpenBSD: server.c,v 1.19 2008/05/25 22:33:56 millert Exp $"; #endif static char sccsid[] __attribute__((__unused__)) = *************** *** 74,80 **** static void query(char *); static int chkparent(char *, opt_t); static char *savetarget(char *, opt_t); ! static void recvfile(char *, int, opt_t, int, char *, char *, time_t, time_t, off_t); static void recvdir(opt_t, int, char *, char *); static void recvlink(char *, opt_t, int, off_t); static void hardlink(char *); --- 74,80 ---- static void query(char *); static int chkparent(char *, opt_t); static char *savetarget(char *, opt_t); ! static void recvfile(char *, opt_t, int, char *, char *, time_t, time_t, off_t); static void recvdir(opt_t, int, char *, char *); static void recvlink(char *, opt_t, int, off_t); static void hardlink(char *); *************** *** 784,799 **** * Receive a file */ static void ! recvfile(char *new, int f, opt_t opts, int mode, char *owner, ! char *group, time_t mtime, time_t atime, off_t size) { ! int wrerr, olderrno; off_t i; char *cp; char *savefile = NULL; static struct stat statbuff; /* * Receive the file itself */ ack(); --- 784,810 ---- * Receive a file */ static void ! recvfile(char *new, opt_t opts, int mode, char *owner, char *group, ! time_t mtime, time_t atime, off_t size) { ! int f, wrerr, olderrno; off_t i; char *cp; char *savefile = NULL; static struct stat statbuff; /* + * Create temporary file + */ + if ((f = mkstemp(new)) < 0) { + if (errno != ENOENT || chkparent(new, opts) < 0 || + (f = mkstemp(new)) < 0) { + error("%s: create failed: %s", new, SYSERR); + return; + } + } + + /* * Receive the file itself */ ack(); *************** *** 1193,1203 **** /* * Make new symlink using a temporary name */ ! if (symlink(buf, new) < 0) { if (errno != ENOENT || chkparent(new, opts) < 0 || ! symlink(buf, new) < 0) { ! error("%s -> %s: symlink failed: %s", new, buf,SYSERR); ! (void) unlink(new); return; } } --- 1204,1213 ---- /* * Make new symlink using a temporary name */ ! if (mktemp(new) == NULL || symlink(buf, new) < 0) { if (errno != ENOENT || chkparent(new, opts) < 0 || ! mktemp(new) == NULL || symlink(buf, new) < 0) { ! error("%s -> %s: symlink failed: %s", new, buf, SYSERR); return; } } *************** *** 1390,1396 **** static void recvit(char *cmd, int type) { ! int f, mode; opt_t opts; off_t size; time_t mtime, atime; --- 1400,1406 ---- static void recvit(char *cmd, int type) { ! int mode; opt_t opts; off_t size; time_t mtime, atime; *************** *** 1516,1525 **** tempname); *file = '/'; } - if ((f = mkstemp(new)) == -1) { - error("%s: create failed: %s", new, SYSERR); - return; - } } /* --- 1526,1531 ---- *************** *** 1566,1572 **** break; case S_IFREG: ! recvfile(new, f, opts, mode, owner, group, mtime, atime, size); break; default: --- 1572,1578 ---- break; case S_IFREG: ! recvfile(new, opts, mode, owner, group, mtime, atime, size); break; default: