-const char killpopup_rcs[] = "$Id: killpopup.c,v 1.2 2001/05/20 01:21:20 jongfoster Exp $";
+const char killpopup_rcs[] = "$Id: killpopup.c,v 1.6 2001/07/19 19:11:35 haroon Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/killpopup.c,v $
*
* Revisions :
* $Log: killpopup.c,v $
+ * Revision 1.6 2001/07/19 19:11:35 haroon
+ * - Implemented Guy's idea of replacing window.open( with 1;''.concat(
+ * - Implemented Guy's idea of replacing .resizeTo( with .scrollTo(
+ *
+ * Revision 1.5 2001/07/18 15:02:52 haroon
+ * improved nuking of window.open
+ *
+ * Revision 1.4 2001/06/29 13:29:55 oes
+ * Added FIXMEs (and didn't repair, hehe)
+ *
+ * Revision 1.3 2001/05/22 18:56:28 oes
+ * CRLF -> LF
+ *
* Revision 1.2 2001/05/20 01:21:20 jongfoster
* Version 2.9.4 checkin.
* - Merged popupfile and cookiefile, and added control over PCRS
#include "project.h"
#include "killpopup.h"
#include "jcc.h"
+#include "errlog.h"
const char killpopup_h_rcs[] = KILLPOPUP_H_VERSION;
#ifdef KILLPOPUPS
-/* Change these for debug output. *lots*. */
-/*#define POPUP_VERBOSE 1*/
-#undef POPUP_VERBOSE
-
-
/*********************************************************************
*
* Function : filter_popups
* Description : Filter the block of data that's been read from the server.
* Caller is responsible for checking permissons list
* to determine if this function should be called.
+ * Remember not to change the content length (substitute char by char)
*
* Parameters :
* 1 : buff = Buffer to scan and modify. Null terminated.
char *popup = NULL;
char *close = NULL;
char *p = NULL;
- char *q = NULL; /* by BREITENB NEW! */
while ((popup = strstr( buff, "window.open(" )) != NULL)
{
-#ifdef POPUP_VERBOSE
- fprintf(logfp, "Found start of window open" );
-#endif
- close = strstr( popup+1, ");" );
- if ( close )
- {
-#ifdef POPUP_VERBOSE
- fprintf(logfp, "Found end of window open" );
-#endif
- for ( p = popup; p != (close+1); p++ )
- {
- *p = ' ';
- }
-#ifdef POPUP_VERBOSE
- fprintf(logfp, "Blocked %s\n", host_name );
-#endif
- }
- else
- {
-#ifdef POPUP_VERBOSE
- fprintf(logfp, "Couldn't find end, turned into comment. Read boundary?\n" );
-#endif
- *popup = '/';
- popup++;
- *popup = '/';
- }
-
-
- q=popup; /* by BREITENB NEW! */
- while (q>=buff)
+ if ( popup )
{
- if (*q==' ' || *q=='\t')
- q--;
- else break;
+ /*
+ * replace the window.open( with a harmless JavaScript replacement (notice the two single quotes)
+ * Guy's idea (thanks)
+ */
+ strncpy(popup, "1;''.concat(", 12);
+ log_error(LOG_LEVEL_POPUPS, "Blocked popup window open");
}
- if (q>=buff)
+ }
+
+ while ((popup = strstr( buff, ".resizeTo(" )) != NULL)
+ {
+ if ( popup )
{
- if (*q=='=') *++q='1';
- /* result of popup is assigned to a variable! ensure success. hehehe. */
+ /*
+ * replace the .resizeTo( with a harmless JavaScript replacement
+ * Guy's idea (thanks)
+ */
+ strncpy(popup, ".scrollTo(", 10);
+ log_error(LOG_LEVEL_POPUPS, "Blocked popup window resize");
}
}
close=strchr(popup,'>');
if (close)
{
- /* we are now between <body and the ending > */
+ /* we are now between <body and the ending > FIXME: No, we're anywhere! --oes*/
p=strstr(popup, "onUnload");
if (p)
{