summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoragc <agc@pkgsrc.org>2004-08-13 13:05:04 +0000
committeragc <agc@pkgsrc.org>2004-08-13 13:05:04 +0000
commit02356070b4e1cce323dc451e2f32c8aa4e30e090 (patch)
tree6246eb6f4551b5f113aa194bc1a6b415b5335c20
parentbf2ae3f3fd7179e49f5b39c00a2a9d51f93e61fd (diff)
downloadpkgsrc-02356070b4e1cce323dc451e2f32c8aa4e30e090.tar.gz
Pullup ticket 102 to the pkgsrc-2004Q2 branch, requested by Mark Davies
Security fix for kdelibs3 Module Name: pkgsrc Committed By: markd Date: Wed Aug 11 13:51:14 UTC 2004 Modified Files: pkgsrc/x11/kdelibs3: Makefile distinfo pkgsrc/x11/kdelibs3/patches: patch-an Added Files: pkgsrc/x11/kdelibs3/patches: patch-ap patch-aq patch-ar patch-as patch-at patch-au patch-av patch-aw patch-ax patch-ay Log Message: Fix some issues related to html frames, cookie handling and temporary filenames. From KDE cvs. Bump PKGREVISION.
-rw-r--r--doc/CHANGES-pkgsrc-2004Q25
-rw-r--r--x11/kdelibs3/Makefile3
-rw-r--r--x11/kdelibs3/distinfo14
-rw-r--r--x11/kdelibs3/patches/patch-an32
-rw-r--r--x11/kdelibs3/patches/patch-ap187
-rw-r--r--x11/kdelibs3/patches/patch-aq72
-rw-r--r--x11/kdelibs3/patches/patch-ar37
-rw-r--r--x11/kdelibs3/patches/patch-as37
-rw-r--r--x11/kdelibs3/patches/patch-at29
-rw-r--r--x11/kdelibs3/patches/patch-au19
-rw-r--r--x11/kdelibs3/patches/patch-av272
-rw-r--r--x11/kdelibs3/patches/patch-aw52
-rw-r--r--x11/kdelibs3/patches/patch-ax27
-rw-r--r--x11/kdelibs3/patches/patch-ay47
14 files changed, 827 insertions, 6 deletions
diff --git a/doc/CHANGES-pkgsrc-2004Q2 b/doc/CHANGES-pkgsrc-2004Q2
index 39377e7f56e..e1489153995 100644
--- a/doc/CHANGES-pkgsrc-2004Q2
+++ b/doc/CHANGES-pkgsrc-2004Q2
@@ -1,4 +1,4 @@
-$NetBSD: CHANGES-pkgsrc-2004Q2,v 1.1.2.54 2004/07/30 18:32:20 agc Exp $
+$NetBSD: CHANGES-pkgsrc-2004Q2,v 1.1.2.55 2004/08/13 13:05:04 agc Exp $
Changes to the packages collection and infrastructure on the
pkgsrc-2004Q2 branch:
@@ -104,4 +104,5 @@ Pullup ticket 89, requested by Grant Beattie [agc 2004-07-30]
Build fix for gnutls
Pullup ticket 92, requested by Grant Beattie [agc 2004-07-30]
Bulk build fix
-
+Pullup ticket 102, requested by Mark Davies [agc 2004-08-13]
+ Security fix for kdelibs3
diff --git a/x11/kdelibs3/Makefile b/x11/kdelibs3/Makefile
index 1310748f855..42510ff88d8 100644
--- a/x11/kdelibs3/Makefile
+++ b/x11/kdelibs3/Makefile
@@ -1,6 +1,7 @@
-# $NetBSD: Makefile,v 1.61 2004/06/10 11:39:50 markd Exp $
+# $NetBSD: Makefile,v 1.61.2.1 2004/08/13 13:05:04 agc Exp $
DISTNAME= kdelibs-${_KDE_VERSION}
+PKGREVISION= 2
CATEGORIES= x11
COMMENT= Support libraries for the KDE integrated X11 desktop
diff --git a/x11/kdelibs3/distinfo b/x11/kdelibs3/distinfo
index 63e28448661..146443d225f 100644
--- a/x11/kdelibs3/distinfo
+++ b/x11/kdelibs3/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.38 2004/06/10 11:39:50 markd Exp $
+$NetBSD: distinfo,v 1.38.2.1 2004/08/13 13:05:04 agc Exp $
SHA1 (kdelibs-3.2.3.tar.bz2) = 33df00cb44694db306c29504f6ee5f3bd4a71c7d
Size (kdelibs-3.2.3.tar.bz2) = 12737024 bytes
@@ -7,7 +7,17 @@ SHA1 (patch-ad) = fc3a7b173dc93bad196fff3ddd9aef65c92dda64
SHA1 (patch-ae) = 238f16203cd101a5944ff01aa965956392c5b16d
SHA1 (patch-af) = 7fbb3abcbf56020e3827ddf9d056beab9d1f3cd7
SHA1 (patch-ag) = e471fdf5428e0f515ef3fe5427622854886ef952
-SHA1 (patch-an) = 41d2721bd55d060cde630771dad0377dbe770d73
+SHA1 (patch-an) = 443560cbbca3d29d2e436ac94b4920da081c99f9
+SHA1 (patch-ap) = 807a36fc910679431115f0d03208977d8cae7bc6
+SHA1 (patch-aq) = 26627136717b912e3c1ec884db4e9712398904cd
+SHA1 (patch-ar) = af4fe2fe875f91095aa024c23e17b4144ade283c
+SHA1 (patch-as) = e208b595c0f39094a8db16e6aa6b00c0d90420d2
+SHA1 (patch-at) = 9b114f66dd8b9134e884334d3d2217dd1f6e217e
+SHA1 (patch-au) = 20bebf25372adcb61065927adb093ddd10ec1b00
+SHA1 (patch-av) = 26c026a500f49847eedd56b143317d6661bf2f54
+SHA1 (patch-aw) = 4514ec04885709cfc402e387346c0c5f72408385
+SHA1 (patch-ax) = 36f21f6b3bb42f43deecd837095318d3f4e3b125
+SHA1 (patch-ay) = 27cf47be52f2f643f808d7092a6fe33458b67fc5
SHA1 (patch-bc) = 434a48d290aa9716b8c6e372419460ebd33cf8ea
SHA1 (patch-bd) = f233a73d0a8148e1ae7f4e777c3f5d50b56d768f
SHA1 (patch-bu) = 65aca46f30be04c0d8177498eac149437b21ba56
diff --git a/x11/kdelibs3/patches/patch-an b/x11/kdelibs3/patches/patch-an
index 7519c48168d..5a271fb7047 100644
--- a/x11/kdelibs3/patches/patch-an
+++ b/x11/kdelibs3/patches/patch-an
@@ -1,7 +1,37 @@
-$NetBSD: patch-an,v 1.3 2004/02/04 13:58:39 markd Exp $
+$NetBSD: patch-an,v 1.3.4.1 2004/08/13 13:05:04 agc Exp $
--- kdecore/kstandarddirs.cpp.orig 2004-01-26 06:24:42.000000000 +1300
+++ kdecore/kstandarddirs.cpp
+@@ -651,7 +651,28 @@ void KStandardDirs::createSpecialResourc
+ char link[1024];
+ link[1023] = 0;
+ int result = readlink(QFile::encodeName(dir).data(), link, 1023);
+- if ((result == -1) && (errno == ENOENT))
++ bool relink = (result == -1) && (errno == ENOENT);
++ if ((result > 0) && (link[0] == '/'))
++ {
++ link[result] = 0;
++ struct stat stat_buf;
++ int res = lstat(link, &stat_buf);
++ if ((res == -1) && (errno == ENOENT))
++ {
++ relink = true;
++ }
++ else if ((res == -1) || (!S_ISDIR(stat_buf.st_mode)))
++ {
++ fprintf(stderr, "Error: \"%s\" is not a directory.\n", link);
++ relink = true;
++ }
++ else if (stat_buf.st_uid != getuid())
++ {
++ fprintf(stderr, "Error: \"%s\" is owned by uid %d instead of uid %d.\n", link, stat_buf.st_uid, getuid());
++ relink = true;
++ }
++ }
++ if (relink)
+ {
+ QString srv = findExe(QString::fromLatin1("lnusertemp"), KDEDIR+QString::fromLatin1("/bin"));
+ if (srv.isEmpty())
@@ -847,33 +847,33 @@ static int tokenize( QStringList& tokens
QString KStandardDirs::kde_default(const char *type) {
diff --git a/x11/kdelibs3/patches/patch-ap b/x11/kdelibs3/patches/patch-ap
new file mode 100644
index 00000000000..be7c6ece980
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-ap
@@ -0,0 +1,187 @@
+$NetBSD: patch-ap,v 1.7.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: dcopserver.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/dcop/dcopserver.cpp,v
+retrieving revision 1.160.2.3
+diff -u -p -r1.160.2.3 dcopserver.cpp
+--- dcop/dcopserver.cpp 30 Apr 2004 15:00:08 -0000 1.160.2.3
++++ dcop/dcopserver.cpp 26 Jul 2004 09:03:06 -0000
+@@ -443,35 +443,78 @@ write_iceauth (FILE *addfp, IceAuthDataE
+ fprintf (addfp, "\n");
+ }
+
++#ifndef HAVE_MKSTEMPS
++#include <string.h>
++#include <strings.h>
+
+-#ifndef HAVE_MKSTEMP
+-static char *unique_filename (const char *path, const char *prefix)
+-#else
+-static char *unique_filename (const char *path, const char *prefix, int *pFd)
+-#endif
++/* this is based on code taken from the GNU libc, distributed under the LGPL license */
++
++/* Generate a unique temporary file name from TEMPLATE.
++
++ TEMPLATE has the form:
++
++ <path>/ccXXXXXX<suffix>
++
++ SUFFIX_LEN tells us how long <suffix> is (it can be zero length).
++
++ The last six characters of TEMPLATE before <suffix> must be "XXXXXX";
++ they are replaced with a string that makes the filename unique.
++
++ Returns a file descriptor open on the file for reading and writing. */
++
++int mkstemps (char* _template, int suffix_len)
+ {
+-#ifndef HAVE_MKSTEMP
+-#ifndef X_NOT_POSIX
+- return ((char *) tempnam (path, prefix));
+-#else
+- char tempFile[PATH_MAX];
+- char *tmp;
++ static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
++ char *XXXXXX;
++ int len;
++ int count;
++ int value;
++
++ len = strlen (_template);
++
++ if ((int) len < 6 + suffix_len || strncmp (&_template[len - 6 - suffix_len], "XXXXXX", 6))
++ return -1;
++
++ XXXXXX = &_template[len - 6 - suffix_len];
++
++ value = rand();
++ for (count = 0; count < 256; ++count)
++ {
++ int v = value;
++ int fd;
++
++ /* Fill in the random bits. */
++ XXXXXX[0] = letters[v % 62];
++ v /= 62;
++ XXXXXX[1] = letters[v % 62];
++ v /= 62;
++ XXXXXX[2] = letters[v % 62];
++ v /= 62;
++ XXXXXX[3] = letters[v % 62];
++ v /= 62;
++ XXXXXX[4] = letters[v % 62];
++ v /= 62;
++ XXXXXX[5] = letters[v % 62];
++
++ fd = open (_template, O_RDWR|O_CREAT|O_EXCL, 0600);
++ if (fd >= 0)
++ /* The file does not exist. */
++ return fd;
++
++ /* This is a random value. It is only necessary that the next
++ TMP_MAX values generated by adding 7777 to VALUE are different
++ with (module 2^32). */
++ value += 7777;
++ }
++ /* We return the null string if we can't find a unique file name. */
++ _template[0] = '\0';
++ return -1;
++}
+
+- snprintf (tempFile, PATH_MAX, "%s/%sXXXXXX", path, prefix);
+- tmp = (char *) mktemp (tempFile);
+- if (tmp)
+- {
+- char *ptr = (char *) malloc (strlen (tmp) + 1);
+- if (ptr != NULL)
+- {
+- strcpy (ptr, tmp);
+- }
+- return (ptr);
+- }
+- else
+- return (NULL);
+ #endif
+-#else
++
++static char *unique_filename (const char *path, const char *prefix, int *pFd)
++{
+ char tempFile[PATH_MAX];
+ char *ptr;
+
+@@ -480,43 +523,10 @@ static char *unique_filename (const char
+ if (ptr != NULL)
+ {
+ strcpy(ptr, tempFile);
+- *pFd = mkstemp(ptr);
++ *pFd = mkstemps(ptr, 0);
+ }
+ return ptr;
+-#endif
+-}
+-
+-#if 0
+-Status SetAuthentication_local (int count, IceListenObj *listenObjs)
+-{
+- int i;
+- for (i = 0; i < count; i ++) {
+- char *prot = IceGetListenConnectionString(listenObjs[i]);
+- if (!prot) continue;
+- char *host = strchr(prot, '/');
+- char *sock = 0;
+- if (host) {
+- *host=0;
+- host++;
+- sock = strchr(host, ':');
+- if (sock) {
+- *sock = 0;
+- sock++;
+- }
+- }
+-#ifndef NDEBUG
+- qDebug("DCOPServer: SetAProc_loc: conn %d, prot=%s, file=%s",
+- (unsigned)i, prot, sock);
+-#endif
+- if (sock && !strcmp(prot, "local")) {
+- chmod(sock, 0700);
+- }
+- IceSetHostBasedAuthProc (listenObjs[i], HostBasedAuthProc);
+- free(prot);
+- }
+- return 1;
+ }
+-#endif
+
+ #define MAGIC_COOKIE_LEN 16
+
+@@ -529,28 +539,19 @@ SetAuthentication (int count, IceListenO
+ int original_umask;
+ int i;
+ QCString command;
+-#ifdef HAVE_MKSTEMP
+ int fd;
+-#endif
+
+ original_umask = umask (0077); /* disallow non-owner access */
+
+ path = getenv ("DCOP_SAVE_DIR");
+ if (!path)
+ path = "/tmp";
+-#ifndef HAVE_MKSTEMP
+- if ((addAuthFile = unique_filename (path, "dcop")) == NULL)
+- goto bad;
+
+- if (!(addfp = fopen (addAuthFile, "w")))
+- goto bad;
+-#else
+ if ((addAuthFile = unique_filename (path, "dcop", &fd)) == NULL)
+ goto bad;
+
+ if (!(addfp = fdopen(fd, "wb")))
+ goto bad;
+-#endif
+
+ if ((*_authDataEntries = static_cast<IceAuthDataEntry *>(malloc (count * 2 * sizeof (IceAuthDataEntry)))) == NULL)
+ goto bad;
diff --git a/x11/kdelibs3/patches/patch-aq b/x11/kdelibs3/patches/patch-aq
new file mode 100644
index 00000000000..64242f9efeb
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-aq
@@ -0,0 +1,72 @@
+$NetBSD: patch-aq,v 1.4.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: kioslave/http/kcookiejar/kcookiejar.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookiejar.cpp,v
+retrieving revision 1.116
+retrieving revision 1.117
+diff -u -p -r1.116 -r1.117
+--- kioslave/http/kcookiejar/kcookiejar.cpp 19 Jul 2004 10:16:22 -0000 1.116
++++ kioslave/http/kcookiejar/kcookiejar.cpp 20 Jul 2004 15:29:24 -0000 1.117
+@@ -244,6 +244,14 @@ KCookieJar::KCookieJar()
+ m_globalAdvice = KCookieDunno;
+ m_configChanged = false;
+ m_cookiesChanged = false;
++
++ QString twoLevelTLD="name,ai,au,bd,bh,ck,eg,et,fk,il,in,kh,kr,mk,mt,na,np,nz,pg,pk,qa,sa,sb,sg,sv,ua,ug,uk,uy,vn,za,zw";
++ QStringList countries = QStringList::split(',', twoLevelTLD);
++ for(QStringList::ConstIterator it = countries.begin();
++ it != countries.end(); ++it)
++ {
++ m_twoLevelTLD.replace(*it, (int *) 1);
++ }
+ }
+
+ //
+@@ -528,14 +536,14 @@ static const char * parseNameValue(const
+
+ }
+
+-static void stripDomain(const QString &_fqdn, QString &_domain)
++void KCookieJar::stripDomain(const QString &_fqdn, QString &_domain)
+ {
+ QStringList domains;
+- KCookieJar::extractDomains(_fqdn, domains);
++ extractDomains(_fqdn, domains);
+ _domain = domains[0];
+ }
+
+-static QString stripDomain( KHttpCookiePtr cookiePtr)
++QString KCookieJar::stripDomain( KHttpCookiePtr cookiePtr)
+ {
+ QString domain; // We file the cookie under this domain.
+ if (cookiePtr->domain().isEmpty())
+@@ -620,6 +628,13 @@ void KCookieJar::extractDomains(const QS
+ {
+ if (partList.count() == 1)
+ break; // We only have a TLD left.
++
++ if ((partList.count() == 2) && (m_twoLevelTLD[partList[1].lower()]))
++ {
++ // This domain uses two-level TLDs in the form xxxx.yy
++ break;
++ }
++
+ if ((partList.count() == 2) && (partList[1].length() == 2))
+ {
+ // If this is a TLD, we should stop. (e.g. co.uk)
+@@ -634,14 +649,6 @@ void KCookieJar::extractDomains(const QS
+ break;
+ }
+
+- // The .name domain uses <name>.<surname>.name
+- // Although the TLD is striclty speaking .name, for our purpose
+- // it should be <surname>.name since people should not be able
+- // to set cookies for everyone with the same surname.
+- // Matches <surname>.name
+- if ((partList.count() == 2)&& (partList[1].lower() == L1("name")))
+- break;
+-
+ QString domain = partList.join(L1("."));
+ _domains.append('.' + domain);
+ _domains.append(domain);
diff --git a/x11/kdelibs3/patches/patch-ar b/x11/kdelibs3/patches/patch-ar
new file mode 100644
index 00000000000..1d2ac305a05
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-ar
@@ -0,0 +1,37 @@
+$NetBSD: patch-ar,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $
+
+Index: kioslave/http/kcookiejar/kcookiejar.h
+===================================================================
+RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookiejar.h,v
+retrieving revision 1.33
+retrieving revision 1.34
+diff -u -p -r1.33 -r1.34
+--- kioslave/http/kcookiejar/kcookiejar.h 22 Nov 2003 16:50:45 -0000 1.33
++++ kioslave/http/kcookiejar/kcookiejar.h 20 Jul 2004 15:29:24 -0000 1.34
+@@ -306,8 +306,8 @@ public:
+ /**
+ * Returns a list of domains (_domainList) relevant for this host.
+ */
+- static void extractDomains(const QString &_fqdn,
+- QStringList &_domainList);
++ void extractDomains(const QString &_fqdn,
++ QStringList &_domainList);
+
+ static QString adviceToStr(KCookieAdvice _advice);
+ static KCookieAdvice strToAdvice(const QString &_str);
+@@ -329,11 +329,15 @@ public:
+ */
+ void setShowCookieDetails (bool value) { m_showCookieDetails = value; }
+
++protected:
++ void stripDomain(const QString &_fqdn, QString &_domain);
++ QString stripDomain( KHttpCookiePtr cookiePtr);
+
+ protected:
+ QStringList m_domainList;
+ KCookieAdvice m_globalAdvice;
+ QDict<KHttpCookieList> m_cookieDomains;
++ QDict<int> m_twoLevelTLD;
+
+ bool m_configChanged;
+ bool m_cookiesChanged;
diff --git a/x11/kdelibs3/patches/patch-as b/x11/kdelibs3/patches/patch-as
new file mode 100644
index 00000000000..7ac6f469d26
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-as
@@ -0,0 +1,37 @@
+$NetBSD: patch-as,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: kioslave/http/kcookiejar/kcookieserver.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/kioslave/http/kcookiejar/kcookieserver.cpp,v
+retrieving revision 1.50
+retrieving revision 1.51
+diff -u -p -r1.50 -r1.51
+--- kioslave/http/kcookiejar/kcookieserver.cpp 9 Jun 2003 10:56:42 -0000 1.50
++++ kioslave/http/kcookiejar/kcookieserver.cpp 20 Jul 2004 15:29:24 -0000 1.51
+@@ -131,7 +131,7 @@ bool KCookieServer::cookiesPending( cons
+ if (!KCookieJar::parseURL(url, fqdn, path))
+ return false;
+
+- KCookieJar::extractDomains( fqdn, domains );
++ mCookieJar->extractDomains( fqdn, domains );
+ for( KHttpCookie *cookie = mPendingCookies->first();
+ cookie != 0L;
+ cookie = mPendingCookies->next())
+@@ -557,7 +557,7 @@ KCookieServer::setDomainAdvice(QString u
+ if (KCookieJar::parseURL(url, fqdn, dummy))
+ {
+ QStringList domains;
+- KCookieJar::extractDomains(fqdn, domains);
++ mCookieJar->extractDomains(fqdn, domains);
+ mCookieJar->setDomainAdvice(domains[0],
+ KCookieJar::strToAdvice(advice));
+ }
+@@ -573,7 +573,7 @@ KCookieServer::getDomainAdvice(QString u
+ if (KCookieJar::parseURL(url, fqdn, dummy))
+ {
+ QStringList domains;
+- KCookieJar::extractDomains(fqdn, domains);
++ mCookieJar->extractDomains(fqdn, domains);
+ advice = mCookieJar->getDomainAdvice(domains[0]);
+ }
+ return KCookieJar::adviceToStr(advice);
diff --git a/x11/kdelibs3/patches/patch-at b/x11/kdelibs3/patches/patch-at
new file mode 100644
index 00000000000..c6f347068b1
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-at
@@ -0,0 +1,29 @@
+$NetBSD: patch-at,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $
+
+Index: khtml/khtml_ext.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/khtml/khtml_ext.cpp,v
+retrieving revision 1.85.2.2
+diff -u -p -r1.85.2.2 khtml_ext.cpp
+--- khtml/khtml_ext.cpp 24 Apr 2004 08:20:46 -0000 1.85.2.2
++++ khtml/khtml_ext.cpp 3 Aug 2004 14:36:43 -0000
+@@ -646,6 +646,19 @@ bool KHTMLPartBrowserHostExtension::open
+ return m_part->openURLInFrame( url, urlArgs );
+ }
+
++void KHTMLPartBrowserHostExtension::virtual_hook( int id, void *data )
++{
++ if (id == VIRTUAL_FIND_FRAME_PARENT)
++ {
++ FindFrameParentParams *param = static_cast<FindFrameParentParams*>(data);
++ KHTMLPart *parentPart = m_part->findFrameParent(param->callingPart, param->frame);
++ if (parentPart)
++ param->parent = parentPart->browserHostExtension();
++ return;
++ }
++ BrowserHostExtension::virtual_hook( id, data );
++}
++
+ // BCI: remove in KDE 4
+ KHTMLZoomFactorAction::KHTMLZoomFactorAction( KHTMLPart *part, bool direction, const QString &text, const QString &icon, const QObject *receiver, const char *slot, QObject *parent, const char *name )
+ : KAction( text, icon, 0, receiver, slot, parent, name )
diff --git a/x11/kdelibs3/patches/patch-au b/x11/kdelibs3/patches/patch-au
new file mode 100644
index 00000000000..c791db82732
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-au
@@ -0,0 +1,19 @@
+$NetBSD: patch-au,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: khtml/khtml_ext.h
+===================================================================
+RCS file: /home/kde/kdelibs/khtml/khtml_ext.h,v
+retrieving revision 1.26.2.1
+diff -u -p -r1.26.2.1 khtml_ext.h
+--- khtml/khtml_ext.h 29 Feb 2004 15:27:43 -0000 1.26.2.1
++++ khtml/khtml_ext.h 3 Aug 2004 14:36:43 -0000
+@@ -98,6 +98,9 @@ public:
+ virtual const QPtrList<KParts::ReadOnlyPart> frames() const;
+
+ virtual bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs );
++
++protected:
++ virtual void virtual_hook( int id, void* data );
+ private:
+ KHTMLPart *m_part;
+ };
diff --git a/x11/kdelibs3/patches/patch-av b/x11/kdelibs3/patches/patch-av
new file mode 100644
index 00000000000..525ca16dd27
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-av
@@ -0,0 +1,272 @@
+$NetBSD: patch-av,v 1.8.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: khtml/khtml_part.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/khtml/khtml_part.cpp,v
+retrieving revision 1.959.2.20
+diff -u -p -r1.959.2.20 khtml_part.cpp
+--- khtml/khtml_part.cpp 29 Jun 2004 09:08:16 -0000 1.959.2.20
++++ khtml/khtml_part.cpp 3 Aug 2004 14:36:46 -0000
+@@ -757,12 +757,16 @@ DOM::Document KHTMLPart::document() cons
+ return d->m_doc;
+ }
+
+-
+ KParts::BrowserExtension *KHTMLPart::browserExtension() const
+ {
+ return d->m_extension;
+ }
+
++KParts::BrowserHostExtension *KHTMLPart::browserHostExtension() const
++{
++ return d->m_hostExtension;
++}
++
+ KHTMLView *KHTMLPart::view() const
+ {
+ return d->m_view;
+@@ -880,29 +884,18 @@ QVariant KHTMLPart::crossFrameExecuteScr
+ // we always allow these
+ }
+ else {
+- while (destpart->parentPart())
+- destpart = destpart->parentPart();
+- destpart = destpart->findFrame(target);
+-
++ destpart = findFrame(target);
+ if (!destpart)
+- destpart = this; // ### doesn't make sense, does it?
++ destpart = this;
+ }
+
+ // easy way out?
+ if (destpart == this)
+ return executeScript(DOM::Node(), script);
+
+-
+ // now compare the domains
+- if (!destpart->htmlDocument().isNull() &&
+- !htmlDocument().isNull()) {
+- DOM::DOMString actDomain = htmlDocument().domain();
+- DOM::DOMString destDomain = destpart->htmlDocument().domain();
+-
+- if (actDomain == destDomain)
+- return destpart->executeScript(DOM::Node(), script);
+- }
+-
++ if (destpart->checkFrameAccess(this))
++ return destpart->executeScript(DOM::Node(), script);
+
+ // eww, something went wrong. better execute it in our frame
+ return executeScript(DOM::Node(), script);
+@@ -3358,7 +3351,7 @@ void KHTMLPart::urlSelected( const QStri
+ if ( hasTarget )
+ {
+ // unknown frame names should open in a new window.
+- khtml::ChildFrame *frame = recursiveFrameRequest( cURL, args, false );
++ khtml::ChildFrame *frame = recursiveFrameRequest( this, cURL, args, false );
+ if ( frame )
+ {
+ args.metaData()["referrer"] = d->m_referrer;
+@@ -4364,6 +4357,7 @@ void KHTMLPart::slotChildDocCreated()
+ void KHTMLPart::slotChildURLRequest( const KURL &url, const KParts::URLArgs &args )
+ {
+ khtml::ChildFrame *child = frame( sender()->parent() );
++ KHTMLPart *callingHtmlPart = const_cast<KHTMLPart *>(dynamic_cast<const KHTMLPart *>(sender()->parent()));
+
+ // TODO: handle child target correctly! currently the script are always executed fur the parent
+ QString urlStr = url.url();
+@@ -4395,7 +4389,7 @@ void KHTMLPart::slotChildURLRequest( con
+ }
+ else if ( frameName != QString::fromLatin1( "_self" ) )
+ {
+- khtml::ChildFrame *_frame = recursiveFrameRequest( url, args );
++ khtml::ChildFrame *_frame = recursiveFrameRequest( callingHtmlPart, url, args );
+
+ if ( !_frame )
+ {
+@@ -4437,46 +4431,92 @@ khtml::ChildFrame *KHTMLPart::frame( con
+ return 0L;
+ }
+
+-//#define DEBUG_FINDFRAME
++//#define DEBUG_FINDFRAME
+
+-KHTMLPart *KHTMLPart::findFrame( const QString &f )
++bool KHTMLPart::checkFrameAccess(KHTMLPart *callingHtmlPart)
+ {
++ if (callingHtmlPart == this)
++ return true; // trivial
++
++ if (htmlDocument().isNull()) {
+ #ifdef DEBUG_FINDFRAME
+- kdDebug(6050) << "KHTMLPart::findFrame '" << f << "'" << endl;
+- FrameIt it2 = d->m_frames.begin();
+- FrameIt end = d->m_frames.end();
+- for (; it2 != end; ++it2 )
+- kdDebug(6050) << " - having frame '" << (*it2).m_name << "'" << endl;
++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: Empty part " << this << " URL = " << m_url << endl;
+ #endif
+- // ### http://www.w3.org/TR/html4/appendix/notes.html#notes-frames
+- ConstFrameIt it = d->m_frames.find( f );
+- if ( it == d->m_frames.end() )
+- {
++ return false; // we are empty?
++ }
++
++ // now compare the domains
++ if (callingHtmlPart && !callingHtmlPart->htmlDocument().isNull() &&
++ !htmlDocument().isNull()) {
++ DOM::DOMString actDomain = callingHtmlPart->htmlDocument().domain();
++ DOM::DOMString destDomain = htmlDocument().domain();
++
+ #ifdef DEBUG_FINDFRAME
+- kdDebug(6050) << "KHTMLPart::findFrame frame " << f << " not found" << endl;
++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: actDomain = '" << actDomain.string() << "' destDomain = '" << destDomain.string() << "'" << endl;
+ #endif
+- return 0L;
++
++ if (actDomain == destDomain)
++ return true;
+ }
+- else {
+- KParts::ReadOnlyPart *p = (*it).m_part;
+- if ( p && p->inherits( "KHTMLPart" ))
+- {
+ #ifdef DEBUG_FINDFRAME
+- kdDebug(6050) << "KHTMLPart::findFrame frame " << f << " is a KHTMLPart, ok" << endl;
++ else
++ {
++ kdDebug(6050) << "KHTMLPart::checkFrameAccess: Unknown part/domain " << callingHtmlPart << " tries to access part " << this << endl;
++ }
+ #endif
+- return (KHTMLPart*)p;
+- }
+- else
+- {
++ return false;
++}
++
++KHTMLPart *
++KHTMLPart::findFrameParent( KParts::ReadOnlyPart *callingPart, const QString &f, khtml::ChildFrame **childFrame )
++{
+ #ifdef DEBUG_FINDFRAME
+- if (p)
+- kdWarning() << "KHTMLPart::findFrame frame " << f << " found but isn't a KHTMLPart ! " << p->className() << endl;
+- else
+- kdWarning() << "KHTMLPart::findFrame frame " << f << " found but m_part=0L" << endl;
++ kdDebug(6050) << "KHTMLPart::findFrameParent: this = " << this << " URL = " << m_url << " findFrameParent( " << f << " )" << endl;
++#endif
++ // Check access
++ KHTMLPart *callingHtmlPart = dynamic_cast<KHTMLPart *>(callingPart);
++
++ if (!checkFrameAccess(callingHtmlPart))
++ return 0;
++
++ FrameIt it = d->m_frames.find( f );
++ FrameIt end = d->m_frames.end();
++ if ( it != end )
++ {
++#ifdef DEBUG_FINDFRAME
++ kdDebug(6050) << "KHTMLPart::findFrameParent: FOUND!" << endl;
+ #endif
+- return 0L;
++ if (childFrame)
++ *childFrame = &(*it);
++ return this;
++ }
++
++ it = d->m_frames.begin();
++ for (; it != end; ++it )
++ {
++ KParts::ReadOnlyPart *p = (*it).m_part;
++ if ( p && p->inherits( "KHTMLPart" ))
++ {
++ KHTMLPart *frameParent = static_cast<KHTMLPart*>(p)->findFrameParent(callingPart, f, childFrame);
++ if (frameParent)
++ return frameParent;
+ }
+ }
++ return 0;
++}
++
++
++KHTMLPart *KHTMLPart::findFrame( const QString &f )
++{
++ khtml::ChildFrame *childFrame;
++ KHTMLPart *parentFrame = findFrameParent(this, f, &childFrame);
++ if (parentFrame)
++ {
++ KParts::ReadOnlyPart *p = childFrame->m_part;
++ if ( p && p->inherits( "KHTMLPart" ))
++ return static_cast<KHTMLPart *>(p);
++ }
++ return 0;
+ }
+
+ KParts::ReadOnlyPart *KHTMLPart::currentFrame() const
+@@ -4514,37 +4554,29 @@ KHTMLPart *KHTMLPart::parentPart()
+ return (KHTMLPart *)parent();
+ }
+
+-khtml::ChildFrame *KHTMLPart::recursiveFrameRequest( const KURL &url, const KParts::URLArgs &args,
+- bool callParent )
++khtml::ChildFrame *KHTMLPart::recursiveFrameRequest( KHTMLPart *callingHtmlPart, const KURL &url,
++ const KParts::URLArgs &args, bool callParent )
+ {
+- FrameIt it = d->m_frames.find( args.frameName );
+-
+- if ( it != d->m_frames.end() )
+- return &(*it);
+-
+- it = d->m_frames.begin();
+- FrameIt end = d->m_frames.end();
+- for (; it != end; ++it )
+- if ( (*it).m_part && (*it).m_part->inherits( "KHTMLPart" ) )
+- {
+- KHTMLPart *childPart = (KHTMLPart *)(KParts::ReadOnlyPart *)(*it).m_part;
+-
+- khtml::ChildFrame *res = childPart->recursiveFrameRequest( url, args, false );
+- if ( !res )
+- continue;
+-
+- childPart->requestObject( res, url, args );
+- return 0L;
+- }
++#ifdef DEBUG_FINDFRAME
++ kdDebug( 6050 ) << "KHTMLPart::recursiveFrameRequest this = " << this << ", frame = " << args.frameName << ", url = " << url << endl;
++#endif
++ khtml::ChildFrame *childFrame;
++ KHTMLPart *childPart = findFrameParent(callingHtmlPart, args.frameName, &childFrame);
++ if (childPart)
++ {
++ if (childPart == this)
++ return childFrame;
++
++ childPart->requestObject( childFrame, url, args );
++ return 0;
++ }
+
+ if ( parentPart() && callParent )
+ {
+- khtml::ChildFrame *res = parentPart()->recursiveFrameRequest( url, args );
++ khtml::ChildFrame *res = parentPart()->recursiveFrameRequest( callingHtmlPart, url, args, callParent );
+
+- if ( res )
+- parentPart()->requestObject( res, url, args );
+-
+- return 0L;
++ if ( res )
++ parentPart()->requestObject( res, url, args );
+ }
+
+ return 0L;
+@@ -4552,7 +4584,7 @@ khtml::ChildFrame *KHTMLPart::recursiveF
+
+ void KHTMLPart::saveState( QDataStream &stream )
+ {
+- kdDebug( 6050 ) << "KHTMLPart::saveState saving URL " << m_url.url() << endl;
++ kdDebug( 6050 ) << "KHTMLPart::saveState this = " << this << " saving URL " << m_url.url() << endl;
+
+ stream << m_url << (Q_INT32)d->m_view->contentsX() << (Q_INT32)d->m_view->contentsY()
+ << (Q_INT32) d->m_view->contentsWidth() << (Q_INT32) d->m_view->contentsHeight() << (Q_INT32) d->m_view->marginWidth() << (Q_INT32) d->m_view->marginHeight();
diff --git a/x11/kdelibs3/patches/patch-aw b/x11/kdelibs3/patches/patch-aw
new file mode 100644
index 00000000000..459a6f2f5aa
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-aw
@@ -0,0 +1,52 @@
+$NetBSD: patch-aw,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: khtml/khtml_part.h
+===================================================================
+RCS file: /home/kde/kdelibs/khtml/khtml_part.h,v
+retrieving revision 1.248.2.5
+diff -u -p -r1.248.2.5 khtml_part.h
+--- khtml/khtml_part.h 29 Jun 2004 09:08:16 -0000 1.248.2.5
++++ khtml/khtml_part.h 3 Aug 2004 14:36:47 -0000
+@@ -287,6 +287,7 @@ public:
+ */
+ KParts::BrowserExtension *browserExtension() const;
+ KParts::LiveConnectExtension *liveConnectExtension( const khtml::RenderPart *) const;
++ KParts::BrowserHostExtension *browserHostExtension() const;
+
+ /**
+ * Returns a pointer to the HTML document's view.
+@@ -812,6 +813,16 @@ public:
+ KHTMLPart *findFrame( const QString &f );
+
+ /**
++ * @internal
++ * Recursively finds the part containing the frame with name @p f
++ * and checks if it is accessible by @p callingPart
++ * Returns 0L if no suitable frame can't be found.
++ * Returns parent part if a suitable frame was found and
++ * frame info in @p *childFrame
++ */
++ KHTMLPart *findFrameParent( KParts::ReadOnlyPart *callingPart, const QString &f, khtml::ChildFrame **childFrame=0 );
++
++ /**
+ * Return the current frame (the one that has focus)
+ * Not necessarily a direct child of ours, framesets can be nested.
+ * Returns "this" if this part isn't a frameset.
+@@ -1376,6 +1387,8 @@ private:
+
+ bool restoreURL( const KURL &url );
+ void emitSelectionChanged();
++ // Returns whether callingHtmlPart may access this part
++ bool checkFrameAccess(KHTMLPart *callingHtmlPart);
+ bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs );
+ void startAutoScroll();
+ void stopAutoScroll();
+@@ -1434,7 +1447,7 @@ private:
+ DOM::DocumentImpl *xmlDocImpl() const;
+ khtml::ChildFrame *frame( const QObject *obj );
+
+- khtml::ChildFrame *recursiveFrameRequest( const KURL &url, const KParts::URLArgs &args, bool callParent = true );
++ khtml::ChildFrame *recursiveFrameRequest( KHTMLPart *callingHtmlPart, const KURL &url, const KParts::URLArgs &args, bool callParent = true );
+
+ bool checkLinkSecurity( const KURL &linkURL,const QString &message = QString::null, const QString &button = QString::null );
+ QVariant executeScript( const QString& filename, int baseLine, const DOM::Node &n, const QString& script );
diff --git a/x11/kdelibs3/patches/patch-ax b/x11/kdelibs3/patches/patch-ax
new file mode 100644
index 00000000000..7429b5ea1c8
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-ax
@@ -0,0 +1,27 @@
+$NetBSD: patch-ax,v 1.3.6.1 2004/08/13 13:05:05 agc Exp $
+
+Index: kparts/browserextension.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/kparts/browserextension.cpp,v
+retrieving revision 1.60.2.1
+diff -u -p -r1.60.2.1 browserextension.cpp
+--- kparts/browserextension.cpp 10 Apr 2004 15:08:49 -0000 1.60.2.1
++++ kparts/browserextension.cpp 3 Aug 2004 14:36:48 -0000
+@@ -636,6 +636,17 @@ BrowserHostExtension *BrowserHostExtensi
+ void BrowserExtension::virtual_hook( int, void* )
+ { /*BASE::virtual_hook( id, data );*/ }
+
++BrowserHostExtension *
++BrowserHostExtension::findFrameParent(KParts::ReadOnlyPart *callingPart, const QString &frame)
++{
++ FindFrameParentParams param;
++ param.parent = 0;
++ param.callingPart = callingPart;
++ param.frame = frame;
++ virtual_hook(VIRTUAL_FIND_FRAME_PARENT, &param);
++ return param.parent;
++}
++
+ void BrowserHostExtension::virtual_hook( int, void* )
+ { /*BASE::virtual_hook( id, data );*/ }
+
diff --git a/x11/kdelibs3/patches/patch-ay b/x11/kdelibs3/patches/patch-ay
new file mode 100644
index 00000000000..9fd9d5a781c
--- /dev/null
+++ b/x11/kdelibs3/patches/patch-ay
@@ -0,0 +1,47 @@
+$NetBSD: patch-ay,v 1.3.4.1 2004/08/13 13:05:05 agc Exp $
+
+Index: kparts/browserextension.h
+===================================================================
+RCS file: /home/kde/kdelibs/kparts/browserextension.h,v
+retrieving revision 1.110
+diff -u -p -r1.110 browserextension.h
+--- kparts/browserextension.h 26 Sep 2003 07:13:13 -0000 1.110
++++ kparts/browserextension.h 3 Aug 2004 14:36:48 -0000
+@@ -671,10 +671,16 @@ public:
+ *
+ * Note that this method does not query the child objects recursively.
+ */
+-
+ virtual const QPtrList<KParts::ReadOnlyPart> frames() const;
+
+ /**
++ * @internal
++ * Returns the part that contains @p frame and that may be accessed
++ * by @p callingPart
++ */
++ BrowserHostExtension *findFrameParent(KParts::ReadOnlyPart *callingPart, const QString &frame);
++
++ /**
+ * Opens the given url in a hosted child frame. The frame name is specified in the
+ * frameName variable in the urlArgs argument structure (see KParts::URLArgs ) .
+ */
+@@ -687,6 +693,19 @@ public:
+ static BrowserHostExtension *childObject( QObject *obj );
+
+ protected:
++ /** This 'enum' along with the structure below is NOT part of the public API.
++ * It's going to disappear in KDE 4.0 and is likely to change inbetween.
++ *
++ * @internal
++ */
++ enum { VIRTUAL_FIND_FRAME_PARENT = 0x10 };
++ struct FindFrameParentParams
++ {
++ BrowserHostExtension *parent;
++ KParts::ReadOnlyPart *callingPart;
++ QString frame;
++ };
++
+ virtual void virtual_hook( int id, void* data );
+ private:
+ class BrowserHostExtensionPrivate;