On Sun, Jul 21, 2013 at 2:21 AM, Allan McRae <[email protected]> wrote: > We currently only warn if a directories permissions differ, but using -Qkk
directories -> directory's > on my system shows that directory permissions tend to change in packages > reasonably frequently without noitce. Provide a warning in such cases noitce -> notice > so that it can be altered. Example output: > > (1/1) reinstalling nginx > warning: directory ownership differs on /var/lib/nginx/proxy/ > filesystem: 33:0 package: 0:0 > > Signed-off-by: Allan McRae <[email protected]> > --- > lib/libalpm/add.c | 16 +++++++++++++++- > src/pacman/check.c | 18 ++++++++++++------ > 2 files changed, 27 insertions(+), 7 deletions(-) > > diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c > index df39274..ac4e36a 100644 > --- a/lib/libalpm/add.c > +++ b/lib/libalpm/add.c > @@ -215,18 +215,32 @@ static int extract_single_file(alpm_handle_t *handle, > struct archive *archive, > } else { > if(S_ISDIR(lsbuf.st_mode)) { > if(S_ISDIR(entrymode)) { > + uid_t entryuid = archive_entry_uid(entry); > + gid_t entrygid = archive_entry_gid(entry); > + > /* case 6: existing dir, ignore it */ > if(lsbuf.st_mode != entrymode) { > /* if filesystem perms are different > than pkg perms, warn user */ > mode_t mask = 07777; > _alpm_log(handle, ALPM_LOG_WARNING, > _("directory permissions differ on %s\n" > - "filesystem: > %o package: %o\n"), filename, lsbuf.st_mode & mask, > + "filesystem: %o > package: %o\n"), filename, lsbuf.st_mode & mask, > entrymode & mask); > alpm_logaction(handle, > ALPM_CALLER_PREFIX, > "warning: directory > permissions differ on %s\n" > "filesystem: %o > package: %o\n", filename, lsbuf.st_mode & mask, > entrymode & mask); > } > + > + if((entryuid != lsbuf.st_uid) || (entrygid != > lsbuf.st_gid)) { > + _alpm_log(handle, ALPM_LOG_WARNING, > _("directory ownership differs on %s\n" > + "filesystem: %u:%u > package: %u:%u\n"), filename, > + lsbuf.st_uid, > lsbuf.st_gid, entryuid, entrygid); > + alpm_logaction(handle, > ALPM_CALLER_PREFIX, > + "warning: directory > ownership differs on %s\n" > + "filesystem: %u:%u > package: %u:%u\n", filename, > + lsbuf.st_uid, > lsbuf.st_gid, entryuid, entrygid); > + } > + > _alpm_log(handle, ALPM_LOG_DEBUG, "extract: > skipping dir extraction of %s\n", > filename); > archive_read_data_skip(archive); > diff --git a/src/pacman/check.c b/src/pacman/check.c > index cdd3744..6c8889f 100644 > --- a/src/pacman/check.c > +++ b/src/pacman/check.c > @@ -106,9 +106,12 @@ static int check_file_time(const char *pkgname, const > char *filepath, > { > if(st->st_mtime != archive_entry_mtime(entry)) { > if(backup) { > - printf("%s%s%s: ", config->colstr.title, _("backup > file"), config->colstr.nocolor); > - printf(_("%s: %s (Modification time mismatch)\n"), > - pkgname, filepath); > + if(!config->quiet) { > + printf("%s%s%s: ", config->colstr.title, > _("backup file"), > + config->colstr.nocolor); > + printf(_("%s: %s (Modification time > mismatch)\n"), > + pkgname, filepath); > + } > return 0; > } > if(!config->quiet) { > @@ -150,9 +153,12 @@ static int check_file_size(const char *pkgname, const > char *filepath, > { > if(st->st_size != archive_entry_size(entry)) { > if(backup) { > - printf("%s%s%s: ", config->colstr.title, _("backup > file"), config->colstr.nocolor); > - printf(_("%s: %s (Size mismatch)\n"), > - pkgname, filepath); > + if(!config->quiet) { > + printf("%s%s%s: ", config->colstr.title, > _("backup file"), > + config->colstr.nocolor); > + printf(_("%s: %s (Size mismatch)\n"), > + pkgname, filepath); > + } > return 0; > } > if(!config->quiet) { > -- > 1.8.3.3 > >
