[pacman-dev] [WIP 4/4] check_file_permissions: use symbolic user/group names if available
Andrew Gregory
andrew.gregory.8 at gmail.com
Sat Mar 19 13:50:17 UTC 2016
Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
src/pacman/check.c | 46 ++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/src/pacman/check.c b/src/pacman/check.c
index 0fe74e8..2c2d4b2 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -20,6 +20,8 @@
#include <limits.h>
#include <string.h>
#include <errno.h>
+#include <grp.h>
+#include <pwd.h>
/* pacman */
#include "check.h"
@@ -74,22 +76,46 @@ static int check_file_permissions(const char *pkgname, const char *filepath,
{
int errors = 0;
mode_t fsmode;
+ const char *uname = archive_entry_uname(entry);
+ const char *gname = archive_entry_gname(entry);
/* uid */
- if(st->st_uid != archive_entry_uid(entry)) {
- errors++;
- if(!config->quiet) {
- pm_printf(ALPM_LOG_WARNING, _("%s: %s (UID mismatch)\n"),
- pkgname, filepath);
+ if(uname) {
+ struct passwd *pw = getpwuid(st->st_uid);
+ if(!pw || strcmp(uname, pw->pw_name) != 0) {
+ errors++;
+ if(!config->quiet) {
+ pm_printf(ALPM_LOG_WARNING, _("%s: %s (Owner mismatch)\n"),
+ pkgname, filepath);
+ }
+ }
+ } else {
+ if(st->st_uid != archive_entry_uid(entry)) {
+ errors++;
+ if(!config->quiet) {
+ pm_printf(ALPM_LOG_WARNING, _("%s: %s (UID mismatch)\n"),
+ pkgname, filepath);
+ }
}
}
/* gid */
- if(st->st_gid != archive_entry_gid(entry)) {
- errors++;
- if(!config->quiet) {
- pm_printf(ALPM_LOG_WARNING, _("%s: %s (GID mismatch)\n"),
- pkgname, filepath);
+ if(gname) {
+ struct group *gr = getgrgid(st->st_gid);
+ if(!gr || strcmp(gname, gr->gr_name) != 0) {
+ errors++;
+ if(!config->quiet) {
+ pm_printf(ALPM_LOG_WARNING, _("%s: %s (Group mismatch)\n"),
+ pkgname, filepath);
+ }
+ }
+ } else {
+ if(st->st_gid != archive_entry_gid(entry)) {
+ errors++;
+ if(!config->quiet) {
+ pm_printf(ALPM_LOG_WARNING, _("%s: %s (GID mismatch)\n"),
+ pkgname, filepath);
+ }
}
}
--
2.7.2
More information about the pacman-dev
mailing list