示例#1
0
// 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));
}
示例#2
0
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);
}
示例#3
0
// GetNodePermissions
Permissions
SecurityContext::GetNodePermissions(const char* path, User* user)
{
	if (!user || !path)
		return Permissions();

	ContextLocker _(this);
	_AddNodePath(path);

	return fPermissions->Get(UserPath(path, user));
}
示例#4
0
文件: user.cpp 项目: kddlb/sockchat
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>();
}
示例#5
0
文件: dbuser.cpp 项目: CMon/recipes
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;
}
示例#6
0
文件: dirlist.cpp 项目: cm277/ebftpd
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);
    }
  }
}