1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 09:27:59 +00:00

psusan: fix assertion failure in SFTP server.

Uppity's built-in SFTP server makes up its file handle identifiers
using random_read(). But when that server is reused in psusan, which
doesn't have the random number generator enabled, you get an assertion
failure.
This commit is contained in:
Simon Tatham 2020-11-04 21:50:47 +00:00
parent 9ea0dfd8c0
commit 3a9b7267dd
4 changed files with 20 additions and 1 deletions

View File

@ -132,3 +132,6 @@ int platform_make_x11_server(Plug *plug, const char *progname, int mindisp,
Socket **sockets, Conf *conf);
Conf *make_ssh_server_conf(void);
/* Provided by Unix front end programs to uxsftpserver.c */
void make_unix_sftp_filehandle_key(void *data, size_t size);

View File

@ -84,6 +84,16 @@ void timer_change_notify(unsigned long next)
char *platform_get_x_display(void) { return NULL; }
void make_unix_sftp_filehandle_key(void *vdata, size_t size)
{
/* psusan runs without a random number generator, so we can't make
* this up by random_read. Fortunately, psusan is also
* non-adversarial, so it's safe to generate this trivially. */
unsigned char *data = (unsigned char *)vdata;
for (size_t i = 0; i < size; i++)
data[i] = (unsigned)rand() / ((unsigned)RAND_MAX / 256);
}
static bool verbose;
struct server_instance {

View File

@ -103,6 +103,11 @@ void timer_change_notify(unsigned long next)
char *platform_get_x_display(void) { return NULL; }
void make_unix_sftp_filehandle_key(void *data, size_t size)
{
random_read(data, size);
}
static bool verbose;
struct AuthPolicyShared {

View File

@ -20,6 +20,7 @@
#include "putty.h"
#include "ssh.h"
#include "sshserver.h"
#include "sftp.h"
#include "tree234.h"
@ -65,7 +66,7 @@ static SftpServer *uss_new(const SftpServerVtable *vt)
uss->dirhandles = newtree234(uss_dirhandle_cmp);
uss->srv.vt = vt;
random_read(uss->handlekey, sizeof(uss->handlekey));
make_unix_sftp_filehandle_key(uss->handlekey, sizeof(uss->handlekey));
return &uss->srv;
}