mirror of https://github.com/OpenVPN/openvpn-gui
				
				
				
			
						commit
						bdeeecf2df
					
				
							
								
								
									
										26
									
								
								misc.c
								
								
								
								
							
							
						
						
									
										26
									
								
								misc.c
								
								
								
								
							|  | @ -190,3 +190,29 @@ ForceForegroundWindow(HWND hWnd) | ||||||
| 
 | 
 | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check user has admin rights | ||||||
|  |  * Taken from https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx
 | ||||||
|  |  * Returns true if the calling process token has the local Administrators group enabled | ||||||
|  |  * in its SID.  Assumes the caller is not impersonating and has access to open its own  | ||||||
|  |  * process token. | ||||||
|  |  */ | ||||||
|  | BOOL IsUserAdmin(VOID) | ||||||
|  | { | ||||||
|  |     BOOL b; | ||||||
|  |     SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; | ||||||
|  |     PSID AdministratorsGroup; | ||||||
|  | 
 | ||||||
|  |     b = AllocateAndInitializeSid (&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, | ||||||
|  |                                   DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, | ||||||
|  |                                   &AdministratorsGroup); | ||||||
|  |     if(b) | ||||||
|  |     { | ||||||
|  |         if (!CheckTokenMembership(NULL, AdministratorsGroup, &b)) | ||||||
|  |             b = FALSE; | ||||||
|  |         FreeSid(AdministratorsGroup); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return(b); | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								misc.h
								
								
								
								
							
							
						
						
									
										2
									
								
								misc.h
								
								
								
								
							|  | @ -30,4 +30,6 @@ BOOL streq(LPCSTR, LPCSTR); | ||||||
| BOOL wcsbegins(LPCWSTR, LPCWSTR); | BOOL wcsbegins(LPCWSTR, LPCWSTR); | ||||||
| 
 | 
 | ||||||
| BOOL ForceForegroundWindow(HWND); | BOOL ForceForegroundWindow(HWND); | ||||||
|  | 
 | ||||||
|  | BOOL IsUserAdmin(VOID); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								openvpn.c
								
								
								
								
							
							
						
						
									
										12
									
								
								openvpn.c
								
								
								
								
							|  | @ -682,20 +682,22 @@ StartOpenVPN(connection_t *c) | ||||||
|     /* Create a management interface password */ |     /* Create a management interface password */ | ||||||
|     GetRandomPassword(c->manage.password, sizeof(c->manage.password) - 1); |     GetRandomPassword(c->manage.password, sizeof(c->manage.password) - 1); | ||||||
| 
 | 
 | ||||||
|     /* Construct command line */ |     /* Construct command line -- put log first */ | ||||||
|     _sntprintf_0(cmdline, _T("openvpn --config \"%s\" " |     _sntprintf_0(cmdline, _T("openvpn --log%s \"%s\" --config \"%s\" " | ||||||
|         "--setenv IV_GUI_VER \"%S\" --service %s 0 --log%s \"%s\" --auth-retry interact " |         "--setenv IV_GUI_VER \"%S\" --service %s 0 --auth-retry interact " | ||||||
|         "--management %S %hd stdin --management-query-passwords %s" |         "--management %S %hd stdin --management-query-passwords %s" | ||||||
|         "--management-hold"), c->config_file, PACKAGE_STRING, exit_event_name, |         "--management-hold"), | ||||||
|         (o.append_string[0] == '1' ? _T("-append") : _T("")), c->log_path, |         (o.append_string[0] == '1' ? _T("-append") : _T("")), c->log_path, | ||||||
|  |         c->config_file, PACKAGE_STRING, exit_event_name, | ||||||
|         inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port), |         inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port), | ||||||
|         (o.proxy_source != config ? _T("--management-query-proxy ") : _T(""))); |         (o.proxy_source != config ? _T("--management-query-proxy ") : _T(""))); | ||||||
| 
 | 
 | ||||||
|     /* Try to open the service pipe */ |     /* Try to open the service pipe */ | ||||||
|  |     if (!IsUserAdmin()) | ||||||
|       service = CreateFile(_T("\\\\.\\pipe\\openvpn\\service"), |       service = CreateFile(_T("\\\\.\\pipe\\openvpn\\service"), | ||||||
|                 GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); |                 GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); | ||||||
| 
 | 
 | ||||||
|     if (service != INVALID_HANDLE_VALUE) |     if (service && service != INVALID_HANDLE_VALUE) | ||||||
|     { |     { | ||||||
|         DWORD size = _tcslen(c->config_dir) + _tcslen(options) + sizeof(c->manage.password) + 3; |         DWORD size = _tcslen(c->config_dir) + _tcslen(options) + sizeof(c->manage.password) + 3; | ||||||
|         TCHAR startup_info[1024]; |         TCHAR startup_info[1024]; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Samuli Seppänen
						Samuli Seppänen