#ifndef _TOKEND_RECORD_H_
#define _TOKEND_RECORD_H_
#include "AttributeCoder.h"
#include "MetaRecord.h"
#include "Attribute.h"
#include <security_utilities/refcount.h>
#include <security_utilities/adornments.h>
#include <security_cdsa_utilities/cssmaclpod.h>
#include <security_cdsa_utilities/cssmcred.h>
#include <SecurityTokend/SecTokend.h>
namespace Tokend
{
class Record : public RefCount, public Security::Adornable
{
NOCOPY(Record)
public:
Record();
virtual ~Record();
bool hasAttributeAtIndex(uint32 attributeIndex) const;
const Attribute &attributeAtIndex(uint32 attributeIndex) const;
void attributeAtIndex(uint32 attributeIndex, Attribute *attribute);
virtual void getOwner(AclOwnerPrototype &owner);
virtual void getAcl(const char *tag, uint32 &count,
AclEntryInfo *&aclList);
virtual void changeOwner(const AclOwnerPrototype &owner);
virtual void changeAcl(const AccessCredentials &cred, const AclEdit &edit);
virtual const char *description();
virtual Attribute *getDataAttribute(TokenContext *tokenContext);
protected:
typedef std::vector<Attribute *> Attributes;
typedef Attributes::iterator AttributesIterator;
typedef Attributes::const_iterator ConstAttributesIterator;
Attributes mAttributes;
static AutoAclOwnerPrototype gNobodyAclOwner;
static AutoAclEntryInfoList gAnyReadAclEntries;
};
}
#endif