* Output an HTML message, modifying it slightly to make sure it plays nice
* with the rest of our web framework.
*
- * Copyright (c) 2005-2010 by the citadel.org team
+ * Copyright (c) 2005-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.
+ * 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
*/
#include "webcit.h"
if (!ptr) return;
safestrncpy(buf, ++ptr, sizeof buf);
- striplt(buf);
+ string_trim(buf);
if (!strncasecmp(buf, "charset=", 8)) {
strcpy(charset, &buf[8]);
/* Remove wandering punctuation */
if ((ptr=strchr(charset, '\"'))) *ptr = 0;
- striplt(charset);
+ string_trim(charset);
}
}
meta = malloc(meta_length + 1);
safestrncpy(meta, meta_start, meta_length);
meta[meta_length] = 0;
- striplt(meta);
+ string_trim(meta);
if (!strncasecmp(meta, "HTTP-EQUIV=", 11)) {
meta_http_equiv = strdup(&meta[11]);
spaceptr = strchr(meta_http_equiv, ' ');
&& (strcasecmp(charset, "UTF-8"))
&& (strcasecmp(charset, ""))
) {
- syslog(9, "Converting %s to UTF-8\n", charset);
+ syslog(LOG_DEBUG, "Converting %s to UTF-8\n", charset);
ctdl_iconv_open("UTF-8", charset, &ic);
if (ic == (iconv_t)(-1) ) {
- syslog(5, "%s:%d iconv_open() failed: %s\n",
+ syslog(LOG_WARNING, "%s:%d iconv_open() failed: %s\n",
__FILE__, __LINE__, strerror(errno));
}
}
StrBufAppendPrintf(converted_msg, new_window);
ptr = &ptr[8];
}
- else if ( (treat_as_wiki) && (strncasecmp(ptr, "<a href=\"wiki?", 14)) ) {
+ else if (
+ (treat_as_wiki)
+ && (strncasecmp(ptr, "<a href=\"wiki?", 14))
+ && (strncasecmp(ptr, "<a href=\"dotgoto?", 17))
+ && (strncasecmp(ptr, "<a href=\"knrooms?", 17))
+ ) {
content_length += 64;
- StrBufAppendPrintf(converted_msg, "<a href=\"wiki?page=");
+ StrBufAppendPrintf(converted_msg, "<a href=\"wiki?go=");
+ StrBufUrlescAppend(converted_msg, WC->CurRoom.name, NULL);
+ StrBufAppendPrintf(converted_msg, "?page=");
ptr = &ptr[9];
}
else {
* and then ended the message)
*/
if (!tag_end) {
- syslog(9, "tag_end is null and ptr is:\n");
- syslog(9, "%s\n", ptr);
- syslog(9, "Theoretical bytes remaining: %d\n", msgend - ptr);
+ syslog(LOG_DEBUG, "tag_end is null and ptr is:\n");
+ syslog(LOG_DEBUG, "%s\n", ptr);
+ syslog(LOG_DEBUG, "Theoretical bytes remaining: %d\n", (int)(msgend - ptr));
}
src=strstr(ptr, "src=\"cid:");
* Turn anything that looks like a URL into a real link, as long
* as it's not inside a tag already
*/
- else if ( (brak == 0) && (alevel == 0)
- && (!strncasecmp(ptr, "http://", 7))) {
- /** Find the end of the link */
- int strlenptr;
- linklen = 0;
+ else if ( (brak == 0) && (alevel == 0) &&
+ ( (!strncasecmp(ptr, "http://", 7)) ||
+ (!strncasecmp(ptr, "https://", 8)))) {
+ /** Find the end of the link */
+ int strlenptr;
+ linklen = 0;
- strlenptr = strlen(ptr);
- for (i=0; i<=strlenptr; ++i) {
- if ((ptr[i]==0)
- ||(isspace(ptr[i]))
- ||(ptr[i]==10)
- ||(ptr[i]==13)
- ||(ptr[i]=='(')
- ||(ptr[i]==')')
- ||(ptr[i]=='<')
- ||(ptr[i]=='>')
- ||(ptr[i]=='[')
- ||(ptr[i]==']')
- ||(ptr[i]=='"')
- ||(ptr[i]=='\'')
+ strlenptr = strlen(ptr);
+ for (i=0; i<=strlenptr; ++i) {
+ if ((ptr[i]==0)
+ ||(isspace(ptr[i]))
+ ||(ptr[i]==10)
+ ||(ptr[i]==13)
+ ||(ptr[i]=='(')
+ ||(ptr[i]==')')
+ ||(ptr[i]=='<')
+ ||(ptr[i]=='>')
+ ||(ptr[i]=='[')
+ ||(ptr[i]==']')
+ ||(ptr[i]=='"')
+ ||(ptr[i]=='\'')
) linklen = i;
- /* did s.b. send us an entity? */
- if (ptr[i] == '&') {
- if ((ptr[i+2] ==';') ||
- (ptr[i+3] ==';') ||
- (ptr[i+5] ==';') ||
- (ptr[i+6] ==';') ||
- (ptr[i+7] ==';'))
- linklen = i;
- }
- if (linklen > 0) break;
+ /* did s.b. send us an entity? */
+ if (ptr[i] == '&') {
+ if ((ptr[i+2] ==';') ||
+ (ptr[i+3] ==';') ||
+ (ptr[i+5] ==';') ||
+ (ptr[i+6] ==';') ||
+ (ptr[i+7] ==';'))
+ linklen = i;
}
- if (linklen > 0) {
- char *ltreviewptr;
- char *nbspreviewptr;
- char linkedchar;
- int len;
+ if (linklen > 0) break;
+ }
+ if (linklen > 0) {
+ char *ltreviewptr;
+ char *nbspreviewptr;
+ char linkedchar;
+ int len;
- len = linklen;
- linkedchar = ptr[len];
- ptr[len] = '\0';
- /* spot for some subject strings tinymce tends to give us. */
- ltreviewptr = strchr(ptr, '<');
- if (ltreviewptr != NULL) {
- *ltreviewptr = '\0';
- linklen = ltreviewptr - ptr;
- }
+ len = linklen;
+ linkedchar = ptr[len];
+ ptr[len] = '\0';
+ /* spot for some subject strings tinymce tends to give us. */
+ ltreviewptr = strchr(ptr, '<');
+ if (ltreviewptr != NULL) {
+ *ltreviewptr = '\0';
+ linklen = ltreviewptr - ptr;
+ }
- nbspreviewptr = strstr(ptr, " ");
- if (nbspreviewptr != NULL) {
- /* nbspreviewptr = '\0'; */
- linklen = nbspreviewptr - ptr;
- }
- if (ltreviewptr != 0)
- *ltreviewptr = '<';
-
- ptr[len] = linkedchar;
-
- content_length += (32 + linklen);
- StrBufAppendPrintf(converted_msg, "%s\"", new_window);
- StrBufAppendBufPlain(converted_msg, ptr, linklen, 0);
- StrBufAppendPrintf(converted_msg, "\">");
- StrBufAppendBufPlain(converted_msg, ptr, linklen, 0);
- ptr += linklen;
- StrBufAppendPrintf(converted_msg, "</A>");
+ nbspreviewptr = strstr(ptr, " ");
+ if (nbspreviewptr != NULL) {
+ /* nbspreviewptr = '\0'; */
+ linklen = nbspreviewptr - ptr;
}
+ if (ltreviewptr != 0)
+ *ltreviewptr = '<';
+
+ ptr[len] = linkedchar;
+
+ content_length += (32 + linklen);
+ StrBufAppendPrintf(converted_msg, "%s\"", new_window);
+ StrBufAppendBufPlain(converted_msg, ptr, linklen, 0);
+ StrBufAppendPrintf(converted_msg, "\">");
+ StrBufAppendBufPlain(converted_msg, ptr, linklen, 0);
+ ptr += linklen;
+ StrBufAppendPrintf(converted_msg, "</A>");
+ }
}
else {
StrBufAppendBufPlain(converted_msg, ptr, 1, 0);
start = NULL;
len = strlen(buf);
if (len > bufsize) {
- syslog(1, "URL: content longer than buffer!");
+ syslog(LOG_WARNING, "URL: content longer than buffer!");
return;
}
end = buf + len;
UrlLen = end - start;
if (UrlLen > sizeof(urlbuf)){
- syslog(1, "URL: content longer than buffer!");
+ syslog(LOG_WARNING, "URL: content longer than buffer!");
return;
}
memcpy(urlbuf, start, UrlLen);
"%ca href=%c%s%c TARGET=%c%s%c%c%s%c/A%c",
LB, QU, urlbuf, QU, QU, TARGET, QU, RB, urlbuf, LB, RB);
if (outpos >= sizeof(outbuf) - Offset) {
- syslog(1, "URL: content longer than buffer!");
+ syslog(LOG_WARNING, "URL: content longer than buffer!");
return;
}
if (TrailerLen > 0)
memcpy(outbuf + Offset + outpos, end, TrailerLen);
if (Offset + outpos + TrailerLen > bufsize) {
- syslog(1, "URL: content longer than buffer!");
+ syslog(LOG_WARNING, "URL: content longer than buffer!");
return;
}
memcpy (buf, outbuf, Offset + outpos + TrailerLen);