|
| 1 | +# test_paramiko_vendor.py |
| 2 | +# |
| 3 | +# Dulwich is dual-licensed under the Apache License, Version 2.0 and the GNU |
| 4 | +# General Public License as public by the Free Software Foundation; version 2.0 |
| 5 | +# or (at your option) any later version. You can redistribute it and/or |
| 6 | +# modify it under the terms of either of these two licenses. |
| 7 | +# |
| 8 | +# Unless required by applicable law or agreed to in writing, software |
| 9 | +# distributed under the License is distributed on an "AS IS" BASIS, |
| 10 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 11 | +# See the License for the specific language governing permissions and |
| 12 | +# limitations under the License. |
| 13 | +# |
| 14 | +# You should have received a copy of the licenses; if not, see |
| 15 | +# <http://www.gnu.org/licenses/> for a copy of the GNU General Public License |
| 16 | +# and <http://www.apache.org/licenses/LICENSE-2.0> for a copy of the Apache |
| 17 | +# License, Version 2.0. |
| 18 | +# |
| 19 | + |
| 20 | +"""Tests for paramiko_vendor.""" |
| 21 | + |
| 22 | +from io import StringIO |
| 23 | + |
| 24 | +try: |
| 25 | + import paramiko |
| 26 | +except ImportError: |
| 27 | + has_paramiko = False |
| 28 | +else: |
| 29 | + has_paramiko = True |
| 30 | + |
| 31 | + class Server(paramiko.ServerInterface): |
| 32 | + """http://docs.paramiko.org/en/2.4/api/server.html.""" |
| 33 | + |
| 34 | + def __init__(self, commands, *args, **kwargs) -> None: |
| 35 | + super().__init__(*args, **kwargs) |
| 36 | + self.commands = commands |
| 37 | + |
| 38 | + def check_channel_exec_request(self, channel, command): |
| 39 | + self.commands.append(command) |
| 40 | + return True |
| 41 | + |
| 42 | + def check_auth_password(self, username, password): |
| 43 | + if username == USER and password == PASSWORD: |
| 44 | + return paramiko.AUTH_SUCCESSFUL |
| 45 | + return paramiko.AUTH_FAILED |
| 46 | + |
| 47 | + def check_auth_publickey(self, username, key): |
| 48 | + pubkey = paramiko.RSAKey.from_private_key(StringIO(CLIENT_KEY)) |
| 49 | + if username == USER and key == pubkey: |
| 50 | + return paramiko.AUTH_SUCCESSFUL |
| 51 | + return paramiko.AUTH_FAILED |
| 52 | + |
| 53 | + def check_channel_request(self, kind, chanid): |
| 54 | + if kind == "session": |
| 55 | + return paramiko.OPEN_SUCCEEDED |
| 56 | + return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED |
| 57 | + |
| 58 | + def get_allowed_auths(self, username): |
| 59 | + return "password,publickey" |
| 60 | + |
| 61 | + |
| 62 | +USER = "testuser" |
| 63 | +PASSWORD = "test" |
| 64 | +SERVER_KEY = """\ |
| 65 | +-----BEGIN RSA PRIVATE KEY----- |
| 66 | +MIIEpAIBAAKCAQEAy/L1sSYAzxsMprtNXW4u/1jGXXkQmQ2xtmKVlR+RlIL3a1BH |
| 67 | +bzTpPlZyjltAAwzIP8XRh0iJFKz5y3zSQChhX47ZGN0NvQsVct8R+YwsUonwfAJ+ |
| 68 | +JN0KBKKvC8fPHlzqBr3gX+ZxqsFH934tQ6wdQPH5eQWtdM8L826lMsH1737uyTGk |
| 69 | ++mCSDjL3c6EzY83g7qhkJU2R4qbi6ne01FaWADzG8sOzXnHT+xpxtk8TTT8yCVUY |
| 70 | +MmBNsSoA/ka3iWz70ghB+6Xb0WpFJZXWq1oYovviPAfZGZSrxBZMxsWMye70SdLl |
| 71 | +TqsBEt0+miIcm9s0fvjWvQuhaHX6mZs5VO4r5QIDAQABAoIBAGYqeYWaYgFdrYLA |
| 72 | +hUrubUCg+g3NHdFuGL4iuIgRXl4lFUh+2KoOuWDu8Uf60iA1AQNhV0sLvQ/Mbv3O |
| 73 | +s4xMLisuZfaclctDiCUZNenqnDFkxEF7BjH1QJV94W5nU4wEQ3/JEmM4D2zYkfKb |
| 74 | +FJW33JeyH6TOgUvohDYYEU1R+J9V8qA243p+ui1uVtNI6Pb0TXJnG5y9Ny4vkSWH |
| 75 | +Fi0QoMPR1r9xJ4SEearGzA/crb4SmmDTKhGSoMsT3d5ATieLmwcS66xWz8w4oFGJ |
| 76 | +yzDq24s4Fp9ccNjMf/xR8XRiekJv835gjEqwF9IXyvgOaq6XJ1iCqGPFDKa25nui |
| 77 | +JnEstOkCgYEA/ZXk7aIanvdeJlTqpX578sJfCnrXLydzE8emk1b7+5mrzGxQ4/pM |
| 78 | +PBQs2f8glT3t0O0mRX9NoRqnwrid88/b+cY4NCOICFZeasX336/gYQxyVeRLJS6Z |
| 79 | +hnGEQqry8qS7PdKAyeHMNmZFrUh4EiHiObymEfQS+mkRUObn0cGBTw8CgYEAzeQU |
| 80 | +D2baec1DawjppKaRynAvWjp+9ry1lZx9unryKVRwjRjkEpw+b3/+hdaF1IvsVSce |
| 81 | +cNj+6W2guZ2tyHuPhZ64/4SJVyE2hKDSKD4xTb2nVjsMeN0bLD2UWXC9mwbx8nWa |
| 82 | +2tmtUZ7a/okQb2cSdosJinRewLNqXIsBXamT1csCgYEA0cXb2RCOQQ6U3dTFPx4A |
| 83 | +3vMXuA2iUKmrsqMoEx6T2LBow/Sefdkik1iFOdipVYwjXP+w9zC2QR1Rxez/DR/X |
| 84 | +8ymceNUjxPHdrSoTQQG29dFcC92MpDeGXQcuyA+uZjcLhbrLOzYEvsOfxBb87NMG |
| 85 | +14hNQPDNekTMREafYo9WrtUCgYAREK54+FVzcwf7fymedA/xb4r9N4v+d3W1iNsC |
| 86 | +8d3Qfyc1CrMct8aVB07ZWQaOr2pPRIbJY7L9NhD0UZVt4I/sy1MaGqonhqE2LP4+ |
| 87 | +R6legDG2e/50ph7yc8gwAaA1kUXMiuLi8Nfkw/3yyvmJwklNegi4aRzRbA2Mzhi2 |
| 88 | +4q9WMQKBgQCb0JNyxHG4pvLWCF/j0Sm1FfvrpnqSv5678n1j4GX7Ka/TubOK1Y4K |
| 89 | +U+Oib7dKa/zQMWehVFNTayrsq6bKVZ6q7zG+IHiRLw4wjeAxREFH6WUjDrn9vl2l |
| 90 | +D48DKbBuBwuVOJWyq3qbfgJXojscgNQklrsPdXVhDwOF0dYxP89HnA== |
| 91 | +-----END RSA PRIVATE KEY-----""" |
| 92 | +CLIENT_KEY = """\ |
| 93 | +-----BEGIN RSA PRIVATE KEY----- |
| 94 | +MIIEpAIBAAKCAQEAxvREKSElPOm/0z/nPO+j5rk2tjdgGcGc7We1QZ6TRXYLu7nN |
| 95 | +GeEFIL4p8N1i6dmB+Eydt7xqCU79MWD6Yy4prFe1+/K1wCDUxIbFMxqQcX5zjJzd |
| 96 | +i8j8PbcaUlVhP/OkjtkSxrXaGDO1BzfdV4iEBtTV/2l3zmLKJlt3jnOHLczP24CB |
| 97 | +DTQKp3rKshbRefzot9Y+wnaK692RsYgsyo9YEP0GyWKG9topCHk13r46J6vGLeuj |
| 98 | +ryUKqmbLJkzbJbIcEqwTDo5iHaCVqaMr5Hrb8BdMucSseqZQJsXSd+9tdRcIblUQ |
| 99 | +38kZjmFMm4SFbruJcpZCNM2wNSZPIRX+3eiwNwIDAQABAoIBAHSacOBSJsr+jIi5 |
| 100 | +KUOTh9IPtzswVUiDKwARCjB9Sf8p4lKR4N1L/n9kNJyQhApeikgGT2GCMftmqgoo |
| 101 | +tlculQoHFgemBlOmak0MV8NNzF5YKEy/GzF0CDH7gJfEpoyetVFrdA+2QS5yD6U9 |
| 102 | +XqKQxiBi2VEqdScmyyeT8AwzNYTnPeH/DOEcnbdRjqiy/CD79F49CQ1lX1Fuqm0K |
| 103 | +I7BivBH1xo/rVnUP4F+IzocDqoga+Pjdj0LTXIgJlHQDSbhsQqWujWQDDuKb+MAw |
| 104 | +sNK4Zf8ErV3j1PyA7f/M5LLq6zgstkW4qikDHo4SpZX8kFOO8tjqb7kujj7XqeaB |
| 105 | +CxqrOTECgYEA73uWkrohcmDJ4KqbuL3tbExSCOUiaIV+sT1eGPNi7GCmXD4eW5Z4 |
| 106 | +75v2IHymW83lORSu/DrQ6sKr1nkuRpqr2iBzRmQpl/H+wahIhBXlnJ25uUjDsuPO |
| 107 | +1Pq2LcmyD+jTxVnmbSe/q7O09gZQw3I6H4+BMHmpbf8tC97lqimzpJ0CgYEA1K0W |
| 108 | +ZL70Xtn9quyHvbtae/BW07NZnxvUg4UaVIAL9Zu34JyplJzyzbIjrmlDbv6aRogH |
| 109 | +/KtuG9tfbf55K/jjqNORiuRtzt1hUN1ye4dyW7tHx2/7lXdlqtyK40rQl8P0kqf8 |
| 110 | +zaS6BqjnobgSdSpg32rWoL/pcBHPdJCJEgQ8zeMCgYEA0/PK8TOhNIzrP1dgGSKn |
| 111 | +hkkJ9etuB5nW5mEM7gJDFDf6JPupfJ/xiwe6z0fjKK9S57EhqgUYMB55XYnE5iIw |
| 112 | +ZQ6BV9SAZ4V7VsRs4dJLdNC3tn/rDGHJBgCaym2PlbsX6rvFT+h1IC8dwv0V79Ui |
| 113 | +Ehq9WTzkMoE8yhvNokvkPZUCgYEAgBAFxv5xGdh79ftdtXLmhnDvZ6S8l6Fjcxqo |
| 114 | +Ay/jg66Tp43OU226iv/0mmZKM8Dd1xC8dnon4GBVc19jSYYiWBulrRPlx0Xo/o+K |
| 115 | +CzZBN1lrXH1i6dqufpc0jq8TMf/N+q1q/c1uMupsKCY1/xVYpc+ok71b7J7c49zQ |
| 116 | +nOeuUW8CgYA9Infooy65FTgbzca0c9kbCUBmcAPQ2ItH3JcPKWPQTDuV62HcT00o |
| 117 | +fZdIV47Nez1W5Clk191RMy8TXuqI54kocciUWpThc6j44hz49oUueb8U4bLcEHzA |
| 118 | +WxtWBWHwxfSmqgTXilEA3ALJp0kNolLnEttnhENwJpZHlqtes0ZA4w== |
| 119 | +-----END RSA PRIVATE KEY-----""" |
0 commit comments