public override IPermission Union(IPermission other) { FileIOPermission fiop = Cast(other); if (fiop == null) { return(Copy()); } if (IsUnrestricted() || fiop.IsUnrestricted()) { return(new FileIOPermission(PermissionState.Unrestricted)); } if (IsEmpty() && fiop.IsEmpty()) { return(null); } FileIOPermission result = (FileIOPermission)Copy(); result.AllFiles |= fiop.AllFiles; result.AllLocalFiles |= fiop.AllLocalFiles; string[] paths = fiop.GetPathList(FileIOPermissionAccess.Read); if (paths != null) { UnionKeys(result.readList, paths); } paths = fiop.GetPathList(FileIOPermissionAccess.Write); if (paths != null) { UnionKeys(result.writeList, paths); } paths = fiop.GetPathList(FileIOPermissionAccess.Append); if (paths != null) { UnionKeys(result.appendList, paths); } paths = fiop.GetPathList(FileIOPermissionAccess.PathDiscovery); if (paths != null) { UnionKeys(result.pathList, paths); } return(result); }
/// <summary>Creates a permission that is the union of the current permission and the specified permission.</summary> /// <returns>A new permission that represents the union of the current permission and the specified permission.</returns> /// <param name="other">A permission to combine with the current permission. It must be the same type as the current permission. </param> /// <exception cref="T:System.ArgumentException">The <paramref name="other" /> parameter is not null and is not of the same type as the current permission. </exception> public override IPermission Union(IPermission other) { FileIOPermission fileIOPermission = FileIOPermission.Cast(other); if (fileIOPermission == null) { return(this.Copy()); } if (this.IsUnrestricted() || fileIOPermission.IsUnrestricted()) { return(new FileIOPermission(PermissionState.Unrestricted)); } if (this.IsEmpty() && fileIOPermission.IsEmpty()) { return(null); } FileIOPermission fileIOPermission2 = (FileIOPermission)this.Copy(); fileIOPermission2.AllFiles |= fileIOPermission.AllFiles; fileIOPermission2.AllLocalFiles |= fileIOPermission.AllLocalFiles; string[] array = fileIOPermission.GetPathList(FileIOPermissionAccess.Read); if (array != null) { FileIOPermission.UnionKeys(fileIOPermission2.readList, array); } array = fileIOPermission.GetPathList(FileIOPermissionAccess.Write); if (array != null) { FileIOPermission.UnionKeys(fileIOPermission2.writeList, array); } array = fileIOPermission.GetPathList(FileIOPermissionAccess.Append); if (array != null) { FileIOPermission.UnionKeys(fileIOPermission2.appendList, array); } array = fileIOPermission.GetPathList(FileIOPermissionAccess.PathDiscovery); if (array != null) { FileIOPermission.UnionKeys(fileIOPermission2.pathList, array); } return(fileIOPermission2); }
public void ShortToLong () { // on windows this returns a "short" (8.3) path and filename string filename = Path.GetTempFileName (); p = new FileIOPermission(FileIOPermissionAccess.Read, filename); string[] files = p.GetPathList (FileIOPermissionAccess.Read); Assert.AreEqual (1, files.Length, "GetPathList.Count"); // FIXME: here GetTempFileName != GetPathList[0] for MS but == for Mono Assert.AreEqual (Path.GetFileName (filename), Path.GetFileName (files [0]), "Path.GetFileName(GetTempFileName)==Path.GetFileName(GetPathList[0])"); // note: this will fail on Linux as kernel32.dll isn't available Assert.AreEqual (FilePathUtil.GetLongPathName (filename), files [0], "GetLongPathName(GetTempFileName)==GetPathList[0]"); }
public void FromXML () { p = new FileIOPermission(PermissionState.None); SecurityElement esd = new SecurityElement("IPermission"); esd.AddAttribute("class", "FileIOPermission"); esd.AddAttribute("version", "1"); esd.AddAttribute("Unrestricted", "true"); p.FromXml(esd); Assert.IsTrue(p.IsUnrestricted(), "Should get an unrestricted permission"); esd = new SecurityElement("IPermission"); esd.AddAttribute("class", "FileIOPermission"); esd.AddAttribute("version", "1"); // FIXME: Adjust to run on Mac OS's if (Path.VolumeSeparatorChar == ':') { esd.AddAttribute("Read", "c:\\temp;d:\\temp2"); esd.AddAttribute("Write", "c:\\temp;d:\\temp2;z:\\temp3"); } else { esd.AddAttribute("Read", "/temp;/usr/temp2"); esd.AddAttribute("Write", "/temp;/usr/temp2;/usr/bin/temp3"); } p = new FileIOPermission(PermissionState.None); p.FromXml(esd); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read); Assert.IsTrue(pathsInPermission.Length == 2, "Path list should have 2 for Read"); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Write); Assert.IsTrue(pathsInPermission.Length == 3, "Path list should have 2 for Write"); }
public void AddPathListStringArray () { p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read); Assert.IsTrue (pathsInPermission.Length == 2, "Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length); foreach (string s in pathsInPermission){ Assert.IsTrue (Array.IndexOf(pathsInPermission, s) >=0, "Unexpected path in the Permission: " + s); } p.AddPathList(FileIOPermissionAccess.Append, pathArrayGood); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read); Assert.IsTrue (pathsInPermission.Length == 2, "Should still contain correct number Read paths. Expected 2 but got: "+pathsInPermission.Length); foreach (string s in pathsInPermission){ Assert.IsTrue (Array.IndexOf(pathsInPermission, s) >=0, "Unexpected path in the Permission: " + s); } pathsInPermission = p.GetPathList(FileIOPermissionAccess.Append); Assert.IsTrue (pathsInPermission.Length == 2, "Should contain correct number of Append paths. Expected 2 but got: "+pathsInPermission.Length); foreach (string s in pathsInPermission){ Assert.IsTrue (Array.IndexOf(pathsInPermission, s) >=0, "Unexpected path in the Permission: " + s); } }
public void ConstructorString () { string pathToAdd; // FIXME: Adjust to run on Mac OS's if (Path.VolumeSeparatorChar == ':') pathToAdd = "c:\\temp"; else pathToAdd = "/temp"; p = new FileIOPermission(FileIOPermissionAccess.Read, pathToAdd); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read); Assert.IsTrue (pathsInPermission.Length == 1, "Does not contain correct number of paths. Expected 1 but got: "+pathsInPermission.Length); Assert.IsTrue(pathsInPermission[0] == pathToAdd, "Does not contain expected path from constructor: "+pathToAdd); }
public void ConstructorStringArray () { p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood); pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read); Assert("Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2); foreach (string s in pathsInPermission){ Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0); } }