diff options
author | Guy Harris <guy@alum.mit.edu> | 2019-01-08 20:40:50 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2019-01-08 20:40:50 -0800 |
commit | 0dd92d7d9944b158511e27795ff6952c17fd3497 (patch) | |
tree | d809d390da3c8b8f0f899027685004d8ba6d97ed /rpcapd | |
parent | 9a397d9b5fffc17aadab655d5e868094a015749f (diff) | |
download | libpcap-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.c | 14 | ||||
-rw-r--r-- | rpcapd/win32-svc.c | 26 |
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) |