|
@@ -1404,7 +1404,9 @@ check_http (void)
|
|
|
#define HD2 URI_HTTP "://" URI_HOST "/" URI_PATH
|
|
#define HD2 URI_HTTP "://" URI_HOST "/" URI_PATH
|
|
|
#define HD3 URI_HTTP "://" URI_HOST ":" URI_PORT
|
|
#define HD3 URI_HTTP "://" URI_HOST ":" URI_PORT
|
|
|
#define HD4 URI_HTTP "://" URI_HOST
|
|
#define HD4 URI_HTTP "://" URI_HOST
|
|
|
-#define HD5 URI_PATH
|
|
|
|
|
|
|
+/* HD5 - relative reference redirect like //www.site.org/test https://tools.ietf.org/html/rfc3986 */
|
|
|
|
|
+#define HD5 URI_HTTP "//" URI_HOST "/" URI_PATH
|
|
|
|
|
+#define HD6 URI_PATH
|
|
|
|
|
|
|
|
void
|
|
void
|
|
|
redir (char *pos, char *status_line)
|
|
redir (char *pos, char *status_line)
|
|
@@ -1482,8 +1484,19 @@ redir (char *pos, char *status_line)
|
|
|
i = server_port_check (use_ssl);
|
|
i = server_port_check (use_ssl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /* URI_HTTP, URI_HOST, URI_PATH */
|
|
|
|
|
+ else if (sscanf (pos, HD5, addr, url) == 2) {
|
|
|
|
|
+ if(use_ssl)
|
|
|
|
|
+ strcpy (type,"https");
|
|
|
|
|
+ else
|
|
|
|
|
+ strcpy (type,"server_type");
|
|
|
|
|
+ xasprintf(&url, "/%s", url);
|
|
|
|
|
+ use_ssl = server_type_check (type);
|
|
|
|
|
+ i = server_port_check (use_ssl);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/* URI_PATH */
|
|
/* URI_PATH */
|
|
|
- else if (sscanf (pos, HD5, url) == 1) {
|
|
|
|
|
|
|
+ else if (sscanf (pos, HD6, url) == 1) {
|
|
|
/* relative url */
|
|
/* relative url */
|
|
|
if ((url[0] != '/')) {
|
|
if ((url[0] != '/')) {
|
|
|
if ((x = strrchr(server_url, '/')))
|
|
if ((x = strrchr(server_url, '/')))
|