private static void WriteSid(XmlTextWriter writer, string sid, uint attributes, AirSyncUserSecurityContext.SidType sidType) { writer.WriteStartElement("s"); if (attributes != 0U) { writer.WriteAttributeString("a", attributes.ToString(CultureInfo.InvariantCulture)); } if (sidType != AirSyncUserSecurityContext.SidType.User) { string localName = "t"; int num = (int)sidType; writer.WriteAttributeString(localName, num.ToString(CultureInfo.InvariantCulture)); } writer.WriteString(sid); writer.WriteEndElement(); }
internal static AirSyncUserSecurityContext Deserialize(XmlTextReader reader) { AirSyncUserSecurityContext airSyncUserSecurityContext = new AirSyncUserSecurityContext(); airSyncUserSecurityContext.UserSid = null; airSyncUserSecurityContext.GroupSids = null; airSyncUserSecurityContext.RestrictedGroupSids = null; try { List <SidStringAndAttributes> list = new List <SidStringAndAttributes>(); List <SidStringAndAttributes> list2 = new List <SidStringAndAttributes>(); if (!reader.Read() || XmlNodeType.Element != reader.NodeType || StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "r") != 0) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:RootNodeMissing"); } if (reader.MoveToFirstAttribute()) { do { if (StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "at") == 0) { if (airSyncUserSecurityContext.authenticationType != null) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:AuthTypeTwice"); } airSyncUserSecurityContext.authenticationType = reader.Value; } else if (StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "ln") == 0) { if (airSyncUserSecurityContext.logonName != null) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:UserNameTwice"); } airSyncUserSecurityContext.logonName = reader.Value; } else { string protocolErrorString = "ProxyRequestError:UnknownElement(" + reader.Name + ")"; AirSyncUserSecurityContext.ThrowParserException(protocolErrorString); } }while (reader.MoveToNextAttribute()); } if (airSyncUserSecurityContext.authenticationType == null || airSyncUserSecurityContext.logonName == null) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:AuthTypeLogonNameMissing"); } bool flag = false; int num = 0; while (reader.Read()) { if (XmlNodeType.EndElement == reader.NodeType && StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "r") == 0) { flag = true; break; } if (XmlNodeType.Element != reader.NodeType || StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "s") != 0) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:NoSID"); } AirSyncUserSecurityContext.SidType sidType = AirSyncUserSecurityContext.SidType.User; uint num2 = 0U; if (reader.MoveToFirstAttribute()) { do { if (StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "t") == 0) { int num3 = int.Parse(reader.Value, CultureInfo.InvariantCulture); if (num3 == 1) { sidType = AirSyncUserSecurityContext.SidType.Group; } else if (num3 == 2) { sidType = AirSyncUserSecurityContext.SidType.RestrictedGroup; } else { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:InvalidSIDType"); } } else if (StringComparer.OrdinalIgnoreCase.Compare(reader.Name, "a") == 0) { num2 = uint.Parse(reader.Value, CultureInfo.InvariantCulture); } else { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:InvalidSIDAttribute"); } }while (reader.MoveToNextAttribute()); } if (sidType == AirSyncUserSecurityContext.SidType.User) { if (num2 != 0U) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:AttributesOnUserSID"); } else if (airSyncUserSecurityContext.UserSid != null) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:MultipleUserSIDs"); } } if (!reader.Read() || XmlNodeType.Text != reader.NodeType || string.IsNullOrEmpty(reader.Value)) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:BadProxyHeader"); } string value = reader.Value; if (sidType == AirSyncUserSecurityContext.SidType.User) { airSyncUserSecurityContext.UserSid = value; } else if (sidType == AirSyncUserSecurityContext.SidType.Group) { SidStringAndAttributes item = new SidStringAndAttributes(value, num2); list.Add(item); } else if (sidType == AirSyncUserSecurityContext.SidType.RestrictedGroup) { SidStringAndAttributes item2 = new SidStringAndAttributes(value, num2); list2.Add(item2); } if (!reader.Read() || XmlNodeType.EndElement != reader.NodeType) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:BadProxyHeader2"); } num++; if (num > 3000) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:TooManySIDs"); } } if (airSyncUserSecurityContext.UserSid == null) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:NoUserSID"); } if (!flag) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:BadParsing"); } if (list.Count > 0) { airSyncUserSecurityContext.GroupSids = list.ToArray(); } if (list2.Count > 0) { airSyncUserSecurityContext.RestrictedGroupSids = list2.ToArray(); } } catch (XmlException) { AirSyncUserSecurityContext.ThrowParserException("ProxyRequestError:XMLParsingException"); } return(airSyncUserSecurityContext); }