From 547d5da804e06182b09d5139fb0122110a257609 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 11 Jul 2016 18:54:05 -0700 Subject: [PATCH 1/8] Made check blocking execution policy, only blocking (always returning true) on linux --- src/System.Management.Automation/engine/SecurityManagerBase.cs | 2 ++ src/System.Management.Automation/security/SecuritySupport.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/System.Management.Automation/engine/SecurityManagerBase.cs b/src/System.Management.Automation/engine/SecurityManagerBase.cs index a9120d27d2..3c7cee9c84 100644 --- a/src/System.Management.Automation/engine/SecurityManagerBase.cs +++ b/src/System.Management.Automation/engine/SecurityManagerBase.cs @@ -90,10 +90,12 @@ namespace System.Management.Automation // TODO:PSL this is a workaround since the exception below // hides the internal issue of what's going on in terms of // execution policy. +#if LINUX if (Platform.IsCore) { return; } +#endif #if DEBUG diff --git a/src/System.Management.Automation/security/SecuritySupport.cs b/src/System.Management.Automation/security/SecuritySupport.cs index 755b1df4cb..857b7a1119 100644 --- a/src/System.Management.Automation/security/SecuritySupport.cs +++ b/src/System.Management.Automation/security/SecuritySupport.cs @@ -433,11 +433,12 @@ namespace System.Management.Automation // There is no signature support on non-Windows platforms (yet), when // execution reaches here, we are sure the file is under product folder +#if LINUX if (Platform.IsCore) { return true; } - +#endif // Check the file signature Signature fileSignature = SignatureHelper.GetSignature(file, null); if ((fileSignature != null) && (fileSignature.IsOSBinary)) From 5669e14dffe04ce8c9b1d5a7f2a35cb13f55d305 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 11 Jul 2016 18:54:34 -0700 Subject: [PATCH 2/8] Ported Execution policy tests Made a fix to store data on testdrive instead of system drive Made a note of where the tests where ported from Skipped entire test file on non-windows machines --- .../engine/ExecutionPolicy.Tests.ps1 | 872 ++++++++++++++++++ 1 file changed, 872 insertions(+) create mode 100644 test/powershell/engine/ExecutionPolicy.Tests.ps1 diff --git a/test/powershell/engine/ExecutionPolicy.Tests.ps1 b/test/powershell/engine/ExecutionPolicy.Tests.ps1 new file mode 100644 index 0000000000..2669695639 --- /dev/null +++ b/test/powershell/engine/ExecutionPolicy.Tests.ps1 @@ -0,0 +1,872 @@ +# Ported from MultiMachine Tests +# Tests\Engine\HelpSystem\Pester.Engine.HelpSystem.BugFix.Tests.ps1 +# Tests\Commands\Cmdlets\Microsoft.PowerShell.Security\Pester.Command.Cmdlets.Security.Tests.ps1 + +# Execution policy currently does not work outside of windows +if(-not $IsWindows) +{ + return +} + +Describe "Help work with ExecutionPolicy Restricted " { + + # Validate that 'Get-Help Get-Disk' returns one result when the execution policy is 'Restricted' on Nano + # From an internal bug - [Regression] Get-Help returns multiple matches when there is an exact match + + # Skip the test if Storage module is not available, return a pesudo result + # ExecutionPoliy only works on windows + It "Test for Get-Help Get-Disk" -skip:(!(Test-Path (Join-Path -Path $PSHOME -ChildPath Modules\Storage\Storage.psd1)) -or -not $IsWindows) { + + try + { + $currentExecutionPolicy = Get-ExecutionPolicy + Get-Module -Name Storage | Remove-Module -Force -ErrorAction Stop + + # 'Get-Help Get-Disk' should return one result back + Set-ExecutionPolicy -ExecutionPolicy Restricted -Force -ErrorAction Stop + (Get-Help -Name Get-Disk -ErrorAction Stop).Name | Should Be 'Get-Disk' + } + catch { + $_.ToString | should be null + } + finally + { + Set-ExecutionPolicy $currentExecutionPolicy -Force + } + } +} + +Describe "Validate ExecutionPolicy cmdlets in PowerShell" -Tags "Innerloop", "BVT" { + + BeforeAll { + + + #Generate test data + $drive = 'TestDrive:\' + $testDirectory = Join-Path $drive ("MultiMachineTestData\Commands\Cmdlets\Security_TestData\ExecutionPolicyTestData") + if(Test-Path $testDirectory) + { + Remove-Item -Force -Recurse $testDirectory -ea SilentlyContinue + } + $null = New-Item $testDirectory -ItemType Directory -Force + $remoteTestDirectory = $testDirectory + + $InternetSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath InternetSignatureCorruptedScript.ps1 + $InternetSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath InternetSignedScript.ps1 + $InternetUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath InternetUnsignedScript.ps1 + $IntranetSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath IntranetSignatureCorruptedScript.ps1 + $IntranetSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath IntranetSignedScript.ps1 + $IntranetUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath IntranetUnsignedScript.ps1 + $LocalSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath LocalSignatureCorruptedScript.ps1 + $LocalSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath LocalSignedScript.ps1 + $LocalUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath LocalUnsignedScript.ps1 + $TrustedSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath TrustedSignatureCorruptedScript.ps1 + $TrustedSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath TrustedSignedScript.ps1 + $TrustedUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath TrustedUnsignedScript.ps1 + $UntrustedSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath UntrustedSignatureCorruptedScript.ps1 + $UntrustedSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath UntrustedSignedScript.ps1 + $UntrustedUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath UntrustedUnsignedScript.ps1 + $MyComputerSignatureCorruptedScript = Join-Path -Path $remoteTestDirectory -ChildPath MyComputerSignatureCorruptedScript.ps1 + $MyComputerSignedScript = Join-Path -Path $remoteTestDirectory -ChildPath MyComputerSignedScript.ps1 + $MyComputerUnsignedScript = Join-Path -Path $remoteTestDirectory -ChildPath MyComputerUnsignedScript.ps1 + + $fileType = @{ + "Local" = -1 + "MyComputer" = 0 + "Intranet" = 1 + "Trusted" = 2 + "Internet" = 3 + "Untrusted" = 4 + } + + $testFilesInfo = @( + @{ + FilePath = $InternetSignatureCorruptedScript + FileType = $fileType.Internet + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $InternetSignedScript + FileType = $fileType.Internet + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $InternetUnsignedScript + FileType = $fileType.Internet + AddSignature = $false + Corrupted = $false + } + @{ + FilePath = $IntranetSignatureCorruptedScript + FileType = $fileType.Intranet + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $IntranetSignedScript + FileType = $fileType.Intranet + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $IntranetUnsignedScript + FileType = $fileType.Intranet + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $LocalSignatureCorruptedScript + FileType = $fileType.Local + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $LocalSignedScript + FileType = $fileType.Local + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $LocalUnsignedScript + FileType = $fileType.Local + AddSignature = $false + Corrupted = $false + } + @{ + FilePath = $TrustedSignatureCorruptedScript + FileType = $fileType.Trusted + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $TrustedSignedScript + FileType = $fileType.Trusted + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $TrustedUnsignedScript + FileType = $fileType.Trusted + AddSignature = $false + Corrupted = $false + } + @{ + FilePath = $UntrustedSignatureCorruptedScript + FileType = $fileType.Untrusted + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $UntrustedSignedScript + FileType = $fileType.Untrusted + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $UntrustedUnsignedScript + FileType = $fileType.Untrusted + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $MyComputerSignatureCorruptedScript + FileType = $fileType.MyComputer + AddSignature = $true + Corrupted = $true + } + @{ + FilePath = $MyComputerSignedScript + FileType = $fileType.MyComputer + AddSignature = $true + Corrupted = $false + } + @{ + FilePath = $MyComputerUnsignedScript + FileType = $fileType.MyComputer + AddSignature = $false + Corrupted = $false + } + ) + + #Generate Test Data on remote machine and get the execution policy + + function createTestFile + { + param ( + [string] + $FilePath, + + [int] + $FileType, + + [switch] + $AddSignature, + + [switch] + $Corrupted + ) + + $null = New-Item -Path $filePath -ItemType File + + $content = "`"Hello`"" + "`r`n" + if($AddSignature) + { + if($Corrupted) + { + # Add corrupted signature + $content += @" +# SIG # Begin signature block +# MIIPTAYJKoZIhvcNAQcCoIIPPTCCDzkCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUYkdwUPVVR4frPbdbTE8ZPwfD +# +XegggyDMIIGFTCCA/2gAwIBAgITMwAAABrJQBS8Ii1KJQAAAAAAGjANBgkqhkiG +# 9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO +# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE6 +# MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo +# b3JpdHkgMjAxMDAeFw0xNDAyMDQxODAyMjVaFw0xODAyMDQxODAyMjVaMIGBMRMw +# EQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MRQw +# EgYKCZImiZPyLGQBGRYEY29ycDEXMBUGCgmSJomT8ixkARkWB3JlZG1vbmQxIDAe +# BgNVBAMTF01TSVQgVGVzdCBDb2RlU2lnbiBDQSAzMIIBIjANBgkqhkiG9w0BAQEF +# AAOCAQ8AMIIBCgKCAQEAuV1NahtVcKSQ6osSVsCcXSsk5finBZfPTbq39nQiX9L0 +# PY+5Zi73qGhDv3m+exmvWoYTgI2AQZ48lQtohf4QV0THWjsvvP/r12WZSlOfUGi5 +# 5639OAmXiAPpFwPffubajzyIcYBDthJonBlhRsGCWoSaZRBZnp/39tDDvHvQqb+i +# w94CDTFfjcQ/K6xtSCNH1IaKQd6TP2mVdtbYBHIfuLWWO/quLuVgKKxz9sHjONVx +# 9nEcWwatIPiz5J9TsR/bbDxzF5AH9U8jm++ZNECu2zYPhqNj9t3HKYOrUNIEi/b9 +# xYlQfMw85hPkMBTJWieyufXHkhzouvTzI3E+VhJ8EwIDAQABo4IBczCCAW8wEgYJ +# KwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUxeHTk4FfDvbJdORSZob2 +# 57rUxG4wHQYDVR0OBBYEFLU0zfVssWSEb3tmjxXucfADs2jrMBkGCSsGAQQBgjcU +# AgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEA +# MB8GA1UdIwQYMBaAFKMBBH4wiDPruTGcyuuFdmf8ZbTRMFkGA1UdHwRSMFAwTqBM +# oEqGSGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p +# Y1Rlc1Jvb0NlckF1dF8yMDEwLTA2LTE3LmNybDBdBggrBgEFBQcBAQRRME8wTQYI +# KwYBBQUHMAKGQWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWlj +# VGVzUm9vQ2VyQXV0XzIwMTAtMDYtMTcuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBt +# 9EVv44wAgXhIItfRrX2LjyEyig6DkExisf3j/RNwa3BLNK5PlfNjU/0H58V1k/Dy +# S3CIzLhvn+PBCrpjWr5R1blkJbKQUdP/ZNz28QOXd0l+Ha3P6Mne1NNfXDAjkRHK +# SqzndTxJT7s/03jYcCfh3JyiXzT8Dt5GXlWIr1wJfQljhzon3w9sptb5sIJTjB9Z +# 0VWITkvAc2hVjFkpPPWkODXIYXYIRBxKjakXr7fEx3//ECQYcQrKBvUrLirEsI0g +# mxQ2QO30iQMxug5l4VYSuHhjaN6t86OjyUySGeImiLLKpVZt1uXIggpepSS9b6Pt +# cxqD0+L532oYNJMlT/Y04PGtyfKIVFMGYTmlHoHUU78BNrpGj6C/s+qyzwXpKDHI +# eQ2RozXUzt4SS8W1E3YVxWU2AWnP0BdS7PSB9BvVCkIf1bfuM6s88iSGFh0qaZyG +# sGDlU8s7YkS2i32+nTr5NJAH/v7yd6E7DQYZULBKdKfQDXuY+6s8kjg2OduGchge +# aZZh2NLh2V5OgVrXx7CzM0K6TMZNJRhgaHE7dzT3EC2uZ6ZT/SIwxwfKXYDjsPxx +# R4C9qkdnSDVCPncGAHhyR75i3fGJ28FHhd7mtePU+zbPJ/JGyADOdPDWgJFulg97 +# 809qAfXmu6I7+ObsqlCMl8hbpctmWSqqpd8wZ36ntTCCBmYwggVOoAMCAQICE0MD +# Bi6W0bK7qmSfpQAAAQMGLpYwDQYJKoZIhvcNAQELBQAwgYExEzARBgoJkiaJk/Is +# ZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxFDASBgoJkiaJk/Is +# ZAEZFgRjb3JwMRcwFQYKCZImiZPyLGQBGRYHcmVkbW9uZDEgMB4GA1UEAxMXTVNJ +# VCBUZXN0IENvZGVTaWduIENBIDMwHhcNMTQxMjIyMTk0MzQ3WhcNMTYxMjIxMTk0 +# MzQ3WjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwG +# A1UEAxMlTWljcm9zb2Z0IENvcnBvcmF0aW9uIDNyZCBwYXJ0eSBXUCBXUzCCASIw +# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL4ofcc4uy3h6Ai2Bh8guql21/+u +# LMLhEeHbz5STKqMoxXqy8i3uRcK/oo57INq3H+cQ4yqvuUrPwi3wQE9OG7wO4ymc +# 4M/3WTNVfjdOx0FK2y6UuKZpWQlwycuELbONrvXTzdtGuM0aiGbELRJFOq+742I+ +# G3x3otZrTSXC1m6aOoKb50rSqUJ0ENb1PMJV9GBTXnRDde7ub7W3jp9Dj0HxFnof +# QRZSWfCDrO1l1hle7zPBuTnLfCXbma0oRHlTz3m3yEGlUQscxYu6BI+aJkKDKa5R +# L2PCPnau3WuUMFsmQZk6pFrACxIvq+OZTLsorTsZUooCL/5V1ofaHahnJ68CAwEA +# AaOCAtAwggLMMD0GCSsGAQQBgjcVBwQwMC4GJisGAQQBgjcVCIPPiU2t8gKFoZ8M +# gvrKfYHh+3SBT4PGhWmH7vANAgFkAgErMAsGA1UdDwQEAwIHgDA4BgkrBgEEAYI3 +# FQoEKzApMA0GCysGAQQBgjdMBYIsMAwGCisGAQQBgjdMAwEwCgYIKwYBBQUHAwMw +# LAYDVR0lBCUwIwYLKwYBBAGCN0wFgiwGCisGAQQBgjdMAwEGCCsGAQUFBwMDMB0G +# A1UdDgQWBBT+6HzYZdp8xPv1xylrDwOMuYQkvDAwBgNVHREEKTAnoCUGCisGAQQB +# gjcUAgOgFwwVZG9uZ2Jvd0BtaWNyb3NvZnQuY29tMB8GA1UdIwQYMBaAFLU0zfVs +# sWSEb3tmjxXucfADs2jrMIHxBgNVHR8EgekwgeYwgeOggeCggd2GOWh0dHA6Ly9j +# b3JwcGtpL2NybC9NU0lUJTIwVGVzdCUyMENvZGVTaWduJTIwQ0ElMjAzKDEpLmNy +# bIZQaHR0cDovL21zY3JsLm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9jcmwvTVNJ +# VCUyMFRlc3QlMjBDb2RlU2lnbiUyMENBJTIwMygxKS5jcmyGTmh0dHA6Ly9jcmwu +# bWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9NU0lUJTIwVGVzdCUyMENvZGVT +# aWduJTIwQ0ElMjAzKDEpLmNybDCBrwYIKwYBBQUHAQEEgaIwgZ8wRQYIKwYBBQUH +# MAKGOWh0dHA6Ly9jb3JwcGtpL2FpYS9NU0lUJTIwVGVzdCUyMENvZGVTaWduJTIw +# Q0ElMjAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL3d3dy5taWNyb3NvZnQu +# Y29tL3BraS9tc2NvcnAvTVNJVCUyMFRlc3QlMjBDb2RlU2lnbiUyMENBJTIwMygx +# KS5jcnQwDQYJKoZIhvcNAQELBQADggEBAFRprvk5BxGyn5On1ICDyKRw9rLqyMET +# IDuBmX/enKuLRmETJSF7Dvzo/XbSXm+FTbGwnp5TOIPtCAeT0NuUAAjdo2iRT2Xr +# wc/B4x2dWMJmFG86WmPPWByfw1gFSep1xN6vA9qPb2VAXTmz8Ta75vSmCEfRAqOC +# 7U4uv3RBWImDx+7tI71XLKBmn1s1TTs1rL+43MsNMA7YNeM8/G0k2KbcNeLONNMG +# wJwtlu9CutONhULkhi2C3T7huDtNZgg+LnTbNvZeXMhHtfx8obh1fmgfOrdLUgE9 +# 1YtW0F6mZ7OsdWPGV1wPOdRuNxgzGWvOIYCUTeeTU7b+Cifz/mTf/9QxggIzMIIC +# LwIBATCBmTCBgTETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkW +# CW1pY3Jvc29mdDEUMBIGCgmSJomT8ixkARkWBGNvcnAxFzAVBgoJkiaJk/IsZAEZ +# FgdyZWRtb25kMSAwHgYDVQQDExdNU0lUIFRlc3QgQ29kZVNpZ24gQ0EgMwITQwMG +# LpbRsruqZJ+lAAABAwYuljAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAw +# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG +# AQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFDFRa0VJKJQ1h2LG6dYzXKpBneOfMA0G +# CSqGSIb3DQEBAQUABIIBAHbWmEOWfj37SNw8NDnAAg7bl0L3oyGVKPWysRnriHC9 +# aYImucAy2QXKo6YUWxHMqFvRPFrF07qkTDV249iC+L8gb1X0wwq/YuWWFbdN2J8s +# 4CnN6I4Ff2AF4Co34MZGhtIHd3D7H1oPMelTlHQOc5CXyB/wkduoNgS0GCoeZXSK +# DdMuN7dbru3PvCxe0ShzRwxBOa4EWZ6dHDAQRdrxkK2vVLWHg+6th8lRNnCJQeb+ +# 03tMRItnm/sAmKR9PCWm4YZob3ug9T9Qa1K00TuNskjXO+G2S2mjhFC5+HGKjLZd +# bJydl0MIIMBtlLEGa4CcFtszxaww5Cx+YtCbxPp3iII= +# SIG # End signature block +"@ + } + else + { + # Add correct signature + $content += @" +# SIG # Begin signature block +# MIIPTAYJKoZIhvcNAQcCoIIPPTCCDzkCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUYkdwUPVVR4frPbdbTE8ZPwfD +# +XegggyDMIIGFTCCA/2gAwIBAgITMwAAABrJQBS8Ii1KJQAAAAAAGjANBgkqhkiG +# 9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO +# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE6 +# MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo +# b3JpdHkgMjAxMDAeFw0xNDAyMDQxODAyMjVaFw0xODAyMDQxODAyMjVaMIGBMRMw +# EQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MRQw +# EgYKCZImiZPyLGQBGRYEY29ycDEXMBUGCgmSJomT8ixkARkWB3JlZG1vbmQxIDAe +# BgNVBAMTF01TSVQgVGVzdCBDb2RlU2lnbiBDQSAzMIIBIjANBgkqhkiG9w0BAQEF +# AAOCAQ8AMIIBCgKCAQEAuV1NahtVcKSQ6osSVsCcXSsk5finBZfPTbq39nQiX9L0 +# PY+5Zi73qGhDv3m+exmvWoYTgI2AQZ48lQtohf4QV0THWjsvvP/r12WZSlOfUGi5 +# 5639OAmXiAPpFwPffubajzyIcYBDthJonBlhRsGCWoSaZRBZnp/39tDDvHvQqb+i +# w94CDTFfjcQ/K6xtSCNH1IaKQd6TP2mVdtbYBHIfuLWWO/quLuVgKKxz9sHjONVx +# 9nEcWwatIPiz5J9TsR/bbDxzF5AH9U8jm++ZNECu2zYPhqNj9t3HKYOrUNIEi/b9 +# xYlQfMw85hPkMBTJWieyufXHkhzouvTzI3E+VhJ8EwIDAQABo4IBczCCAW8wEgYJ +# KwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUxeHTk4FfDvbJdORSZob2 +# 57rUxG4wHQYDVR0OBBYEFLU0zfVssWSEb3tmjxXucfADs2jrMBkGCSsGAQQBgjcU +# AgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEA +# MB8GA1UdIwQYMBaAFKMBBH4wiDPruTGcyuuFdmf8ZbTRMFkGA1UdHwRSMFAwTqBM +# oEqGSGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p +# Y1Rlc1Jvb0NlckF1dF8yMDEwLTA2LTE3LmNybDBdBggrBgEFBQcBAQRRME8wTQYI +# KwYBBQUHMAKGQWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWlj +# VGVzUm9vQ2VyQXV0XzIwMTAtMDYtMTcuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBt +# 9EVv44wAgXhIItfRrX2LjyEyig6DkExisf3j/RNwa3BLNK5PlfNjU/0H58V1k/Dy +# S3CIzLhvn+PBCrpjWr5R1blkJbKQUdP/ZNz28QOXd0l+Ha3P6Mne1NNfXDAjkRHK +# SqzndTxJT7s/03jYcCfh3JyiXzT8Dt5GXlWIr1wJfQljhzon3w9sptb5sIJTjB9Z +# 0VWITkvAc2hVjFkpPPWkODXIYXYIRBxKjakXr7fEx3//ECQYcQrKBvUrLirEsI0g +# mxQ2QO30iQMxug5l4VYSuHhjaN6t86OjyUySGeImiLLKpVZt1uXIggpepSS9b6Pt +# cxqD0+L532oYNJMlT/Y04PGtyfKIVFMGYTmlHoHUU78BNrpGj6C/s+qyzwXpKDHI +# eQ2RozXUzt4SS8W1E3YVxWU2AWnP0BdS7PSB9BvVCkIf1bfuM6s88iSGFh0qaZyG +# sGDlU8s7YkS2i32+nTr5NJAH/v7yd6E7DQYZULBKdKfQDXuY+6s8kjg2OduGchge +# aZZh2NLh2V5OgVrXx7CzM0K6TMZNJRhgaHE7dzT3EC2uZ6ZT/SIwxwfKXYDjsPxx +# R4C9qkdnSDVCPncGAHhyR75i3fGJ28FHhd7mtePU+zbPJ/JGyADOdPDWgJFulg97 +# 809qAfXmu6I7+ObsqlCMl8hbpctmWSqqpd8wZ36ntTCCBmYwggVOoAMCAQICE0MD +# Bi6W0bK7qmSfpQAAAQMGLpYwDQYJKoZIhvcNAQELBQAwgYExEzARBgoJkiaJk/Is +# ZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxFDASBgoJkiaJk/Is +# ZAEZFgRjb3JwMRcwFQYKCZImiZPyLGQBGRYHcmVkbW9uZDEgMB4GA1UEAxMXTVNJ +# VCBUZXN0IENvZGVTaWduIENBIDMwHhcNMTQxMjIyMTk0MzQ3WhcNMTYxMjIxMTk0 +# MzQ3WjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwG +# A1UEAxMlTWljcm9zb2Z0IENvcnBvcmF0aW9uIDNyZCBwYXJ0eSBXUCBXUzCCASIw +# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL4ofcc4uy3h6Ai2Bh8guql21/+u +# LMLhEeHbz5STKqMoxXqy8i3uRcK/oo57INq3H+cQ4yqvuUrPwi3wQE9OG7wO4ymc +# 4M/3WTNVfjdOx0FK2y6UuKZpWQlwycuELbONrvXTzdtGuM0aiGbELRJFOq+742I+ +# G3x3otZrTSXC1m6aOoKb50rSqUJ0ENb1PMJV9GBTXnRDde7ub7W3jp9Dj0HxFnof +# QRZSWfCDrO1l1hle7zPBuTnLfCXbma0oRHlTz3m3yEGlUQscxYu6BI+aJkKDKa5R +# L2PCPnau3WuUMFsmQZk6pFrACxIvq+OZTLsorTsZUooCL/5V1ofaHahnJ68CAwEA +# AaOCAtAwggLMMD0GCSsGAQQBgjcVBwQwMC4GJisGAQQBgjcVCIPPiU2t8gKFoZ8M +# gvrKfYHh+3SBT4PGhWmH7vANAgFkAgErMAsGA1UdDwQEAwIHgDA4BgkrBgEEAYI3 +# FQoEKzApMA0GCysGAQQBgjdMBYIsMAwGCisGAQQBgjdMAwEwCgYIKwYBBQUHAwMw +# LAYDVR0lBCUwIwYLKwYBBAGCN0wFgiwGCisGAQQBgjdMAwEGCCsGAQUFBwMDMB0G +# A1UdDgQWBBT+6HzYZdp8xPv1xylrDwOMuYQkvDAwBgNVHREEKTAnoCUGCisGAQQB +# gjcUAgOgFwwVZG9uZ2Jvd0BtaWNyb3NvZnQuY29tMB8GA1UdIwQYMBaAFLU0zfVs +# sWSEb3tmjxXucfADs2jrMIHxBgNVHR8EgekwgeYwgeOggeCggd2GOWh0dHA6Ly9j +# b3JwcGtpL2NybC9NU0lUJTIwVGVzdCUyMENvZGVTaWduJTIwQ0ElMjAzKDEpLmNy +# bIZQaHR0cDovL21zY3JsLm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9jcmwvTVNJ +# VCUyMFRlc3QlMjBDb2RlU2lnbiUyMENBJTIwMygxKS5jcmyGTmh0dHA6Ly9jcmwu +# bWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9NU0lUJTIwVGVzdCUyMENvZGVT +# aWduJTIwQ0ElMjAzKDEpLmNybDCBrwYIKwYBBQUHAQEEgaIwgZ8wRQYIKwYBBQUH +# MAKGOWh0dHA6Ly9jb3JwcGtpL2FpYS9NU0lUJTIwVGVzdCUyMENvZGVTaWduJTIw +# Q0ElMjAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL3d3dy5taWNyb3NvZnQu +# Y29tL3BraS9tc2NvcnAvTVNJVCUyMFRlc3QlMjBDb2RlU2lnbiUyMENBJTIwMygx +# KS5jcnQwDQYJKoZIhvcNAQELBQADggEBAFRprvk5BxGyn5On1ICDyKRw9rLqyMET +# IDuBmX/enKuLRmETJSF7Dvzo/XbSXm+FTbGwnp5TOIPtCAeT0NuUAAjdo2iRT2Xr +# wc/B4x2dWMJmFG86WmPPWByfw1gFSep1xN6vA9qPb2VAXTmz8Ta75vSmCEfRAqOC +# 7U4uv3RBWImDx+7tI71XLKBmn1s1TTs1rL+43MsNMA7YNeM8/G0k2KbcNeLONNMG +# wJwtlu9CutONhULkhi2C3T7huDtNZgg+LnTbNvZeXMhHtfx8obh1fmgfOrdLUgE9 +# 1YtW0F6mZ7OsdWPGV1wPOdRuNxgzGWvOIYCUTeeTU7b+Cifz/mTf/9QxggIzMIIC +# LwIBATCBmTCBgTETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkW +# CW1pY3Jvc29mdDEUMBIGCgmSJomT8ixkARkWBGNvcnAxFzAVBgoJkiaJk/IsZAEZ +# FgdyZWRtb25kMSAwHgYDVQQDExdNU0lUIFRlc3QgQ29kZVNpZ24gQ0EgMwITQwMG +# LpbRsruqZJ+lAAABAwYuljAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAw +# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG +# AQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFDFRa0VJKJQ1h2LG6dYzXKpBneOfMA0G +# CSqGSIb3DQEBAQUABIIBAHbWmEOWfj37SNw8NDnAAg7bl0L3oyGVKPWysRnriHC9 +# aYImucAy2QXKo6YUWxHMqFvRPFrF07qkTDV249iC+L8gb1X0wwq/YuWWFbdN2J8s +# 4CnN6I4Ff2AF4Co34MZGhtIHd3D7H1oPMelTlHQOc5CXyB/wkduoNgS0GCoeZXSK +# DdMuN7dbru3PvCxe0ShzRwxBOa4EWZ6dHDAQRdrxkK2vVLWHg+6th8lRNnCJQeb+ +# 03tMRItnm/sAmKR9PCWm4YZob3ug9T9Qa1K00TuNskjXO+G2S2mjhFC5+HGKjLZd +# bJydl0MIIMBtlLEGa4CcFtszxaww5Cx+YtCbxPp3iII= +# SIG # End signature block +"@ + } + } + + set-content $filePath -Value $content + + ## Valida File types and their corresponding int values are : + ## + ## Local = -1 + ## MyComputer = 0 + ## Intranet = 1 + ## Trusted = 2 + ## Internet = 3 + ## Untrusted = 4 + ## We need to add alternate streams in all files except for the local file + + if(-1 -ne $FileType) + { + $alternateStreamContent = @" +[ZoneTransfer] +ZoneId=$FileType +"@ + Add-Content -Path $filePath -Value $alternateStreamContent -stream Zone.Identifier + } + } + + foreach($fileInfo in $testFilesInfo) + { + createTestFile -FilePath $fileInfo.filePath -FileType $fileInfo.fileType -AddSignature:$fileInfo.AddSignature -Corrupted:$fileInfo.corrupted + } + + #Get Execution Policy + $originalExecPolicy = Get-ExecutionPolicy + $originalExecutionPolicy = $originalExecPolicy + } + AfterAll { + #Clean up + + $testDirectory = $remoteTestDirectory + + Remove-Item $testDirectory -Recurse -Force -ea SilentlyContinue + Remove-Item function:createTestFile -ea SilentlyContinue + } + Context "Validate that 'Restricted' execution policy works on OneCore powershell" { + + BeforeAll { + Set-ExecutionPolicy Restricted -Force | Out-Null + } + + AfterAll { + Set-ExecutionPolicy $originalExecutionPolicy -Force | Out-Null + } + + function Test-RestrictedExecutionPolicy + { + param ($testScript) + + $TestTypePrefix = "Test 'Restricted' execution policy." + + It "$TestTypePrefix Running $testScript script should raise PSSecurityException" -skip:(-not $IsWindows) { + + $scriptName = $testScript + + $exception = $null + try { + & $scriptName + } + catch + { + $exception = $_ + } + + $exceptionType = $exception.Exception.getType() + $result = $exceptionType + + $result | Should be "System.Management.Automation.PSSecurityException" + } + } + + $testScripts = @( + $InternetSignatureCorruptedScript + $InternetSignedScript + $InternetUnsignedScript + $IntranetSignatureCorruptedScript + $IntranetSignedScript + $IntranetUnsignedScript + $LocalSignatureCorruptedScript + $localSignedScript + $LocalUnsignedScript + $TrustedSignatureCorruptedScript + $TrustedSignedScript + $UntrustedSignatureCorruptedScript + $UntrustedSignedScript + $UntrustedUnsignedScript + $TrustedUnsignedScript + $MyComputerSignatureCorruptedScript + $MyComputerSignedScript + $MyComputerUnsignedScript + ) + + foreach($testScript in $testScripts) + { + Test-RestrictedExecutionPolicy $testScript + } + } + + AfterAll { + # Clean up + $testDirectory = $remoteTestDirectory + + Remove-Item $testDirectory -Recurse -Force -ea SilentlyContinue + Remove-Item function:createTestFile -ea SilentlyContinue + } + Context "Validate that 'Unrestricted' execution policy works on OneCore powershell" { + + BeforeAll { + Set-ExecutionPolicy Unrestricted -Force | Out-Null + } + + AfterAll { + Set-ExecutionPolicy $originalExecutionPolicy -Force | Out-Null + } + + function Test-UnrestrictedExecutionPolicy { + + param($testScript, $expected) + + $TestTypePrefix = "Test 'Unrestricted' execution policy." + + It "$TestTypePrefix Running $testScript script should return $expected" -skip:(-not $IsWindows) { + $scriptName = $testScript + + $result = & $scriptName + + $result | Should be $expected + } + } + + $expected = "Hello" + $testScripts = @( + $IntranetSignatureCorruptedScript + $IntranetSignedScript + $IntranetUnsignedScript + $LocalSignatureCorruptedScript + $localSignedScript + $LocalUnsignedScript + $TrustedSignatureCorruptedScript + $TrustedSignedScript + $TrustedUnsignedScript + $MyComputerSignatureCorruptedScript + $MyComputerSignedScript + $MyComputerUnsignedScript + ) + + foreach($testScript in $testScripts) { + Test-UnrestrictedExecutionPolicy $testScript $expected + } + } + + Context "Validate that 'ByPass' execution policy works on OneCore powershell" { + + BeforeAll { + Set-ExecutionPolicy Bypass -Force | Out-Null + } + + AfterAll { + Set-ExecutionPolicy $originalExecutionPolicy -Force | Out-Null + } + + function Test-ByPassExecutionPolicy { + + param($testScript, $expected) + + $TestTypePrefix = "Test 'ByPass' execution policy." + + It "$TestTypePrefix Running $testScript script should return $expected" -skip:(-not $IsWindows) { + $scriptName = $testScript + + $result = & $scriptName + return $result + + $result | Should be $expected + } + } + + $expected = "Hello" + $testScripts = @( + $InternetSignatureCorruptedScript + $InternetSignedScript + $InternetUnsignedScript + $IntranetSignatureCorruptedScript + $IntranetSignedScript + $IntranetUnsignedScript + $LocalSignatureCorruptedScript + $LocalSignedScript + $LocalUnsignedScript + $TrustedSignatureCorruptedScript + $TrustedSignedScript + $TrustedUnsignedScript + $UntrustedSignatureCorruptedScript + $UntrustedSignedScript + $UntrustedUnSignedScript + $MyComputerSignatureCorruptedScript + $MyComputerSignedScript + $MyComputerUnsignedScript + ) + foreach($testScript in $testScripts) { + Test-ByPassExecutionPolicy $testScript $expected + } + } + + Context "'RemoteSigned' execution policy works on OneCore powershell" { + + BeforeAll { + Set-ExecutionPolicy RemoteSigned -Force | Out-Null + } + + AfterAll { + Set-ExecutionPolicy $originalExecutionPolicy -Force + } + + function Test-RemoteSignedExecutionPolicy { + + param($testScript, $expected, $error) + + $TestTypePrefix = "Test 'RemoteSigned' execution policy." + + It "$TestTypePrefix Running $testScript script should return $expected" -skip:(-not $IsWindows) { + $scriptName=$testScript + + $scriptResult = $null + $exception = $null + + try + { + $scriptResult = & $scriptName + } + catch + { + $exception = $_ + } + + $errorType = $null + if($null -ne $exception) + { + $errorType = $exception.exception.getType() + $scriptResult = $null + } + $result = @{ + "result" = $scriptResult + "exception" = $errorType + } + + $actualResult = $result."result" + $actualError = $result."exception" + + $actualResult | Should be $expected + $actualError | Should be $error + } + } + $message = "Hello" + $error = "System.Management.Automation.PSSecurityException" + $testData = @( + @{ + testScript = $LocalUnsignedScript + expected = $message + error = $null + } + @{ + testScript = $LocalSignatureCorruptedScript + expected = $message + error = $null + } + @{ + testScript = $LocalSignedScript + expected = "Hello" + error = $null + } + @{ + testScript = $MyComputerUnsignedScript + expected = $message + error = $null + } + @{ + testScript = $MyComputerSignatureCorruptedScript + expected = $message + error = $null + } + @{ + testScript = $myComputerSignedScript + expected = $message + error = $null + } + @{ + testScript = $TrustedUnsignedScript + expected = $message + error = $null + } + @{ + testScript = $TrustedSignatureCorruptedScript + expected = $message + error = $null + } + @{ + testScript = $TrustedSignedScript + expected = $message + error = $null + } + @{ + testScript = $IntranetUnsignedScript + expected = $message + error = $null + } + @{ + testScript = $IntranetSignatureCorruptedScript + expected = $message + error = $null + } + @{ + testScript = $IntranetSignedScript + expected = $message + error = $null + } + @{ + testScript = $InternetUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $InternetSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $UntrustedUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $UntrustedSignatureCorruptedScript + expected = $null + error = $error + } + ) + + foreach($testCase in $testData) { + Test-RemoteSignedExecutionPolicy @testCase + } + } + + Context "Validate that 'AllSigned' execution policy works on OneCore powershell" { + + BeforeAll { + Set-ExecutionPolicy AllSigned -Force + } + + AfterAll { + Set-ExecutionPolicy $originalExecutionPolicy -Force + } + + function Test-AllSignedExecutionPolicy { + + param($testScript, $error) + + $TestTypePrefix = "Test 'AllSigned' execution policy." + + It "$TestTypePrefix Running $testScript script should return $error" -skip:(-not $IsWindows) { + + $scriptName = $testScript + + $exception = $null + try + { + & $scriptName + } + catch + { + $exception = $_ + } + $errorType = $null + + if($null -ne $exception) + { + $errorType = $exception.exception.getType() + } + + $result = $errorType + + $result | Should be $error + } + } + $error = "System.Management.Automation.PSSecurityException" + $testData = @( + @{ + testScript = $LocalUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $LocalSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $MyComputerUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $MyComputerSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $TrustedUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $TrustedSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $IntranetUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $IntranetSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $InternetUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $InternetSignatureCorruptedScript + expected = $null + error = $error + } + @{ + testScript = $UntrustedUnsignedScript + expected = $null + error = $error + } + @{ + testScript = $UntrustedSignatureCorruptedScript + expected = $null + error = $error + } + ) + foreach($testScript in $testScripts) { + Test-AllSignedExecutionPolicy $testScript $error + } + } +} + + +Describe "Validate that 'ConvertTo-SecureString -Key' and 'ConvertFrom-SecureString -Key' work on NanoServer and IoT" -Tags "Innerloop", "BVT" { + + It "ConvertTo-SecureString should return back the SecureString that was constructed from 'ValidateConvertSecureString'." -skip:(-not $IsWindows) { + + $testString = "ValidateConvertSecureString" + $secureString = ConvertTo-SecureString -String "ValidateConvertSecureString" -AsPlainText -Force + $key = (3,4,2,3,56,34,254,222,1,1,2,23,42,54,33,233,1,34,2,7,6,5,35,43) + + $encryptedString = ConvertFrom-SecureString -SecureString $secureString -Key $key + $decryptedString = ConvertTo-SecureString -String $encryptedString -Key $key + + $cred = [pscredential]::new("domain\user", $decryptedString) + $netCred = $cred.GetNetworkCredential() + $password = $netCred.Password + + $password | Should be $testString + } +} From db0637950feb901db552e336821bb1f8b86cff71 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 11 Jul 2016 18:57:22 -0700 Subject: [PATCH 3/8] Ignored a per repo profile --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3c9de44114..dc3291ccb7 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,6 @@ dotnet-uninstall-debian-packages.sh # Ignore packages *.deb -*.msi *.zip *.rpm *.pkg @@ -39,3 +38,6 @@ powershell.version # resgen output gen + +# Per repo profile +.profile.ps1 From 1daa1073d8cd5fb37ca1e413c56999008258111d Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 11 Jul 2016 19:26:29 -0700 Subject: [PATCH 4/8] Add Linux part of issue to known issues list --- docs/KNOWNISSUES.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/KNOWNISSUES.md b/docs/KNOWNISSUES.md index f06866c961..e88697a387 100644 --- a/docs/KNOWNISSUES.md +++ b/docs/KNOWNISSUES.md @@ -91,6 +91,25 @@ following cmdlets that exist in the FullCLR version: - Show-Command - Update-List +### ExecutionPolicy unavailable on non-Windows platform + +ExecutionPolicy is not implemented on non-Windows platforms and the following related CmdLets will return the error below. + +- Get-ExecutionPolicy +- Set-ExecutionPolicy + +``` +Set-ExecutionPolicy : Operation is not supported on this platform. +At line:1 char:1 ++ Set-ExecutionPolicy AllSigned ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: (:) [Set-ExecutionPolicy], Platfor + mNotSupportedException + + FullyQualifiedErrorId : System.PlatformNotSupportedException,Microsoft.P + owerShell.Commands.SetExecutionPolicyCommand + +``` + ## File paths with literal backward slashes On some filesystems (Linux, OS X), file paths are allowed to contain literal From 9a9ff6f7664fc520b7bae9d1c05148f40047a6fe Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 12 Jul 2016 11:27:31 -0700 Subject: [PATCH 5/8] Removed language if statement no longer needed due to compiler if statement Clarified comment --- .../engine/SecurityManagerBase.cs | 11 +++++------ .../security/SecuritySupport.cs | 7 ++----- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/System.Management.Automation/engine/SecurityManagerBase.cs b/src/System.Management.Automation/engine/SecurityManagerBase.cs index 3c7cee9c84..5a08746535 100644 --- a/src/System.Management.Automation/engine/SecurityManagerBase.cs +++ b/src/System.Management.Automation/engine/SecurityManagerBase.cs @@ -87,14 +87,13 @@ namespace System.Management.Automation CommandOrigin origin, PSHost host) { +#if LINUX // TODO:PSL this is a workaround since the exception below // hides the internal issue of what's going on in terms of - // execution policy. -#if LINUX - if (Platform.IsCore) - { - return; - } + // execution policy. + // On non-Windows platform Set/Get-ExecutionPolicy return + // Operation is not supported on this platform. + return; #endif diff --git a/src/System.Management.Automation/security/SecuritySupport.cs b/src/System.Management.Automation/security/SecuritySupport.cs index 857b7a1119..4d8b65f840 100644 --- a/src/System.Management.Automation/security/SecuritySupport.cs +++ b/src/System.Management.Automation/security/SecuritySupport.cs @@ -431,13 +431,10 @@ namespace System.Management.Automation return false; } +#if LINUX // There is no signature support on non-Windows platforms (yet), when // execution reaches here, we are sure the file is under product folder -#if LINUX - if (Platform.IsCore) - { - return true; - } + return true; #endif // Check the file signature Signature fileSignature = SignatureHelper.GetSignature(file, null); From dc632bff96be26f438aa5946e2ecff05be9dc2cc Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 12 Jul 2016 12:11:07 -0700 Subject: [PATCH 6/8] Fixed unreachable code issue --- src/System.Management.Automation/engine/SecurityManagerBase.cs | 3 ++- src/System.Management.Automation/security/SecuritySupport.cs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/System.Management.Automation/engine/SecurityManagerBase.cs b/src/System.Management.Automation/engine/SecurityManagerBase.cs index 5a08746535..548bd737be 100644 --- a/src/System.Management.Automation/engine/SecurityManagerBase.cs +++ b/src/System.Management.Automation/engine/SecurityManagerBase.cs @@ -94,7 +94,7 @@ namespace System.Management.Automation // On non-Windows platform Set/Get-ExecutionPolicy return // Operation is not supported on this platform. return; -#endif +#else #if DEBUG @@ -160,6 +160,7 @@ namespace System.Management.Automation throw new PSSecurityException(AuthorizationManagerBase.AuthorizationManagerDefaultFailureReason); } } +#endif } /// diff --git a/src/System.Management.Automation/security/SecuritySupport.cs b/src/System.Management.Automation/security/SecuritySupport.cs index 4d8b65f840..05ae9f77dc 100644 --- a/src/System.Management.Automation/security/SecuritySupport.cs +++ b/src/System.Management.Automation/security/SecuritySupport.cs @@ -435,7 +435,7 @@ namespace System.Management.Automation // There is no signature support on non-Windows platforms (yet), when // execution reaches here, we are sure the file is under product folder return true; -#endif +#else // Check the file signature Signature fileSignature = SignatureHelper.GetSignature(file, null); if ((fileSignature != null) && (fileSignature.IsOSBinary)) @@ -455,6 +455,7 @@ namespace System.Management.Automation } return false; +#endif } #if !CORECLR From 0eac00ed0be3e1b33f15c89905fbbc296de761d6 Mon Sep 17 00:00:00 2001 From: joeyaiello Date: Mon, 11 Jul 2016 09:42:22 -0700 Subject: [PATCH 7/8] first pass of contributor docs Rework of contributor docs to reflect actual flow for both internal and external developers using the PowerShell/PowerShell repo for the first time. Includes updates to issue/PR guidelines, repo 101, and CONTRIBUTING.md. --- .github/CONTRIBUTING.md | 73 ++++++++++--------- .github/PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 12 +-- docs/community/governance.md | 8 ++ docs/community/legal-licensing.md | 5 ++ .../coding-guidelines.md | 0 docs/dev-process/issue-management-process.md | 30 +++++++- docs/dev-process/pull-request-rules.md | 12 +++ docs/git/powershell-repository-101.md | 35 ++++----- 9 files changed, 113 insertions(+), 64 deletions(-) rename docs/{coding-guidelines => dev-process}/coding-guidelines.md (100%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index dd2cf1e85e..1ff9d952ed 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,54 +9,59 @@ New to Git? - Make sure you have a [GitHub account](https://github.com/signup/free) - [Git Basics](../docs/git/basics.md): install and getting started. - [Commit process](../docs/git/committing.md): step-by-step instructions how to commit your changes -- [Git for sd users](../docs/git/source-depot.md): a handy reference document for people familiar with `sd` Quick Start Check-list ---- - Read [the Community Governance](../docs/community/governance.md) -- Make sure you have signed [PowerShell Contribution License Agreement (CLA)](#contributor-license-agreement) before pull request +- Make sure you have signed a [PowerShell Contribution License Agreement (CLA)](#contributor-license-agreement) before submitting a pull request - Get familiar with the [PowerShell repository](../docs/git/powershell-repository-101.md) -- Setup your [development environment](../docs/dev-process/setup-dev-environment.md) -- Build the [PowerShell repository](https://github.com/PowerShell/PowerShell) -- [Try it out with the binaries you just built](../docs/dev-process/tryit.md) - -Contributing to Issue +Contributing to Issues ---- -- Review the [GitHub Issue Management process](../docs/dev-process/issue-management-process.md). It covers the triage process and the definition of Label, Assignee and the guidance like verifying and closing issues -- Check if the issue you are going to file already exists in [GitHub Issue query](https://github.com/PowerShell/PowerShell/issues) -- Submit an issue, assuming it does not exist yet, via [GitHub Issue track](https://github.com/PowerShell/PowerShell/issues) by following the issue template. +- Review the [GitHub issue management process](../docs/dev-process/issue-management-process.md). It covers the triage process and the definition of labels and assignees as well as a description of how we will verify and close issues +- Check if the issue you are going to file already exists in our [GitHub issues](https://github.com/PowerShell/PowerShell/issues) +- If you can't find your issue already, [open a new issue](https://github.com/PowerShell/PowerShell/issues/new), making sure to follow the directions in the issue template as best you can. Contributing to Documentation ---- -- Choose what to work on. Check the list of [documentation issues](https://github.com/PowerShell/PowerShell-Docs/issues) to see if someone is already working on it. -- If you cannot find an existing issue for your desired work, open a new issue for your work. +- First, check the list of [documentation issues](https://github.com/PowerShell/PowerShell-Docs/issues) to make sure your issue doesn't already exist or that someone is already working on it. +- If you cannot find an existing issue for your desired work, [open a new issue](https://github.com/PowerShell/PowerShell/issues/new) explaining that you'd like to contribute to fix the problem. - Follow the guidelines at [Contributing to PowerShell Documentation](https://github.com/PowerShell/PowerShell-Docs/blob/staging/CONTRIBUTING.md). - If you contribute to the PowerShell project in a way that changes the user or developer experience, you are expected to document those changes. - Contributing to Code ---- +- Learn how to setup your development environment and build PowerShell for [Linux][build-linux], [Windows Core][build-wc], [Windows Full][build-wf] or +[OS X][build-osx]. +- Build the [PowerShell repository](https://github.com/PowerShell/PowerShell) +- Ensure you can [locally execute tests][testing-guidelines] with your build. - [Pick something to work on](https://github.com/PowerShell/PowerShell/issues) - If you cannot find an existing issue for your desired work, open a new issue for your work - - Get agreement from the PowerShell team and the community regarding your proposed change via the [Issue Triage Process](../docs/dev-process/issue-management-process.md). - - If you will be adding a new cmdlet or other design changes, follow [Making Design Changes guidelines](#making-design-changes) - - For breaking changes, see [Make Breaking Changes guidelines](#making-breaking-changes) - - If you would like to be assigned to the issue, please ask @powershell/powershell (TODO) for an assignment + - Get agreement from the PowerShell team and the community regarding your proposed change via the [issue triage process][issue-triage]. + - If you're changes require a new cmdlet or other design changes, follow the [design change guidelines](#making-design-changes) + - Ensure that you've reviewd our [breaking changes guidelines](#making-breaking-changes) + - If you would like to be assigned to the issue, please ask `@powershell/powershell` for an assignment - Create a [personal fork of the repository](https://help.github.com/articles/fork-a-repo/) to start your work - Follow the [coding guidelines](../docs/coding-guidelines/coding-guidelines.md) and [testing guidelines](../docs/testing-guidelines/testing-guidelines.md) - Read the [Pull Request (PR) Guidelines](../docs/dev-process/pull-request-rules.md) and create a [PR](https://guides.github.com/activities/hello-world/) against the upstream repository -- Perform a [code review](../docs/dev-process/code-review-guidelines.md) with the PowerShell Committee (TODO) on the pull request. +- Perform a [code review](../docs/dev-process/code-review-guidelines.md) with the [PowerShell Committee][governance] on the pull request. +[build-wc]: ../docs/building/windows-core.md +[build-wf]: ../docs/building/windows-full.md +[build-osx]: ../docs/building/osx.md +[build-linux]: ../docs/building/linux.md +[testing-guidelines]: ../docs/testing-guidelines/testing-guidelines.md +[issue-triage]: ../docs/dev-process/issue-management-process.md +[governance]: ../docs/community/governance.md Making Breaking Changes ---- When you make code changes, please pay attention to these that can affect the [Public Contract](../docs/dev-process/breaking-change-contract.md), -for example, PowerShell parameter, API or protocols changes. Before starting making changes to the code, first review the [Breaking Changes guidelines](../docs/dev-process/breaking-change-contract.md) +for example, PowerShell parameter, API or protocols changes. Before making changes to the code, first review the [breaking changes contract](../docs/dev-process/breaking-change-contract.md) and follow the guidelines to keep PowerShell backward compatible. Making Design Changes @@ -65,10 +70,11 @@ To add new features such as cmdlets or making design changes, please follow the Common Engineering Practices ---- -Other than the guidelines ([coding](../docs/coding-guidelines/coding-guidelines.md), [RFC process](https://github.com/PowerShell/PowerShell-RFC) for design, [documentation](#contributing-to-documentation) -and [testing](../docs/testing-guidelines/testing-guidelines.md)) discussed above, following are common engineering practices we would like everyone to follow: -- Do not commit code changes to the master branch! Read GitHub's guides on [Forking Project](https://guides.github.com/activities/forking/) and [Understanding the GitHub Flow](https://guides.github.com/introduction/flow/) -- Format commit messages as follows based on [the Tim Pope's guidelines]("http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html"): +Other than the guidelines for ([coding](../docs/coding-guidelines/coding-guidelines.md), the [RFC process](https://github.com/PowerShell/PowerShell-RFC) for design, [documentation](#contributing-to-documentation) +and [testing](../docs/testing-guidelines/testing-guidelines.md)) discussed above, we encourage contributors to follow these common engineering practices: +- Do not commit code changes to the `master` branch! +Read GitHub's guides on [forking project](https://guides.github.com/activities/forking/) and [Understanding the GitHub Flow](https://guides.github.com/introduction/flow/) +- Format commit messages based on [Tim Pope's guidelines]("http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html"): ``` Summarize change in 50 characters or less @@ -87,12 +93,12 @@ Fix #42 - Create and/or update tests when making code changes - Run tests and ensure they are passing before pull request - All pull requests **must** pass CI systems before they can be approved -- Avoid making a big pull requests. Instead, file an issue and start a discussion with the community before you invest a large amount of time +- Avoid making big pull requests. Instead, file an issue and start a discussion with the community before you invest a large amount of time - Blog and tweet about your contributions frequently! File Headers ---- -The following file header is the used for PowerShell. Please use it for new files. For more information, see [coding guidelines](../docs/coding-guidelines/coding-guidelines.md). +The following file header is used for all PowerShell code. Please use it for new files. For more information, see [coding guidelines](../docs/coding-guidelines/coding-guidelines.md). ```C# // … TODO TODO // Licensed to the PowerShell …. under one or more agreements. @@ -101,16 +107,13 @@ The following file header is the used for PowerShell. Please use it for new file Licensing & Copyright ---- -You can find [here](../docs/community/legal-licensing.md) for the PowerShell sources license and copyright information. +You can find more information about the PowerShell source license and copyright [here](../docs/community/legal-licensing.md). -Contributor License Agreement +Contributor License Agreement (CLA) ---- -You must sign a PowerShell Contribution License Agreement (CLA) before your Pull Request will be merged. +You must sign a PowerShell Contribution License Agreement (CLA) before your pull request will be merged. This a one-time requirement for the PowerShell project. Signing the CLA process is simple and can be done in less than a minute. -You can read more about [Contribution License Agreements (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) on wikipedia. - -You don't have to do this up-front. You can simply clone, fork, and submit your pull-request as -usual. When your pull-request is created, it is classified by a CLA bot. If the change is trivial -(e.g. you just fixed a typo), then the PR is labelled with cla-not-required. Otherwise it's - classified as cla-required. Once you signed a CLA, the current and all future pull-requests will be - labelled as cla-signed. +You don't have to do this up-front. You can simply clone, fork, and submit your pull request as usual. +When your pull request is created, it is classified by a CLA bot. +If the change is trivial, it's classified as `cla-required`. +Once you sign a CLA, all your existing and future pull requests will be labeled as cla-signed. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index efc22c2fa6..2efe6b59f3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ -- [ ] Resolves #xyz. +- [ ] Resolves issue #xyz. - [ ] Code is up-to-date with `master`. - [ ] Add tests that fail without your changes. - [ ] Update all relevant [documentation](../docs). diff --git a/README.md b/README.md index c4dbff5d85..3b6cdef9ce 100644 --- a/README.md +++ b/README.md @@ -49,26 +49,26 @@ Developing and Contributing If you are new to Git, we recommend you start by reviewing our [Git basics document][git-basics] where you will find Git installation instructions, cheat sheets and links to our favorite Git tutorials. We also -recommend, reviewing an example of a [basic Git commit walkthrough][git-commit]. +recommend, reviewing an example of a [basic Git commit walkthrough][git-commit]. -To begin development, you'll need to setup your development environment for -either [Linux][build-linux], [Windows Core][build-wc], [Windows Full][build-wf] or +To begin development, you'll need to setup your development environment for [Linux][build-linux], [Windows Core][build-wc], [Windows Full][build-wf] or [OS X][build-osx] and are encouraged to review the [contribution guidelines][contribution] for specific workflow, test requirements and coding guidelines. -If you encounter issues, please consult the [known issues][known-issues] +If you encounter issues in your development, please consult the [known issues][known-issues] and [FAQ][faq] documents to see if the issue you are running into is captured and if a workaround exists. -If do not see your issue captured, please file a [new issue][new-issue] using +If you encounter issues with PowerShell itself, first search for it in our [issues][github-issues]. If you do not see your issue captured, please file a [new issue][new-issue] using the appropriate issue tag. [git-basics]: docs/git/basics.md -[git-commit]: docs/git/committing.md +[git-commit]: docs/git/powershell-repository-101.md [contribution]: .github/CONTRIBUTING.md [known-issues]: docs/KNOWNISSUES.md [faq]: docs/FAQ.md +[github-issues]:https://github.com/PowerShell/PowerShell/issues [new-issue]:https://github.com/PowerShell/PowerShell/issues/new diff --git a/docs/community/governance.md b/docs/community/governance.md index 54afe81e86..3a2941b159 100644 --- a/docs/community/governance.md +++ b/docs/community/governance.md @@ -2,3 +2,11 @@ author: Joey > PowerShell community, twitter, facebook, linkedIn...) > Community ground rules, appeals process (if they disagree with our decision) > SME + +TODO +1. Define a difference between small, medium, large design decisions/bugs + a. Point to quick fix doc +2. Explain the RFC process +3. Define maintainer vs. feature owner +4. Define committee +5. \ No newline at end of file diff --git a/docs/community/legal-licensing.md b/docs/community/legal-licensing.md index f6e3a5531f..f4533cafaf 100644 --- a/docs/community/legal-licensing.md +++ b/docs/community/legal-licensing.md @@ -1 +1,6 @@ author: Joey + +TODO: It's MIT +Make sure to CLA + +Do we even need this doc? \ No newline at end of file diff --git a/docs/coding-guidelines/coding-guidelines.md b/docs/dev-process/coding-guidelines.md similarity index 100% rename from docs/coding-guidelines/coding-guidelines.md rename to docs/dev-process/coding-guidelines.md diff --git a/docs/dev-process/issue-management-process.md b/docs/dev-process/issue-management-process.md index 11f6d365f9..b8b060c9ac 100644 --- a/docs/dev-process/issue-management-process.md +++ b/docs/dev-process/issue-management-process.md @@ -1,6 +1,34 @@ -author: Andy +author: Jason/Andy > meaning of label, assignees, etc. > triage process > requirements for resolving (timing), closing... + +## Long-living issue labels + +### Feature areas + +These labels describe what feature area of PowerShell that an issue addresses. + +* `Area-Build`: +* `Area-Cmdlets`: +* `Area-Console`: +* `Area-Debugging`: +* `Area-Documentation`: +* `Area-Engine`: +* `Area-Intellisense`: +* `Area-Language`: +* `Area-OMI`: +* `Area-PackageManagement`: +* `Area-Performance`: +* `Area-Portability`: +* `Area-PSReadline`: +* `Area-Test`: + +### Operating systems + +These are for issues that are specific to certain operating systems: +* `OS-Linux` +* `OS-OS X` +* `OS-Windows` diff --git a/docs/dev-process/pull-request-rules.md b/docs/dev-process/pull-request-rules.md index ed61156fe4..86c957c032 100644 --- a/docs/dev-process/pull-request-rules.md +++ b/docs/dev-process/pull-request-rules.md @@ -6,3 +6,15 @@ author: Hemant > "some tests we can only run internally" > exact timeline not need for Aug17 > Windows quality gates + +## Minimum gates (TODO) + +Our [pull request template][pr-template] includes the bare minimum requirements for a pull request to be accepted into PowerShell. This includes: +* Writing tests +* Writing documentation (where does thie one live already? is it where this guidance should exist all up?) +* Our [code review process][code-review] +* Repository maintainer sign-off, per our [governance model][governance] + +[pr-template]: ../.github/PULL_REQUEST_TEMPLATE.md +[code-review]: code-review-guidelines.md +[governance]: ../community/governance.md diff --git a/docs/git/powershell-repository-101.md b/docs/git/powershell-repository-101.md index ca20550c1c..193e36d264 100644 --- a/docs/git/powershell-repository-101.md +++ b/docs/git/powershell-repository-101.md @@ -7,10 +7,9 @@ Working with PowerShell repository git clone --recursive https://github.com/PowerShell/PowerShell ``` -PowerShell repository has **submodules**. -They are required to build and test powershell. -That's why you need `--recursive`, when you `clone`. - +The PowerShell repository has **submodules**. +They are required to build and test PowerShell. +That's why you need `--recursive`, when you `git clone`. If you already cloned the repo without `--recursive`, update submodules manually @@ -22,32 +21,28 @@ git submodule update See [FAQ](../FAQ.md#why-is-my-submodule-empty) for details. - Branches --------- * Don't commit your changes directly to master. - It would make workflow messy. -* Checkout a new local branch from master for every change you want to make (bugfix, feature). -* Use `alias/feature-name` pattern. + It will make the collaborative workflow messy. +* Checkout a new local branch from `master` for every change you want to make (bugfix, feature). +* Use the `username/feature-name` pattern for naming branches. * Use lowercase-with-dashes for naming. * Follow [Linus' recommendations][Linus] about history. - - People can (and probably should) rebase their _private_ trees (their own - work). That's a _cleanup_. But never other peoples code. That's a "destroy - history" - - You must never EVER destroy other peoples history. You must not rebase - commits other people did. Basically, if it doesn't have your sign-off - on it, it's off limits: you can't rebase it, because it's not yours. + - "People can (and probably should) rebase their _private_ trees (their own work). That's a _cleanup_. But never other peoples code. That's a 'destroy history'... + You must never EVER destroy other peoples history. You must not rebase commits other people did. + Basically, if it doesn't have your sign-off on it, it's off limits: you can't rebase it, because it's not yours." #### Understand branches -* **master** is the branch with the latest and gratest changes. +* **master** is the branch with the latest and greatest changes. It could be unstable. -* Send your Pull Requests to **master**. +* Send your pull requests to **master**. #### Sync your local repo -Use **git rebase** instead of **git merge** and **git pull**, when you updating your feature-branch. +Use **git rebase** instead of **git merge** and **git pull**, when you're updating your feature-branch. ```sh # switch to master branch @@ -63,7 +58,7 @@ git pull origin master ``` -Then switch to your branch and do rebase +Then switch to your branch and do a rebase ``` git rebase master @@ -81,7 +76,6 @@ We are leaving few links here: [Linus]:http://thread.gmane.org/gmane.comp.video.dri.devel/34739/focus=34744 - Tags ------ @@ -92,7 +86,7 @@ you will find it via **tags**. * Find the tag that corresponds to the release. * Use `git checkout ` to get this version. -**Note:** [checking out tag][] will move the repo in [DETACHED HEAD][] state. +**Note:** [checking out a tag][] will move the repo to a [DETACHED HEAD][] state. [checking out tag]:https://git-scm.com/book/en/v2/Git-Basics-Tagging#Checking-out-Tags [DETACHED HEAD]:https://www.git-tower.com/learn/git/faq/detached-head-when-checkout-commit @@ -105,7 +99,6 @@ git checkout -b vors/hotfix ``` - Recommended Git configurations ============================== From bf905966de6e4433ae9f69cb661941b0dd46381e Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 12 Jul 2016 14:38:19 -0700 Subject: [PATCH 8/8] Fixed comments and white space issues --- .../engine/SecurityManagerBase.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/System.Management.Automation/engine/SecurityManagerBase.cs b/src/System.Management.Automation/engine/SecurityManagerBase.cs index 548bd737be..2fbf8d9dc9 100644 --- a/src/System.Management.Automation/engine/SecurityManagerBase.cs +++ b/src/System.Management.Automation/engine/SecurityManagerBase.cs @@ -87,12 +87,12 @@ namespace System.Management.Automation CommandOrigin origin, PSHost host) { -#if LINUX +#if LINUX // TODO:PSL this is a workaround since the exception below // hides the internal issue of what's going on in terms of // execution policy. - // On non-Windows platform Set/Get-ExecutionPolicy return - // Operation is not supported on this platform. + // On non-Windows platform Set/Get-ExecutionPolicy throw + // PlatformNotSupportedException return; #else @@ -160,7 +160,7 @@ namespace System.Management.Automation throw new PSSecurityException(AuthorizationManagerBase.AuthorizationManagerDefaultFailureReason); } } -#endif +#endif } ///