Skip to content

Commit

Permalink
Move get system directory to a separate function
Browse files Browse the repository at this point in the history
Only refactoring to reduce code-duplication, no functional changes.

Signed-off-by: Selva Nair <[email protected]>
Acked-by: Gert Doering <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg17518.html
Signed-off-by: Gert Doering <[email protected]>
  • Loading branch information
selvanair authored and cron2 committed Oct 5, 2018
1 parent 720c880 commit 4eb4655
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 18 deletions.
16 changes: 15 additions & 1 deletion src/openvpnserv/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
}
23 changes: 6 additions & 17 deletions src/openvpnserv/interactive.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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)
{
Expand Down Expand Up @@ -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]
Expand Down
3 changes: 3 additions & 0 deletions src/openvpnserv/service.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

0 comments on commit 4eb4655

Please sign in to comment.