From 57eba726fbad7b16f7b9624e9d01f16eaccb35b2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sun, 17 May 2009 15:12:55 +0000 Subject: [PATCH] * more fixes, offset in URLS is different now, since we strip the command. --- webcit/context_loop.c | 9 +-------- webcit/downloads.c | 2 +- webcit/messages.c | 22 +++++++++++----------- webcit/paramhandling.c | 10 ++++++---- webcit/roomops.c | 2 +- webcit/vcard_edit.c | 2 +- webcit/webcit.c | 12 +++++++++++- webcit/webcit.h | 1 + 8 files changed, 33 insertions(+), 27 deletions(-) diff --git a/webcit/context_loop.c b/webcit/context_loop.c index 1d1cbb821..1f38768d1 100644 --- a/webcit/context_loop.c +++ b/webcit/context_loop.c @@ -270,7 +270,7 @@ int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf) Args, StrLength(Hdr->ReqLine) - (Args - ChrPtr(Hdr->ReqLine))); - StrBufCutAt(Hdr->ReqLine, 0, Args); + StrBufCutAt(Hdr->ReqLine, 0, Args - 1); } /* don't parse them yet, maybe we don't even care... */ /* now lookup what we are going to do with this... */ @@ -441,13 +441,6 @@ void context_loop(int *sock) /* dbg_PrintHash(HTTPHeaders, nix, NULL); */ - -///HttpHeaderHandler - - - - - /* * If the request is prefixed by "/webcit" then chop that off. This * allows a front end web server to forward all /webcit requests to us diff --git a/webcit/downloads.c b/webcit/downloads.c index b0e7cace3..c8970ef3a 100644 --- a/webcit/downloads.c +++ b/webcit/downloads.c @@ -249,7 +249,7 @@ void download_file(void) int force_download = 1; Buf = NewStrBuf(); - StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 2, '/'); + StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 0, '/'); StrBufUnescape(Buf, 1); serv_printf("OPEN %s", ChrPtr(Buf)); StrBuf_ServGetln(Buf); diff --git a/webcit/messages.c b/webcit/messages.c index 0a9f2c746..055fae22c 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -426,7 +426,7 @@ void embed_message(void) { const StrBuf *Tmpl; StrBuf *CmdBuf = NULL; - msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/'); + msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/'); switch (WCC->Hdr->eReqType) { case eGET: @@ -466,7 +466,7 @@ void print_message(void) { long msgnum = 0L; const StrBuf *Mime; - msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/'); + msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/'); output_headers(0, 0, 0, 0, 0, 0); hprintf("Content-type: text/html\r\n" @@ -490,7 +490,7 @@ void mobile_message_view(void) long msgnum = 0L; const StrBuf *Mime; - msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/'); + msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/'); output_headers(1, 0, 0, 0, 0, 1); begin_burst(); do_template("msgcontrols", NULL); @@ -507,7 +507,7 @@ void display_headers(void) { long msgnum = 0L; char buf[1024]; - msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/'); + msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/'); output_headers(0, 0, 0, 0, 0, 0); hprintf("Content-type: text/plain\r\n" @@ -1738,8 +1738,8 @@ void mimepart(int force_download) StrBuf *ContentType = NewStrBufPlain(HKEY("application/octet-stream")); const char *CT; - msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/'); - att = StrBufExtract_long(WCC->Hdr->ReqLine, 3, '/'); + msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/'); + att = StrBufExtract_long(WCC->Hdr->ReqLine, 1, '/'); Buf = NewStrBuf(); serv_printf("OPNA %ld|%ld", msgnum, att); @@ -1758,7 +1758,7 @@ void mimepart(int force_download) if (!force_download) { if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) { - StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 4, '/'); + StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 2, '/'); CT = GuessMimeByFilename(SKEY(Buf)); } if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) { @@ -1845,8 +1845,8 @@ void view_postpart(void) { StrBuf *filename = NewStrBuf(); StrBuf *partnum = NewStrBuf(); - StrBufExtract_token(partnum, WC->Hdr->ReqLine, 2, '/'); - StrBufExtract_token(filename, WC->Hdr->ReqLine, 3, '/'); + StrBufExtract_token(partnum, WC->Hdr->ReqLine, 0, '/'); + StrBufExtract_token(filename, WC->Hdr->ReqLine, 1, '/'); postpart(partnum, filename, 0); @@ -1858,8 +1858,8 @@ void download_postpart(void) { StrBuf *filename = NewStrBuf(); StrBuf *partnum = NewStrBuf(); - StrBufExtract_token(partnum, WC->Hdr->ReqLine, 2, '/'); - StrBufExtract_token(filename, WC->Hdr->ReqLine, 3, '/'); + StrBufExtract_token(partnum, WC->Hdr->ReqLine, 0, '/'); + StrBufExtract_token(filename, WC->Hdr->ReqLine, 1, '/'); postpart(partnum, filename, 1); diff --git a/webcit/paramhandling.c b/webcit/paramhandling.c index 1f4fc8505..bb7367fdb 100644 --- a/webcit/paramhandling.c +++ b/webcit/paramhandling.c @@ -394,28 +394,30 @@ StrEscPuts(WC->UrlFragment1); void tmplput_url_part(StrBuf *Target, WCTemplputParams *TP) { + StrBuf *Name = NULL; StrBuf *UrlBuf; wcsession *WCC = WC; if (WCC != NULL) { if (TP->Tokens->Params[0]->lvalue == 0) { UrlBuf = NewStrBuf(); - StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 1, '/'); + if (WCC->Hdr->Handler != NULL) + UrlBuf = Name = WCC->Hdr->Handler->Name; } else if (TP->Tokens->Params[0]->lvalue == 1) { UrlBuf = NewStrBuf(); - StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 2, '/'); + StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 0, '/'); } else { UrlBuf = NewStrBuf(); - StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 3, '/'); + StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 1, '/'); } if (UrlBuf == NULL) { LogTemplateError(Target, "urlbuf", ERR_PARM1, TP, "not set."); } StrBufAppendTemplate(Target, TP, UrlBuf, 2); - FreeStrBuf(&UrlBuf); + if (Name == NULL) FreeStrBuf(&UrlBuf); } } diff --git a/webcit/roomops.c b/webcit/roomops.c index 41da33ceb..39af8d669 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -3313,7 +3313,7 @@ void set_floordiv_expanded(void) { StrBuf *FloorDiv; FloorDiv = NewStrBuf(); - StrBufExtract_token(FloorDiv, WCC->Hdr->ReqLine, 2, '/'); + StrBufExtract_token(FloorDiv, WCC->Hdr->ReqLine, 0, '/'); set_preference("floordiv_expanded", FloorDiv, 1); WCC->floordiv_expanded = FloorDiv; } diff --git a/webcit/vcard_edit.c b/webcit/vcard_edit.c index 31780a6a1..e409125d6 100644 --- a/webcit/vcard_edit.c +++ b/webcit/vcard_edit.c @@ -1218,7 +1218,7 @@ void display_vcard_photo_img(void) const char *contentType; wcsession *WCC = WC; - msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/'); + msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/'); vcard = load_mimepart(msgnum,"1"); v = VCardLoad(vcard); diff --git a/webcit/webcit.c b/webcit/webcit.c index 51c7ac73d..4908d44f4 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -22,6 +22,15 @@ static char *unset = "; expires=28-May-1971 18:10:00 GMT"; StrBuf *csslocal = NULL; HashList *HandlerHash = NULL; + +void DeleteWebcitHandler(void *vHandler) +{ + WebcitHandler *Handler = (WebcitHandler*) vHandler; + FreeStrBuf(&Handler->Name); + free (Handler); + +} + void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, WebcitHandlerFunc F, @@ -31,7 +40,8 @@ void WebcitAddUrlHandler(const char * UrlString, NewHandler = (WebcitHandler*) malloc(sizeof(WebcitHandler)); NewHandler->F = F; NewHandler->Flags = Flags; - Put(HandlerHash, UrlString, UrlSLen, NewHandler, NULL); + NewHandler->Name = NewStrBufPlain(UrlString, UrlSLen); + Put(HandlerHash, UrlString, UrlSLen, NewHandler, DeleteWebcitHandler); } diff --git a/webcit/webcit.h b/webcit/webcit.h index 008ccfdaa..c9033cdf3 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -364,6 +364,7 @@ typedef void (*WebcitHandlerFunc)(void); typedef struct _WebcitHandler{ WebcitHandlerFunc F; long Flags; + StrBuf *Name; } WebcitHandler; void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, WebcitHandlerFunc F, long Flags); -- 2.30.2