rpms/kdenetwork/FC-3 kdenetwork-3.3.1-kopete-gadu.patch, NONE, 1.1 post-3.3.2-kdenetwork-libgadu.patch, NONE, 1.1 kdenetwork.spec, 1.45, 1.46
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Thu Jul 21 20:08:47 UTC 2005
- Previous message (by thread): rpms/openoffice.org/devel .cvsignore, 1.64, 1.65 openoffice.org.spec, 1.337, 1.338 sources, 1.91, 1.92 workspace.qwizardsbfooo20.patch, 1.1, NONE
- Next message (by thread): rpms/kdenetwork/FC-3 kdenetwork-3.4.1-kopete-libgadu-va_copy.patch, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: than
Update of /cvs/dist/rpms/kdenetwork/FC-3
In directory cvs.devel.redhat.com:/tmp/cvs-serv9556
Modified Files:
kdenetwork.spec
Added Files:
kdenetwork-3.3.1-kopete-gadu.patch
post-3.3.2-kdenetwork-libgadu.patch
Log Message:
- fix crash in kopete
- apply patch to fix libgadu vulnerabilities #163811, CVE CAN-2005-1852
thank to kde security team
- backport patch to fix annoying problem with registration
dialog not able to register/retrieve token due to network problems.
kdenetwork-3.3.1-kopete-gadu.patch:
kopete/chatwindow/chatview.cpp | 8 --
kopete/chatwindow/kopetechatwindow.cpp | 2
kopete/chatwindow/kopeteemailwindow.cpp | 3
kopete/config/appearance/appearanceconfig.cpp | 6 +
kopete/config/plugins/kopetepluginconfig.cpp | 5 +
kopete/config/plugins/kopetepluginconfig.h | 2
kopete/contactlist/kopetelistview.cpp | 13 ++-
kopete/kopetewindow.cpp | 5 -
libkopete/compat/kresolvermanager.cpp | 2
libkopete/compat/ksockssocketdevice.cpp | 8 +-
libkopete/kopetecontactlist.cpp | 9 +-
libkopete/kopetegroup.cpp | 5 +
libkopete/kopetemessagemanagerfactory.cpp | 5 +
libkopete/kopetemessagemanagerfactory.h | 3
libkopete/kopetexsl.cpp | 27 +++++-
libkopete/ui/accountselector.cpp | 1
libkopete/ui/kopetefileconfirmdialog.cpp | 6 -
protocols/gadu/gadueditaccount.cpp | 12 ++-
protocols/gadu/gaduregisteraccount.cpp | 17 +---
protocols/gadu/libgadu/common.c | 87 ++++++++++++++++++---
protocols/gadu/libgadu/events.c | 83 ++++++++++++--------
protocols/gadu/libgadu/http.c | 11 +-
protocols/gadu/libgadu/libgadu.c | 95 +++++++++++++++++-------
protocols/gadu/libgadu/libgadu.h | 4 -
protocols/gadu/libgadu/pubdir.c | 4 -
protocols/irc/ui/channellist.cpp | 1
protocols/oscar/oscarsocket/oscarconnection.cpp | 7 +
protocols/oscar/oscarsocket/oscarsocket.aim.cpp | 2
28 files changed, 304 insertions(+), 129 deletions(-)
--- NEW FILE kdenetwork-3.3.1-kopete-gadu.patch ---
--- kdenetwork-3.3.1/kopete/kopete/chatwindow/chatview.cpp.tn 2004-10-03 09:43:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/chatwindow/chatview.cpp 2004-11-28 18:10:16.000000000 +0100
@@ -216,7 +216,6 @@
editpart = new KopeteRichTextEditPart( editDock, "kopeterichtexteditpart",
mgr->protocol()->richTextCapabilities() );
connect( editpart, SIGNAL( toggleToolbar(bool)), this, SLOT(slotToggleRtfToolbar(bool)) );
- connect( this, SIGNAL( windowCreated()), editpart, SLOT(checkToolbarEnabled()) );
m_edit = static_cast<KTextEdit*>( editpart->widget() );
@@ -338,12 +337,7 @@
if( !KWin::windowInfo( m_mainWindow->winId(), NET::WMDesktop ).onAllDesktops() )
KWin::setOnDesktop( m_mainWindow->winId(), KWin::currentDesktop() );
- m_mainWindow->show();
- //raise() and show() should normaly deIconify the window. but it doesn't do here due
- // to a bug in QT or in KDE (qt3.1.x or KDE 3.1.x) then, i have to call KWin's method
- if(m_mainWindow->isMinimized())
- KWin::deIconifyWindow(m_mainWindow->winId() );
- KWin::raiseWindow( m_mainWindow->winId() );
+ m_mainWindow->raise();
/* Removed Nov 2003
According to Zack, the user double-clicking a contact is not valid reason for a non-pager
--- kdenetwork-3.3.1/kopete/kopete/chatwindow/kopetechatwindow.cpp.tn 2004-10-03 09:43:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/chatwindow/kopetechatwindow.cpp 2004-11-28 18:10:16.000000000 +0100
@@ -846,7 +846,7 @@
guiFactory()->addClient(view->msgManager());
createGUI( view->part() );
- readOptions();
+
if( m_activeView )
m_activeView->setActive( false );
--- kdenetwork-3.3.1/kopete/kopete/chatwindow/kopeteemailwindow.cpp.tn 2004-10-03 09:43:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/chatwindow/kopeteemailwindow.cpp 2004-11-28 18:10:16.000000000 +0100
@@ -670,7 +670,10 @@
void KopeteEmailWindow::raise(bool activate)
{
makeVisible();
+
+ if ( !KWin::windowInfo( winId(), NET::WMDesktop ).onAllDesktops() )
KWin::setOnDesktop( winId(), KWin::currentDesktop() );
+
KMainWindow::raise();
/* Removed Nov 2003
--- kdenetwork-3.3.1/kopete/kopete/config/appearance/appearanceconfig.cpp.tn 2004-08-09 11:27:10.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/config/appearance/appearanceconfig.cpp 2004-11-28 18:10:17.000000000 +0100
@@ -310,7 +310,11 @@
mPrfsContactList->mIndentContacts->setChecked( p->contactListIndentContacts() );
mPrfsContactList->mDisplayMode->setButton( p->contactListDisplayMode() );
mPrfsContactList->mAnimateChanges->setChecked( p->contactListAnimation() );
- mPrfsContactList->mFadeVisibility->setChecked( p->contactListFading() && HAVE_XRENDER );
+#ifdef HAVE_XRENDER
+ mPrfsContactList->mFadeVisibility->setChecked( p->contactListFading() );
+#else
+ mPrfsContactList->mFadeVisibility->setChecked( false );
+#endif
mPrfsContactList->mFoldVisibility->setChecked( p->contactListFolding() );
// "Colors & Fonts" TAB =====================================================
--- kdenetwork-3.3.1/kopete/kopete/config/plugins/kopetepluginconfig.cpp.tn 2004-08-05 21:26:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/config/plugins/kopetepluginconfig.cpp 2004-11-28 18:10:17.000000000 +0100
@@ -34,6 +34,11 @@
bool isChanged;
};
+KopetePluginConfig::~KopetePluginConfig()
+{
+ delete d;
+}
+
KopetePluginConfig::KopetePluginConfig( QWidget *parent, const char *name )
: KDialogBase( Plain, i18n( "Configure" ), Help | Default | Cancel | Apply | Ok | User1,
Ok, parent, name, false, true, KGuiItem( i18n( "&Reset" ), "undo" ) )
--- kdenetwork-3.3.1/kopete/kopete/config/plugins/kopetepluginconfig.h.tn 2003-10-18 00:01:42.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/config/plugins/kopetepluginconfig.h 2004-11-28 18:10:17.000000000 +0100
@@ -33,7 +33,7 @@
public:
KopetePluginConfig( QWidget *parent, const char *name = 0L );
-
+ ~KopetePluginConfig();
void apply();
public slots:
--- kdenetwork-3.3.1/kopete/kopete/contactlist/kopetelistview.cpp.tn 2004-07-30 17:10:30.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/contactlist/kopetelistview.cpp 2004-11-28 18:10:17.000000000 +0100
@@ -180,10 +180,15 @@
*/
void ListView::keyPressEvent( QKeyEvent *e )
{
- if ( (e->key() == Qt::Key_F2) && currentItem() )
- rename( currentItem(), 0 );
- else if ( (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) && currentItem())
- emitExecute( currentItem(), QPoint(), 0 );
+ QListViewItem *item = currentItem();
+ if ( (e->key() == Qt::Key_F2) && item && item->isVisible() )
+ rename( item, 0 );
+ else if ( (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) && item && item->isVisible() )
+ {
+ // must provide a point within the item; emitExecute checks for this
+ QPoint p = viewport()->mapToGlobal(itemRect(item).center());
+ emitExecute( currentItem(), p, 0 );
+ }
else
KListView::keyPressEvent(e);
}
--- kdenetwork-3.3.1/kopete/kopete/kopetewindow.cpp.tn 2004-10-03 09:43:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/kopete/kopetewindow.cpp 2004-11-28 18:10:16.000000000 +0100
@@ -196,7 +196,7 @@
globalAccel = new KGlobalAccel( this );
globalAccel->insert( QString::fromLatin1("Read Message"), i18n("Read Message"), i18n("Read the next pending message"),
- CTRL+SHIFT+Key_I, KKey::QtWIN+CTRL+Key_I, KopeteMessageManagerFactory::factory() , SIGNAL(readMessage()) );
+ CTRL+SHIFT+Key_I, KKey::QtWIN+CTRL+Key_I, KopeteMessageManagerFactory::factory(), SLOT(slotReadMessage()) );
globalAccel->insert( QString::fromLatin1("Show/Hide Contact List"), i18n("Show/Hide Contact List"), i18n("Show or hide the contact list"),
CTRL+SHIFT+Key_C, KKey::QtWIN+CTRL+Key_C, this, SLOT(slotShowHide()) );
@@ -400,7 +400,7 @@
void KopeteWindow::slotConfToolbar()
{
saveMainWindowSettings(KGlobal::config(), "General Options");
- KEditToolbar *dlg = new KEditToolbar(actionCollection(), "kopeteui.rc");
+ KEditToolbar *dlg = new KEditToolbar(factory());
connect( dlg, SIGNAL(newToolbarConfig()), this, SLOT(slotUpdateToolbar()) );
connect( dlg, SIGNAL(finished()) , dlg, SLOT(deleteLater()));
dlg->show();
@@ -408,7 +408,6 @@
void KopeteWindow::slotUpdateToolbar()
{
- createGUI("kopeteui.rc", false);
applyMainWindowSettings(KGlobal::config(), "General Options");
}
--- kdenetwork-3.3.1/kopete/libkopete/compat/kresolvermanager.cpp.tn 2004-10-03 09:43:23.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/compat/kresolvermanager.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -203,7 +203,7 @@
// a thread will try maxThreadRetries to get data, waiting at most
// maxThreadWaitTime milliseconds between each attempt. After that, it'll
// exit
-static const int maxThreadWaitTime = 20000; // 20 seconds
+static const int maxThreadWaitTime = ULONG_MAX; // wait forever
static const int maxThreads = 5;
static pid_t pid; // FIXME -- disable when everything is ok
--- kdenetwork-3.3.1/kopete/libkopete/compat/ksockssocketdevice.cpp.tn 2004-10-03 09:43:23.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/compat/ksockssocketdevice.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -169,7 +169,7 @@
return new KSocksSocketDevice(newfd);
}
-static int socks_read_common(int sockfd, char *data, Q_ULONG maxlen, KSocketAddress* from, ssize_t &retval, bool peek = false)
+static int socks_read_common(int sockfd, char *data, Q_ULONG maxlen, KNetwork::KSocketAddress* from, ssize_t &retval, bool peek = false)
{
kde_socklen_t len;
if (from)
@@ -304,7 +304,7 @@
return retval;
}
-KSocketAddress KSocksSocketDevice::localAddress() const
+KNetwork::KSocketAddress KSocksSocketDevice::localAddress() const
{
if (m_sockfd == -1)
return KSocketAddress(); // not open, empty value
@@ -333,7 +333,7 @@
return localAddress;
}
-KSocketAddress KSocksSocketDevice::peerAddress() const
+KNetwork::KSocketAddress KSocksSocketDevice::peerAddress() const
{
if (m_sockfd == -1)
return KSocketAddress(); // not open, empty value
@@ -362,7 +362,7 @@
return peerAddress;
}
-KSocketAddress KSocksSocketDevice::externalAddress() const
+KNetwork::KSocketAddress KSocksSocketDevice::externalAddress() const
{
// return empty, indicating unknown external address
return KSocketAddress();
--- kdenetwork-3.3.1/kopete/libkopete/kopetecontactlist.cpp.tn 2004-08-05 21:26:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/kopetecontactlist.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -912,9 +912,12 @@
setSelectedItems( d->selectedMetaContacts, d->selectedGroups );
}
- d->groups.remove( g );
- emit groupRemoved( g );
- delete g;
+ if ( g->type() == KopeteGroup::Normal )
+ {
+ d->groups.remove( g );
+ emit groupRemoved( g );
+ delete g;
+ }
}
KopeteGroup * KopeteContactList::getGroup(const QString& displayName, int type)
--- kdenetwork-3.3.1/kopete/libkopete/kopetegroup.cpp.tn 2004-08-05 21:26:20.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/kopetegroup.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -96,6 +96,11 @@
KopeteGroup::~KopeteGroup()
{
+ if ( d->type == TopLevel )
+ s_topLevel = 0L;
+ if ( d->type == Temporary )
+ s_temporary = 0L;
+
delete d;
}
--- kdenetwork-3.3.1/kopete/libkopete/kopetemessagemanagerfactory.cpp.tn 2004-05-22 22:57:15.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/kopetemessagemanagerfactory.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -105,6 +105,11 @@
return (result);
}
+void KopeteMessageManagerFactory::slotReadMessage()
+{
+ emit readMessage();
+}
+
void KopeteMessageManagerFactory::addKopeteMessageManager(KopeteMessageManager * result)
{
if(result->mmId() == 0)
--- kdenetwork-3.3.1/kopete/libkopete/kopetemessagemanagerfactory.h.tn 2004-05-22 22:57:15.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/kopetemessagemanagerfactory.h 2004-11-28 18:10:18.000000000 +0100
@@ -188,6 +188,9 @@
*/
void getActiveView( KopeteView *& );
+public slots:
+ void slotReadMessage();
+
private:
KopeteMessageManagerFactory( QObject* parent = 0, const char* name = 0 );
--- kdenetwork-3.3.1/kopete/libkopete/kopetexsl.cpp.tn 2004-06-25 11:10:09.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/kopetexsl.cpp 2004-11-28 18:10:18.000000000 +0100
@@ -36,6 +36,8 @@
#include <qsignal.h>
#include <qstylesheet.h>
#include <qthread.h>
+#include <qevent.h>
+#include <qmutex.h>
#include <kapplication.h>
#include <kdebug.h>
@@ -48,7 +50,7 @@
* The thread class that actually performs the XSL processing.
* Using a thread allows async operation.
*/
-class KopeteXSLThread : public QThread
+class KopeteXSLThread : public QObject, public QThread
{
public:
/**
@@ -66,6 +68,11 @@
*/
virtual void run();
+ /**
+ * A user event is used to get back to the UI thread to emit the completed signal
+ */
+ bool event( QEvent *event );
+
static QString xsltTransform( const QString &xmlString, const QCString &xsltString );
/**
@@ -80,6 +87,7 @@
QString m_resultString;
QObject *m_target;
const char *m_slotCompleted;
+ QMutex dataMutex;
};
KopeteXSLThread::KopeteXSLThread( const QString &xmlString, const QCString &xsltString, QObject *target, const char *slotCompleted )
@@ -93,19 +101,30 @@
void KopeteXSLThread::run()
{
+ dataMutex.lock();
m_resultString = xsltTransform( m_xml, m_xsl );
+ dataMutex.unlock();
+ // get back to the main thread
+ qApp->postEvent( this, new QEvent( QEvent::User ) );
+}
- // Signal completion
+bool KopeteXSLThread::event( QEvent *event )
+{
+ if ( event->type() == QEvent::User )
+ {
+ dataMutex.lock();
if( m_target && m_slotCompleted )
{
QSignal completeSignal( m_target );
completeSignal.connect( m_target, m_slotCompleted );
completeSignal.setValue( m_resultString );
completeSignal.activate();
-
- // FIXME: Why no 'delete this' if there's no slotCompleted? - Martijn
+ }
+ dataMutex.unlock();
delete this;
+ return true;
}
+ return QObject::event( event );
}
QString KopeteXSLThread::xsltTransform( const QString &xmlString, const QCString &xslCString )
--- kdenetwork-3.3.1/kopete/libkopete/ui/accountselector.cpp.tn 2004-06-03 21:22:49.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/ui/accountselector.cpp 2004-11-28 18:10:19.000000000 +0100
@@ -85,6 +85,7 @@
AccountSelector::~AccountSelector()
{
kdDebug(14010) << k_funcinfo << endl;
+ delete d;
}
--- kdenetwork-3.3.1/kopete/libkopete/ui/kopetefileconfirmdialog.cpp.tn 2004-07-17 21:10:23.000000000 +0200
+++ kdenetwork-3.3.1/kopete/libkopete/ui/kopetefileconfirmdialog.cpp 2004-11-28 18:10:19.000000000 +0100
@@ -31,7 +31,7 @@
KopeteFileConfirmDialog::KopeteFileConfirmDialog(const KopeteFileTransferInfo &info,const QString& description,QWidget *parent, const char *name )
: KDialogBase( parent, name, true, i18n( "A User Would Like to Send You a File" ),
- KDialogBase::User1 | KDialogBase::User2, KDialogBase::User1, true, i18n( "&Accept" ), i18n( "&Refuse" ) ),
+ KDialogBase::User1 | KDialogBase::User2, KDialogBase::User1, true, i18n( "&Refuse" ), i18n( "&Accept" ) ),
m_info( info )
{
setWFlags( WDestructiveClose );
@@ -66,7 +66,7 @@
}
}
-void KopeteFileConfirmDialog::slotUser1()
+void KopeteFileConfirmDialog::slotUser2()
{
m_emited=true;
KURL url(m_view->m_saveto->text());
@@ -83,7 +83,7 @@
close();
}
-void KopeteFileConfirmDialog::slotUser2()
+void KopeteFileConfirmDialog::slotUser1()
{
m_emited=true;
emit refused(m_info);
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/common.c.tn 2004-05-24 18:05:24.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/common.c 2004-11-28 18:10:20.000000000 +0100
@@ -428,28 +428,91 @@
/*
* gg_gethostbyname() // funkcja pomocnicza
*
- * odpowiednik gethostbyname() u¿ywaj±cy gethostbyname_r(), gdy potrzebna
- * jest wielobie¿no¶æ. chwilowo korzysta ze zwyk³ego gethostbyname().
+ * odpowiednik gethostbyname() troszcz±cy siê o wspó³bie¿no¶æ, gdy mamy do
+ * dyspozycji funkcjê gethostbyname_r().
*
* - hostname - nazwa serwera
*
- * zaalokowany bufor, który nale¿y zwolniæ lub NULL w przypadku b³êdu.
+ * zwraca wska¼nik na strukturê in_addr, któr± nale¿y zwolniæ.
*/
-struct hostent *gg_gethostbyname(const char *hostname)
+struct in_addr *gg_gethostbyname(const char *hostname)
{
- /* XXX u¿yæ gethostbyname_r() */
+ struct in_addr *addr = NULL;
- struct hostent *hp, *hp2;
+#ifdef HAVE_GETHOSTBYNAME_R
+ char *tmpbuf = NULL, *buf = NULL;
+ struct hostent *hp = NULL, *hp2 = NULL;
+ int h_errnop, ret;
+ size_t buflen = 1024;
+ int new_errno;
+
+ new_errno = ENOMEM;
+
+ if (!(addr = malloc(sizeof(struct in_addr))))
+ goto cleanup;
+
+ if (!(hp = calloc(1, sizeof(*hp))))
+ goto cleanup;
+
+ if (!(buf = malloc(buflen)))
+ goto cleanup;
+
+ tmpbuf = buf;
+
+ while ((ret = gethostbyname_r(hostname, hp, buf, buflen, &hp2, &h_errnop)) == ERANGE) {
+ buflen *= 2;
+
+ if (!(tmpbuf = realloc(buf, buflen)))
+ break;
+
+ buf = tmpbuf;
+ }
+
+ if (ret)
+ new_errno = h_errnop;
+
+ if (ret || !hp2 || !tmpbuf)
+ goto cleanup;
+
+ memcpy(addr, hp->h_addr, sizeof(struct in_addr));
+
+ free(buf);
+ free(hp);
+
+ return addr;
+
+cleanup:
+ errno = new_errno;
+
+ if (addr)
+ free(addr);
+ if (hp)
+ free(hp);
+ if (buf)
+ free(buf);
+
+ return NULL;
+#else
+ struct hostent *hp;
+
+ if (!(addr = malloc(sizeof(struct in_addr)))) {
+ errno = ENOMEM;
+ goto cleanup;
+ }
if (!(hp = gethostbyname(hostname)))
- return NULL;
+ goto cleanup;
- if (!(hp2 = calloc(1, sizeof(*hp))))
- return NULL;
+ memcpy(addr, hp->h_addr, sizeof(struct in_addr));
- memcpy(hp2, hp, sizeof(*hp));
+ return addr;
+
+cleanup:
+ if (addr)
+ free(addr);
- return hp2;
+ return NULL;
+#endif
}
#ifdef ASSIGN_SOCKETS_TO_THREADS
@@ -694,7 +757,7 @@
*/
static void gg_crc32_make_table()
{
- uint32_t h = 0;
+ uint32_t h = 1;
int i, j;
memset(gg_crc32_table, 0, sizeof(gg_crc32_table));
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/events.c.tn 2004-05-24 18:05:24.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/events.c 2004-11-28 18:10:20.000000000 +0100
@@ -59,47 +59,60 @@
if (!e)
return;
- if (e->type == GG_EVENT_MSG) {
- free(e->event.msg.message);
- free(e->event.msg.formats);
- free(e->event.msg.recipients);
- }
+ switch (e->type) {
+ case GG_EVENT_MSG:
+ free(e->event.msg.message);
+ free(e->event.msg.formats);
+ free(e->event.msg.recipients);
+ break;
- if (e->type == GG_EVENT_NOTIFY)
- free(e->event.notify);
+ case GG_EVENT_NOTIFY:
+ free(e->event.notify);
+ break;
- if (e->type == GG_EVENT_NOTIFY60) {
- int i;
+ case GG_EVENT_NOTIFY60:
+ {
+ int i;
- for (i = 0; e->event.notify60[i].uin; i++)
- free(e->event.notify60[i].descr);
+ for (i = 0; e->event.notify60[i].uin; i++)
+ free(e->event.notify60[i].descr);
- free(e->event.notify60);
- }
+ free(e->event.notify60);
- if (e->type == GG_EVENT_STATUS60)
- free(e->event.status60.descr);
+ break;
+ }
+
+ case GG_EVENT_STATUS60:
+ free(e->event.status60.descr);
+ break;
- if (e->type == GG_EVENT_STATUS)
- free(e->event.status.descr);
+ case GG_EVENT_STATUS:
+ free(e->event.status.descr);
+ break;
- if (e->type == GG_EVENT_NOTIFY_DESCR) {
- free(e->event.notify_descr.notify);
- free(e->event.notify_descr.descr);
- }
+ case GG_EVENT_NOTIFY_DESCR:
+ free(e->event.notify_descr.notify);
+ free(e->event.notify_descr.descr);
+ break;
- if (e->type == GG_EVENT_DCC_VOICE_DATA)
- free(e->event.dcc_voice_data.data);
+ case GG_EVENT_DCC_VOICE_DATA:
+ free(e->event.dcc_voice_data.data);
+ break;
- if (e->type == GG_EVENT_PUBDIR50_SEARCH_REPLY || e->type == GG_EVENT_PUBDIR50_READ || e->type == GG_EVENT_PUBDIR50_WRITE)
- gg_pubdir50_free(e->event.pubdir50);
+ case GG_EVENT_PUBDIR50_SEARCH_REPLY:
+ case GG_EVENT_PUBDIR50_READ:
+ case GG_EVENT_PUBDIR50_WRITE:
+ gg_pubdir50_free(e->event.pubdir50);
+ break;
- if (e->type == GG_EVENT_USERLIST)
- free(e->event.userlist.reply);
+ case GG_EVENT_USERLIST:
+ free(e->event.userlist.reply);
+ break;
- if (e->type == GG_EVENT_IMAGE_REPLY) {
- free(e->event.image_reply.filename);
- free(e->event.image_reply.image);
+ case GG_EVENT_IMAGE_REPLY:
+ free(e->event.image_reply.filename);
+ free(e->event.image_reply.image);
+ break;
}
free(e);
@@ -837,7 +850,7 @@
case GG_STATE_CONNECTING_HUB:
{
- char buf[1024], *client;
+ char buf[1024], *client, *auth;
int res = 0, res_size = sizeof(res);
const char *host, *appmsg;
@@ -890,12 +903,18 @@
#endif
appmsg = "appmsg2.asp";
+ auth = gg_proxy_auth();
+
snprintf(buf, sizeof(buf) - 1,
"GET %s/appsvc/%s?fmnumber=%u&version=%s&lastmsg=%d HTTP/1.0\r\n"
"Host: " GG_APPMSG_HOST "\r\n"
"User-Agent: " GG_HTTP_USERAGENT "\r\n"
"Pragma: no-cache\r\n"
- "\r\n", host, appmsg, sess->uin, client, sess->last_sysmsg);
+ "%s"
+ "\r\n", host, appmsg, sess->uin, client, sess->last_sysmsg, (auth) ? auth : "");
+
+ if (auth)
+ free(auth);
free(client);
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/http.c.tn 2004-05-24 18:05:24.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/http.c 2004-11-28 18:10:20.000000000 +0100
@@ -117,17 +117,16 @@
h->check = GG_CHECK_READ;
h->timeout = GG_DEFAULT_TIMEOUT;
} else {
- struct hostent *he;
- struct in_addr a;
+ struct in_addr *hn, a;
- if (!(he = gg_gethostbyname(hostname))) {
- gg_debug(GG_DEBUG_MISC, "// gg_http_connect() host not found\n");
+ if (!(hn = gg_gethostbyname(hostname))) {
+ gg_debug(GG_DEBUG_MISC, "// gg_http_connect() host not found\n");
gg_http_free(h);
errno = ENOENT;
return NULL;
} else {
- memcpy((char*) &a, he->h_addr, sizeof(a));
- free(he);
+ a.s_addr = hn->s_addr;
+ free(hn);
}
if (!(h->fd = gg_connect(&a, port, 0)) == -1) {
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/libgadu.c.tn 2004-05-24 18:05:24.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/libgadu.c 2004-11-28 18:10:20.000000000 +0100
@@ -197,18 +197,21 @@
if (pipe(pipes) == -1)
return -1;
- if ((res = fork()) == -1)
+ if ((res = fork()) == -1) {
+ close(pipes[0]);
+ close(pipes[1]);
return -1;
+ }
if (!res) {
if ((a.s_addr = inet_addr(hostname)) == INADDR_NONE) {
- struct hostent *he;
+ struct in_addr *hn;
- if (!(he = gg_gethostbyname(hostname)))
+ if (!(hn = gg_gethostbyname(hostname)))
a.s_addr = INADDR_NONE;
else {
- memcpy((char*) &a, he->h_addr, sizeof(a));
- free(he);
+ a.s_addr = hn->s_addr;
+ free(hn);
}
}
@@ -238,13 +241,13 @@
struct in_addr a;
if ((a.s_addr = inet_addr(d->hostname)) == INADDR_NONE) {
- struct hostent *he;
+ struct in_addr *hn;
- if (!(he = gg_gethostbyname(d->hostname)))
+ if (!(hn = gg_gethostbyname(d->hostname)))
a.s_addr = INADDR_NONE;
else {
- memcpy((char*) &a, he->h_addr, sizeof(a));
- free(he);
+ a.s_addr = hn->s_addr;
+ free(hn);
}
}
@@ -277,9 +280,9 @@
*/
int gg_resolve_pthread(int *fd, void **resolver, const char *hostname)
{
- struct gg_resolve_pthread_data *d;
+ struct gg_resolve_pthread_data *d = NULL;
pthread_t *tmp;
- int pipes[2];
+ int pipes[2], new_errno;
gg_debug(GG_DEBUG_FUNCTION, "** gg_resolve_pthread(%p, %p, \"%s\");\n", fd, resolver, hostname);
@@ -291,6 +294,7 @@
if (!(tmp = malloc(sizeof(pthread_t)))) {
gg_debug(GG_DEBUG_MISC, "// gg_resolve_pthread() out of memory for pthread id\n");
+ errno = ENOMEM;
return -1;
}
@@ -300,20 +304,26 @@
return -1;
}
- if (!(d = malloc(sizeof(*d))) || !(d->hostname = strdup(hostname))) {
+ if (!(d = malloc(sizeof(*d)))) {
gg_debug(GG_DEBUG_MISC, "// gg_resolve_pthread() out of memory\n");
- free(tmp);
- return -1;
+ new_errno = ENOMEM;
+ goto cleanup;
+ }
+
+ d->hostname = NULL;
+
+ if (!(d->hostname = strdup(hostname))) {
+ gg_debug(GG_DEBUG_MISC, "// gg_resolve_pthread() out of memory\n");
+ new_errno = ENOMEM;
+ goto cleanup;
}
d->fd = pipes[1];
if (pthread_create(tmp, NULL, gg_resolve_pthread_thread, d)) {
gg_debug(GG_DEBUG_MISC, "// gg_resolve_phread() unable to create thread\n");
- close(pipes[0]);
- close(pipes[1]);
- free(tmp);
- return -1;
+ new_errno = errno;
+ goto cleanup;
}
gg_debug(GG_DEBUG_MISC, "// gg_resolve_pthread() %p\n", tmp);
@@ -323,6 +333,21 @@
*fd = pipes[0];
return 0;
+
+cleanup:
+ if (d) {
+ free(d->hostname);
+ free(d);
+ }
+
+ close(pipes[0]);
+ close(pipes[1]);
+
+ free(tmp);
+
+ errno = new_errno;
+
+ return -1;
}
#endif
@@ -396,7 +421,23 @@
}
} else
#endif
- res = write(sess->fd, buf, length);
+ {
+ int written = 0;
+
+ while (written < length) {
+ res = write(sess->fd, buf + written, length - written);
+
+ if (res == -1) {
+ if (errno == EAGAIN)
+ continue;
+ else
+ break;
+ } else {
+ written += res;
+ res = written;
+ }
+ }
+ }
return res;
}
@@ -439,6 +480,7 @@
gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() header recv(%d,%p,%d) = %d\n", sess->fd, &h + sess->header_done, sizeof(h) - sess->header_done, ret);
if (!ret) {
+ errno = 0;
gg_debug(GG_DEBUG_MISC, "// gg_recv_packet() header recv() failed: connection broken\n");
return NULL;
}
@@ -707,7 +749,7 @@
sess->initial_status = p->status;
sess->callback = gg_session_callback;
sess->destroy = gg_free_session;
- sess->port = (p->server_port) ? p->server_port : GG_DEFAULT_PORT;
+ sess->port = (p->server_port) ? p->server_port : ((gg_proxy_enabled) ? GG_HTTPS_PORT : GG_DEFAULT_PORT);
sess->server_addr = p->server_addr;
sess->external_port = p->external_port;
sess->external_addr = p->external_addr;
@@ -774,14 +816,14 @@
if (!p->server_addr || !p->server_port) {
if ((a.s_addr = inet_addr(hostname)) == INADDR_NONE) {
- struct hostent *he;
+ struct in_addr *hn;
- if (!(he = gg_gethostbyname(hostname))) {
+ if (!(hn = gg_gethostbyname(hostname))) {
gg_debug(GG_DEBUG_MISC, "// gg_login() host \"%s\" not found\n", hostname);
goto fail;
} else {
- memcpy((char*) &a, he->h_addr, sizeof(a));
- free(he);
+ a.s_addr = hn->s_addr;
+ free(hn);
}
}
} else {
@@ -791,6 +833,9 @@
sess->hub_addr = a.s_addr;
+ if (gg_proxy_enabled)
+ sess->proxy_addr = a.s_addr;
+
if ((sess->fd = gg_connect(&a, port, 0)) == -1) {
gg_debug(GG_DEBUG_MISC, "// gg_login() connection failed (errno=%d, %s)\n", errno, strerror(errno));
goto fail;
@@ -1158,7 +1203,7 @@
}
/* wytnij ¶cie¿ki, zostaw tylko nazwê pliku */
- while ((tmp = rindex(filename, '/')) || (tmp = rindex(filename, '\\')))
+ while ((tmp = strrchr(filename, '/')) || (tmp = strrchr(filename, '\\')))
filename = tmp + 1;
if (strlen(filename) < 1 || strlen(filename) > 1024) {
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/libgadu.h.tn 2004-07-17 21:10:28.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/libgadu.h 2004-11-28 18:10:21.000000000 +0100
@@ -907,7 +907,7 @@
char *gg_get_line(char **ptr);
int gg_connect(void *addr, int port, int async);
-struct hostent *gg_gethostbyname(const char *hostname);
+struct in_addr *gg_gethostbyname(const char *hostname);
char *gg_read_line(int sock, char *buf, int length);
void gg_chomp(char *line);
char *gg_urlencode(const char *str);
@@ -943,7 +943,7 @@
#define GG_DEFAULT_PROTOCOL_VERSION 0x20
#define GG_DEFAULT_TIMEOUT 30
#define GG_HAS_AUDIO_MASK 0x40000000
-#define GG_LIBGADU_VERSION "1.4.20040512"
+#define GG_LIBGADU_VERSION "CVS"
#define GG_DEFAULT_DCC_PORT 1550
--- kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/pubdir.c.tn 2004-05-24 18:05:24.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/libgadu/pubdir.c 2004-11-28 18:10:21.000000000 +0100
@@ -476,7 +476,7 @@
"Pragma: no-cache\r\n"
"\r\n";
- if (!(h = gg_http_connect(GG_APPMSG_HOST, GG_APPMSG_PORT, async, "POST", "/appsvc/regtoken.asp", query))) {
+ if (!(h = gg_http_connect(GG_REGISTER_HOST, GG_REGISTER_PORT, async, "POST", "/appsvc/regtoken.asp", query))) {
gg_debug(GG_DEBUG_MISC, "=> token, gg_http_connect() failed mysteriously\n");
return NULL;
}
@@ -564,7 +564,7 @@
free(url);
- if (!(h2 = gg_http_connect(GG_APPMSG_HOST, GG_APPMSG_PORT, h->async, "GET", path, "Host: " GG_APPMSG_HOST "\r\nUser-Agent: " GG_HTTP_USERAGENT "\r\n\r\n"))) {
+ if (!(h2 = gg_http_connect(GG_REGISTER_HOST, GG_REGISTER_PORT, h->async, "GET", path, "Host: " GG_REGISTER_HOST "\r\nUser-Agent: " GG_HTTP_USERAGENT "\r\n\r\n"))) {
gg_debug(GG_DEBUG_MISC, "=> token, gg_http_connect() failed mysteriously\n");
free(path);
free(tokenid);
--- kdenetwork-3.3.1/kopete/protocols/irc/ui/channellist.cpp.tn 2004-07-17 21:10:29.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/irc/ui/channellist.cpp 2004-11-28 18:10:23.000000000 +0100
@@ -103,7 +103,6 @@
QToolTip::add( channelSearch, i18n( "You may search for channels on the IRC server for a text string entered here." ) );
QWhatsThis::add( channelSearch, i18n( "You may search for channels on the IRC server for a text string entered here. For instance, you may type 'linux' to find channels that have something to do with linux." ) );
mSearchButton->setText( i18n( "S&earch" ) );
- mSearchButton->setAccel( QKeySequence( i18n( "Alt+E" ) ) );
QToolTip::add( mSearchButton, i18n( "Perform a channel search." ) );
QWhatsThis::add( mSearchButton, i18n( "Perform a channel search. Please be patient, as this can be slow depending on the number of channels on the server." ) );
QToolTip::add( mChannelList, i18n( "Double click on a channel to select it." ) );
--- kdenetwork-3.3.1/kopete/protocols/oscar/oscarsocket/oscarconnection.cpp.tn 2004-07-17 21:10:33.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/oscar/oscarsocket/oscarconnection.cpp 2004-11-28 18:10:34.000000000 +0100
@@ -220,7 +220,12 @@
#endif
kdDebug(14150) << k_funcinfo << "SOCKET ERROR: " << errornum << endl;
- mSocket->closeNow();
+ // in case of a socket error, the socket may already be closed,
+ // and if it is, the closed() signal may not have been emitted.
+ //mSocket->closeNow();
+ // pretend this was expected, or else autoreconnect kicks in and
+ // we end up in an infinite loop if, say, DNS is failing.
+ emit socketClosed(connectionName(), true);
emit socketError(connectionName(), errornum);
}
--- kdenetwork-3.3.1/kopete/protocols/oscar/oscarsocket/oscarsocket.aim.cpp.tn 2004-06-25 11:10:17.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/oscar/oscarsocket/oscarsocket.aim.cpp 2004-11-28 18:10:34.000000000 +0100
@@ -45,7 +45,7 @@
outbuf.addSnac(0x0017,0x0002,0x0000,0x00000000);
outbuf.addTLV(0x0001,getSN().length(),getSN().latin1());
- char digest[16];
+ char digest[17];
encodePassword(&digest[0]);
digest[16] = '\0'; //do this so that addTLV sees a NULL-terminator
--- kdenetwork-3.3.1/kopete/protocols/gadu/gaduregisteraccount.cpp.tn 2005-07-21 14:44:03.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/gaduregisteraccount.cpp 2005-07-21 14:46:53.000000000 +0200
@@ -165,29 +165,22 @@
GaduRegisterAccount::registrationError( const QString& title, const QString& what )
{
updateStatus( i18n( "Registration failed: %1" ).arg( what ) );
- KMessageBox::sorry( this, what, title );
+ KMessageBox::sorry( this, "Registration was unsucessful, please try again.", title );
disconnect( this, SLOT( displayToken( QPixmap, QString ) ) );
disconnect( this, SLOT( registrationDone( const QString&, const QString& ) ) );
disconnect( this, SLOT( registrationError( const QString&, const QString& ) ) );
disconnect( this, SLOT( updateStatus( const QString ) ) );
-// it is set to deleteLater, in case of error
- cRegister = NULL;
ui->valueVerificationSequence->setDisabled( true );
ui->valueVerificationSequence->setText( "" );
enableButton( User1, false );
updateStatus( "" );
- cRegister = new RegisterCommand( this );
-
- connect( cRegister, SIGNAL( tokenRecieved( QPixmap, QString ) ), SLOT( displayToken( QPixmap, QString ) ) );
- connect( cRegister, SIGNAL( done( const QString&, const QString& ) ), SLOT( registrationDone( const QString&, const QString& ) ) );
- connect( cRegister, SIGNAL( error( const QString&, const QString& ) ), SLOT( registrationError( const QString&, const QString& ) ) );
- connect( cRegister, SIGNAL( operationStatus( const QString ) ), SLOT( updateStatus( const QString ) ) );
-
- updateStatus( i18n( "Retrieving token" ) );
- cRegister->requestToken();
+ // emit UIN 0, to enable 'register new account' button again in dialog below
+ emit registeredNumber( 0, QString( "" ) );
+ slotClose();
+ deleteLater();
}
void
--- kdenetwork-3.3.1/kopete/protocols/gadu/gadueditaccount.cpp.tn 2005-07-21 14:41:37.000000000 +0200
+++ kdenetwork-3.3.1/kopete/protocols/gadu/gadueditaccount.cpp 2005-07-21 14:43:35.000000000 +0200
@@ -100,10 +100,16 @@
}
void
-GaduEditAccount::newUin( unsigned int uni, QString password )
+GaduEditAccount::newUin( unsigned int uin, QString password )
{
- loginEdit_->setText( QString::number( uni ) );
- passwordEdit_->setText( password );
+ if ( uin ) {
+ loginEdit_->setText( QString::number( uin ) );
+ passwordEdit_->setText( password );
+ }
+ else {
+ // registration failed, enable button again
+ registerNew->setDisabled( false );
+ }
}
bool
post-3.3.2-kdenetwork-libgadu.patch:
common.c | 140 ++++++++++++++++++++++++++-----------------------
compat.h | 3 -
dcc.c | 114 +++++++++++++++++++++++++++++----------
events.c | 112 +++++++++++++++++++++++++++++----------
http.c | 35 ++++++------
libgadu.c | 159 +++++++++++++++++++++++++++++++++++--------------------
libgadu.h | 69 +++++++++++++-----------
pubdir.c | 174 +++++++++++++++++++++++++++++++++++++++----------------------
pubdir50.c | 5 +
9 files changed, 520 insertions(+), 291 deletions(-)
--- NEW FILE post-3.3.2-kdenetwork-libgadu.patch ---
Index: kopete/protocols/gadu/libgadu/libgadu.h
===================================================================
--- kopete/protocols/gadu/libgadu/libgadu.h (.../KDE_3_3_BRANCH/kdenetwork/kopete/protocols/gadu/libgadu) (revision 367579)
+++ kopete/protocols/gadu/libgadu/libgadu.h (.../KDE/3.3/kdenetwork/kopete/protocols/gadu/libgadu) (working copy)
@@ -19,7 +19,8 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+ * USA.
*/
#ifndef __GG_LIBGADU_H
@@ -32,15 +33,15 @@
extern "C" {
#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
#include <libgadu-config.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdarg.h>
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
#ifdef __GG_LIBGADU_HAVE_OPENSSL
#include <openssl/ssl.h>
#endif
@@ -56,10 +57,10 @@
* ogólna struktura opisuj±ca ró¿ne sesje. przydatna w klientach.
*/
#define gg_common_head(x) \
- int fd; /* podgl±dany deskryptor */ \
- int check; /* sprawdzamy zapis czy odczyt */ \
- int state; /* aktualny stan maszynki */ \
- int error; /* kod b³êdu dla GG_STATE_ERROR */ \
+ int fd; /* podgl±dany deskryptor */ \
+ int check; /* sprawdzamy zapis czy odczyt */ \
+ int state; /* aktualny stan maszynki */ \
+ int error; /* kod b³êdu dla GG_STATE_ERROR */ \
int type; /* rodzaj sesji */ \
int id; /* identyfikator */ \
int timeout; /* sugerowany timeout w sekundach */ \
@@ -110,7 +111,7 @@
char *recv_buf; /* bufor na otrzymywane pakiety */
int recv_done; /* ile ju¿ wczytano do bufora */
- int recv_left; /* i ile jeszcze trzeba wczytaæ */
+ int recv_left; /* i ile jeszcze trzeba wczytaæ */
int protocol_version; /* wersja u¿ywanego protoko³u */
char *client_version; /* wersja u¿ywanego klienta */
@@ -149,17 +150,17 @@
struct gg_http {
gg_common_head(struct gg_http)
- int async; /* czy po³±czenie asynchroniczne */
+ int async; /* czy po³±czenie asynchroniczne */
int pid; /* pid procesu resolvera */
int port; /* port, z którym siê ³±czymy */
- char *query; /* bufor zapytania http */
- char *header; /* bufor nag³ówka */
- int header_size; /* rozmiar wczytanego nag³ówka */
- char *body; /* bufor otrzymanych informacji */
- unsigned int body_size; /* oczekiwana ilo¶æ informacji */
+ char *query; /* bufor zapytania http */
+ char *header; /* bufor nag³ówka */
+ int header_size; /* rozmiar wczytanego nag³ówka */
+ char *body; /* bufor otrzymanych informacji */
+ unsigned int body_size; /* oczekiwana ilo¶æ informacji */
- void *data; /* dane danej operacji http */
+ void *data; /* dane danej operacji http */
char *user_data; /* dane u¿ytkownika, nie s± zwalniane przez gg_http_free() */
@@ -264,27 +265,27 @@
* opisuje stan asynchronicznej maszyny.
*/
enum gg_state_t {
- /* wspólne */
- GG_STATE_IDLE = 0, /* nie powinno wyst±piæ. */
- GG_STATE_RESOLVING, /* wywo³a³ gethostbyname() */
+ /* wspólne */
+ GG_STATE_IDLE = 0, /* nie powinno wyst±piæ. */
+ GG_STATE_RESOLVING, /* wywo³a³ gethostbyname() */
GG_STATE_CONNECTING, /* wywo³a³ connect() */
GG_STATE_READING_DATA, /* czeka na dane http */
GG_STATE_ERROR, /* wyst±pi³ b³±d. kod w x->error */
- /* gg_session */
+ /* gg_session */
GG_STATE_CONNECTING_HUB, /* wywo³a³ connect() na huba */
GG_STATE_CONNECTING_GG, /* wywo³a³ connect() na serwer */
GG_STATE_READING_KEY, /* czeka na klucz */
GG_STATE_READING_REPLY, /* czeka na odpowied¼ */
GG_STATE_CONNECTED, /* po³±czy³ siê */
- /* gg_http */
+ /* gg_http */
GG_STATE_SENDING_QUERY, /* wysy³a zapytanie http */
GG_STATE_READING_HEADER, /* czeka na nag³ówek http */
GG_STATE_PARSING, /* przetwarza dane */
GG_STATE_DONE, /* skoñczy³ */
- /* gg_dcc */
+ /* gg_dcc */
GG_STATE_LISTENING, /* czeka na po³±czenia */
GG_STATE_READING_UIN_1, /* czeka na uin peera */
GG_STATE_READING_UIN_2, /* czeka na swój uin */
@@ -349,8 +350,9 @@
uint16_t external_port; /* port widziany na zewnatrz */
int tls; /* czy ³±czymy po TLS? */
int image_size; /* maksymalny rozmiar obrazka w KiB */
+ int era_omnix; /* czy udawaæ klienta era omnix? */
- char dummy[7 * sizeof(int)]; /* miejsce na kolejnych 8 zmiennych,
+ char dummy[6 * sizeof(int)]; /* miejsce na kolejnych 6 zmiennych,
* ¿eby z dodaniem parametru nie
* zmienia³ siê rozmiar struktury */
};
@@ -499,8 +501,8 @@
*/
struct gg_event {
int type; /* rodzaj zdarzenia -- gg_event_t */
- union { /* @event */
- struct gg_notify_reply *notify; /* informacje o li¶cie kontaktów -- GG_EVENT_NOTIFY */
+ union { /* @event */
+ struct gg_notify_reply *notify; /* informacje o li¶cie kontaktów -- GG_EVENT_NOTIFY */
enum gg_failure_t failure; /* b³±d po³±czenia -- GG_EVENT_FAILURE */
@@ -521,20 +523,20 @@
int formats_length; /* d³ugo¶æ informacji o formatowaniu tekstu */
void *formats; /* informacje o formatowaniu tekstu */
- } msg;
+ } msg;
struct { /* @notify_descr informacje o li¶cie kontaktów z opisami stanu -- GG_EVENT_NOTIFY_DESCR */
struct gg_notify_reply *notify; /* informacje o li¶cie kontaktów */
char *descr; /* opis stanu */
} notify_descr;
- struct { /* @status zmiana stanu -- GG_EVENT_STATUS */
+ struct { /* @status zmiana stanu -- GG_EVENT_STATUS */
uin_t uin; /* numer */
uint32_t status; /* nowy stan */
char *descr; /* opis stanu */
} status;
- struct { /* @status60 zmiana stanu -- GG_EVENT_STATUS60 */
+ struct { /* @status60 zmiana stanu -- GG_EVENT_STATUS60 */
uin_t uin; /* numer */
int status; /* nowy stan */
uint32_t remote_ip; /* adres ip */
@@ -747,6 +749,7 @@
/* przypomnienie has³a e-mailem */
struct gg_http *gg_remind_passwd(uin_t uin, int async);
struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const char *tokenval, int async);
+struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async);
#define gg_remind_passwd_watch_fd gg_pubdir_watch_fd
#define gg_remind_passwd_free gg_pubdir_free
#define gg_free_remind_passwd gg_pubdir_free
@@ -812,6 +815,7 @@
struct gg_dcc *gg_dcc_voice_chat(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
void gg_dcc_set_type(struct gg_dcc *d, int type);
int gg_dcc_fill_file_info(struct gg_dcc *d, const char *filename);
+int gg_dcc_fill_file_info2(struct gg_dcc *d, const char *filename, const char *local_filename);
int gg_dcc_voice_send(struct gg_dcc *d, char *buf, int length);
#define GG_DCC_VOICE_FRAME_LENGTH 195
@@ -939,10 +943,11 @@
#define GG_HTTPS_PORT 443
#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
-#define GG_DEFAULT_CLIENT_VERSION "6, 0, 0, 132"
-#define GG_DEFAULT_PROTOCOL_VERSION 0x20
+#define GG_DEFAULT_CLIENT_VERSION "6, 1, 0, 158"
+#define GG_DEFAULT_PROTOCOL_VERSION 0x24
#define GG_DEFAULT_TIMEOUT 30
#define GG_HAS_AUDIO_MASK 0x40000000
+#define GG_ERA_OMNIX_MASK 0x04000000
#define GG_LIBGADU_VERSION "CVS"
#define GG_DEFAULT_DCC_PORT 1550
@@ -1204,8 +1209,10 @@
#define GG_SEND_MSG_ACK 0x0005
+#define GG_ACK_BLOCKED 0x0001
#define GG_ACK_DELIVERED 0x0002
[...1736 lines suppressed...]
return -1;
}
@@ -159,7 +177,7 @@
gg_dcc_fill_filetime(st.st_atime, d->file_info.atime);
gg_dcc_fill_filetime(st.st_mtime, d->file_info.mtime);
gg_dcc_fill_filetime(st.st_ctime, d->file_info.ctime);
-
+
d->file_info.size = gg_fix32(st.st_size);
d->file_info.mode = gg_fix32(0x20); /* FILE_ATTRIBUTE_ARCHIVE */
@@ -173,14 +191,40 @@
for (i = 0, p = name; i < 8 && p < ext; i++, p++)
d->file_info.short_filename[i] = toupper(name[i]);
-
+
+ if (i == 8 && p < ext) {
+ d->file_info.short_filename[6] = '~';
+ d->file_info.short_filename[7] = '1';
+ }
+
if (strlen(ext) > 0) {
for (j = 0; *ext && j < 4; j++, p++)
d->file_info.short_filename[i + j] = toupper(ext[j]);
-
}
- gg_debug(GG_DEBUG_MISC, "// gg_dcc_fill_file_info() short name \"%s\", dos name \"%s\"\n", name, d->file_info.short_filename);
+ for (q = d->file_info.short_filename; *q; q++) {
+ if (*q == 185) {
+ *q = 165;
+ } else if (*q == 230) {
+ *q = 198;
+ } else if (*q == 234) {
+ *q = 202;
+ } else if (*q == 179) {
+ *q = 163;
+ } else if (*q == 241) {
+ *q = 209;
+ } else if (*q == 243) {
+ *q = 211;
+ } else if (*q == 156) {
+ *q = 140;
+ } else if (*q == 159) {
+ *q = 143;
+ } else if (*q == 191) {
+ *q = 175;
+ }
+ }
+
+ gg_debug(GG_DEBUG_MISC, "// gg_dcc_fill_file_info2() short name \"%s\", dos name \"%s\"\n", name, d->file_info.short_filename);
strncpy(d->file_info.filename, name, sizeof(d->file_info.filename) - 1);
return 0;
@@ -345,9 +389,9 @@
{
struct gg_dcc *c;
struct sockaddr_in sin;
- int sock, bound = 0;
+ int sock, bound = 0, errno2;
- gg_debug(GG_DEBUG_FUNCTION, "** gg_create_dcc_socket(%d, %d);\n", uin, port);
+ gg_debug(GG_DEBUG_FUNCTION, "** gg_create_dcc_socket(%d, %d);\n", uin, port);
if (!uin) {
gg_debug(GG_DEBUG_MISC, "// gg_create_dcc_socket() invalid arguments\n");
@@ -374,6 +418,7 @@
else {
if (++port == 65535) {
gg_debug(GG_DEBUG_MISC, "// gg_create_dcc_socket() no free port found\n");
+ close(sock);
return NULL;
}
}
@@ -381,6 +426,9 @@
if (listen(sock, 10)) {
gg_debug(GG_DEBUG_MISC, "// gg_create_dcc_socket() unable to listen (%s)\n", strerror(errno));
+ errno2 = errno;
+ close(sock);
+ errno = errno2;
return NULL;
}
@@ -389,13 +437,13 @@
if (!(c = malloc(sizeof(*c)))) {
gg_debug(GG_DEBUG_MISC, "// gg_create_dcc_socket() not enough memory for struct\n");
close(sock);
- return NULL;
+ return NULL;
}
memset(c, 0, sizeof(*c));
c->port = c->id = port;
c->fd = sock;
- c->type = GG_SESSION_DCC_SOCKET;
+ c->type = GG_SESSION_DCC_SOCKET;
c->uin = uin;
c->timeout = -1;
c->state = GG_STATE_LISTENING;
@@ -403,7 +451,6 @@
c->callback = gg_dcc_callback;
c->destroy = gg_dcc_free;
- gg_dcc_ip = INADDR_ANY;
return c;
}
@@ -429,6 +476,7 @@
gg_debug(GG_DEBUG_FUNCTION, "++ gg_dcc_voice_send(%p, %p, %d);\n", d, buf, length);
if (!d || !buf || length < 0 || d->type != GG_SESSION_DCC_VOICE) {
gg_debug(GG_DEBUG_MISC, "// gg_dcc_voice_send() invalid argument\n");
+ errno = EINVAL;
return -1;
}
@@ -500,7 +548,7 @@
struct gg_event *e;
int foo;
- gg_debug(GG_DEBUG_FUNCTION, "** gg_dcc_watch_fd(%p);\n", h);
+ gg_debug(GG_DEBUG_FUNCTION, "** gg_dcc_watch_fd(%p);\n", h);
if (!h || (h->type != GG_SESSION_DCC && h->type != GG_SESSION_DCC_SOCKET && h->type != GG_SESSION_DCC_SEND && h->type != GG_SESSION_DCC_GET && h->type != GG_SESSION_DCC_VOICE)) {
gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() invalid argument\n");
@@ -508,12 +556,12 @@
return NULL;
}
- if (!(e = (void*) calloc(1, sizeof(*e)))) {
+ if (!(e = (void*) calloc(1, sizeof(*e)))) {
gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() not enough memory\n");
- return NULL;
- }
+ return NULL;
+ }
- e->type = GG_EVENT_NONE;
+ e->type = GG_EVENT_NONE;
if (h->type == GG_SESSION_DCC_SOCKET) {
struct sockaddr_in sin;
@@ -860,7 +908,6 @@
e->event.dcc_voice_data.length = h->chunk_size;
h->state = GG_STATE_READING_VOICE_HEADER;
h->voice_buf = NULL;
-
}
h->check = GG_CHECK_READ;
@@ -1056,6 +1103,15 @@
utmp = sizeof(buf);
gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() offset=%d, size=%d\n", h->offset, h->file_info.size);
+
+ /* koniec pliku? */
+ if (h->file_info.size == 0) {
+ gg_debug(GG_DEBUG_MISC, "// gg_dcc_watch_fd() read() reached eof on empty file\n");
+ e->type = GG_EVENT_DCC_DONE;
+
+ return e;
+ }
+
lseek(h->file_fd, h->offset, SEEK_SET);
size = read(h->file_fd, buf, utmp);
@@ -1213,7 +1269,7 @@
*/
void gg_dcc_free(struct gg_dcc *d)
{
- gg_debug(GG_DEBUG_FUNCTION, "** gg_dcc_free(%p);\n", d);
+ gg_debug(GG_DEBUG_FUNCTION, "** gg_dcc_free(%p);\n", d);
if (!d)
return;
Index: kopete/protocols/gadu/libgadu/pubdir50.c
===================================================================
--- kopete/protocols/gadu/libgadu/pubdir50.c (.../KDE_3_3_BRANCH/kdenetwork/kopete/protocols/gadu/libgadu) (revision 367579)
+++ kopete/protocols/gadu/libgadu/pubdir50.c (.../KDE/3.3/kdenetwork/kopete/protocols/gadu/libgadu) (working copy)
@@ -14,7 +14,8 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+ * USA.
*/
#include <errno.h>
@@ -265,7 +266,7 @@
if (!e || !packet) {
gg_debug(GG_DEBUG_MISC, "// gg_pubdir50_handle_reply() invalid arguments\n");
- errno = EINVAL;
+ errno = EFAULT;
return -1;
}
Index: kdenetwork.spec
===================================================================
RCS file: /cvs/dist/rpms/kdenetwork/FC-3/kdenetwork.spec,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- kdenetwork.spec 4 Jul 2005 13:14:17 -0000 1.45
+++ kdenetwork.spec 21 Jul 2005 20:08:44 -0000 1.46
@@ -9,7 +9,7 @@
Name: kdenetwork
Version: 3.3.1
-Release: 3.1
+Release: 3.2
Summary: K Desktop Environment - Network Applications
Epoch: 7
Group: Applications/Internet
@@ -30,6 +30,11 @@
Patch5: kdenetwork-3.3.0-ksirc.patch
Patch7: kdenetwork-3.3-cvs.patch
Patch8: kdenetwork-3.3.1-kopete-msn-login.patch
+Patch9: kdenetwork-3.3.1-kopete-gadu.patch
+Patch10: kdenetwork-3.4.1-kopete-libgadu-va_copy.patch
+
+# CVE CAN-2005-1852, libgadu vulnerabilities
+Patch100: post-3.3.2-kdenetwork-libgadu.patch
Requires: kdelibs >= 6:%{version}
Requires: kdebase >= 6:%{version}
@@ -79,6 +84,9 @@
%patch5 -p1 -b .ksirc
%patch7 -p1 -b .cvs
%patch8 -p1 -b .msn
+%patch8 -p1 -b .kopete-gadu
+%patch9 -p1 -b .libgadu-va_copy
+%patch100 -p0 -b .CAN-2005-1852
find -name CVS | xargs rm -rf
@@ -320,6 +328,13 @@
%changelog
+* Thu Jul 21 2005 Than Ngo <than at redhat.com> 7:3.3.1-3.2
+- fix crash in kopete
+- apply patch to fix libgadu vulnerabilities #163811, CVE CAN-2005-1852
+ thank to kde security team
+- backport patch to fix annoying problem with registration
+ dialog not able to register/retrieve token due to network problems.
+
* Mon Jul 04 2005 Than Ngo <than at redhat.com> 7:3.3.1-3.1
- add backported patch to fix Kopete MSN login #161707
- Previous message (by thread): rpms/openoffice.org/devel .cvsignore, 1.64, 1.65 openoffice.org.spec, 1.337, 1.338 sources, 1.91, 1.92 workspace.qwizardsbfooo20.patch, 1.1, NONE
- Next message (by thread): rpms/kdenetwork/FC-3 kdenetwork-3.4.1-kopete-libgadu-va_copy.patch, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list