diff --git a/src/SNTPClient.cpp b/src/SNTPClient.cpp index e86edca76e..84460101fb 100644 --- a/src/SNTPClient.cpp +++ b/src/SNTPClient.cpp @@ -3,6 +3,8 @@ #include #include +#include + #include "utils.h" #include "Log.h" @@ -63,9 +65,9 @@ void SNTPClient::resolveComplete(const boost::system::error_code& error, boost:: } query.mReceivedReply = false; query.mLocalTimeSent = now; - query.mQueryMagic = rand(); + RAND_bytes(reinterpret_cast(&query.mQueryNonce), sizeof(query.mQueryNonce)); reinterpret_cast(SNTPQueryData)[NTP_OFF_XMITTS_INT] = time(NULL) + NTP_UNIX_OFFSET; - reinterpret_cast(SNTPQueryData)[NTP_OFF_XMITTS_FRAC] = query.mQueryMagic; + reinterpret_cast(SNTPQueryData)[NTP_OFF_XMITTS_FRAC] = query.mQueryNonce; mSocket.async_send_to(boost::asio::buffer(SNTPQueryData, 48), *sel, boost::bind(&SNTPClient::sendComplete, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); @@ -91,8 +93,8 @@ void SNTPClient::receivePacket(const boost::system::error_code& error, std::size Log(lsWARNING) << "SNTP: Late response"; else if (bytes_xferd < 48) Log(lsWARNING) << "SNTP: Short reply (" << bytes_xferd << ") " << mReceiveBuffer.size(); - else if (reinterpret_cast(&mReceiveBuffer[0])[NTP_OFF_ORGTS_FRAC] != query->second.mQueryMagic) - Log(lsWARNING) << "SNTP: Reply had wrong magic number"; + else if (reinterpret_cast(&mReceiveBuffer[0])[NTP_OFF_ORGTS_FRAC] != query->second.mQueryNonce) + Log(lsWARNING) << "SNTP: Reply had wrong nonce"; else processReply(); } diff --git a/src/SNTPClient.h b/src/SNTPClient.h index f8b00c071d..06f54ad0ce 100644 --- a/src/SNTPClient.h +++ b/src/SNTPClient.h @@ -13,7 +13,7 @@ class SNTPQuery public: bool mReceivedReply; time_t mLocalTimeSent; - int mQueryMagic; + int mQueryNonce; SNTPQuery(time_t j = (time_t) -1) : mReceivedReply(false), mLocalTimeSent(j) { ; } };