summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@zerotier.com>2014-08-08 15:53:27 -0700
committerAdam Ierymenko <adam.ierymenko@zerotier.com>2014-08-08 15:53:27 -0700
commitf25bd41a03561b960622fefd9ab22a03010e9733 (patch)
tree7f32c1e07f37f52cac5b5e5860b9b104d335783b /main.cpp
parentfe3ad5e2cc27b6b7e9bf8f78e6e681bd10315143 (diff)
downloadinfinitytier-f25bd41a03561b960622fefd9ab22a03010e9733.tar.gz
infinitytier-f25bd41a03561b960622fefd9ab22a03010e9733.zip
Some fixes to firewall config code.
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp77
1 files changed, 40 insertions, 37 deletions
diff --git a/main.cpp b/main.cpp
index 5b882d0b..ef642281 100644
--- a/main.cpp
+++ b/main.cpp
@@ -414,6 +414,45 @@ static BOOL WINAPI _winConsoleCtrlHandler(DWORD dwCtrlType)
return FALSE;
}
+// Pokes a hole in the Windows firewall (advfirewall) for the running program
+static void _winPokeAHole()
+{
+ char myPath[MAX_PATH];
+ DWORD ps = GetModuleFileNameA(NULL,myPath,sizeof(myPath));
+ if ((ps > 0)&&(ps < (DWORD)sizeof(myPath))) {
+ STARTUPINFOA startupInfo;
+ PROCESS_INFORMATION processInfo;
+ fprintf(stderr,"*** path: %s\n",myPath);
+
+ startupInfo.cb = sizeof(startupInfo);
+ memset(&startupInfo,0,sizeof(STARTUPINFOA));
+ memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
+ if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall delete rule name=\"ZeroTier One\" program=\"") + myPath + "\"").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
+ WaitForSingleObject(processInfo.hProcess,INFINITE);
+ CloseHandle(processInfo.hProcess);
+ CloseHandle(processInfo.hThread);
+ }
+
+ startupInfo.cb = sizeof(startupInfo);
+ memset(&startupInfo,0,sizeof(STARTUPINFOA));
+ memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
+ if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall add rule name=\"ZeroTier One\" dir=in action=allow program=\"") + myPath + "\" enable=yes").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
+ WaitForSingleObject(processInfo.hProcess,INFINITE);
+ CloseHandle(processInfo.hProcess);
+ CloseHandle(processInfo.hThread);
+ }
+
+ startupInfo.cb = sizeof(startupInfo);
+ memset(&startupInfo,0,sizeof(STARTUPINFOA));
+ memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
+ if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall add rule name=\"ZeroTier One\" dir=out action=allow program=\"") + myPath + "\" enable=yes").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
+ WaitForSingleObject(processInfo.hProcess,INFINITE);
+ CloseHandle(processInfo.hProcess);
+ CloseHandle(processInfo.hThread);
+ }
+ }
+}
+
// Returns true if this is running as the local administrator
static BOOL IsCurrentUserLocalAdministrator(void)
{
@@ -680,43 +719,7 @@ int main(int argc,char **argv)
#endif // __UNIX_LIKE__
#ifdef __WINDOWS__
- {
- char myPath[MAX_PATH];
- DWORD ps = GetModuleFileNameA(NULL,myPath,sizeof(myPath));
- if ((ps > 0)&&(ps < (DWORD)sizeof(myPath))) {
- STARTUPINFOA startupInfo;
- PROCESS_INFORMATION processInfo;
- fprintf(stderr,"*** path: %s\n",myPath);
-
- startupInfo.cb = sizeof(startupInfo);
- memset(&startupInfo,0,sizeof(STARTUPINFOA));
- memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
- if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall delete rule name=\"ZeroTier One\" program=\"") + myPath + "\"").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
- WaitForSingleObject(processInfo.hProcess,INFINITE);
- CloseHandle(processInfo.hProcess);
- CloseHandle(processInfo.hThread);
- }
-
- startupInfo.cb = sizeof(startupInfo);
- memset(&startupInfo,0,sizeof(STARTUPINFOA));
- memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
- if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall add rule name=\"ZeroTier One\" dir=in action=allow program=\"") + myPath + "\" enable=yes").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
- WaitForSingleObject(processInfo.hProcess,INFINITE);
- CloseHandle(processInfo.hProcess);
- CloseHandle(processInfo.hThread);
- }
-
- startupInfo.cb = sizeof(startupInfo);
- memset(&startupInfo,0,sizeof(STARTUPINFOA));
- memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
- if (CreateProcessA(NULL,(LPSTR)(std::string("C:\\Windows\\System32\\netsh.exe advfirewall firewall add rule name=\"ZeroTier One\" dir=out action=allow program=\"") + myPath + "\" enable=yes").c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
- WaitForSingleObject(processInfo.hProcess,INFINITE);
- CloseHandle(processInfo.hProcess);
- CloseHandle(processInfo.hThread);
- }
- }
- }
-
+ _winPokeAHole();
if (winRunFromCommandLine) {
// Running in "interactive" mode (mostly for debugging)
if (IsCurrentUserLocalAdministrator() != TRUE) {