summaryrefslogtreecommitdiff
path: root/rpcapd
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2019-01-08 20:40:50 -0800
committerGuy Harris <guy@alum.mit.edu>2019-01-08 20:40:50 -0800
commit0dd92d7d9944b158511e27795ff6952c17fd3497 (patch)
treed809d390da3c8b8f0f899027685004d8ba6d97ed /rpcapd
parent9a397d9b5fffc17aadab655d5e868094a015749f (diff)
downloadlibpcap-0dd92d7d9944b158511e27795ff6952c17fd3497.tar.gz
Put pcap_win32_err_to_str() into fmtutils.c, and use it for all Win32 errors.
We don't need N different places all doing their own calls to FormatMessage(); centralize it in pcap_win32_err_to_str(), now in fmtutils.c for use in rpcapd as well as libpcap. Merge in some fixes from the code in sock_fmterror().
Diffstat (limited to 'rpcapd')
-rw-r--r--rpcapd/daemon.c14
-rw-r--r--rpcapd/win32-svc.c26
2 files changed, 9 insertions, 31 deletions
diff --git a/rpcapd/daemon.c b/rpcapd/daemon.c
index 90bc0cc6..7833d11b 100644
--- a/rpcapd/daemon.c
+++ b/rpcapd/daemon.c
@@ -1228,12 +1228,7 @@ daemon_AuthUserPwd(char *username, char *password, char *errbuf)
HANDLE Token;
if (LogonUser(username, ".", password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &Token) == 0)
{
- int error;
-
- error = GetLastError();
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf,
- PCAP_ERRBUF_SIZE, NULL);
-
+ pcap_win32_err_to_str(GetLastError(), errbuf);
return -1;
}
@@ -1241,12 +1236,7 @@ daemon_AuthUserPwd(char *username, char *password, char *errbuf)
// I didn't test it.
if (ImpersonateLoggedOnUser(Token) == 0)
{
- int error;
-
- error = GetLastError();
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, errbuf,
- PCAP_ERRBUF_SIZE, NULL);
-
+ pcap_win32_err_to_str(GetLastError(), errbuf);
CloseHandle(Token);
return -1;
}
diff --git a/rpcapd/win32-svc.c b/rpcapd/win32-svc.c
index c846b2cb..5d132a06 100644
--- a/rpcapd/win32-svc.c
+++ b/rpcapd/win32-svc.c
@@ -33,6 +33,7 @@
#include "rpcapd.h"
#include <pcap.h> // for PCAP_ERRBUF_SIZE
+#include "fmtutils.h"
#include "portability.h"
#include "fileconf.h"
#include "log.h"
@@ -40,42 +41,29 @@
static SERVICE_STATUS_HANDLE service_status_handle;
static SERVICE_STATUS service_status;
-void svc_geterr(char *str);
static void WINAPI svc_main(DWORD argc, char **argv);
static void update_svc_status(DWORD state, DWORD progress_indicator);
int svc_start(void)
{
- int rc;
SERVICE_TABLE_ENTRY ste[] =
{
{ PROGRAM_NAME, svc_main },
{ NULL, NULL }
};
+ char string[PCAP_ERRBUF_SIZE];
// This call is blocking. A new thread is created which will launch
// the svc_main() function
- if ( (rc = StartServiceCtrlDispatcher(ste)) == 0)
- svc_geterr("StartServiceCtrlDispatcher()");
+ if (StartServiceCtrlDispatcher(ste) == 0) {
+ pcap_win32_err_to_str(GetLastError(), string);
+ rpcapd_log(LOGPRIO_ERROR,
+ "StartServiceCtrlDispatcher() failed: %s", string);
+ }
return rc; // FALSE if this is not started as a service
}
-void svc_geterr(char *str)
-{
- char message[PCAP_ERRBUF_SIZE];
- char string[PCAP_ERRBUF_SIZE];
- int val;
-
- val = GetLastError();
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
- FORMAT_MESSAGE_MAX_WIDTH_MASK,
- NULL, val, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPSTR) string, PCAP_ERRBUF_SIZE, NULL);
-
- rpcapd_log(LOGPRIO_ERROR, "%s failed with error %d: %s", str, val, string);
-}
-
void WINAPI svc_control_handler(DWORD Opcode)
{
switch(Opcode)