BB#106: add default_port argument to extract_http_url and rename it to extract_url
There is in fact nothing http-specific any more about this function, hence
the rename. The input has been stripped of the <proto>:// header anyways.
This in preparation of fixing bug BB#106: ssl fails with literal ipv6 addrs.
Signed-off-by: Michael Adam <obnox@samba.org>
(cherry picked from commit 98f77ef8c7)
			
			
This commit is contained in:
		
							parent
							
								
									e0ad093b0f
								
							
						
					
					
						commit
						08c44a36ba
					
				
							
								
								
									
										14
									
								
								src/reqs.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/reqs.c
									
									
									
									
									
								
							@ -186,10 +186,14 @@ static int strip_return_port (char *host)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Pull the information out of the URL line.  This will handle both HTTP
 | 
			
		||||
 * and FTP (proxied) URLs.
 | 
			
		||||
 * Pull the information out of the URL line.
 | 
			
		||||
 * This expects urls with the initial '<proto>://'
 | 
			
		||||
 * part stripped and hence can handle http urls,
 | 
			
		||||
 * (proxied) ftp:// urls and https-requests that
 | 
			
		||||
 * come in without the proto:// part via CONNECT.
 | 
			
		||||
 */
 | 
			
		||||
static int extract_http_url (const char *url, struct request_s *request)
 | 
			
		||||
static int extract_url (const char *url, int default_port,
 | 
			
		||||
                        struct request_s *request)
 | 
			
		||||
{
 | 
			
		||||
        char *p;
 | 
			
		||||
        int len;
 | 
			
		||||
@ -216,7 +220,7 @@ static int extract_http_url (const char *url, struct request_s *request)
 | 
			
		||||
 | 
			
		||||
        /* Find a proper port in www.site.com:8001 URLs */
 | 
			
		||||
        port = strip_return_port (request->host);
 | 
			
		||||
        request->port = (port != 0) ? port : HTTP_PORT;
 | 
			
		||||
        request->port = (port != 0) ? port : default_port;
 | 
			
		||||
 | 
			
		||||
        /* Remove any surrounding '[' and ']' from IPv6 literals */
 | 
			
		||||
        p = strrchr (request->host, ']');
 | 
			
		||||
@ -413,7 +417,7 @@ BAD_REQUEST_ERROR:
 | 
			
		||||
        {
 | 
			
		||||
                char *skipped_type = strstr (url, "//") + 2;
 | 
			
		||||
 | 
			
		||||
                if (extract_http_url (skipped_type, request) < 0) {
 | 
			
		||||
                if (extract_url (skipped_type, HTTP_PORT, request) < 0) {
 | 
			
		||||
                        indicate_http_error (connptr, 400, "Bad Request",
 | 
			
		||||
                                             "detail", "Could not parse URL",
 | 
			
		||||
                                             "url", url, NULL);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user