2012-07-04 4 views
1

필자는 파이썬 3.2.3으로 작성한 공유 git 저장소 작성 스크립트를 사용하고 있으며 대다수의 스크립트가 작동하고 거의 생산 준비가되어 있지만 (여전히 보안을 유지해야 함)), 나는 어색한 버그에 빠져 있었고, 나는 내 인생에 대해 알 수 없다. 내 반복적 인 변경 모드 섹션 동안이상한 os.chmod 동작

:

try: 
    if (args.debug): 
    print('Recursively changing the access mode of target directory ' + full_path + 
      ' to ' oct(stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) + '.') 
    if (args.debug): 
    print('setting ' + full_path + 
      ' to stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH ') 
    os.chmod(full_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) 
    for root, dirs, files in os.walk(full_path): 
    for spam in dirs: 
     if (args.debug): 
     print('spam in dirs: ' + spam + 
       '; stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH: ') 
     os.chmod(os.path.join(root, spam), stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) 
    for eggs in files: 
     if (args.debug): 
     print('eggs in files: ' + eggs + 
       '; stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH: ') 
     os.chmod(os.path.join(root, eggs), stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) 
except OSError as e: 
    if (args.debug): 
    print('OSError raised during recursive chmod ' + 
      oct(stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) + ' setting. ' + 
      'Removing the partially created repository.') 
    shutil.rmtree(full_path) 

것은 나는 문제에 실행 된 - 올바르게 제대로 내 디렉토리 권한을 설정 아니에요. 실제로, 그것은 완전한 반대를하고있다; 그것은 모든 나의 디렉토리 허가를 벗겨 내고있다. 디렉토리 트리 스크립트를 실행 한 후이 유사합니다

d-----S--- 7 mat users 4096 Jul 3 23:10 test 
ls: cannot open directory /home/mat/git/test: Permission denied 

합니다 (setgid를 비트는 나중에, 작업 루프로 설정)로, 는 물론, 내가 모르는 뭔가가있어,하지만 난 정확히 말할 수 없다 stat 모듈의 상수를 사용하고 있습니다. 그리고 그들을 함께 biting ORing 내가 찾는 0o744 값을 얻을 수 있습니다.

누구나 내가 stat 모듈의 상수 대신에 8 진수를 사용한다고 제안하기 전에, 같은 결과로 시도해 보았습니다.

도움이 될 것입니다. ~ M

+3

귀하의 setgid 루프가 다른 권한을 삭제할 수 있습니까? –

+1

@ire_and_curses : 질문의 코드가 괜찮은 것 같아서 답변이 될 수 있습니다. – EOL

+0

@shadowjester :'if (args.debug)'에 괄호를 넣는 것은 매우 드문 일입니다; 그들을 제거하는 것이 좋을 것입니다. 비슷하게, 문자열을 출력하기 위해서'format()'문자열 메소드를 사용할 수 있습니다 : 이것은 다중 문자열 연결을 사용하는 것보다 더 일반적입니다. – EOL

답변

1
코드의 나머지 부분은 좋아 보인다 때문에 보인다

(이 문제 이후, 완전성에 대한 응답으로이 게시., 의견에 따라 경찰)

당신의 setgid 루프가 삭제 될 수 있습니다처럼 이전 사용 권한.