From 3c3cd07c63697323b4fc2ceb77b0450ff01725b9 Mon Sep 17 00:00:00 2001 From: Baumann Date: Mon, 20 May 2019 17:05:06 +0200 Subject: [PATCH] extracted helper functions to a separate header Change-Id: I777b45cf0166611e215bf38c275b62db777dd9dd --- src/internal/uid_gid_helpers.hpp | 36 +++++++++++++++++++++++++++++++++++ src/internal/xml_parser.cpp | 41 +--------------------------------------- 2 files changed, 37 insertions(+), 40 deletions(-) create mode 100644 src/internal/uid_gid_helpers.hpp diff --git a/src/internal/uid_gid_helpers.hpp b/src/internal/uid_gid_helpers.hpp new file mode 100644 index 0000000..0f67126 --- /dev/null +++ b/src/internal/uid_gid_helpers.hpp @@ -0,0 +1,36 @@ +#pragma once +#include +#include +#include +#include + +static uid_t convertToUid(const char* user) { + errno = 0; + long val = std::strtol(user, nullptr, 10); + if ((!errno && val != 0) || (val == 0 && user[0] == '0' && user[1] == '\0')) + return (uid_t) val; + + struct passwd pwent; + struct passwd *pwd; + char buf[1024]; + if (getpwnam_r(user, &pwent, buf, sizeof(buf), &pwd) || !pwd) + return (uid_t) -1; + + return pwd->pw_uid; +} + +static gid_t convertToGid(const char* group) { + errno = 0; + long val = std::strtol(group, nullptr, 10); + if ((!errno && val != 0) || (val == 0 && group[0] == '0' && group[1] == '\0')) + return (gid_t) val; + + struct group grent; + struct group *gg; + char buf[1024]; + if (getgrnam_r(group, &grent, buf, sizeof(buf), &gg) || !gg) + return (gid_t) -1; + + return gg->gr_gid; +} + diff --git a/src/internal/xml_parser.cpp b/src/internal/xml_parser.cpp index b188d0a..98ea5cd 100644 --- a/src/internal/xml_parser.cpp +++ b/src/internal/xml_parser.cpp @@ -20,15 +20,14 @@ */ #include "libdbuspolicy1-private.h" #include "tslog.hpp" +#include "uid_gid_helpers.hpp" #include "xml_parser.hpp" #include #include #include #include -#include #include #include -#include #include using namespace ldp_xml_parser; @@ -311,44 +310,6 @@ void XmlParser::parsePolicyTag(const char **attr) } } -namespace { -static uid_t convertToUid(const char* user) { - long val = -1; - errno = 0; - val = std::strtol(user, NULL, 10); - if (!errno && (val != 0 )) - return (uid_t)val; - if ((val == 0 && user[0] == '0' && user[1] == 0)) - return (uid_t)val; - - struct passwd pwent; - struct passwd *pwd; - char buf[1024]; - if (getpwnam_r(user, &pwent, buf, sizeof(buf), &pwd) || !pwd) - return (uid_t)-1; - - return pwd->pw_uid; -} - -static gid_t convertToGid(const char* group) { - long val = -1; - errno = 0; - val = std::strtol(group, NULL, 10); - if (!errno && (val != 0)) - return (gid_t)val; - if ((val == 0 && group[0] == '0' && group[1] == 0)) - return (gid_t)val; - - struct group grent; - struct group *gg; - char buf[1024]; - if (getgrnam_r(group, &grent, buf, sizeof(buf), &gg) || !gg) - return (gid_t)-1; - - return gg->gr_gid; -} -} - void XmlParser::parsePolicyAttribute(const char* name, const char* value) { //possible values (from dbus-daemon man): -- 2.7.4