diff --git a/openvpn-gui-res.h b/openvpn-gui-res.h index ac40ed5..91de440 100644 --- a/openvpn-gui-res.h +++ b/openvpn-gui-res.h @@ -119,6 +119,7 @@ #define ID_EDT_PRECONNECT_TIMEOUT 282 #define ID_EDT_CONNECT_TIMEOUT 283 #define ID_EDT_DISCONNECT_TIMEOUT 284 +#define ID_EDT_MGMT_PORT 285 /* Connections dialog */ #define ID_DLG_CONNECTIONS 290 diff --git a/openvpn_config.c b/openvpn_config.c index 8535065..c814797 100644 --- a/openvpn_config.c +++ b/openvpn_config.c @@ -104,7 +104,7 @@ AddConfigFileToList(int config, const TCHAR *filename, const TCHAR *config_dir) c->manage.sk = INVALID_SOCKET; c->manage.skaddr.sin_family = AF_INET; c->manage.skaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); - c->manage.skaddr.sin_port = htons(25340 + config); + c->manage.skaddr.sin_port = htons(o.mgmt_port_offset + config); #ifndef DISABLE_CHANGE_PASSWORD if (CheckKeyFileWriteAccess (c)) diff --git a/options.c b/options.c index 5d37ffa..fca627e 100644 --- a/options.c +++ b/options.c @@ -561,6 +561,17 @@ CheckAdvancedDlgParams (HWND hdlg) L"Option error", MB_OK); return false; } + + BOOL status; + int tmp = GetDlgItemInt (hdlg, ID_EDT_MGMT_PORT, &status, FALSE); + /* Restrict the port offset to sensible range -- port used is this + upto ~4000 as connection index */ + if (!status || (tmp < 1 || tmp > 61000)) + { + MessageBox (NULL, L"Specified port is not valid (must be n the range 1 to 61000)", + L"Option error", MB_OK); + return false; + } + return true; } @@ -596,6 +607,9 @@ SaveAdvancedDlgParams (HWND hdlg) tmp = GetDlgItemInt (hdlg, ID_EDT_DISCONNECT_TIMEOUT, &status, FALSE); if (status && tmp > 0) o.disconnectscript_timeout = tmp; + tmp = GetDlgItemInt (hdlg, ID_EDT_MGMT_PORT, &status, FALSE); + if (status) o.mgmt_port_offset = tmp; + SaveRegistryKeys (); ExpandOptions (); @@ -611,6 +625,13 @@ LoadAdvancedDlgParams (HWND hdlg) SetDlgItemInt (hdlg, ID_EDT_PRECONNECT_TIMEOUT, o.preconnectscript_timeout, FALSE); SetDlgItemInt (hdlg, ID_EDT_CONNECT_TIMEOUT, o.connectscript_timeout, FALSE); SetDlgItemInt (hdlg, ID_EDT_DISCONNECT_TIMEOUT, o.disconnectscript_timeout, FALSE); + SetDlgItemInt (hdlg, ID_EDT_MGMT_PORT, o.mgmt_port_offset, FALSE); + if (o.config_menu_view == 0) + CheckRadioButton (hdlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON0); + else if (o.config_menu_view == 1) + CheckRadioButton (hdlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON1); + else if (o.config_menu_view == 2) + CheckRadioButton (hdlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON2); } INT_PTR CALLBACK @@ -623,6 +644,8 @@ AdvancedSettingsDlgProc (HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lP case WM_INITDIALOG: /* Limit extension editbox to 4 chars. */ SendMessage (GetDlgItem(hwndDlg, ID_EDT_CONFIG_EXT), EM_SETLIMITTEXT, 4, 0); + /* Limit management port editbox to 5 chars */ + SendMessage(GetDlgItem(hwndDlg, ID_EDT_MGMT_PORT), EM_SETLIMITTEXT, 5, 0); /* Populate UI */ LoadAdvancedDlgParams (hwndDlg); break; @@ -658,6 +681,12 @@ AdvancedSettingsDlgProc (HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lP SetWindowLongPtr (hwndDlg, DWLP_MSGRESULT, status? PSNRET_NOERROR:PSNRET_INVALID); return TRUE; } + if (IsDlgButtonChecked(hwndDlg, ID_RB_BALLOON2)) + o.config_menu_view = 2; + else if (IsDlgButtonChecked(hwndDlg, ID_RB_BALLOON1)) + o.config_menu_view = 1; + else + o.config_menu_view = 0; break; } diff --git a/options.h b/options.h index 1a8998a..072ecb3 100644 --- a/options.h +++ b/options.h @@ -209,6 +209,7 @@ typedef struct { DWORD config_menu_view; /* 0 for auto, 1 for original flat menu, 2 for hierarchical */ DWORD disable_popup_messages; /* set nonzero to suppress all echo msg messages */ DWORD popup_mute_interval; /* Interval in hours to suppress repeated echo messages */ + DWORD mgmt_port_offset; /* management interface port = this offset + index of connection profile */ #ifdef DEBUG FILE *debug_fp; diff --git a/registry.c b/registry.c index 0ebbf70..688b6cb 100644 --- a/registry.c +++ b/registry.c @@ -65,6 +65,7 @@ struct regkey_int { {L"config_menu_view", &o.config_menu_view, CONFIG_VIEW_AUTO}, {L"popup_mute_interval", &o.popup_mute_interval, 24}, {L"disable_popup_messages", &o.disable_popup_messages, 0}, + {L"management_port_offset", &o.mgmt_port_offset, 25340}, }; static int @@ -193,6 +194,10 @@ GetRegistryKeys () ShowLocalizedMsg(IDS_ERR_PRECONN_SCRIPT_TIMEOUT); o.preconnectscript_timeout = 10; } + if (o.mgmt_port_offset < 1 || o.mgmt_port_offset > 61000) + { + o.mgmt_port_offset = 25340; + } ExpandOptions (); return true; diff --git a/res/openvpn-gui-res-en-msvc.rc b/res/openvpn-gui-res-en-msvc.rc index 923ffaf..b3c55c3 100644 --- a/res/openvpn-gui-res-en-msvc.rc +++ b/res/openvpn-gui-res-en-msvc.rc @@ -181,7 +181,7 @@ BEGIN END /* Advanced Dialog */ -ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218 +ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 235 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER CAPTION "Advanced" FONT 8, "Microsoft Sans Serif" @@ -199,13 +199,22 @@ BEGIN EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12 - GROUPBOX "Script Timeout", 201, 6, 97, 235, 60 + GROUPBOX "Script Timeout", 203, 6, 97, 235, 60 LTEXT "&Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10 EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER LTEXT "&Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10 EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER LTEXT "&Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10 EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER + + GROUPBOX "Management interface", 204, 6, 163, 235, 30 + LTEXT "Port offset:", 205, 17, 175, 75, 10 + EDITTEXT ID_EDT_MGMT_PORT, 103, 173, 30, 12, ES_AUTOHSCROLL + + GROUPBOX "Config menu view", 206, 6, 198, 235, 30 + AUTORADIOBUTTON "&Auto", ID_RB_BALLOON0, 28, 210, 50, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "&Flat", ID_RB_BALLOON1, 88, 210, 50, 10 + AUTORADIOBUTTON "&Nested", ID_RB_BALLOON2, 148, 210, 50, 10 END /* About Dialog */ diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index 48276bd..38c411d 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -184,7 +184,7 @@ BEGIN END /* Advanced Dialog */ -ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218 +ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 235 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER CAPTION "Advanced" FONT 8, "Microsoft Sans Serif" @@ -202,13 +202,22 @@ BEGIN EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12 - GROUPBOX "Script Timeout", 201, 6, 97, 235, 60 + GROUPBOX "Script Timeout", 203, 6, 97, 235, 60 LTEXT "&Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10 EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER LTEXT "&Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10 EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER LTEXT "&Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10 EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER + + GROUPBOX "Management interface", 204, 6, 163, 235, 30 + LTEXT "Port offset:", 205, 17, 175, 75, 10 + EDITTEXT ID_EDT_MGMT_PORT, 103, 173, 30, 12, ES_AUTOHSCROLL + + GROUPBOX "Config menu view", 206, 6, 198, 235, 30 + AUTORADIOBUTTON "&Auto", ID_RB_BALLOON0, 28, 210, 50, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "&Flat", ID_RB_BALLOON1, 88, 210, 50, 10 + AUTORADIOBUTTON "&Nested", ID_RB_BALLOON2, 148, 210, 50, 10 END /* About Dialog */