I think there are two main issues to clarify.

1) Python lacks any form of sandboxing so if someone can manipulate plugins they can do anything Trac can do and there is _no_ way to prevent that. It is a limitation of Python and unless something like Brent Cannon's restricted interpreter work ever ends up in core making people jump through hoops (example, multiple configuration files) is pointless and annoying.

2) Trac has always and will always been designed with people running a single-environment site in mind. That isn't to say that we would never make a compromise, but things are stacked pretty heavily in favor of single-project setups since that comprises the vast majority of the userbase. A setup like you mentioned with Trac being used for SourceForge-style hosting is exceedingly rare, though it just so happens that one of most active core developers is in charge of such a site as part of his day job.

I think there is also some confusion about how plugin loading works (re: the global default comment). Setuptools will examine every folder on sys.path (and $ENV/plugins and any configured plugins_dir's) looking for .egg-info folders or egg files containing EGG-INFO data. Any such package with a [trac.plugins] group in its entry points will be loaded and returned. Of note, this means that module-level code in any package that declares trac.plugins entry points will be run regardless of the enable status. I am trying to make it clear that disabling a plugin isn't meant to be a security-grade check. The only way to ensure that a plugin is running no code is to entirely remove it from the path. Using virtualenv (which all sane people running Python webapps should be using I hope) this is easy since you can just delete the offending file from that particular packages folder. The enable/disable settings only kicks in all the way down the line when iterating over an extension point. As for altering the auto-load settings, you could probably do that in a plugin without that much trouble. If you are actually interested in doing this, try finding me on the IRC channel or contact me off-list.

--Noah

On Oct 11, 2010, at 9:04 AM, Dmitry Samersoff wrote:

Grzegorz,

The most important part of proposal - multiple plugins directories counted explicitly in trac.ini and I guess it has minimal impact.

i.e. we can have something like

plugins_dirs = /a,/b,/c
plugins_autoenable_dirs=/a,/c

and keep everybody satisfied ;)

(see also below)

On 2010-10-11 15:45, Grzegorz Sobanski wrote:
Currently nothing prevents admin of other project enable it for its
own env.

Hmm, just put in in envdir/plugins?
Then it's not available to other environments.

Unless someone "inherits" it ... There are some symlink/permissions tricks that solve this problem, but I would like to see an instant solution rather than tricks.

Again, if someone already has R/W access to the env folder, you have
bigger problems.
e.g.
A plugin developer type: cp myplugin.py myplugin_old.py
and than forget to delete myplugin_old.py with plenty of debug
printing.

And what if he types: rm *?

rm * is not an issue as it doesn't lead to security whole. Just some extra work for backup team. Also how often you here that someone did rm * on the hosting ? Incident with forgotten old or back files happens once a month and cost a fortune.

Etc, etc
As Noah said, if someone has fs access, or can deploy plugins developed
by themselves, they can break everything.

2. No autoenable
This just makes life difficult for simple, one-env sites.
Really? It's either one-line in ini file or couple of mouse clicks in
admin panel.

A would say: sensible defaults.
If someone puts a plugin in environment, he surely wants it enabled,
so IMO it should be enabled by default. It's a very sensible solution.

It's very sensible solution for small system where plugin developer, trac admin and web qa is the same person.


Debugging issues like one with myplugin_old.py above eats much more
time.

But only for you, and enabling all modules would have to be done by
hundreads of other people, sorry. Plus all the questions on ML "why my
plugin doesn't work".

We should separate trac core (i.e. controlled and supported by trac team) information from one provided by third-party, untrusted plugins
to
avoid possible conflicts and save support efforts.

Trac doesn't sandbox plugins, so you *have to* trust plugins, because
they can do everything.

Yes and it's a trac design issue. But it couldn't be addressed without
significant efforts, ini separation is just one simple step forward.

I don't see how separating enabling modules from trac.ini helps with
anything, sorry.

Trac is clearly devided into core and plugins and it's one of biggest advantage of trac. i.e. if I turn off all plugins I have reasonable and secure enough environment.

But bad plugin (e.g. with incorrect implementation of IAdminPanelProvider) could destroy whole project configuration


I think you may have some valid points about probles in config like
"trac farm", but the proposed solution IMO are not good defaults for
trac, at least some of them.

I never pretend to be an oracle .. Just giving to trac community a subject to think.

-Dmitry

--
Dmitry Samersoff
[email protected], http://devnull.samersoff.net
* I do want to change the world, I don't want the world to change me

--
You received this message because you are subscribed to the Google Groups "Trac Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected] . For more options, visit this group at http://groups.google.com/group/trac-dev?hl=en .


--
You received this message because you are subscribed to the Google Groups "Trac 
Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/trac-dev?hl=en.

Reply via email to