Auto-load user plugins and scripts from <config>/addons

On Unix leave $(libdir)/hexchat/plugins for plugin packagers, on Windows
prevent users from modifying Program Files by ignoring everything except
bundled plugins
This commit is contained in:
Berke Viktor
2012-07-26 20:53:59 +02:00
parent 7f831646bb
commit ec301a5a54
7 changed files with 85 additions and 51 deletions

View File

@@ -457,19 +457,38 @@ plugin_auto_load_cb (char *filename)
void
plugin_auto_load (session *sess)
{
ps = sess;
/* let's do it the Perl way */
const char *xdir;
char *sub_dir;
ps = sess;
xdir = get_xdir_fs ();
sub_dir = malloc (strlen (xdir) + 9);
sub_dir = malloc (strlen (xdir) + 8);
strcpy (sub_dir, xdir);
strcat (sub_dir, "/plugins");
strcat (sub_dir, "/addons");
#ifdef WIN32
for_files ("./plugins", "*.dll", plugin_auto_load_cb);
/* a long list of bundled plugins that should be loaded automatically,
* user plugins should go to <config>, leave Program Files alone! */
for_files ("./plugins", "hcchecksum.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcdns.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcdoat.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcexec.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcfishlim.dll", plugin_auto_load_cb);
for_files ("./plugins", "hclua.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcmpcinfo.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcperl-512.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcperl-514.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcperl-516.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcpython.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcsasl.dll", plugin_auto_load_cb);
for_files ("./plugins", "hctcl.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcupd.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcwinamp.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcwinsys.dll", plugin_auto_load_cb);
for_files ("./plugins", "hcwmpa.dll", plugin_auto_load_cb);
for_files ("./plugins", "hextray.dll", plugin_auto_load_cb);
for_files (sub_dir, "*.dll", plugin_auto_load_cb);
#else
#if defined(__hpux)
@@ -1620,7 +1639,7 @@ xchat_pluginpref_set_str_real (xchat_plugin *pl, const char *var, const char *va
canon = g_strdup (pl->name);
canonalize_key (canon);
sprintf (confname, "plugin_%s.conf", canon);
sprintf (confname, "addon_%s.conf", canon);
g_free (canon);
sprintf (confname_tmp, "%s.new", confname);
@@ -1737,7 +1756,7 @@ xchat_pluginpref_get_str (xchat_plugin *pl, const char *var, char *dest)
canon = g_strdup (pl->name);
canonalize_key (canon);
sprintf (confname, "plugin_%s.conf", canon);
sprintf (confname, "addon_%s.conf", canon);
g_free (canon);
/* partly borrowed from palette.c */
@@ -1817,7 +1836,7 @@ xchat_pluginpref_list (xchat_plugin *pl, char* dest)
token = g_strdup (pl->name);
canonalize_key (token);
sprintf (confname, "plugin_%s.conf", token);
sprintf (confname, "addon_%s.conf", token);
g_free (token);
fpIn = xchat_fopen_file (confname, "r", 0);

View File

@@ -147,6 +147,15 @@ plugingui_load_cb (session *sess, char *file)
void
plugingui_load (void)
{
/* let's do it the Perl way */
const char *xdir;
char *sub_dir;
xdir = get_xdir_utf8 ();
sub_dir = malloc (strlen (xdir) + 8);
strcpy (sub_dir, xdir);
strcat (sub_dir, "/addons");
gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb, current_sess,
#if 0 /* native file dialogs */
#ifdef WIN32
@@ -156,10 +165,12 @@ plugingui_load (void)
#endif
#endif /* native file dialogs */
#ifdef WIN32
get_xdir_utf8 (), "*.dll;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
sub_dir, "*.dll;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
#else
get_xdir_utf8 (), "*.so;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
sub_dir, "*.so;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
#endif
free (sub_dir);
}
static void