private void FixAdministrator() { using (SC.Utility.Lock l = new SC.Utility.Lock(secLock, SC.Utility.Lock.LockType.ForReading)) { if (users.Count == 0) { Logger.Warn("No users found, adding Administrator account with default password"); l.UpgradeToWriterLock(); UserInfo adminInfo = new UserInfo("Administrator", "ServerChecker4"); users.Add(adminInfo.Username, adminInfo); l.DowngradeToReaderLock(); } SecuritySubject me = acls[securityGuid]; System.Collections.Specialized.StringCollection permissions = new System.Collections.Specialized.StringCollection(); permissions.AddRange(me.GetPermissions()); if (permissions.Count == 0) { Logger.Warn("No permissions found for SecurityManager. Adding permission for Administrator account"); l.UpgradeToWriterLock(); me.AddPermission("Administrator"); l.DowngradeToReaderLock(); } } }
public void UnregisterSubject(Guid guid, bool remove) { using (SC.Utility.Lock l = new SC.Utility.Lock(secLock, SC.Utility.Lock.LockType.ForReading)) { try { SecuritySubject subject = acls[guid]; acls.Remove(guid); if (remove) { l.UpgradeToWriterLock(); subjects.Remove(subject.Name); l.DowngradeToReaderLock(); } } catch (KeyNotFoundException) { Logger.Error("Tried unregistering subject that never registered."); throw; } catch (Exception e) { Logger.Error("An unexpected error occurred during unregistering of a subject.", e); throw; } } SaveSettings(); }
private void AddAllowedClientNetwork(Network network) { using (SC.Utility.Lock l = new SC.Utility.Lock(secLock, SC.Utility.Lock.LockType.ForReading)) { foreach (SC.Security.Network net in clients) { if (net.IsHostInNet(network.Address) || network.IsHostInNet(net.Address)) { Logger.Error("Network add failed because network " + network.ToString() + " is contained in " + net.ToString()); throw new ArgumentException("Cannot add network because it contains or is contained in another network: " + net.ToString()); } } l.UpgradeToWriterLock(); Logger.Info("Adding network " + network.ToString() + " to the access list."); clients.Add(network); } }