-/* $OpenBSD: scp.c,v 1.265 2025/09/02 09:34:48 djm Exp $ */
+/* $OpenBSD: scp.c,v 1.266 2025/09/15 05:17:37 djm Exp $ */
/*
* scp - secure remote copy. This is basically patched BSD rcp which
* uses ssh to do the data transfer (instead of using rcmd).
if (mode == MODE_SFTP) {
if (remin == -1 || conn == NULL) {
/* Connect to dest now */
+ sftp_free(conn);
conn = do_sftp_connect(thost, tuser,
tport, sftp_direct,
&remin, &remout, &do_cmd_pid);
* scp -3 hosta:/foo hosta:/bar hostb:
*/
/* Connect to origin now */
+ sftp_free(conn2);
conn2 = do_sftp_connect(host, suser,
sport, sftp_direct,
&remin2, &remout2, &do_cmd_pid2);
}
if (remin == -1) {
/* Connect to remote now */
+ sftp_free(conn);
conn = do_sftp_connect(thost, tuser,
tport, sftp_direct,
&remin, &remout, &do_cmd_pid);
}
}
out:
- if (mode == MODE_SFTP)
- free(conn);
freeargs(&alist);
free(tuser);
free(thost);
free(suser);
free(host);
free(src);
+ sftp_free(conn);
+ sftp_free(conn2);
}
void
}
/* Remote to local. */
if (mode == MODE_SFTP) {
+ sftp_free(conn);
conn = do_sftp_connect(host, suser, sport,
sftp_direct, &remin, &remout, &do_cmd_pid);
if (conn == NULL) {
/* The protocol */
sink_sftp(1, argv[argc - 1], src, conn);
- free(conn);
(void) close(remin);
(void) close(remout);
remin = remout = -1;
free(suser);
free(host);
free(src);
+ sftp_free(conn);
}
/* Prepare remote path, handling ~ by assuming cwd is the homedir */
-/* $OpenBSD: sftp-client.c,v 1.178 2025/09/02 09:26:21 djm Exp $ */
+/* $OpenBSD: sftp-client.c,v 1.179 2025/09/15 05:17:37 djm Exp $ */
/*
* Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
*
return ret;
}
+void
+sftp_free(struct sftp_conn *conn)
+{
+ if (conn == NULL)
+ return;
+ freezero(conn, sizeof(*conn));
+}
+
u_int
sftp_proto_version(struct sftp_conn *conn)
{
-/* $OpenBSD: sftp-client.h,v 1.39 2023/09/08 05:56:13 djm Exp $ */
+/* $OpenBSD: sftp-client.h,v 1.40 2025/09/15 05:17:37 djm Exp $ */
/*
* Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
* a pointer to a initialized sftp_conn struct on success.
*/
struct sftp_conn *sftp_init(int, int, u_int, u_int, u_int64_t);
+void sftp_free(struct sftp_conn *);
u_int sftp_proto_version(struct sftp_conn *);