- markus@cvs.openbsd.org 2003/02/06 09:29:18
[sftp-server.c] fix races in rename/symlink; from Tony Finch; ok djm@
This commit is contained in:
parent
9f1e33a6b2
commit
9e51a73122
|
@ -48,6 +48,9 @@
|
||||||
- markus@cvs.openbsd.org 2003/02/06 09:27:29
|
- markus@cvs.openbsd.org 2003/02/06 09:27:29
|
||||||
[ssh.c ssh_config.5]
|
[ssh.c ssh_config.5]
|
||||||
support 'ProxyCommand none'; bugzilla #433; binder@arago.de; ok djm@
|
support 'ProxyCommand none'; bugzilla #433; binder@arago.de; ok djm@
|
||||||
|
- markus@cvs.openbsd.org 2003/02/06 09:29:18
|
||||||
|
[sftp-server.c]
|
||||||
|
fix races in rename/symlink; from Tony Finch; ok djm@
|
||||||
|
|
||||||
20030211
|
20030211
|
||||||
- (djm) Cygwin needs libcrypt too. Patch from vinschen@redhat.com
|
- (djm) Cygwin needs libcrypt too. Patch from vinschen@redhat.com
|
||||||
|
@ -1148,4 +1151,4 @@
|
||||||
save auth method before monitor_reset_key_state(); bugzilla bug #284;
|
save auth method before monitor_reset_key_state(); bugzilla bug #284;
|
||||||
ok provos@
|
ok provos@
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.2606 2003/02/24 00:57:32 djm Exp $
|
$Id: ChangeLog,v 1.2607 2003/02/24 00:58:44 djm Exp $
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: sftp-server.c,v 1.38 2002/09/11 22:41:50 djm Exp $");
|
RCSID("$OpenBSD: sftp-server.c,v 1.39 2003/02/06 09:29:18 markus Exp $");
|
||||||
|
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "bufaux.h"
|
#include "bufaux.h"
|
||||||
|
@ -832,19 +832,22 @@ static void
|
||||||
process_rename(void)
|
process_rename(void)
|
||||||
{
|
{
|
||||||
u_int32_t id;
|
u_int32_t id;
|
||||||
struct stat st;
|
|
||||||
char *oldpath, *newpath;
|
char *oldpath, *newpath;
|
||||||
int ret, status = SSH2_FX_FAILURE;
|
int status;
|
||||||
|
|
||||||
id = get_int();
|
id = get_int();
|
||||||
oldpath = get_string(NULL);
|
oldpath = get_string(NULL);
|
||||||
newpath = get_string(NULL);
|
newpath = get_string(NULL);
|
||||||
TRACE("rename id %u old %s new %s", id, oldpath, newpath);
|
TRACE("rename id %u old %s new %s", id, oldpath, newpath);
|
||||||
/* fail if 'newpath' exists */
|
/* fail if 'newpath' exists */
|
||||||
if (stat(newpath, &st) == -1) {
|
if (link(oldpath, newpath) == -1)
|
||||||
ret = rename(oldpath, newpath);
|
status = errno_to_portable(errno);
|
||||||
status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
|
else if (unlink(oldpath) == -1) {
|
||||||
}
|
status = errno_to_portable(errno);
|
||||||
|
/* clean spare link */
|
||||||
|
unlink(newpath);
|
||||||
|
} else
|
||||||
|
status = SSH2_FX_OK;
|
||||||
send_status(id, status);
|
send_status(id, status);
|
||||||
xfree(oldpath);
|
xfree(oldpath);
|
||||||
xfree(newpath);
|
xfree(newpath);
|
||||||
|
@ -878,19 +881,16 @@ static void
|
||||||
process_symlink(void)
|
process_symlink(void)
|
||||||
{
|
{
|
||||||
u_int32_t id;
|
u_int32_t id;
|
||||||
struct stat st;
|
|
||||||
char *oldpath, *newpath;
|
char *oldpath, *newpath;
|
||||||
int ret, status = SSH2_FX_FAILURE;
|
int ret, status;
|
||||||
|
|
||||||
id = get_int();
|
id = get_int();
|
||||||
oldpath = get_string(NULL);
|
oldpath = get_string(NULL);
|
||||||
newpath = get_string(NULL);
|
newpath = get_string(NULL);
|
||||||
TRACE("symlink id %u old %s new %s", id, oldpath, newpath);
|
TRACE("symlink id %u old %s new %s", id, oldpath, newpath);
|
||||||
/* fail if 'newpath' exists */
|
/* this will fail if 'newpath' exists */
|
||||||
if (stat(newpath, &st) == -1) {
|
ret = symlink(oldpath, newpath);
|
||||||
ret = symlink(oldpath, newpath);
|
status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
|
||||||
status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
|
|
||||||
}
|
|
||||||
send_status(id, status);
|
send_status(id, status);
|
||||||
xfree(oldpath);
|
xfree(oldpath);
|
||||||
xfree(newpath);
|
xfree(newpath);
|
||||||
|
|
Loading…
Reference in New Issue