12491Szelenkov@nginx.comfrom unit.applications.lang.python import ApplicationPython 22182Szelenkov@nginx.comfrom unit.option import option 32182Szelenkov@nginx.com 42488Szelenkov@nginx.comprerequisites = { 52488Szelenkov@nginx.com 'modules': {'python': 'any'}, 62488Szelenkov@nginx.com 'features': {'unix_abstract': True}, 72488Szelenkov@nginx.com} 82488Szelenkov@nginx.com 92491Szelenkov@nginx.comclient = ApplicationPython() 102182Szelenkov@nginx.com 112182Szelenkov@nginx.com 122491Szelenkov@nginx.comdef test_unix_abstract_source(): 132491Szelenkov@nginx.com addr = '\0sock' 142491Szelenkov@nginx.com 152491Szelenkov@nginx.com def source(source): 162491Szelenkov@nginx.com assert 'success' in client.conf(f'"{source}"', 'routes/0/match/source') 172182Szelenkov@nginx.com 182491Szelenkov@nginx.com assert 'success' in client.conf( 192491Szelenkov@nginx.com { 202491Szelenkov@nginx.com "listeners": { 21*2592Szelenkov@nginx.com "127.0.0.1:8080": {"pass": "routes"}, 222491Szelenkov@nginx.com f"unix:@{addr[1:]}": {"pass": "routes"}, 232491Szelenkov@nginx.com }, 242491Szelenkov@nginx.com "routes": [ 252491Szelenkov@nginx.com { 262491Szelenkov@nginx.com "match": {"source": "!0.0.0.0/0"}, 272491Szelenkov@nginx.com "action": {"return": 200}, 282491Szelenkov@nginx.com } 292491Szelenkov@nginx.com ], 302491Szelenkov@nginx.com "applications": {}, 312491Szelenkov@nginx.com } 322491Szelenkov@nginx.com ) 332182Szelenkov@nginx.com 342491Szelenkov@nginx.com assert client.get(sock_type='unix', addr=addr)['status'] == 200, 'neg ipv4' 352182Szelenkov@nginx.com 362491Szelenkov@nginx.com source("!::/0") 372491Szelenkov@nginx.com assert client.get(sock_type='unix', addr=addr)['status'] == 200, 'neg ipv6' 382491Szelenkov@nginx.com 392491Szelenkov@nginx.com source("unix") 402491Szelenkov@nginx.com assert client.get()['status'] == 404, 'ipv4' 412491Szelenkov@nginx.com assert client.get(sock_type='unix', addr=addr)['status'] == 200, 'unix' 422182Szelenkov@nginx.com 432182Szelenkov@nginx.com 442491Szelenkov@nginx.comdef test_unix_abstract_client_ip(): 452491Szelenkov@nginx.com def get_xff(xff, sock_type='ipv4'): 462491Szelenkov@nginx.com address = { 47*2592Szelenkov@nginx.com 'ipv4': ('127.0.0.1', 8080), 48*2592Szelenkov@nginx.com 'ipv6': ('::1', 8081), 492491Szelenkov@nginx.com 'unix': ('\0sock', None), 502491Szelenkov@nginx.com } 512491Szelenkov@nginx.com (addr, port) = address[sock_type] 522182Szelenkov@nginx.com 532491Szelenkov@nginx.com return client.get( 542491Szelenkov@nginx.com sock_type=sock_type, 552491Szelenkov@nginx.com addr=addr, 562491Szelenkov@nginx.com port=port, 572491Szelenkov@nginx.com headers={'Connection': 'close', 'X-Forwarded-For': xff}, 582491Szelenkov@nginx.com )['body'] 592182Szelenkov@nginx.com 602491Szelenkov@nginx.com client_ip_dir = f"{option.test_dir}/python/client_ip" 612491Szelenkov@nginx.com assert 'success' in client.conf( 622491Szelenkov@nginx.com { 632491Szelenkov@nginx.com "listeners": { 64*2592Szelenkov@nginx.com "127.0.0.1:8080": { 652491Szelenkov@nginx.com "client_ip": { 662491Szelenkov@nginx.com "header": "X-Forwarded-For", 672491Szelenkov@nginx.com "source": "unix", 682182Szelenkov@nginx.com }, 692491Szelenkov@nginx.com "pass": "applications/client_ip", 702491Szelenkov@nginx.com }, 71*2592Szelenkov@nginx.com "[::1]:8081": { 722491Szelenkov@nginx.com "client_ip": { 732491Szelenkov@nginx.com "header": "X-Forwarded-For", 742491Szelenkov@nginx.com "source": "unix", 752182Szelenkov@nginx.com }, 762491Szelenkov@nginx.com "pass": "applications/client_ip", 772182Szelenkov@nginx.com }, 782491Szelenkov@nginx.com "unix:@sock": { 792182Szelenkov@nginx.com "client_ip": { 802491Szelenkov@nginx.com "header": "X-Forwarded-For", 812491Szelenkov@nginx.com "source": "unix", 822491Szelenkov@nginx.com }, 832491Szelenkov@nginx.com "pass": "applications/client_ip", 842182Szelenkov@nginx.com }, 852491Szelenkov@nginx.com }, 862491Szelenkov@nginx.com "applications": { 872491Szelenkov@nginx.com "client_ip": { 882491Szelenkov@nginx.com "type": client.get_application_type(), 892491Szelenkov@nginx.com "processes": {"spare": 0}, 902491Szelenkov@nginx.com "path": client_ip_dir, 912491Szelenkov@nginx.com "working_directory": client_ip_dir, 922491Szelenkov@nginx.com "module": "wsgi", 932491Szelenkov@nginx.com } 942491Szelenkov@nginx.com }, 952491Szelenkov@nginx.com } 962491Szelenkov@nginx.com ) 972182Szelenkov@nginx.com 982491Szelenkov@nginx.com assert get_xff('1.1.1.1') == '127.0.0.1', 'bad source ipv4' 992491Szelenkov@nginx.com assert get_xff('1.1.1.1', 'ipv6') == '::1', 'bad source ipv6' 1002491Szelenkov@nginx.com 1012491Szelenkov@nginx.com for ip in [ 1022491Szelenkov@nginx.com '1.1.1.1', 1032491Szelenkov@nginx.com '::11.22.33.44', 1042491Szelenkov@nginx.com ]: 1052491Szelenkov@nginx.com assert get_xff(ip, 'unix') == ip, 'replace' 106