private ServerStatusElement getIscBindServiceStatus() { ServerStatusElement e = new ServerStatusElement(); e.Name = "ISC BIND service status"; if (iscBindServiceExists()) { ServiceController sc = getIscBindServiceController(); if (sc.Status == ServiceControllerStatus.Running) { e.Value = "Started"; e.Condition = ServerStatusCondition.Normal; } else { e.Value = sc.Status.ToString(); e.Condition = ServerStatusCondition.Error; e.ActionText = "Start"; e.ActionCommand = "StartBindService"; } } else { e.Value = "Not installed"; e.Condition = ServerStatusCondition.Error; } return(e); }
private ServerStatusElement getIscBindSecurityStatus() { ServerStatusElement e = new ServerStatusElement(); e.Name = "ISC BIND security (" + ServerConfig.IscBindDirectory.FullName + ")"; DirectorySecurity security = ServerConfig.IscBindDirectory.GetAccessControl(); AuthorizationRuleCollection rules = security.GetAccessRules( true, false, typeof(SecurityIdentifier)); WindowsUserManager wuManager = new WindowsUserManager(ServerConfig.WindowsServerName); WindowsUser namedUser = wuManager.Find(iscBindUser); if (namedUser == null) { e.Value = "Windows user '" + iscBindUser + "' is missing"; e.Condition = ServerStatusCondition.Error; } else { var q = from r in rules.OfType <FileSystemAccessRule>() where r.IdentityReference == namedUser.Sid where r.AccessControlType == AccessControlType.Allow select r; if (q.Count() != 0) { if ((q.Single().FileSystemRights & FileSystemRights.Modify) == FileSystemRights.Modify) { e.Value = "User '" + iscBindUser + "' can modify"; e.Condition = ServerStatusCondition.Normal; } else { e.Value = "User '" + iscBindUser + "' cannot modify"; e.Condition = ServerStatusCondition.Error; } } else { e.Value = "User '" + iscBindUser + "' does not have any access"; e.Condition = ServerStatusCondition.Error; } if (e.Condition == ServerStatusCondition.Error) { // At this point, if the user exists but the security is wrong, it can be reset. e.ActionText = "Repair"; e.ActionCommand = "RepairBindSecurity"; } } return(e); }
private void serverDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = serverDataGridView.Rows[e.RowIndex]; DataGridViewCell cell = row.Cells[e.ColumnIndex]; ServerStatusElement element = (ServerStatusElement)row.DataBoundItem; if (cell.ColumnIndex == serverDataGridView.Columns[ActionColumn.Name].Index) { if (!string.IsNullOrEmpty(element.ActionCommand)) { RunOpenAsync(element); } } }
private void serverDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { DataGridViewRow row = serverDataGridView.Rows[e.RowIndex]; ServerStatusElement element = (ServerStatusElement)row.DataBoundItem; DataGridViewTextBoxCell valueCell = (DataGridViewTextBoxCell)row.Cells[ValueColumn.Name]; switch (element.Condition) { case ServerStatusCondition.Normal: valueCell.Style.ForeColor = Color.Green; break; case ServerStatusCondition.Error: valueCell.Style.ForeColor = Color.Red; break; } }
private ServerStatusElement getIscBindConfigStatus() { ServerStatusElement e = new ServerStatusElement(); e.Name = "ISC BIND configuration status"; string iscBindDirectory = ServerConfig.IscBindDirectory.FullName; string rndcConfPath = Path.Combine(iscBindDirectory, @"etc\rndc.conf"); string namedConfPath = Path.Combine(iscBindDirectory, @"etc\named.conf"); string namedConfGenPath = Path.Combine(iscBindDirectory, @"etc\named.generated.conf"); if (!File.Exists(rndcConfPath)) { e.Value = "File '" + rndcConfPath + "' missing"; e.Condition = ServerStatusCondition.Error; } else if (!File.Exists(namedConfPath)) { e.Value = "File '" + namedConfPath + "' missing"; e.Condition = ServerStatusCondition.Error; } else if (!File.Exists(namedConfGenPath)) { e.Value = "File '" + namedConfGenPath + "' missing"; e.Condition = ServerStatusCondition.Error; } else if (!fileContainsText(namedConfPath, "include \"named.generated.conf\"")) { e.Value = "Generated config include missing from 'named.conf'"; e.Condition = ServerStatusCondition.Error; } else { e.Value = "All files exist"; e.Condition = ServerStatusCondition.Normal; } if (e.Condition == ServerStatusCondition.Error) { e.ActionText = "Repair"; e.ActionCommand = "RepairBindConfig"; } return(e); }
void ServerStatusViewer_OpenAsync(object sender, DataActionEventArgs e) { ServerStatusElement element = e.GetData <ServerStatusElement>(); e.ReplaceData(CreateAdapter <ServerStatusAdapter>().RunActionCommand(element.ActionCommand)); }