[Rpm-maint] FSM hooks for rpm plugin

Panu Matilainen pmatilai at laiskiainen.org
Tue Feb 26 14:04:03 UTC 2013

On 02/22/2013 11:25 AM, Panu Matilainen wrote:
> On 02/20/2013 11:01 AM, Reshetova, Elena wrote:
>> I think it looks much better now and integrating hooks to it is a
>> pleasure. I
>> am attaching the new version. Hope I didn't miss any strange case, but it
>> looked very easy now after your change!
> I'm actually going to be mildly surprised if there aren't any strange
> cases we've missed wrt hard links or such :) Anyway, the patch looks as
> obviously-correct as it gets within fsm. Applied, thanks for the patch!

Right, no surprises: there is an issue with hard links :)

The problem is that the links are created in one go when we come to the 
final link of a set, but the hooks are getting called for all the links 
and will likely fail because the path passed to the post-hook doesn't 
exist despite fsm->action being FA_CREATE.

How to deal with it is another question though: it could be worked 
around by passing eg FA_SKIP to the hooks for these files, but then 
plugins might want to know these files *are* actually going to be 
created, only later. We could introduce FA_DELAYED or such to signal the 
condition but then the plugins still wont know when exactly they are 
going to be created. And then because hardlinks are quite special, many 
plugins would probably want to differentiate them from other cases (eg 
for selinux, it makes no sense to repeatedly set a security context when 
a hardlink set can only have one context). OTOH some other plugins might 
want to know about them. Dunno... needs more thought (and a less tired 
mind to think with :)

Regardless of how exactly the hardlinks are handled, perhaps we should 
pass a pointer to the entire stat struct instead of just st_mode to the 
hooks, that'd at least allow plugins to know they're dealing with 
hardlinks (and various other possibly useful information).

A different issue (much easier and one that we already discussed iirc) 
is that I think we must check the return code from 
rpmpluginsCallFsmFilePost() and allow it to fail, otherwise its not 
possible to preserve the current behavior where eg failure to set 
SELinux context (or other similar security thing) causes package 
installation to fail.

The good news is that other than the two above issues, the plugin API 
seems to work quite nicely for SELinux.

	- Panu -

More information about the Rpm-maint mailing list