[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libmicrohttpd] 03/03: check_nonce_nc(): reworked mutex handling
From: |
gnunet |
Subject: |
[libmicrohttpd] 03/03: check_nonce_nc(): reworked mutex handling |
Date: |
Sat, 22 Jan 2022 10:21:46 +0100 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd.
commit f8c9870a30cf37be9a362fde5fd85c982ba8b0c8
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Tue Jan 18 20:44:35 2022 +0300
check_nonce_nc(): reworked mutex handling
---
src/microhttpd/digestauth.c | 66 ++++++++++++++++++++++-----------------------
1 file changed, 32 insertions(+), 34 deletions(-)
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c
index 0d7a62e6..59f999f4 100644
--- a/src/microhttpd/digestauth.c
+++ b/src/microhttpd/digestauth.c
@@ -524,7 +524,10 @@ check_nonce_nc (struct MHD_Connection *connection,
uint32_t mod;
const char *np;
size_t noncelen;
+ enum MHD_Result ret;
+ bool stale;
+ stale = false;
noncelen = strlen (nonce) + 1;
if (MAX_NONCE_LENGTH < noncelen)
return MHD_NO; /* This should be impossible, but static analysis
@@ -549,9 +552,8 @@ check_nonce_nc (struct MHD_Connection *connection,
* then only increase the nonce counter by one.
*/
nn = &daemon->nnc[off];
-#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
+
MHD_mutex_lock_chk_ (&daemon->nnc_lock);
-#endif
if (0 == nc)
{
/* Fresh nonce, reinitialize array */
@@ -560,51 +562,47 @@ check_nonce_nc (struct MHD_Connection *connection,
noncelen);
nn->nc = 0;
nn->nmask = 0;
-#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
- MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
-#endif
- return MHD_YES;
+ ret = MHD_YES;
}
/* Note that we use 64 here, as we do not store the
bit for 'nn->nc' itself in 'nn->nmask' */
- if ( (nc < nn->nc) &&
- (nc + 64 > nc /* checking for overflow */) &&
- (nc + 64 >= nn->nc) &&
- (0 == ((1LLU << (nn->nc - nc - 1)) & nn->nmask)) )
+ else if ( (nc < nn->nc) &&
+ (nc + 64 > nc /* checking for overflow */) &&
+ (nc + 64 >= nn->nc) &&
+ (0 == ((1LLU << (nn->nc - nc - 1)) & nn->nmask)) )
{
/* Out-of-order nonce, but within 64-bit bitmask, set bit */
nn->nmask |= (1LLU << (nn->nc - nc - 1));
-#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
- MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
-#endif
- return MHD_YES;
+ ret = MHD_YES;
}
-
- if ( (nc <= nn->nc) ||
- (0 != strcmp (nn->nonce,
- nonce)) )
+ else if ( (nc <= nn->nc) ||
+ (0 != strcmp (nn->nonce,
+ nonce)) )
{
/* Nonce does not match, fail */
-#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
- MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
-#endif
-#ifdef HAVE_MESSAGES
- MHD_DLOG (daemon,
- _ (
- "Stale nonce received. If this happens a lot, you should
probably increase the size of the nonce array.\n"));
-#endif
- return MHD_NO;
+ stale = true;
+ ret = MHD_NO;
}
- /* Nonce is larger, shift bitmask and bump limit */
- if (64 > nc - nn->nc)
- nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
else
- nn->nmask = 0; /* big jump, unset all bits in the mask */
- nn->nc = nc;
-#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
+ {
+ /* Nonce is larger, shift bitmask and bump limit */
+ if (64 > nc - nn->nc)
+ nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
+ else
+ nn->nmask = 0; /* big jump, unset all bits in the mask */
+ nn->nc = nc;
+ ret = MHD_YES;
+ }
MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
+#ifdef HAVE_MESSAGES
+ if (stale)
+ MHD_DLOG (daemon,
+ _ ("Stale nonce received. If this happens a lot, you should "
+ "probably increase the size of the nonce array.\n"));
+#else
+ (void) stale; /* Mute compiler warning */
#endif
- return MHD_YES;
+ return ret;
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.