Browse code

Added "net stop dnscache" and "net start dnscache" in front of existing --register-dns commands.

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@6352 e7ae566f-a301-0410-adde-c780ea21d3b5

James Yonan authored on 2010/07/28 06:46:34
Showing 6 changed files
... ...
@@ -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
 
... ...
@@ -1,5 +1,5 @@
1 1
 dnl define the OpenVPN version
2
-define(PRODUCT_VERSION,[2.1.1n])
2
+define(PRODUCT_VERSION,[2.1.1o])
3 3
 dnl define the TAP version
4 4
 define(PRODUCT_TAP_ID,[tap0901])
5 5
 define(PRODUCT_TAP_WIN32_MIN_MAJOR,[9])
... ...
@@ -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