/* Open the actual local file */
memset(path, 0, sizeof(path));
- if (session->path && strlen(session->path) < sizeof(path))
- strncat(path, session->path, strlen(session->path));
- if (strlen(session->filepath) > sizeof(path) - strlen(path))
- strncat(path, session->filepath, sizeof(path) - strlen(path) - 1);
- else
- strncat(path, session->filepath, strlen(session->filepath));
+ snprintf(path, sizeof(path) - 1, "%s%s", session->path ?
+ session->path : "", session->filepath);
session->fd = silc_file_open(path, O_RDWR | O_CREAT | O_EXCL);
if (session->fd < 0) {
/* Call monitor callback */
silc_client_ftp_session_free(session);
}
silc_dlist_del(conn->ftp_sessions, session);
- silc_dlist_uninit(conn->ftp_sessions);
}
}
SILC_LOG_DEBUG(("Free session"));
- silc_dlist_del(session->conn->ftp_sessions, session);
+ if (session->conn && session->conn->ftp_sessions)
+ silc_dlist_del(session->conn->ftp_sessions, session);
+
+ if (session->conn && session->conn->active_session == session)
+ session->conn->active_session = NULL;
if (session->sftp) {
if (session->server)
silc_free(session->hostname);
silc_free(session->filepath);
+ silc_free(session->path);
+ memset(session, 'F', sizeof(*session));
silc_free(session);
}
silc_dlist_start(conn->ftp_sessions);
while ((session = silc_dlist_get(conn->ftp_sessions)) != SILC_LIST_END) {
- if (session->client_entry == client_entry)
+ if (session->client_entry == client_entry && !session->server)
break;
}