* keep track of things. If the HTTP request doesn't belong to any currently
* active session, a new session is started.
*
- * Copyright (c) 1996-2011 by the citadel.org team
+ * Copyright (c) 1996-2012 by the citadel.org team
*
* This program is open source software. You can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
+ * modify it under the terms of the GNU General Public License version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "webcit.h"
&& (!strcasecmp(ChrPtr(Hdr->c_password), ChrPtr(sptr->wc_password)))
&& (sptr->killthis == 0)
) {
- syslog(LOG_DEBUG, "\033[32m-- matched a session with the same http-auth\033[0m");
+ syslog(LOG_DEBUG, "Matched a session with the same http-auth");
TheSession = sptr;
}
break;
if ( (Hdr->HR.desired_session != 0)
&& (sptr->wc_session == Hdr->HR.desired_session)
) {
- syslog(LOG_DEBUG, "\033[32m-- matched a session with the same cookie\033[0m");
+ syslog(LOG_DEBUG, "Matched a session with the same cookie");
TheSession = sptr;
}
break;
case NO_AUTH:
/* Any unbound session is a candidate */
if ( (sptr->wc_session == 0) && (sptr->inuse == 0) ) {
- syslog(LOG_DEBUG, "\033[32m-- reusing an unbound session\033[0m");
+ syslog(LOG_DEBUG, "Reusing an unbound session");
TheSession = sptr;
}
break;
}
CtdlLogResult(pthread_mutex_unlock(ListMutex));
if (TheSession == NULL) {
- syslog(LOG_DEBUG, "\033[32m-- no existing session was matched\033[0m");
+ syslog(LOG_DEBUG, "No existing session was matched");
}
return TheSession;
}
void *vLine, *vHandler;
const char *Pos = NULL;
-
Hdr->HR.ReqLine = Line;
/* The requesttype... GET, POST... */
StrBufExtract_token(Buf, Hdr->HR.ReqLine, 0, ' ');
}
if (Hdr->HR.Handler != NULL) {
- if ((Hdr->HR.Handler->Flags & BOGUS) != 0)
+ if ((Hdr->HR.Handler->Flags & BOGUS) != 0) {
return 1;
+ }
Hdr->HR.DontNeedAuth = (
((Hdr->HR.Handler->Flags & ISSTATIC) != 0) ||
((Hdr->HR.Handler->Flags & ANONYMOUS) != 0)
- );
+ );
}
else {
- Hdr->HR.DontNeedAuth = 1; /* Flat request? show him the login screen... */
+ /* If this is a "flat" request for the root, display the configured landing page. */
+ int return_value;
+ StrBuf *NewLine = NewStrBuf();
+ Hdr->HR.DontNeedAuth = 1;
+ StrBufAppendPrintf(NewLine, "GET /landing?go=%s HTTP/1.0", ChrPtr(Buf));
+ syslog(LOG_DEBUG, "Replacing with: %s", ChrPtr(NewLine));
+ return_value = ReadHttpSubject(Hdr, NewLine, Buf);
+ FreeStrBuf(&NewLine);
+ return return_value;
}
return 0;
TheSession = CreateSession(1, 0, &SessionList, Hdr, &SessionListMutex);
}
- /*
- * If a language was requested via a cookie, select that language now.
- */
- if (StrLength(Hdr->c_language) > 0) {
- syslog(9, "Session cookie requests language '%s'", ChrPtr(Hdr->c_language));
- set_selected_language(ChrPtr(Hdr->c_language));
- go_selected_language();
- }
-
/*
* Reject transactions which require http-auth, if http-auth was not provided
*/
&& (Hdr->HR.Handler != NULL)
&& ((XHTTP_COMMANDS & Hdr->HR.Handler->Flags) == XHTTP_COMMANDS)
) {
- syslog(LOG_DEBUG, "\033[35m -- http-auth required but not provided\033[0m");
+ syslog(LOG_DEBUG, "http-auth required but not provided");
OverrideRequest(Hdr, HKEY("GET /401 HTTP/1.0"));
Hdr->HR.prohibit_caching = 1;
- /* FIXME -- we have to clear the cookie here */
}
/*
TheSession->lastreq = time(NULL); /* log */
TheSession->Hdr = Hdr;
+ /*
+ * If a language was requested via a cookie, select that language now.
+ */
+ if (StrLength(Hdr->c_language) > 0) {
+ syslog(LOG_DEBUG, "Session cookie requests language '%s'", ChrPtr(Hdr->c_language));
+ set_selected_language(ChrPtr(Hdr->c_language));
+ go_selected_language();
+ }
+
+ /*
+ * do the transaction
+ */
session_attach_modules(TheSession);
- session_loop(); /* do transaction */
+ session_loop();
/* How long did this transaction take? */
gettimeofday(&tx_finish, NULL);
"DELETE",
"HEAD",
"MOVE",
- "COPY"
+ "COPY",
+ "REPORT"
};
void
v = malloc(sizeof(long));
*v = eCOPY;
Put(HttpReqTypes, HKEY("COPY"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eREPORT;
+ Put(HttpReqTypes, HKEY("REPORT"), v, NULL);
}
void