~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ssh.py

  • Committer: Patch Queue Manager
  • Date: 2014-04-03 07:45:32 UTC
  • mfrom: (6591.1.3 lp1030521)
  • Revision ID: pqm@pqm.ubuntu.com-20140403074532-0sdwrky6ie4y20l4
(vila) Use LooseVersion from distutils to check Pyrex/Cython version in
 order to handle non-integers in the version string. (Andrew Starr-Bochicchio)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
"""Foundation SSH support for SFTP and smart server."""
19
19
 
 
20
from __future__ import absolute_import
 
21
 
20
22
import errno
21
23
import getpass
22
24
import logging
352
354
class SubprocessVendor(SSHVendor):
353
355
    """Abstract base class for vendors that use pipes to a subprocess."""
354
356
 
 
357
    # In general stderr should be inherited from the parent process so prompts
 
358
    # are visible on the terminal. This can be overriden to another file for
 
359
    # tests, but beware of using PIPE which may hang due to not being read.
 
360
    _stderr_target = None
 
361
 
355
362
    def _connect(self, argv):
356
363
        # Attempt to make a socketpair to use as stdin/stdout for the SSH
357
364
        # subprocess.  We prefer sockets to pipes because they support
368
375
        else:
369
376
            stdin = stdout = subproc_sock
370
377
        proc = subprocess.Popen(argv, stdin=stdin, stdout=stdout,
 
378
                                stderr=self._stderr_target,
371
379
                                **os_specific_subprocess_params())
372
380
        if subproc_sock is not None:
373
381
            subproc_sock.close()
573
581
        return True
574
582
    except paramiko.PasswordRequiredException:
575
583
        password = ui.ui_factory.get_password(
576
 
            prompt='SSH %(filename)s password', filename=filename)
 
584
            prompt=u'SSH %(filename)s password',
 
585
            filename=filename.decode(osutils._fs_enc))
577
586
        try:
578
587
            key = pkey_class.from_private_key_file(filename, password)
579
588
            paramiko_transport.auth_publickey(username, key)