// GetNodePermissions Permissions SecurityContext::GetNodePermissions(const node_ref& ref, User* user) { if (!user) return Permissions(); ContextLocker _(this); HashString path; status_t error = _AddNodePath(ref, &path); if (error != B_OK) return Permissions(); return fPermissions->Get(UserPath(path.GetString(), user)); }
inline Try<Permissions> permissions(const std::string& path) { struct stat s; if (::stat(path.c_str(), &s) < 0) { return ErrnoError(); } return Permissions(s.st_mode); }
// GetNodePermissions Permissions SecurityContext::GetNodePermissions(const char* path, User* user) { if (!user || !path) return Permissions(); ContextLocker _(this); _AddNodePath(path); return fPermissions->Get(UserPath(path, user)); }
sc::User::User(std::string username, std::string color) { this->bot = true; this->id = -2; this->ip = "127.0.0.1"; this->__username = username; this->username = this->_username = SanitizeUsername(username); this->color = this->_color = color; this->permissions = Permissions(); this->args = std::vector<std::string>(); }
bool getUserPermissions(const UserId & userId, Permissions & perms) { TRANSACTION(ta); perms = Permissions(); QSqlQuery query(ta.db); query.prepare("SELECT permissionId from userPermission WHERE userId = :userId"); query.bindValue(":userId", userId.toDatabaseValue()); if (!Database::executeQuery(query)) return false; while (query.next()) { perms.addPermission(Permissions::Permission(query.value(0).toInt())); } if (!ta.commit()) return false; return true; }
void DirectoryList::ListPath(const fs::Path& path, std::queue<std::string> masks, int depth) const { if (maxRecursion && depth > maxRecursion) return; fs::DirEnumerator dirEnum; try { Readdir(path, dirEnum); } catch (const util::SystemError& e) { // silent failure - gives empty directory list return; } if (depth > 1) Output("\r\n"); std::ostringstream message; if (!path.Empty() && (options.Recursive() || !masks.empty() || depth > 1)) { message << path << ":\r\n"; Output(message.str()); message.str(""); } if (options.LongFormat()) { message << "total " << std::floor(dirEnum.TotalBytes() / 1024) << "\r\n"; Output(message.str()); message.str(""); } std::string mask; if (!masks.empty()) { mask = masks.front(); masks.pop(); } if (masks.empty()) { for (const auto& de : dirEnum) { const std::string& pathStr = de.Path(); if (pathStr[0] == '.' && !options.All()) continue; if (!mask.empty() && fnmatch(mask.c_str(), pathStr.c_str(), 0)) continue; if (options.LongFormat()) { message << Permissions(de.Status()) << " " << std::setw(3) << de.Status().Native().st_nlink << " " << std::left << std::setw(10) << UIDToName(de.Owner().UID()).substr(0, 10) << " " << std::left << std::setw(10) << GIDToName(de.Owner().GID()).substr(0, 10) << " " << std::right << std::setw(8) << de.Status().Size() << " " << Timestamp(de.Status()) << " " << de.Path(); if (options.SlashDirs() && de.Status().IsDirectory()) message << "/"; message << "\r\n"; Output(message.str()); message.str(""); } else { message << de.Path() << "\r\n"; Output(message.str()); message.str(""); } } } if (options.Recursive() || !mask.empty()) { for (const auto& de : dirEnum) { if (!de.Status().IsDirectory() || de.Status().IsSymLink()) continue; const std::string& pathStr = de.Path(); if (pathStr[0] == '.' && !options.All()) continue; if (!mask.empty() && fnmatch(mask.c_str(), pathStr.c_str(), 0)) continue; fs::Path fullPath(path); fullPath /= de.Path(); ListPath(fullPath, masks, depth + 1); } } }