-const char killpopup_rcs[] = "$Id: killpopup.c,v 1.1.1.1 2001/05/15 13:58:58 oes Exp $";
+const char killpopup_rcs[] = "$Id: killpopup.c,v 1.5 2001/07/18 15:02:52 haroon Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/killpopup.c,v $
*
* Revisions :
* $Log: killpopup.c,v $
+ * 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
+ * filtering, in new "permissionsfile".
+ * - Implemented LOG_LEVEL_FATAL, so that if there is a configuration
+ * file error you now get a message box (in the Win32 GUI) rather
+ * than the program exiting with no explanation.
+ * - Made killpopup use the PCRS MIME-type checking and HTTP-header
+ * skipping.
+ * - Removed tabs from "config"
+ * - Moved duplicated url parsing code in "loaders.c" to a new funcition.
+ * - Bumped up version number.
+ *
* Revision 1.1.1.1 2001/05/15 13:58:58 oes
* Initial import of version 2.9.3 source tree
*
#include "project.h"
#include "killpopup.h"
#include "jcc.h"
+#include "errlog.h"
const char killpopup_h_rcs[] = KILLPOPUP_H_VERSION;
* Function : filter_popups
*
* Description : Filter the block of data that's been read from the server.
- * Caller is responsible for checking permissons list\r
+ * 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 )
+ if ( popup )
{
+ /*
+ * replace the window.open( with a harmless JavaScript replacement (notice the two single quotes)
+ * Guy's idea (thanks)
+ */
+ strncpy(popup, "1;''.concat(", 12);
#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 );
+ log_error(LOG_LEVEL_POPUPS, "Blocked popup window open");
#endif
}
- else
+ }
+
+ while ((popup = strstr( buff, ".resizeTo(" )) != NULL)
+ {
+ if ( popup )
{
+ /*
+ * replace the .resizeTo( with a harmless JavaScript replacement
+ * Guy's idea (thanks)
+ */
+ strncpy(popup, ".scrollTo(", 10);
#ifdef POPUP_VERBOSE
- fprintf(logfp, "Couldn't find end, turned into comment. Read boundary?\n" );
+ log_error(LOG_LEVEL_POPUPS, "Blocked popup window resize");
#endif
- *popup = '/';
- popup++;
- *popup = '/';
- }
-
-
- q=popup; /* by BREITENB NEW! */
- while (q>=buff)
- {
- if (*q==' ' || *q=='\t')
- q--;
- else break;
- }
- if (q>=buff)
- {
- if (*q=='=') *++q='1';
- /* result of popup is assigned to a variable! ensure success. hehehe. */
}
}
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)
{