git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@6352 e7ae566f-a301-0410-adde-c780ea21d3b5
| ... | ... |
@@ -477,14 +477,16 @@ redirect_stdout_stderr (const char *file, bool append) |
| 477 | 477 |
{
|
| 478 | 478 |
HANDLE log_handle; |
| 479 | 479 |
int log_fd; |
| 480 |
- struct security_attributes sa; |
|
| 481 | 480 |
|
| 482 |
- init_security_attributes_allow_all (&sa); |
|
| 481 |
+ SECURITY_ATTRIBUTES saAttr; |
|
| 482 |
+ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); |
|
| 483 |
+ saAttr.bInheritHandle = TRUE; |
|
| 484 |
+ saAttr.lpSecurityDescriptor = NULL; |
|
| 483 | 485 |
|
| 484 | 486 |
log_handle = CreateFile (file, |
| 485 | 487 |
GENERIC_WRITE, |
| 486 | 488 |
FILE_SHARE_READ, |
| 487 |
- &sa.sa, |
|
| 489 |
+ &saAttr, |
|
| 488 | 490 |
append ? OPEN_ALWAYS : CREATE_ALWAYS, |
| 489 | 491 |
FILE_ATTRIBUTE_NORMAL, |
| 490 | 492 |
NULL); |
| ... | ... |
@@ -505,10 +507,12 @@ redirect_stdout_stderr (const char *file, bool append) |
| 505 | 505 |
/* save original stderr for password prompts */ |
| 506 | 506 |
orig_stderr = GetStdHandle (STD_ERROR_HANDLE); |
| 507 | 507 |
|
| 508 |
+#if 0 /* seems not be necessary with stdout/stderr redirection below*/ |
|
| 508 | 509 |
/* set up for redirection */ |
| 509 | 510 |
if (!SetStdHandle (STD_OUTPUT_HANDLE, log_handle) |
| 510 | 511 |
|| !SetStdHandle (STD_ERROR_HANDLE, log_handle)) |
| 511 | 512 |
msg (M_ERR, "Error: cannot redirect stdout/stderr to --log file: %s", file); |
| 513 |
+#endif |
|
| 512 | 514 |
|
| 513 | 515 |
/* direct stdout/stderr to point to log_handle */ |
| 514 | 516 |
log_fd = _open_osfhandle ((intptr_t)log_handle, _O_TEXT); |
| ... | ... |
@@ -4750,8 +4750,9 @@ above. |
| 4750 | 4750 |
.\"********************************************************* |
| 4751 | 4751 |
.TP |
| 4752 | 4752 |
.B --register-dns |
| 4753 |
-Run ipconfig /flushdns and ipconfig /registerdns on |
|
| 4754 |
-connection initiation. This is known to kick Windows into |
|
| 4753 |
+Run net stop dnscache, net start dnscache, ipconfig /flushdns |
|
| 4754 |
+and ipconfig /registerdns on connection initiation. |
|
| 4755 |
+This is known to kick Windows into |
|
| 4755 | 4756 |
recognizing pushed DNS servers. |
| 4756 | 4757 |
.\"********************************************************* |
| 4757 | 4758 |
.TP |
| ... | ... |
@@ -615,8 +615,8 @@ static const char usage_message[] = |
| 615 | 615 |
"--dhcp-pre-release : Ask Windows to release the previous TAP adapter lease on\n" |
| 616 | 616 |
" startup.\n" |
| 617 | 617 |
"--dhcp-release : Ask Windows to release the TAP adapter lease on shutdown.\n" |
| 618 |
- "--register-dns : Run ipconfig /flushdns and ipconfig /registerdns on\n" |
|
| 619 |
- " connection initiation.\n" |
|
| 618 |
+ "--register-dns : Run net stop dnscache, net start dnscache, ipconfig /flushdns\n" |
|
| 619 |
+ " and ipconfig /registerdns on connection initiation.\n" |
|
| 620 | 620 |
"--tap-sleep n : Sleep for n seconds after TAP adapter open before\n" |
| 621 | 621 |
" attempting to set adapter properties.\n" |
| 622 | 622 |
"--pause-exit : When run from a console window, pause before exiting.\n" |
| ... | ... |
@@ -3390,17 +3390,37 @@ ipconfig_register_dns (const struct env_set *es) |
| 3390 | 3390 |
const char err[] = "ERROR: Windows ipconfig command failed"; |
| 3391 | 3391 |
|
| 3392 | 3392 |
netcmd_semaphore_lock (); |
| 3393 |
+ |
|
| 3393 | 3394 |
argv_init (&argv); |
| 3395 |
+ |
|
| 3396 |
+ argv_printf (&argv, "%s%sc stop dnscache", |
|
| 3397 |
+ get_win_sys_path(), |
|
| 3398 |
+ WIN_NET_PATH_SUFFIX); |
|
| 3399 |
+ argv_msg (D_TUNTAP_INFO, &argv); |
|
| 3400 |
+ status = openvpn_execve_check (&argv, es, 0, err); |
|
| 3401 |
+ argv_reset(&argv); |
|
| 3402 |
+ |
|
| 3403 |
+ argv_printf (&argv, "%s%sc start dnscache", |
|
| 3404 |
+ get_win_sys_path(), |
|
| 3405 |
+ WIN_NET_PATH_SUFFIX); |
|
| 3406 |
+ argv_msg (D_TUNTAP_INFO, &argv); |
|
| 3407 |
+ status = openvpn_execve_check (&argv, es, 0, err); |
|
| 3408 |
+ argv_reset(&argv); |
|
| 3409 |
+ |
|
| 3394 | 3410 |
argv_printf (&argv, "%s%sc /flushdns", |
| 3395 | 3411 |
get_win_sys_path(), |
| 3396 | 3412 |
WIN_IPCONFIG_PATH_SUFFIX); |
| 3413 |
+ argv_msg (D_TUNTAP_INFO, &argv); |
|
| 3397 | 3414 |
status = openvpn_execve_check (&argv, es, 0, err); |
| 3398 | 3415 |
argv_reset(&argv); |
| 3416 |
+ |
|
| 3399 | 3417 |
argv_printf (&argv, "%s%sc /registerdns", |
| 3400 | 3418 |
get_win_sys_path(), |
| 3401 | 3419 |
WIN_IPCONFIG_PATH_SUFFIX); |
| 3420 |
+ argv_msg (D_TUNTAP_INFO, &argv); |
|
| 3402 | 3421 |
status = openvpn_execve_check (&argv, es, 0, err); |
| 3403 | 3422 |
argv_reset(&argv); |
| 3423 |
+ |
|
| 3404 | 3424 |
netcmd_semaphore_release (); |
| 3405 | 3425 |
} |
| 3406 | 3426 |
|
| ... | ... |
@@ -34,6 +34,7 @@ |
| 34 | 34 |
#define NETSH_PATH_SUFFIX "\\system32\\netsh.exe" |
| 35 | 35 |
#define WIN_ROUTE_PATH_SUFFIX "\\system32\\route.exe" |
| 36 | 36 |
#define WIN_IPCONFIG_PATH_SUFFIX "\\system32\\ipconfig.exe" |
| 37 |
+#define WIN_NET_PATH_SUFFIX "\\system32\\net.exe" |
|
| 37 | 38 |
|
| 38 | 39 |
/* |
| 39 | 40 |
* Win32-specific OpenVPN code, targetted at the mingw |