File tree Expand file tree Collapse file tree 2 files changed +62
-3
lines changed
src/snowflake/connector/auth Expand file tree Collapse file tree 2 files changed +62
-3
lines changed Original file line number Diff line number Diff line change @@ -84,7 +84,10 @@ def __init__(
8484 else :
8585 self ._socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEPORT , 1 )
8686
87- port = parsed_uri .port or 0
87+ if parsed_redirect .hostname in ("localhost" , "127.0.0.1" ):
88+ port = parsed_redirect .port or 0
89+ else :
90+ port = parsed_uri .port or 0
8891 for attempt in range (1 , self .DEFAULT_MAX_ATTEMPTS + 1 ):
8992 try :
9093 self ._socket .bind (
@@ -125,9 +128,12 @@ def __init__(
125128 query = parsed_uri .query ,
126129 fragment = parsed_uri .fragment ,
127130 )
128- if parsed_redirect .hostname in ("localhost" , "127.0.0.1" ):
131+ if (
132+ parsed_redirect .hostname in ("localhost" , "127.0.0.1" )
133+ and port != parsed_redirect .port
134+ ):
129135 logger .debug (
130- f"Redirect URI hostname is { parsed_redirect . hostname } , redirect port { parsed_redirect .port } will be changed to the server port { port } ."
136+ f"Updating redirect port { parsed_redirect .port } to match the server port { port } ."
131137 )
132138 self ._redirect_uri = urllib .parse .ParseResult (
133139 scheme = parsed_redirect .scheme ,
Original file line number Diff line number Diff line change @@ -122,6 +122,59 @@ def test_auth_callback_server_updates_localhost_redirect_uri_port_to_match_socke
122122 assert callback_server ._redirect_uri .port == callback_server .port
123123
124124
125+ @pytest .mark .parametrize (
126+ "socket_host" ,
127+ [
128+ "127.0.0.1" ,
129+ "localhost" ,
130+ ],
131+ )
132+ @pytest .mark .parametrize (
133+ "socket_port" ,
134+ [
135+ "" ,
136+ ":0" ,
137+ ":12345" ,
138+ ],
139+ )
140+ @pytest .mark .parametrize (
141+ "redirect_host" ,
142+ [
143+ "127.0.0.1" ,
144+ "localhost" ,
145+ ],
146+ )
147+ @pytest .mark .parametrize (
148+ "redirect_port" ,
149+ [
150+ 54321 ,
151+ 54320 ,
152+ ],
153+ )
154+ @pytest .mark .parametrize (
155+ "dontwait" ,
156+ ["false" , "true" ],
157+ )
158+ @pytest .mark .parametrize ("reuse_port" , ["true" , "false" ])
159+ def test_auth_callback_server_uses_redirect_uri_port_when_specified (
160+ monkeypatch ,
161+ socket_host ,
162+ socket_port ,
163+ redirect_host ,
164+ redirect_port ,
165+ dontwait ,
166+ reuse_port ,
167+ ) -> None :
168+ monkeypatch .setenv ("SNOWFLAKE_AUTH_SOCKET_REUSE_PORT" , reuse_port )
169+ monkeypatch .setenv ("SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT" , dontwait )
170+ with AuthHttpServer (
171+ uri = f"http://{ socket_host } { socket_port } /test_request" ,
172+ redirect_uri = f"http://{ redirect_host } :{ redirect_port } /test_request" ,
173+ ) as callback_server :
174+ assert callback_server .port == redirect_port
175+ assert callback_server ._redirect_uri .port == redirect_port
176+
177+
125178@pytest .mark .parametrize (
126179 "socket_host" ,
127180 [
You can’t perform that action at this time.
0 commit comments