Date: Thu, 30 Oct 1997 17:44:44 +0000 From: aecolley@ois.ie To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/4894: pkg_delete ignores @cwd because pkg_create removes it Message-ID: <E0xQyeC-0000Wn-00@faust.ois.ie> Resent-Message-ID: <199710301750.JAA25940@hub.freebsd.org>
index | next in thread | raw e-mail
>Number: 4894
>Category: bin
>Synopsis: pkg_delete ignores @cwd because pkg_create removes it
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Oct 30 09:50:00 PST 1997
>Last-Modified:
>Originator: Adrian Colley
>Organization:
Office Integrated Solutions
>Release: FreeBSD 2.2.5-STABLE i386
>Environment:
Last update via CTM to src-2.2.0486.
RCS ID in usr.sbin/pkg_install/create/perform.c is:
Id: perform.c,v 1.32.2.4 1997/10/13 15:06:11 jkh Exp
>Description:
When a port's pkg/PLIST contains an @cwd line followed by an @unexec
line which includes %D, it is expected that %D will be replaced by
the current directory name set by @cwd.
However, when pkg_create is used to make PLIST into
/var/db/pkg/(package)/+CONTENTS, the @cwds are stripped and replaced
with a single @cwd $PREFIX.
Consequently, if the package is later removed with pkg_delete, @unexec
commands in +CONTENTS may fail because %D is replaced with the wrong
value, or because the command is sensitive to its working directory.
>How-To-Repeat:
Install comms/mgetty+sendfax from the ports collection (install with
make -DBATCH install to avoid the questionnaire). Then pkg_delete
mgetty-1.0.0. The pkg_delete will complain about /usr/local/fax being
nonexistent.
The pkg/PLIST of mgetty+sendfax includes the lines:
@cd /var/spool
@exec mkdir -p %D/fax/incoming
@exec mkdir -p %D/fax/outgoing
@exec chmod -R 775 %D/fax
@unexec rm -r %D/fax
After make install, /var/db/pkg/mgetty-1.0.0/+CONTENTS can be seen to have
lost the @cd, which causes the @unexec to expand as "rm -r /usr/local/fax"
instead of "rm -r /var/spool/fax"
>Fix:
/usr/src/usr.sbin/pkg_install/create/perform.c, lines 99-103 contain the
perpetrating code:
/* Prefix should override the packing list */
if (Prefix) {
delete_plist(&plist, FALSE, PLIST_CWD, NULL);
add_plist_top(&plist, PLIST_CWD, Prefix);
}
Perhaps there's a reason for the delete_plist call here, but I can't think
what it is. If the packing list contains @cwds which should be removed,
then they should be removed from the actual packing lists. If a packing
list has a good reason to use @cwd, this should be respected.
>Audit-Trail:
>Unformatted:
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E0xQyeC-0000Wn-00>
