731f609d40cd0b0d4a7bcd27ed79d3a04ff3c22a
max
  Thu Jun 15 10:04:23 2017 -0700
making hgLogin create links as it was before my recent changes, so return to
the status at commit 263daca0593f4d67610f2466cdcdb262f27d6a67. This code is
only relevant when no returnto argument is specified (which shouldn't happen
as long as people click around on our website). the relativeLink hg.conf option
is only used on the CIRM server. refs #19630

diff --git src/hg/hgLogin/hgLogin.c src/hg/hgLogin/hgLogin.c
index fcc77df..a0e52bd 100644
--- src/hg/hgLogin/hgLogin.c
+++ src/hg/hgLogin/hgLogin.c
@@ -287,35 +287,44 @@
 struct dyString *getLoginCookieJS(char *userName, uint idx)
 /* returns javascript statements that set the cookies associated with
  * logging in as a particular user */
 {
 struct dyString *result = dyStringNew(1024);
 struct slName *newCookies = loginLoginUser(userName, idx), *sl;
 for (sl = newCookies;  sl != NULL;  sl = sl->next)
     dyStringPrintf(result, " document.cookie = '%s';", sl->name);
 return result; 
 }
 
 char *getReturnToURL()
 /* get URL from cart var returnto; if empty, make URL to hgSession on login host.  */
 {
 char *returnURL = cartUsualString(cart, "returnto", "");
+char *hgLoginHost = wikiLinkHost();
+char *cgiDir = cgiScriptDirUrl();
 char returnTo[2048];
   
+boolean relativeLink = cfgOptionBooleanDefault(CFG_LOGIN_RELATIVE, FALSE);
 if (!returnURL || sameString(returnURL,""))
-   safef(returnTo, sizeof(returnTo), "%shgSession?hgS_doMainPage=1",
-    wikiServerAndCgiDir());
+    // XX replace with call to new function hLoginHostUrl
+   if (relativeLink)
+       // reverse proxies and all-https sites have no need for absolute links
+       safef(returnTo, sizeof(returnTo), "%shgSession?hgS_doMainPage=1", cgiDir);
+   else 
+       safef(returnTo, sizeof(returnTo),
+             "http%s://%s%shgSession?hgS_doMainPage=1",
+             cgiAppendSForHttps(), hgLoginHost, cgiDir);
 else
    safecpy(returnTo, sizeof(returnTo), returnURL);
 return cloneString(returnTo);
 }
 
 void returnToURL(int delay)
 /* delay for delay mill-seconds then return to the "returnto" URL */
 {
 char *returnURL = getReturnToURL();
 jsInlineF(
     "setTimeout(function(){location='%s';}, %d);\n"
     , returnURL, delay);
 }
 
 static void redirectToLoginPage(char *paramStr)