parent
0c7a7e2d56
commit
da86aac0f5
10 changed files with 374 additions and 1 deletions
83
src/protocols/SecurityContext.hpp
Normal file
83
src/protocols/SecurityContext.hpp
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
#include "WaylandProtocol.hpp"
|
||||
#include "security-context-v1.hpp"
|
||||
|
||||
class CSecurityContext {
|
||||
public:
|
||||
CSecurityContext(SP<CWpSecurityContextV1> resource_, int listenFD_, int closeFD_);
|
||||
~CSecurityContext();
|
||||
|
||||
bool good();
|
||||
|
||||
std::string sandboxEngine, appID, instanceID;
|
||||
int listenFD = -1, closeFD = -1;
|
||||
|
||||
void onListen(uint32_t mask);
|
||||
void onClose(uint32_t mask);
|
||||
|
||||
private:
|
||||
SP<CWpSecurityContextV1> resource;
|
||||
|
||||
wl_event_source * listenSource = nullptr, *closeSource = nullptr;
|
||||
|
||||
bool committed = false;
|
||||
};
|
||||
|
||||
class CSecurityContextManagerResource {
|
||||
public:
|
||||
CSecurityContextManagerResource(SP<CWpSecurityContextManagerV1> resource_);
|
||||
|
||||
bool good();
|
||||
|
||||
private:
|
||||
SP<CWpSecurityContextManagerV1> resource;
|
||||
};
|
||||
|
||||
class CSecurityContextSandboxedClient {
|
||||
public:
|
||||
static SP<CSecurityContextSandboxedClient> create(int clientFD);
|
||||
~CSecurityContextSandboxedClient();
|
||||
|
||||
void onDestroy();
|
||||
|
||||
wl_listener destroyListener;
|
||||
|
||||
private:
|
||||
CSecurityContextSandboxedClient(int clientFD);
|
||||
|
||||
wl_client* client = nullptr;
|
||||
|
||||
friend class CSecurityContextProtocol;
|
||||
friend class CSecurityContext;
|
||||
};
|
||||
|
||||
class CSecurityContextProtocol : public IWaylandProtocol {
|
||||
public:
|
||||
CSecurityContextProtocol(const wl_interface* iface, const int& ver, const std::string& name);
|
||||
|
||||
virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
|
||||
|
||||
bool isClientSandboxed(const wl_client* client);
|
||||
|
||||
private:
|
||||
void destroyResource(CSecurityContextManagerResource* resource);
|
||||
|
||||
void destroyContext(CSecurityContext* context);
|
||||
|
||||
//
|
||||
std::vector<SP<CSecurityContextManagerResource>> m_vManagers;
|
||||
std::vector<SP<CSecurityContext>> m_vContexts;
|
||||
std::vector<SP<CSecurityContextSandboxedClient>> m_vSandboxedClients;
|
||||
|
||||
friend class CSecurityContextManagerResource;
|
||||
friend class CSecurityContext;
|
||||
friend class CSecurityContextSandboxedClient;
|
||||
};
|
||||
|
||||
namespace PROTO {
|
||||
inline UP<CSecurityContextProtocol> securityContext;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue