diff options
| author | 2008-05-20 23:22:02 +0000 | |
|---|---|---|
| committer | 2008-05-20 23:22:02 +0000 | |
| commit | 4c75d1c556270484edc5bbc85bbf691eb22d1c24 (patch) | |
| tree | ca52c9c0aa46149ea37702c2f5b2a0aa6a9c7485 /src | |
| parent | fix (diff) | |
| download | KVIrc-4c75d1c556270484edc5bbc85bbf691eb22d1c24.tar.gz KVIrc-4c75d1c556270484edc5bbc85bbf691eb22d1c24.tar.bz2 KVIrc-4c75d1c556270484edc5bbc85bbf691eb22d1c24.zip | |
more work on addon manager (wip)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1833 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/addon/addonfunctions.cpp | 82 | ||||
| -rw-r--r-- | src/modules/addon/addonfunctions.h | 1 | ||||
| -rw-r--r-- | src/modules/addon/libkviaddon.cpp | 2 | ||||
| -rw-r--r-- | src/modules/addon/managementdialog.cpp | 2 |
4 files changed, 80 insertions, 7 deletions
diff --git a/src/modules/addon/addonfunctions.cpp b/src/modules/addon/addonfunctions.cpp index 1f8379333..cd3728a16 100644 --- a/src/modules/addon/addonfunctions.cpp +++ b/src/modules/addon/addonfunctions.cpp @@ -30,13 +30,18 @@ #include "kvi_app.h" #include "kvi_htmldialog.h" #include "kvi_iconmanager.h" +#include "kvi_fileutils.h" #include "kvi_miscutils.h" #include "kvi_sourcesdate.h" #include "kvi_frame.h" +#include "kvi_kvs_script.h" +#include <QDir> #include <q3mimefactory.h> #define KviTalMimeSourceFactory Q3MimeSourceFactory +#include <stdlib.h> + namespace KviAddonFunctions { bool notAValidAddonPackage(QString &szError) @@ -49,6 +54,7 @@ namespace KviAddonFunctions { KviPointerHashTable<QString,QString> * pInfoFields; QString * pValue; + QString szErr; bool bInstall; QByteArray * pByteArray; KviHtmlDialogData hd; @@ -59,7 +65,7 @@ namespace KviAddonFunctions KviPackageReader r; if(!r.readHeader(szAddonPackageFileName)) { - QString szErr = r.lastError(); + szErr = r.lastError(); KviQString::sprintf(szError,__tr2qs_ctx("The selected file does not seem to be a valid KVIrc package: %Q","addon"),&szErr); return false; } @@ -221,12 +227,55 @@ namespace KviAddonFunctions if(bInstall) { - QString szUnpackPath; - g_pApp->getLocalKvircDirectory(szUnpackPath,KviApp::Themes); + +/* +[02:25:41] <Pragma> (occhio a non cancellare niente di importante eh... bisogna sempre fare attenzione a fare i delete) +[02:25:50] <Pragma> ed occhio anche agli attacchi +[02:26:02] <Pragma> quando parsi dei file esterni che potrebbero essere forgiati +[02:26:19] <Pragma> pensa sempre 3 volte a cosa potrebbe succedere +[02:26:41] <Pragma> tipo se dentro il pacchetto ti ci mettono un path tipo "../../etc/passwd" +[02:27:03] <Pragma> qui magari bisogna intervienire pure sullo spacchettatore eh +[02:27:10] <Pragma> guarda un pò insomma +[02:27:22] <Pragma> la gente co ste cose ci va a nozze +*/ + // Check for dir existence + QString szTmpPath, szUnpackPath; + QString szRandomDir = createRandomDir(); + + g_pApp->getLocalKvircDirectory(szTmpPath,KviApp::Tmp); + KviQString::ensureLastCharIs(szTmpPath,QChar(KVI_PATH_SEPARATOR_CHAR)); + szUnpackPath = szTmpPath + szRandomDir; + QDir szTmpDir(szUnpackPath); + + while(szTmpDir.exists()) + { + szRandomDir = createRandomDir(); + szUnpackPath = szTmpPath + szRandomDir; + szTmpDir = QDir(szUnpackPath); + } + debug("szUnpackPath: %s",szUnpackPath.toUtf8().data()); + + // Unpack addon package into the random tmp dir if(!r.unpack(szAddonPackageFileName,szUnpackPath)) { - QString szErr2 = r.lastError(); - KviQString::sprintf(szError,__tr2qs_ctx("Failed to unpack the selected file: %Q","addon"),&szErr2); + szErr = r.lastError(); + KviQString::sprintf(szError,__tr2qs_ctx("Failed to unpack the selected file: %Q","addon"),&szErr); + return true; + } + + // Now we have all stuff in ~/.config/KVIrc/tmp/$rand + KviKvsScript::run("parse " + szUnpackPath + "/install.kvs",g_pActiveWindow); + + // Remove all files + QDir * pDir = new QDir(szUnpackPath); + QStringList list = pDir->entryList(QDir::AllEntries,QDir::DirsFirst); + debug("Path: %s",szUnpackPath.toUtf8().data()); + debug("Count: %d",list.count()); + + if(!KviFileUtils::deleteDir(szUnpackPath)) + { + szErr = __tr2qs_ctx("One or more files can't be deleted","addon"); + KviQString::sprintf(szError,__tr2qs_ctx("Failed to unpack the selected file: %Q","addon"),&szErr); return true; } } @@ -286,4 +335,27 @@ namespace KviAddonFunctions &szAddonSubdirectory ); } + + QString createRandomDir() + { + QString szDirName; + char chars[] = { + 'A','B','C','D','E','F','G','H', + 'I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X', + 'Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n', + 'o','p','q','r','s','t','u','v', + 'w','x','y','z','-','_','.' + }; + + // Generate dir name + for(int i=0;i<10;i++) + { + int n = rand() % sizeof(chars); + szDirName.append(chars[n]); + } + + return szDirName; + } }; diff --git a/src/modules/addon/addonfunctions.h b/src/modules/addon/addonfunctions.h index 045b7a52f..e93c4a13f 100644 --- a/src/modules/addon/addonfunctions.h +++ b/src/modules/addon/addonfunctions.h @@ -47,6 +47,7 @@ namespace KviAddonFunctions const QString &szAddonDate, const QString &szAddonAddonEngineVersion ); + QString createRandomDir(); }; diff --git a/src/modules/addon/libkviaddon.cpp b/src/modules/addon/libkviaddon.cpp index d8d8a40b7..909728efe 100644 --- a/src/modules/addon/libkviaddon.cpp +++ b/src/modules/addon/libkviaddon.cpp @@ -619,7 +619,7 @@ static bool addon_kvs_cmd_dialog(KviKvsModuleCommandCall * c) @syntax: addon.install <package_path:string> @description: - Attempts to install the addons in the package specified by <package_path>. + Attempts to install the addon in the package specified by <package_path>. */ static bool addon_kvs_cmd_install(KviKvsModuleCommandCall * c) diff --git a/src/modules/addon/managementdialog.cpp b/src/modules/addon/managementdialog.cpp index 5bd17aa9a..08b72a075 100644 --- a/src/modules/addon/managementdialog.cpp +++ b/src/modules/addon/managementdialog.cpp @@ -79,7 +79,7 @@ KviScriptAddonListViewItem::KviScriptAddonListViewItem(KviTalListWidget *v,KviKv setText(t);
QPixmap * p = a->icon();
- if (p) setIcon(*p);
+ if (p) setIcon(*p);
}
KviScriptAddonListViewItem::~KviScriptAddonListViewItem()
|
