Hi, Here are some comments on the code -- there is one apparent memory leak (see below).
.\"********************************************************* > .TP > +.B \-\-block\-outside\-dns > +Block external DNS servers on other network adapters to prevent > the word "external" is not required nor appropriate as it blocks all, isn't it? > --- a/src/openvpn/init.c > +++ b/src/openvpn/init.c > @@ -1468,6 +1468,22 @@ do_open_tun (struct context *c) > "up", > c->c2.es); > +#if _WIN32_WINNT >= 0x0600 > + if (c->options.block_outside_dns) > + { > + if (!win_wfp_init()) > + msg (M_NONFATAL, "Initialising WFP failed!"); > + else > + { > + dmsg (D_LOW, "Blocking outside DNS"); > + if (!win_wfp_block_dns(c->c1.tuntap->adapter_index)) > + msg (M_NONFATAL, "Blocking DNS failed!"); > + } > + } > + else > + msg (M_NONFATAL, "Can't block outside DNS without configured > DNS server"); > This error/warning is unnecessary and confusing. If the user does not want to block-outside-dns, why say "can't block"? And why the "without configured DNS server" remark? in win32.c + + ret = ConvertInterfaceIndexToLuid(index, &tapluid); + if (ret == NO_ERROR) + dmsg (D_LOW, "Tap Luid: %I64d", tapluid.Value); + Is it safe to ignore the ret != NO_ERROR case? May be it is... + > + /* Get OpenVPN path. */ > + GetModuleFileNameW(NULL, openvpnpath, MAX_PATH); > + > + if (FwpmGetAppIdFromFileName0(openvpnpath, &openvpnblob) != > ERROR_SUCCESS) > openvpnblob is allocated here, but not freed anywhere. Need to free it before return. Finally, to nitpick, There are a couple of unused variables Some local vars could be eliminated (rpcStatus, dwFwAPIRetCode, ret) FIREWALL_NAME defined as const, but passed to non-const ZeroMemory --> CLEAR CopyMemory --> memcpy Regards, Selva