Public Access
Licence is MIT, set solution-wide rather than only on the packable project: DodoSSH.Contracts is published so clients can build against it, and a package with no licence expression is one a corporate policy scanner rejects outright. The SSH.NET spike is the M1 client gate and it passes. SSH.NET 2025.1.0 exposes ShellStream.ChangeWindowSize, but a method existing is not the remote observing it, so the tests read `stty size` back from a real sshd after resizing rather than asserting the call did not throw. Repeated resizes each take effect too, which matters because dragging a window edge produces a stream of them. The IChannelSession fallback is not needed. Also verified against a real sshd: password and public-key auth, that the host key arrives as a raw blob we can fingerprint ourselves rather than reading SSH.NET's MD5 property, and that refusing the key via CanTrust actually aborts the connection -- without which the TOFU dialog would be decoration. Kept as a permanent suite, not deleted after the spike. An upgrade that silently stopped sending the request would present as wrapped output only after a resize, which is easy to misattribute to the terminal emulator. Two bugs in the test itself, both worth naming because either would have been read as "resize does not work": - A PTY emits CRLF, and the anchored regex rejected the CR. The output visibly contained `24 80` while the match failed. - Each read can begin with output still buffered from the previous command, including its size line. Taking the first match would have reported the pre-resize size. platform-flags.md now records window-change as resolved rather than unverified -- a stale flag is worse than none -- plus the three real SSH.NET limits found on the way: ShellStream does not override ReadAsync so every idle session parks a pool thread, one connection cannot serve both SshClient and SftpClient, and agent forwarding needs an upstream change.
313 lines
12 KiB
JSON
313 lines
12 KiB
JSON
{
|
|
"version": 2,
|
|
"dependencies": {
|
|
"net10.0": {
|
|
"Meziantou.Analyzer": {
|
|
"type": "Direct",
|
|
"requested": "[3.0.134, )",
|
|
"resolved": "3.0.134",
|
|
"contentHash": "tTYCcYKyOko3TMNxmxmA9nakbcHVUgglENmCMIhzIjl9y9FBZO/0tWSxTGC74Sp198FmWih5S5KkjQRBg5ePkQ=="
|
|
},
|
|
"Microsoft.CodeAnalysis.BannedApiAnalyzers": {
|
|
"type": "Direct",
|
|
"requested": "[5.6.0, )",
|
|
"resolved": "5.6.0",
|
|
"contentHash": "Kcobt3pnOdO0A+6CKiMHZdTEluJpsfxiV20axtZdmfBQnDmiWTKPJADlgAfdTuKNAnVarrkJa0UEGwuOo91muw=="
|
|
},
|
|
"NSubstitute": {
|
|
"type": "Direct",
|
|
"requested": "[6.0.0, )",
|
|
"resolved": "6.0.0",
|
|
"contentHash": "0gvKMbiJ+/WrfbcfBfqRZZrvfLJcd3rqkqVMjjlY5dtmLRVzMY+o/K/rJUStofQ2haSr9Vd04YDfvZtVVGS3/A==",
|
|
"dependencies": {
|
|
"Castle.Core": "5.1.1"
|
|
}
|
|
},
|
|
"Shouldly": {
|
|
"type": "Direct",
|
|
"requested": "[4.3.0, )",
|
|
"resolved": "4.3.0",
|
|
"contentHash": "sDetrWXrl6YXZ4HeLsdBoNk3uIa7K+V4uvIJ+cqdRa5DrFxeTED7VkjoxCuU1kJWpUuBDZz2QXFzSxBtVXLwRQ==",
|
|
"dependencies": {
|
|
"DiffEngine": "11.3.0",
|
|
"EmptyFiles": "4.4.0"
|
|
}
|
|
},
|
|
"SSH.NET": {
|
|
"type": "Direct",
|
|
"requested": "[2025.1.0, )",
|
|
"resolved": "2025.1.0",
|
|
"contentHash": "jrnbtf0ItVaXAe6jE8X/kSLa6uC+0C+7W1vepcnRQB/rD88qy4IxG7Lf1FIbWmkoc4iVXv0pKrz+Wc6J4ngmHw==",
|
|
"dependencies": {
|
|
"BouncyCastle.Cryptography": "2.6.2",
|
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.3"
|
|
}
|
|
},
|
|
"Testcontainers": {
|
|
"type": "Direct",
|
|
"requested": "[4.13.0, )",
|
|
"resolved": "4.13.0",
|
|
"contentHash": "j8vi9jPBNSwaraGGx8w+2gtZyWrlbKxdhiGMS3nektg+KiwjFWx9ghCjs57EoQfvI+IAbzti0oQJupQChwgMog==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced": "4.3.3",
|
|
"Docker.DotNet.Enhanced.X509": "4.3.3",
|
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.3",
|
|
"SSH.NET": "2025.1.0",
|
|
"SharpZipLib": "1.4.2"
|
|
}
|
|
},
|
|
"xunit.v3": {
|
|
"type": "Direct",
|
|
"requested": "[3.2.2, )",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "L+4/4y0Uqcg8/d6hfnxhnwh4j9FaeULvefTwrk30rr1o4n/vdPfyUQ8k0yzH8VJx7bmFEkDdcRfbtbjEHlaYcA==",
|
|
"dependencies": {
|
|
"xunit.v3.mtp-v1": "[3.2.2]"
|
|
}
|
|
},
|
|
"Castle.Core": {
|
|
"type": "Transitive",
|
|
"resolved": "5.1.1",
|
|
"contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
|
|
"dependencies": {
|
|
"System.Diagnostics.EventLog": "6.0.0"
|
|
}
|
|
},
|
|
"DiffEngine": {
|
|
"type": "Transitive",
|
|
"resolved": "11.3.0",
|
|
"contentHash": "k0ZgZqd09jLZQjR8FyQbSQE86Q7QZnjEzq1LPHtj1R2AoWO8sjV5x+jlSisL7NZAbUOI4y+7Bog8gkr9WIRBGw==",
|
|
"dependencies": {
|
|
"EmptyFiles": "4.4.0",
|
|
"System.Management": "6.0.1"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "nGicLwvd42FhRk+khY5uS6cx49ErNdwYKnYBg0F4m4BDKLp/R77AVmmN9xAiqI3W/wN5ZCHkdUhgxf5ORkZuFQ==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3",
|
|
"Docker.DotNet.Enhanced.LegacyHttp": "4.3.3",
|
|
"Docker.DotNet.Enhanced.NPipe": "4.3.3",
|
|
"Docker.DotNet.Enhanced.NativeHttp": "4.3.3",
|
|
"Docker.DotNet.Enhanced.Unix": "4.3.3",
|
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "9Cp8hOgtynixcDoAs9lnEaQosluojSYmiW3fsLsLIVfZjlq/fznSIZNUhnmyT4Xo1Iyuok/y49WL/25O47u0Pw==",
|
|
"dependencies": {
|
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.LegacyHttp": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "7j3M16emv9PAQN7VwFn23xLYNj8GJmwPOcogveHkaWnOCqiC+anRaNKQwqIBNApM1AuwZKivehTKTPmmrjUUnw==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.NativeHttp": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "iNzK+jRFeEMobSA7l/h4ARwCKOOefOWtVN5/RB0ft6/6H6IQXvVUuOgGyZAjYLBT7TsyClRYno2B904f3dtBuQ==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.NPipe": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "ZTLYufuEfY0e6qLOgeH9QgXx2KYuoABRVaY5A8rsggyLgYqbDj9rCRfVAhHPCUv83S7pVxDHy+Tvm/BnxjWVpg==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.Unix": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "ypo8qNbmvHw1t9VfpRTMogCw2vht6VjkXzlGYUUeP2H2bf83USURdla1maW1njn2oq2rfLUFOGMfmt+A37QU2w==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3"
|
|
}
|
|
},
|
|
"Docker.DotNet.Enhanced.X509": {
|
|
"type": "Transitive",
|
|
"resolved": "4.3.3",
|
|
"contentHash": "oBDibWezEv4hgj3RIQxI3DVcxkNV1MdrD0d/jhjUu+h3DL+qc0wlkQva15kkwMatXmC/hWp1VP0DMoFXe+BmEw==",
|
|
"dependencies": {
|
|
"Docker.DotNet.Enhanced.Handler.Abstractions": "4.3.3"
|
|
}
|
|
},
|
|
"EmptyFiles": {
|
|
"type": "Transitive",
|
|
"resolved": "4.4.0",
|
|
"contentHash": "gwJEfIGS7FhykvtZoscwXj/XwW+mJY6UbAZk+qtLKFUGWC95kfKXnj8VkxsZQnWBxJemM/q664rGLN5nf+OHZw=="
|
|
},
|
|
"Microsoft.ApplicationInsights": {
|
|
"type": "Transitive",
|
|
"resolved": "2.23.0",
|
|
"contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw=="
|
|
},
|
|
"Microsoft.Bcl.AsyncInterfaces": {
|
|
"type": "Transitive",
|
|
"resolved": "6.0.0",
|
|
"contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
|
|
},
|
|
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
|
"type": "Transitive",
|
|
"resolved": "8.0.2",
|
|
"contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg=="
|
|
},
|
|
"Microsoft.Extensions.Logging.Abstractions": {
|
|
"type": "Transitive",
|
|
"resolved": "8.0.3",
|
|
"contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==",
|
|
"dependencies": {
|
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
|
}
|
|
},
|
|
"Microsoft.Testing.Extensions.Telemetry": {
|
|
"type": "Transitive",
|
|
"resolved": "1.9.1",
|
|
"contentHash": "No5AudZMmSb+uNXjlgL2y3/stHD2IT4uxqc5yHwkE+/nNux9jbKcaJMvcp9SwgP4DVD8L9/P3OUz8mmmcvEIdQ==",
|
|
"dependencies": {
|
|
"Microsoft.ApplicationInsights": "2.23.0",
|
|
"Microsoft.Testing.Platform": "1.9.1"
|
|
}
|
|
},
|
|
"Microsoft.Testing.Extensions.TrxReport.Abstractions": {
|
|
"type": "Transitive",
|
|
"resolved": "1.9.1",
|
|
"contentHash": "AL46Xe1WBi85Ntd4mNPvat5ZSsZ2uejiVqoKCypr8J3wK0elA5xJ3AN4G/Q4GIwzUFnggZoH/DBjnr9J18IO/g==",
|
|
"dependencies": {
|
|
"Microsoft.Testing.Platform": "1.9.1"
|
|
}
|
|
},
|
|
"Microsoft.Testing.Platform": {
|
|
"type": "Transitive",
|
|
"resolved": "1.9.1",
|
|
"contentHash": "QafNtNSmEI0zazdebnsIkDKmFtTSpmx/5PLOjURWwozcPb3tvRxzosQSL8xwYNM1iPhhKiBksXZyRSE2COisrA=="
|
|
},
|
|
"Microsoft.Testing.Platform.MSBuild": {
|
|
"type": "Transitive",
|
|
"resolved": "1.9.1",
|
|
"contentHash": "oTUtyR4X/s9ytuiNA29FGsNCCH0rNmY5Wdm14NCKLjTM1cT9edVSlA+rGS/mVmusPqcP0l/x9qOnMXg16v87RQ==",
|
|
"dependencies": {
|
|
"Microsoft.Testing.Platform": "1.9.1"
|
|
}
|
|
},
|
|
"Microsoft.Win32.Registry": {
|
|
"type": "Transitive",
|
|
"resolved": "5.0.0",
|
|
"contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg=="
|
|
},
|
|
"SharpZipLib": {
|
|
"type": "Transitive",
|
|
"resolved": "1.4.2",
|
|
"contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
|
|
},
|
|
"System.CodeDom": {
|
|
"type": "Transitive",
|
|
"resolved": "6.0.0",
|
|
"contentHash": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA=="
|
|
},
|
|
"System.Diagnostics.EventLog": {
|
|
"type": "Transitive",
|
|
"resolved": "6.0.0",
|
|
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
|
|
},
|
|
"System.Management": {
|
|
"type": "Transitive",
|
|
"resolved": "6.0.1",
|
|
"contentHash": "10J1D0h/lioojphfJ4Fuh5ZUThT/xOVHdV9roGBittKKNP2PMjrvibEdbVTGZcPra1399Ja3tqIJLyQrc5Wmhg==",
|
|
"dependencies": {
|
|
"System.CodeDom": "6.0.0"
|
|
}
|
|
},
|
|
"xunit.analyzers": {
|
|
"type": "Transitive",
|
|
"resolved": "1.27.0",
|
|
"contentHash": "y/pxIQaLvk/kxAoDkZW9GnHLCEqzwl5TW0vtX3pweyQpjizB9y3DXhb9pkw2dGeUqhLjsxvvJM1k89JowU6z3g=="
|
|
},
|
|
"xunit.v3.assert": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "BPciBghgEEaJN/JG00QfCYDfEfnLgQhfnYEy+j1izoeHVNYd5+3Wm8GJ6JgYysOhpBPYGE+sbf75JtrRc7jrdA=="
|
|
},
|
|
"xunit.v3.common": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "Hj775PEH6GTbbg0wfKRvG2hNspDCvTH9irXhH4qIWgdrOSV1sQlqPie+DOvFeigsFg2fxSM3ZAaaCDQs+KreFA==",
|
|
"dependencies": {
|
|
"Microsoft.Bcl.AsyncInterfaces": "6.0.0"
|
|
}
|
|
},
|
|
"xunit.v3.core.mtp-v1": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "Ga5aA2Ca9ktz+5k3g5ukzwfexwoqwDUpV6z7atSEUvqtd6JuybU1XopHqg1oFd78QdTfZgZE9h5sHpO4qYIi5w==",
|
|
"dependencies": {
|
|
"Microsoft.Testing.Extensions.Telemetry": "1.9.1",
|
|
"Microsoft.Testing.Extensions.TrxReport.Abstractions": "1.9.1",
|
|
"Microsoft.Testing.Platform": "1.9.1",
|
|
"Microsoft.Testing.Platform.MSBuild": "1.9.1",
|
|
"xunit.v3.extensibility.core": "[3.2.2]",
|
|
"xunit.v3.runner.inproc.console": "[3.2.2]"
|
|
}
|
|
},
|
|
"xunit.v3.extensibility.core": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "srY8z/oMPvh/t8axtO2DwrHajhFMH7tnqKildvYrVQIfICi8fOn3yIBWkVPAcrKmHMwvXRJ/XsQM3VMR6DOYfQ==",
|
|
"dependencies": {
|
|
"xunit.v3.common": "[3.2.2]"
|
|
}
|
|
},
|
|
"xunit.v3.mtp-v1": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "O41aAzYKBT5PWqATa1oEWVNCyEUypFQ4va6K0kz37dduV3EKzXNMaV2UnEhufzU4Cce1I33gg0oldS8tGL5I0A==",
|
|
"dependencies": {
|
|
"xunit.analyzers": "1.27.0",
|
|
"xunit.v3.assert": "[3.2.2]",
|
|
"xunit.v3.core.mtp-v1": "[3.2.2]"
|
|
}
|
|
},
|
|
"xunit.v3.runner.common": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "/hkHkQCzGrugelOAehprm7RIWdsUFVmIVaD6jDH/8DNGCymTlKKPTbGokD5czbAfqfex47mBP0sb0zbHYwrO/g==",
|
|
"dependencies": {
|
|
"Microsoft.Win32.Registry": "[5.0.0]",
|
|
"xunit.v3.common": "[3.2.2]"
|
|
}
|
|
},
|
|
"xunit.v3.runner.inproc.console": {
|
|
"type": "Transitive",
|
|
"resolved": "3.2.2",
|
|
"contentHash": "ulWOdSvCk+bPXijJZ73bth9NyoOHsAs1ZOvamYbCkD4DNLX/Bd29Ve2ZNUwBbK0MqfIYWXHZViy/HKrdEC/izw==",
|
|
"dependencies": {
|
|
"xunit.v3.extensibility.core": "[3.2.2]",
|
|
"xunit.v3.runner.common": "[3.2.2]"
|
|
}
|
|
},
|
|
"dodossh.client.ssh": {
|
|
"type": "Project",
|
|
"dependencies": {
|
|
"SSH.NET": "[2025.1.0, )"
|
|
}
|
|
},
|
|
"BouncyCastle.Cryptography": {
|
|
"type": "CentralTransitive",
|
|
"requested": "[2.6.2, )",
|
|
"resolved": "2.6.2",
|
|
"contentHash": "7oWOcvnntmMKNzDLsdxAYqApt+AjpRpP2CShjMfIa3umZ42UQMvH0tl1qAliYPNYO6vTdcGMqnRrCPmsfzTI1w=="
|
|
}
|
|
}
|
|
}
|
|
} |