[Openvpn-devel] openvpnserv: Cache last error before it is overridden

Message ID 20210322103957.1234-1-simon@rozman.si
State Accepted
Headers show
Series [Openvpn-devel] openvpnserv: Cache last error before it is overridden | expand

Commit Message

Kristof Provost via Openvpn-devel March 21, 2021, 11:39 p.m. UTC
FormatMessage() sets the last error according to its own success. This
looses the original error code leading to mismatched error message and
error number when sprintfted together resulting in confusing event log
message.

Signed-off-by: Simon Rozman <simon@rozman.si>
---
 src/openvpnserv/common.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Gert Doering March 22, 2021, 10:14 a.m. UTC | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

Explanation and code make sense.  Test compiled on Ubuntu18/MinGW.

Your patch has been applied to the master and release/2.5 branch (bugfix).

And I managed to unmess the From: line before pushing :-) (and I *do*
have a pre-push-hook in place now that wakes me up next monday morning)

commit 1e938c50930f29124909e120a29fb116d4c46576 (master)
commit 24c1fc2a0ab5fa113d6769ab090de12e3719ab6b (release/2.5)
Author: Simon Rozman
Date:   Mon Mar 22 11:39:57 2021 +0100

     openvpnserv: Cache last error before it is overridden

     Signed-off-by: Simon Rozman <simon@rozman.si>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20210322103957.1234-1-simon@rozman.si>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg21789.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpnserv/common.c b/src/openvpnserv/common.c
index 48769be4..ebd08677 100644
--- a/src/openvpnserv/common.c
+++ b/src/openvpnserv/common.c
@@ -228,12 +228,14 @@  out:
 LPCTSTR
 GetLastErrorText()
 {
+    DWORD error;
     static TCHAR buf[256];
     DWORD len;
     LPTSTR tmp = NULL;
 
+    error = GetLastError();
     len = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,
-                        NULL, GetLastError(), LANG_NEUTRAL, (LPTSTR)&tmp, 0, NULL);
+                        NULL, error, LANG_NEUTRAL, (LPTSTR)&tmp, 0, NULL);
 
     if (len == 0 || (long) _countof(buf) < (long) len + 14)
     {
@@ -242,7 +244,7 @@  GetLastErrorText()
     else
     {
         tmp[_tcslen(tmp) - 2] = TEXT('\0'); /* remove CR/LF characters */
-        openvpn_sntprintf(buf, _countof(buf), TEXT("%s (0x%x)"), tmp, GetLastError());
+        openvpn_sntprintf(buf, _countof(buf), TEXT("%s (0x%x)"), tmp, error);
     }
 
     if (tmp)