mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-15 10:17:20 +00:00
Fix a long-standing bug where if the package being deleted had no
post-deinstall script, the variable intended to hold the name of that script would be used uninitialized. In some cases, fexists() would succeed, causing pkg_delete to try to chmod +x it, then execute it, resulting in bizarre error messages such as: .//: Permission denied This bug would normally only occur when multiple packages were specified on the command line; otherwise post_script would be located in a previously unused part of the stack, and implicitly (but quite accidentally) initialized to all-zeros. MFC after: 3 days
This commit is contained in:
parent
2e6c2a1089
commit
0f98df2956
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=111486
@ -5,7 +5,7 @@ SRCS= main.c perform.c
|
||||
|
||||
CFLAGS+= ${DEBUG} -I${.CURDIR}/../lib
|
||||
|
||||
WARNS?= 2
|
||||
WARNS?= 4
|
||||
|
||||
DPADD= ${LIBINSTALL} ${LIBMD}
|
||||
LDADD= ${LIBINSTALL} -lmd
|
||||
|
@ -126,9 +126,8 @@ pkg_do(char *pkg)
|
||||
int i, len;
|
||||
/* support for separate pre/post install scripts */
|
||||
int new_m = 0;
|
||||
char pre_script[FILENAME_MAX] = DEINSTALL_FNAME;
|
||||
char post_script[FILENAME_MAX];
|
||||
char pre_arg[FILENAME_MAX], post_arg[FILENAME_MAX];
|
||||
const char *pre_script = DEINSTALL_FNAME;
|
||||
const char *post_script, *pre_arg, *post_arg;
|
||||
struct reqr_by_entry *rb_entry;
|
||||
struct reqr_by_head *rb_list;
|
||||
|
||||
@ -224,18 +223,17 @@ pkg_do(char *pkg)
|
||||
|
||||
if (fexists(POST_DEINSTALL_FNAME)) {
|
||||
new_m = 1;
|
||||
sprintf(post_script, "%s", POST_DEINSTALL_FNAME);
|
||||
pre_arg[0] = '\0';
|
||||
post_arg[0] = '\0';
|
||||
post_script = POST_DEINSTALL_FNAME;
|
||||
pre_arg = post_arg = "";
|
||||
} else if (fexists(DEINSTALL_FNAME)) {
|
||||
post_script = DEINSTALL_FNAME;
|
||||
pre_arg = "DEINSTALL";
|
||||
post_arg = "POST-DEINSTALL";
|
||||
} else {
|
||||
if (fexists(DEINSTALL_FNAME)) {
|
||||
sprintf(post_script, "%s", DEINSTALL_FNAME);
|
||||
sprintf(pre_arg, "DEINSTALL");
|
||||
sprintf(post_arg, "POST-DEINSTALL");
|
||||
}
|
||||
post_script = pre_arg = post_arg = NULL;
|
||||
}
|
||||
|
||||
if (!NoDeInstall && fexists(pre_script)) {
|
||||
if (!NoDeInstall && pre_script != NULL && fexists(pre_script)) {
|
||||
if (Fake)
|
||||
printf("Would execute de-install script at this point.\n");
|
||||
else {
|
||||
@ -268,7 +266,7 @@ pkg_do(char *pkg)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!NoDeInstall && fexists(post_script)) {
|
||||
if (!NoDeInstall && post_script != NULL && fexists(post_script)) {
|
||||
if (Fake)
|
||||
printf("Would execute post-deinstall script at this point.\n");
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user