~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

  • Committer: Andrew Bennetts
  • Date: 2008-07-28 06:53:44 UTC
  • mfrom: (3581 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3583.
  • Revision ID: andrew.bennetts@canonical.com-20080728065344-ocndjoycs903q6fz
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
519
519
        try:
520
520
            self._get_sftp().mkdir(abspath, local_mode)
521
521
            if mode is not None:
522
 
                self._get_sftp().chmod(abspath, mode=mode)
 
522
                # chmod a dir through sftp will erase any sgid bit set
 
523
                # on the server side.  So, if the bit mode are already
 
524
                # set, avoid the chmod.  If the mode is not fine but
 
525
                # the sgid bit is set, report a warning to the user
 
526
                # with the umask fix.
 
527
                stat = self._get_sftp().lstat(abspath)
 
528
                mode = mode & 0777 # can't set special bits anyway
 
529
                if mode != stat.st_mode & 0777:
 
530
                    if stat.st_mode & 06000:
 
531
                        warning('About to chmod %s over sftp, which will result'
 
532
                                ' in its suid or sgid bits being cleared.  If'
 
533
                                ' you want to preserve those bits, change your '
 
534
                                ' environment on the server to use umask 0%03o.'
 
535
                                % (abspath, 0777 - mode))
 
536
                    self._get_sftp().chmod(abspath, mode=mode)
523
537
        except (paramiko.SSHException, IOError), e:
524
538
            self._translate_io_exception(e, abspath, ': unable to mkdir',
525
539
                failure_exc=FileExists)