mirror of
				https://github.com/9001/copyparty.git
				synced 2025-11-03 21:43:12 +00:00 
			
		
		
		
	ftp: fix link-local IPv6; closes #628
This commit is contained in:
		@@ -218,6 +218,7 @@ necho() {
 | 
				
			|||||||
	mv pyftpdlib-*/pyftpdlib .
 | 
						mv pyftpdlib-*/pyftpdlib .
 | 
				
			||||||
	rm -rf pyftpdlib-* pyftpdlib/test
 | 
						rm -rf pyftpdlib-* pyftpdlib/test
 | 
				
			||||||
	patch -s -p1 <../scripts/patches/pyftpdlib-win313.patch
 | 
						patch -s -p1 <../scripts/patches/pyftpdlib-win313.patch
 | 
				
			||||||
 | 
						patch -s -p1 <../scripts/patches/pyftpdlib-fe80.patch
 | 
				
			||||||
	for f in pyftpdlib/_async{hat,ore}.py; do
 | 
						for f in pyftpdlib/_async{hat,ore}.py; do
 | 
				
			||||||
		[ -e "$f" ] || continue;
 | 
							[ -e "$f" ] || continue;
 | 
				
			||||||
		iawk 'NR<4||NR>27||!/^#/;NR==4{print"# license: https://opensource.org/licenses/ISC\n"}' $f
 | 
							iawk 'NR<4||NR>27||!/^#/;NR==4{print"# license: https://opensource.org/licenses/ISC\n"}' $f
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										37
									
								
								scripts/patches/pyftpdlib-fe80.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								scripts/patches/pyftpdlib-fe80.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					accept connections from IPv6 link-local addresses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff -NarU1 a/pyftpdlib/handlers.py b/pyftpdlib2/handlers.py
 | 
				
			||||||
 | 
					--- a/pyftpdlib/handlers.py	2024-06-23 14:03:38
 | 
				
			||||||
 | 
					+++ b/pyftpdlib/handlers.py	2025-08-22 21:59:40
 | 
				
			||||||
 | 
					@@ -451,3 +451,4 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-        local_ip = self.cmd_channel.socket.getsockname()[0]
 | 
				
			||||||
 | 
					+        sockname = list(self.cmd_channel.socket.getsockname())
 | 
				
			||||||
 | 
					+        local_ip = sockname[0]
 | 
				
			||||||
 | 
					         if local_ip in self.cmd_channel.masquerade_address_map:
 | 
				
			||||||
 | 
					@@ -459,3 +460,5 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-        if self.cmd_channel.server.socket.family != socket.AF_INET:
 | 
				
			||||||
 | 
					+        if local_ip.startswith('fe') and local_ip[2:3] in "89ab":
 | 
				
			||||||
 | 
					+            af = socket.AF_INET6  # link-local
 | 
				
			||||||
 | 
					+        elif self.cmd_channel.server.socket.family != socket.AF_INET:
 | 
				
			||||||
 | 
					             # dual stack IPv4/IPv6 support
 | 
				
			||||||
 | 
					@@ -472,3 +475,4 @@
 | 
				
			||||||
 | 
					             # free unprivileged random port.
 | 
				
			||||||
 | 
					-            self.bind((local_ip, 0))
 | 
				
			||||||
 | 
					+            sockname[1] = 0
 | 
				
			||||||
 | 
					+            self.bind(tuple(sockname))
 | 
				
			||||||
 | 
					         else:
 | 
				
			||||||
 | 
					@@ -478,4 +482,5 @@
 | 
				
			||||||
 | 
					                 self.set_reuse_addr()
 | 
				
			||||||
 | 
					+                sockname[1] = port
 | 
				
			||||||
 | 
					                 try:
 | 
				
			||||||
 | 
					-                    self.bind((local_ip, port))
 | 
				
			||||||
 | 
					+                    self.bind(tuple(sockname))
 | 
				
			||||||
 | 
					                 except PermissionError:
 | 
				
			||||||
 | 
					@@ -495,3 +500,4 @@
 | 
				
			||||||
 | 
					                         else:
 | 
				
			||||||
 | 
					-                            self.bind((local_ip, 0))
 | 
				
			||||||
 | 
					+                            sockname[1] = 0
 | 
				
			||||||
 | 
					+                            self.bind(tuple(sockname))
 | 
				
			||||||
 | 
					                             self.cmd_channel.log(
 | 
				
			||||||
		Reference in New Issue
	
	Block a user