util::Error LookupOwner(const std::string& user, const std::string& group, fs::Owner& owner) { auto dbConfig = config->Database(); try { mongo::DBClientConnection conn; conn.connect(dbConfig.Host()); if (!dbConfig.Login().empty()) { std::string errmsg; if (!conn.auth(dbConfig.Name(), dbConfig.Login(), dbConfig.Password(), errmsg)) throw mongo::DBException("Authentication failed", 0); } owner = fs::Owner(user.empty() ? -1 : LookupUID(conn, user), group.empty() ? -1 : LookupGID(conn, group)); } catch (const mongo::DBException& e) { return util::Error::Failure(e.what()); } catch (const util::RuntimeError& e) { return util::Error::Failure(e.Message()); } return util::Error::Success(); }
int FileChGroup(const char *FileName, const char *Group) { int gid, result; gid=LookupGID(Group); if (gid > -1) { result=chown(FileName, -1, gid); if (result==0) return(TRUE); } RaiseError(ERRFLAG_ERRNO, "FileChGroup", "failed to change group to group=%s gid=%d",Group,gid); return(FALSE); }