diff --git a/openvpn_config.c b/openvpn_config.c index 668e5ea..5a52c81 100644 --- a/openvpn_config.c +++ b/openvpn_config.c @@ -280,6 +280,15 @@ ActivateConfigGroups(void) cg->active = true; cg = PARENT_GROUP(cg); } + /* also deactivate any configs that are no longer readable */ + if (CheckReadAccess(c->config_dir, c->config_file)) + { + c->flags &= ~FLAG_CONFIG_DISABLED; + } + else + { + c->flags |= FLAG_CONFIG_DISABLED; + } } } diff --git a/options.h b/options.h index a5d61b2..84c285f 100644 --- a/options.h +++ b/options.h @@ -97,6 +97,7 @@ typedef struct #define FLAG_DISABLE_ECHO_MSG (1 << 7) #define FLAG_DAEMON_PERSISTENT (1 << 8) #define FLAG_WAIT_UNLOCK (1 << 9) +#define FLAG_CONFIG_DISABLED (1 << 10) #define CONFIG_VIEW_AUTO (0) #define CONFIG_VIEW_FLAT (1) diff --git a/tray.c b/tray.c index 5376b51..9a21568 100644 --- a/tray.c +++ b/tray.c @@ -740,7 +740,8 @@ SetMenuStatus(connection_t *c, conn_state_t state) { if (state == disconnected || state == detached) { - EnableMenuItem(hMenu, IDM_CONNECTMENU, MF_ENABLED); + EnableMenuItem( + hMenu, IDM_CONNECTMENU, (c->flags & FLAG_CONFIG_DISABLED) ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_DISCONNECTMENU, MF_GRAYED); EnableMenuItem(hMenu, IDM_RECONNECTMENU, MF_GRAYED); EnableMenuItem(hMenu, IDM_STATUSMENU, MF_GRAYED); @@ -819,10 +820,17 @@ SetMenuStatus(connection_t *c, conn_state_t state) if (state == disconnected || state == detached) { - EnableMenuItem(hMenuConn[i], IDM_CONNECTMENU, MF_ENABLED); - EnableMenuItem(hMenuConn[i], IDM_DISCONNECTMENU, MF_GRAYED); - EnableMenuItem(hMenuConn[i], IDM_RECONNECTMENU, MF_GRAYED); - EnableMenuItem(hMenuConn[i], IDM_STATUSMENU, MF_GRAYED); + if (c->flags & FLAG_CONFIG_DISABLED) + { + EnableMenuItem(parent->menu, pos, MF_BYPOSITION | MF_GRAYED); + } + else + { + EnableMenuItem(hMenuConn[i], IDM_CONNECTMENU, MF_ENABLED); + EnableMenuItem(hMenuConn[i], IDM_DISCONNECTMENU, MF_GRAYED); + EnableMenuItem(hMenuConn[i], IDM_RECONNECTMENU, MF_GRAYED); + EnableMenuItem(hMenuConn[i], IDM_STATUSMENU, MF_GRAYED); + } } else if (state == connecting || state == resuming || state == connected) {