| 
														
															@@ -32,6 +32,10 @@ from .low_level import AES, bytes_to_long, bytes_to_int, num_aes_blocks, hmac_sh 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 PREFIX = b'\0' * 8 
														 | 
														
														 | 
														
															 PREFIX = b'\0' * 8 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+class NoPassphraseFailure(Error): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    """can not acquire a passphrase: {}""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 class PassphraseWrong(Error): 
														 | 
														
														 | 
														
															 class PassphraseWrong(Error): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """passphrase supplied in BORG_PASSPHRASE or by BORG_PASSCOMMAND is incorrect.""" 
														 | 
														
														 | 
														
															     """passphrase supplied in BORG_PASSPHRASE or by BORG_PASSCOMMAND is incorrect.""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -451,7 +455,19 @@ class Passphrase(str): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @classmethod 
														 | 
														
														 | 
														
															     @classmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def getpass(cls, prompt): 
														 | 
														
														 | 
														
															     def getpass(cls, prompt): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        return cls(getpass.getpass(prompt)) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            pw = getpass.getpass(prompt) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        except EOFError: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if prompt: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                print()  # avoid err msg appearing right of prompt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            msg = [] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            for env_var in 'BORG_PASSPHRASE', 'BORG_PASSCOMMAND': 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                env_var_set = os.environ.get(env_var) is not None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                msg.append('%s is %s.' % (env_var, 'set' if env_var_set else 'not set')) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            msg.append('Interactive password query failed.') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            raise NoPassphraseFailure(' '.join(msg)) from None 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        else: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return cls(pw) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @classmethod 
														 | 
														
														 | 
														
															     @classmethod 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def verification(cls, passphrase): 
														 | 
														
														 | 
														
															     def verification(cls, passphrase): 
														 |