diff options
-rw-r--r-- | brillo/userdb_utils.cc | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/brillo/userdb_utils.cc b/brillo/userdb_utils.cc index a204094..1308fb7 100644 --- a/brillo/userdb_utils.cc +++ b/brillo/userdb_utils.cc @@ -4,6 +4,7 @@ #include "brillo/userdb_utils.h" +#include <errno.h> #include <grp.h> #include <pwd.h> #include <sys/types.h> @@ -12,7 +13,7 @@ #include <vector> #include <base/logging.h> -#include <base/posix/eintr_wrapper.h> +#include <base/posix/safe_strerror.h> namespace brillo { namespace userdb { @@ -24,10 +25,16 @@ bool GetUserInfo(const std::string& user, uid_t* uid, gid_t* gid) { passwd pwd_buf; passwd* pwd = nullptr; std::vector<char> buf(buf_len); - if (HANDLE_EINTR( - getpwnam_r(user.c_str(), &pwd_buf, buf.data(), buf_len, &pwd)) || - !pwd) { - PLOG(ERROR) << "Unable to find user " << user; + + int err_num; + do { + err_num = getpwnam_r(user.c_str(), &pwd_buf, buf.data(), buf_len, &pwd); + } while (err_num == EINTR); + + if (!pwd) { + LOG(ERROR) << "Unable to find user " << user << ": " + << (err_num ? base::safe_strerror(err_num) + : "No matching record"); return false; } @@ -45,10 +52,16 @@ bool GetGroupInfo(const std::string& group, gid_t* gid) { struct group grp_buf; struct group* grp = nullptr; std::vector<char> buf(buf_len); - if (HANDLE_EINTR( - getgrnam_r(group.c_str(), &grp_buf, buf.data(), buf_len, &grp)) || - !grp) { - PLOG(ERROR) << "Unable to find group " << group; + + int err_num; + do { + err_num = getgrnam_r(group.c_str(), &grp_buf, buf.data(), buf_len, &grp); + } while (err_num == EINTR); + + if (!grp) { + LOG(ERROR) << "Unable to find group " << group << ": " + << (err_num ? base::safe_strerror(err_num) + : "No matching record"); return false; } |