diff --git a/lib/fsm.c b/lib/fsm.c index 8f531cf71..f604a7305 100644 --- a/lib/fsm.c +++ b/lib/fsm.c @@ -1217,11 +1217,13 @@ static int fsmMkdirs(FSM_t fsm) rpmlog(RPMLOG_DEBUG, "%s directory created with perms %04o, no context.\n", fsm->path, (unsigned)(st->st_mode & 07777)); - else + else { rpmlog(RPMLOG_DEBUG, "%s directory created with perms %04o, context %s.\n", fsm->path, (unsigned)(st->st_mode & 07777), fsm->fcontext); + freecon(fsm->fcontext); + } fsm->fcontext = NULL; } *te = '/'; @@ -1845,8 +1847,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; */ if (!rc && !getuid()) { rc = fsmMapFContext(fsm); - if (!rc) + if (!rc) { rc = fsmNext(fsm, FSM_LSETFCON); + freecon(fsm->fcontext); + } fsm->fcontext = NULL; } if (S_ISLNK(st->st_mode)) { diff --git a/lib/fsm.h b/lib/fsm.h index 42936f673..eb8cf1418 100644 --- a/lib/fsm.h +++ b/lib/fsm.h @@ -153,7 +153,7 @@ struct fsm_s { const char * dirName; /*!< File directory name. */ const char * baseName; /*!< File base name. */ const char * digest; /*!< Binary checksum (NULL disables). */ - const char * fcontext; /*!< File security context (NULL disables). */ + security_context_t fcontext;/*!< File security context (NULL disables). */ pgpHashAlgo digestalgo; /*!< File checksum algorithm */ unsigned fflags; /*!< File flags. */