aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSelva Nair2018-10-02 16:01:12 -0400
committerGert Doering2018-10-05 14:35:22 +0200
commit4eb465537ce06e07ee63c2fc93c7b192dd4e29de (patch)
treed12b7ea30053c1ea653b2fddf1f4acbe3caa8f08 /src
parent720c880a8ca73e0f9e9b03e3c9d6031c026bccac (diff)
downloadopenvpn-4eb465537ce06e07ee63c2fc93c7b192dd4e29de.zip
openvpn-4eb465537ce06e07ee63c2fc93c7b192dd4e29de.tar.gz
Move get system directory to a separate function
Only refactoring to reduce code-duplication, no functional changes. Signed-off-by: Selva Nair <selva.nair@gmail.com> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <1538510474-27602-1-git-send-email-selva.nair@gmail.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg17518.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src')
-rw-r--r--src/openvpnserv/common.c16
-rw-r--r--src/openvpnserv/interactive.c23
-rw-r--r--src/openvpnserv/service.h3
3 files changed, 24 insertions, 18 deletions
diff --git a/src/openvpnserv/common.c b/src/openvpnserv/common.c
index dc47666..73c418f 100644
--- a/src/openvpnserv/common.c
+++ b/src/openvpnserv/common.c
@@ -25,7 +25,7 @@
#include "validate.h"
LPCTSTR service_instance = TEXT("");
-
+static wchar_t win_sys_path[MAX_PATH];
/*
* These are necessary due to certain buggy implementations of (v)snprintf,
@@ -285,3 +285,17 @@ utf8to16(const char *utf8)
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, utf16, n);
return utf16;
}
+
+const wchar_t *
+get_win_sys_path(void)
+{
+ const wchar_t *default_sys_path = L"C:\\Windows\\system32";
+
+ if (!GetSystemDirectoryW(win_sys_path, _countof(win_sys_path)))
+ {
+ wcsncpy(win_sys_path, default_sys_path, _countof(win_sys_path));
+ win_sys_path[_countof(win_sys_path) - 1] = L'\0';
+ }
+
+ return win_sys_path;
+}
diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c
index 9d459a6..0f40252 100644
--- a/src/openvpnserv/interactive.c
+++ b/src/openvpnserv/interactive.c
@@ -933,11 +933,10 @@ RegisterDNS(LPVOID unused)
{
DWORD err;
DWORD i;
- WCHAR sys_path[MAX_PATH];
DWORD timeout = RDNS_TIMEOUT * 1000; /* in milliseconds */
- /* default path of ipconfig command */
- WCHAR ipcfg[MAX_PATH] = L"C:\\Windows\\system32\\ipconfig.exe";
+ /* path of ipconfig command */
+ WCHAR ipcfg[MAX_PATH];
struct
{
@@ -952,11 +951,8 @@ RegisterDNS(LPVOID unused)
HANDLE wait_handles[2] = {rdns_semaphore, exit_event};
- if (GetSystemDirectory(sys_path, MAX_PATH))
- {
- swprintf(ipcfg, MAX_PATH, L"%s\\%s", sys_path, L"ipconfig.exe");
- ipcfg[MAX_PATH-1] = L'\0';
- }
+ swprintf(ipcfg, _countof(ipcfg), L"%s\\%s", get_win_sys_path(), L"ipconfig.exe");
+ ipcfg[_countof(ipcfg) - 1] = L'\0';
if (WaitForMultipleObjects(2, wait_handles, FALSE, timeout) == WAIT_OBJECT_0)
{
@@ -1034,15 +1030,8 @@ netsh_dns_cmd(const wchar_t *action, const wchar_t *proto, const wchar_t *if_nam
}
/* Path of netsh */
- int n = GetSystemDirectory(argv0, MAX_PATH);
- if (n > 0 && n < MAX_PATH) /* got system directory */
- {
- wcsncat(argv0, L"\\netsh.exe", MAX_PATH - n - 1);
- }
- else
- {
- wcsncpy(argv0, L"C:\\Windows\\system32\\netsh.exe", MAX_PATH);
- }
+ swprintf(argv0, _countof(argv0), L"%s\\%s", get_win_sys_path(), L"netsh.exe");
+ argv0[_countof(argv0) - 1] = L'\0';
/* cmd template:
* netsh interface $proto $action dns $if_name $addr [validate=no]
diff --git a/src/openvpnserv/service.h b/src/openvpnserv/service.h
index 4d03b88..c6092b8 100644
--- a/src/openvpnserv/service.h
+++ b/src/openvpnserv/service.h
@@ -97,4 +97,7 @@ DWORD MsgToEventLog(DWORD flags, LPCTSTR lpszMsg, ...);
/* Convert a utf8 string to utf16. Caller should free the result */
wchar_t *utf8to16(const char *utf8);
+/* return windows system directory as a pointer to a static string */
+const wchar_t *get_win_sys_path(void);
+
#endif /* ifndef _SERVICE_H */