#ifndef _H_CCAUDIT
#define _H_CCAUDIT
#include <Security/utility_config.h>
#include <bsm/audit.h>
namespace Security
{
namespace CommonCriteria
{
enum ExternalErrors
{
errNone = 0,
errInvalidCredential = 1111, errUserCanceled,
errTooManyTries,
errEndOfExternalErrors };
class AuditMask
{
public:
AuditMask() { }
AuditMask(const AuditMask &am) { set(am.get()); }
AuditMask(const au_mask_t &am) { set(am); }
~AuditMask() { }
void set(const au_mask_t &am) { set(am.am_success, am.am_failure); }
void set(unsigned int s, unsigned int f) { mMask.am_success = s; mMask.am_failure = f; }
const au_mask_t &get(void) const { return mMask; }
private:
au_mask_t mMask;
};
class TerminalId
{
public:
TerminalId() { }
TerminalId(const TerminalId &t) { set(t.get()); }
TerminalId(const au_tid_t &tid) { set(tid); }
TerminalId(dev_t p, u_int32_t m) { port(p); machine(m); }
~TerminalId() { }
void set(void); void set(const au_tid_t &tid) { port(tid.port); machine(tid.machine); }
void port(dev_t p) { mTid.port = p; }
void machine(u_int32_t m) { mTid.machine = m; }
const au_tid_t &get(void) const { return mTid; }
private:
au_tid_t mTid;
};
class AuditSession
{
public:
AuditSession() { }
AuditSession(au_id_t auid, AuditMask &mask, au_asid_t sid,
TerminalId &tid)
: mAuditId(auid), mEventMask(mask), mTerminalId(tid),
mSessionId(sid) { }
~AuditSession() { }
void registerSession(void);
void auditId(au_id_t auid) { mAuditId = auid; }
void eventMask(AuditMask &mask) { mEventMask = mask; }
void terminalId(TerminalId &tid) { mTerminalId = tid; }
void sessionId(au_asid_t sid) { mSessionId = sid; }
au_id_t auditId(void) { return mAuditId; }
AuditMask &eventMask(void) { return mEventMask; }
TerminalId &terminalId(void) { return mTerminalId; }
au_asid_t sessionId(void) { return mSessionId; }
private:
au_id_t mAuditId;
AuditMask mEventMask;
TerminalId mTerminalId;
au_asid_t mSessionId;
};
class AuditRecord
{
public:
AuditRecord(const audit_token_t &auditToken)
: mAuditId(auditToken.val[0]),
mRUid(auditToken.val[3]),
mRGid(auditToken.val[4]),
mEUid(auditToken.val[1]),
mEGid(auditToken.val[2]),
mPid(auditToken.val[5]),
mSessionId(auditToken.val[6]),
mTerminalId(auditToken.val[7], 0) { }
~AuditRecord() { }
void submit(const short event_code, const int returnCode,
const char *msg = NULL);
private:
au_id_t mAuditId;
uid_t mRUid;
gid_t mRGid;
uid_t mEUid;
gid_t mEGid;
pid_t mPid;
au_asid_t mSessionId;
TerminalId mTerminalId;
};
}
}
#endif // _H_CCAUDIT