securityd_data_saver.h [plain text]
#ifndef _SECURITYD_DATA_SAVER_H_
#define _SECURITYD_DATA_SAVER_H_
#include <mach/message.h>
#include <security_utilities/unix++.h>
#include <security_cdsa_utilities/context.h>
#include <security_cdsa_utilities/cssmdb.h>
class SecuritydDataSave: public Security::UnixPlusPlus::AutoFileDesc
{
public:
static const uint32_t sentry = 0x1234; static const uint32_t version = 1;
enum
{
s32 = 32, u32 = 33, s64 = 64,
u64 = 65,
DATA = 1000,
GUID = 1001,
VERSION = 1002,
SUBSERVICE_UID = 1003,
NET_ADDRESS = 1004,
CRYPTO_DATA = 1005,
LIST = 1006,
LIST_ELEMENT = 1007,
TUPLE = 1008,
TUPLEGROUP = 1009,
SAMPLE = 1010,
SAMPLEGROUP = 1011,
MEMORY_FUNCS = 1012,
ENCODED_CERT = 1013,
PARSED_CERT = 1014,
CERT_PAIR = 1015,
CERTGROUP = 1016,
BASE_CERTS = 1017,
ACCESS_CREDENTIALS = 1018,
AUTHORIZATIONGROUP = 1019,
ACL_VALIDITY_PERIOD = 1020,
ACL_ENTRY_PROTOTYPE = 1021,
ACL_OWNER_PROTOTYPE = 1022,
ACL_ENTRY_INPUT = 1023,
RESOURCE_CONTROL_CONTEXT = 1024,
ACL_ENTRY_INFO = 1025,
ACL_EDIT = 1026,
FUNC_NAME_ADDR = 1027,
DATE = 1028,
RANGE = 1029,
QUERY_SIZE_DATA = 1030,
KEY_SIZE = 1031,
KEYHEADER = 1032,
KEY = 1033,
DL_DB_HANDLE = 1034,
CONTEXT_ATTRIBUTE = 1035,
CONTEXT = 1036,
PKCS1_OAEP_PARAMS = 1037,
CSP_OPERATIONAL_STATISTICS = 1038,
PKCS5_PBKDF1_PARAMS = 1039,
PKCS5_PBKDF2_PARAMS = 1040,
KEA_DERIVE_PARAMS = 1041,
TP_AUTHORITY_ID = 1042,
FIELD = 1043,
TP_POLICYINFO = 1044,
DL_DB_LIST = 1045,
TP_CALLERAUTH_CONTEXT = 1046,
ENCODED_CRL = 1047,
PARSED_CRL = 1048,
CRL_PAIR = 1049,
CRLGROUP = 1050,
FIELDGROUP = 1051,
EVIDENCE = 1052,
TP_VERIFY_CONTEXT = 1053,
TP_VERIFY_CONTEXT_RESULT = 1054,
TP_REQUEST_SET = 1055,
TP_RESULT_SET = 1056,
TP_CONFIRM_RESPONSE = 1057,
TP_CERTISSUE_INPUT = 1058,
TP_CERTISSUE_OUTPUT = 1059,
TP_CERTCHANGE_INPUT = 1060,
TP_CERTCHANGE_OUTPUT = 1061,
TP_CERTVERIFY_INPUT = 1062,
TP_CERTVERIFY_OUTPUT = 1063,
TP_CERTNOTARIZE_INPUT = 1064,
TP_CERTNOTARIZE_OUTPUT = 1065,
TP_CERTRECLAIM_INPUT = 1066,
TP_CERTRECLAIM_OUTPUT = 1067,
TP_CRLISSUE_INPUT = 1068,
TP_CRLISSUE_OUTPUT = 1069,
CERT_BUNDLE_HEADER = 1070,
CERT_BUNDLE = 1071,
DB_ATTRIBUTE_INFO = 1072,
DB_ATTRIBUTE_DATA = 1073,
DB_RECORD_ATTRIBUTE_INFO = 1074,
DB_RECORD_ATTRIBUTE_DATA = 1075,
DB_PARSING_MODULE_INFO = 1076,
DB_INDEX_INFO = 1077,
DB_UNIQUE_RECORD = 1078,
DB_RECORD_INDEX_INFO = 1079,
DBINFO = 1080,
SELECTION_PREDICATE = 1081,
QUERY_LIMITS = 1082,
QUERY = 1083,
DL_PKCS11_ATTRIBUTE = 1084, NAME_LIST = 1085,
DB_SCHEMA_ATTRIBUTE_INFO = 1086,
DB_SCHEMA_INDEX_INFO = 1087
};
static const int sdsFlags = O_RDWR|O_CREAT|O_APPEND;
public:
SecuritydDataSave(const char *file) : AutoFileDesc(file, sdsFlags, 0644), mFile(file)
{
writePreamble();
}
SecuritydDataSave(const SecuritydDataSave &sds) : AutoFileDesc(sds.fd()), mFile(sds.file()) { }
~SecuritydDataSave() { }
const char *file() const { return mFile; }
void writeContext(Security::Context *context, intptr_t attraddr,
mach_msg_type_number_t attrSize);
void writeAclEntryInfo(AclEntryInfo *acls,
mach_msg_type_number_t aclsLength);
void writeAclEntryInput(AclEntryInput *acl,
mach_msg_type_number_t aclLength);
void writeQuery(Security::CssmQuery *query,
mach_msg_type_number_t queryLength)
{
uint32_t dtype = QUERY;
writeAll(&dtype, sizeof(dtype));
writeDataWithBase(query, queryLength);
}
private:
void writePreamble()
{
uint32_t value = sentry;
writeAll(&value, sizeof(value));
value = version;
writeAll(&value, sizeof(value));
}
void writeDataWithBase(void *data, mach_msg_type_number_t datalen)
{
uint32_t ptrsize = sizeof(data);
writeAll(&ptrsize, sizeof(ptrsize));
writeAll(&data, ptrsize);
writeAll(&datalen, sizeof(datalen));
writeAll(data, datalen);
}
private:
const char *mFile;
};
#endif