This commit is contained in:
Christian Grothoff 2021-11-25 09:43:01 +01:00
parent ed6634f98e
commit bab213e794
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 71 additions and 73 deletions

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER This file is part of TALER
Copyright (C) 2020 Taler Systems SA Copyright (C) 2020, 2021 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software terms of the GNU General Public License as published by the Free Software

View File

@ -387,8 +387,8 @@ TALER_CRYPTO_helper_esign_sign_ (
uint16_t msize; uint16_t msize;
ret = recv (esh->sock, ret = recv (esh->sock,
buf, &buf[off],
sizeof (buf), sizeof (buf) - off,
(finished && (0 == off)) (finished && (0 == off))
? MSG_DONTWAIT ? MSG_DONTWAIT
: 0); : 0);
@ -410,6 +410,8 @@ TALER_CRYPTO_helper_esign_sign_ (
if (0 == ret) if (0 == ret)
{ {
GNUNET_break (0 == off); GNUNET_break (0 == off);
if (finished)
return TALER_EC_NONE;
return TALER_EC_EXCHANGE_SIGNKEY_HELPER_BUG; return TALER_EC_EXCHANGE_SIGNKEY_HELPER_BUG;
} }
off += ret; off += ret;

View File

@ -445,8 +445,8 @@ TALER_CRYPTO_helper_rsa_sign (
ssize_t ret; ssize_t ret;
ret = recv (dh->sock, ret = recv (dh->sock,
buf, &buf[off],
sizeof (buf), sizeof (buf) - off,
(finished && (0 == off)) (finished && (0 == off))
? MSG_DONTWAIT ? MSG_DONTWAIT
: 0); : 0);
@ -483,8 +483,14 @@ more:
switch (ntohs (hdr->type)) switch (ntohs (hdr->type))
{ {
case TALER_HELPER_RSA_MT_RES_SIGNATURE: case TALER_HELPER_RSA_MT_RES_SIGNATURE:
if ( (msize < sizeof (struct TALER_CRYPTO_SignResponse)) || if (msize < sizeof (struct TALER_CRYPTO_SignResponse))
(finished) ) {
GNUNET_break_op (0);
do_disconnect (dh);
*ec = TALER_EC_EXCHANGE_DENOMINATION_HELPER_BUG;
goto end;
}
if (finished)
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
do_disconnect (dh); do_disconnect (dh);
@ -525,7 +531,8 @@ more:
(const struct TALER_CRYPTO_SignFailure *) buf; (const struct TALER_CRYPTO_SignFailure *) buf;
*ec = (enum TALER_ErrorCode) ntohl (sf->ec); *ec = (enum TALER_ErrorCode) ntohl (sf->ec);
return ds; finished = true;
break;
} }
case TALER_HELPER_RSA_MT_AVAIL: case TALER_HELPER_RSA_MT_AVAIL:
if (GNUNET_OK != if (GNUNET_OK !=

View File

@ -194,9 +194,6 @@ cleanup:
} }
/**
* Send a signal to all clients to notify them about a key generation change.
*/
void void
TES_wake_clients (void) TES_wake_clients (void)
{ {
@ -216,13 +213,6 @@ TES_wake_clients (void)
} }
/**
* Read work request from the client.
*
* @param cls a `struct TES_Client *`
* @param dispatch function to call with work requests received
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue enum GNUNET_GenericReturnValue
TES_read_work (void *cls, TES_read_work (void *cls,
TES_MessageDispatch dispatch) TES_MessageDispatch dispatch)
@ -234,67 +224,66 @@ TES_read_work (void *cls,
const struct GNUNET_MessageHeader *hdr; const struct GNUNET_MessageHeader *hdr;
enum GNUNET_GenericReturnValue ret; enum GNUNET_GenericReturnValue ret;
while (1) do
{ {
do ssize_t recv_size;
recv_size = recv (client->csock,
&buf[off],
sizeof (client->iobuf) - off,
0);
if (-1 == recv_size)
{ {
ssize_t recv_size; if ( (0 == off) &&
(EAGAIN == errno) )
recv_size = recv (client->csock, return GNUNET_NO;
&buf[off], if ( (EINTR == errno) ||
sizeof (client->iobuf) - off, (EAGAIN == errno) )
0);
if (-1 == recv_size)
{ {
if ( (0 == off) && GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG,
(EAGAIN == errno) ) "recv");
return GNUNET_NO;
if ( (EINTR == errno) ||
(EAGAIN == errno) )
{
GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG,
"recv");
continue;
}
if (ECONNRESET != errno)
GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
"recv");
return GNUNET_SYSERR;
}
if (0 == recv_size)
{
/* regular disconnect? */
GNUNET_break_op (0 == off);
return GNUNET_SYSERR;
}
off += recv_size;
if (off < sizeof (struct GNUNET_MessageHeader))
continue; continue;
hdr = (const struct GNUNET_MessageHeader *) buf;
msize = ntohs (hdr->size);
#if 0
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Received message of type %u with %u bytes\n",
(unsigned int) ntohs (hdr->type),
(unsigned int) msize);
#endif
if (msize < sizeof (struct GNUNET_MessageHeader))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
} }
} while (off < msize); if (ECONNRESET != errno)
GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
"recv");
return GNUNET_SYSERR;
}
if (0 == recv_size)
{
/* regular disconnect? */
GNUNET_break_op (0 == off);
return GNUNET_SYSERR;
}
off += recv_size;
more:
if (off < sizeof (struct GNUNET_MessageHeader))
continue;
hdr = (const struct GNUNET_MessageHeader *) buf;
msize = ntohs (hdr->size);
#if 0
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Received message of type %u with %u bytes\n",
(unsigned int) ntohs (hdr->type),
(unsigned int) msize);
#endif
if (msize < sizeof (struct GNUNET_MessageHeader))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
} while (off < msize);
ret = dispatch (client, ret = dispatch (client,
hdr); hdr);
if ( (GNUNET_OK != ret) || if ( (GNUNET_OK != ret) ||
(off == msize) ) (off == msize) )
return ret; return ret;
memmove (buf, memmove (buf,
&buf[msize], &buf[msize],
off - msize); off - msize);
off -= msize; off -= msize;
} goto more;
} }