#include "define.h"
Go to the source code of this file.
Data Structures | |
struct | pst_block_offset |
struct | pst_block_offset_pointer |
struct | pst_holder |
struct | pst_subblock |
struct | pst_subblocks |
struct | pst_mapi_element |
struct | pst_mapi_object |
struct | pst_desc32 |
struct | pst_index32 |
struct | pst_table_ptr_struct32 |
struct | pst_desc |
struct | pst_index |
struct | pst_table_ptr_struct |
struct | pst_block_header |
struct | pst_id2_assoc32 |
struct | pst_id2_assoc |
struct | pst_table3_rec32 |
struct | pst_table3_rec |
struct | pst_block_hdr |
struct | pst_x_attrib |
Defines | |
#define | ASSERT(x) { if(!(x)) raise( SIGSEGV ); } |
#define | INDEX_TYPE32 0x0E |
#define | INDEX_TYPE32A 0x0F |
#define | INDEX_TYPE64 0x17 |
#define | INDEX_TYPE64A 0x15 |
#define | INDEX_TYPE_OFFSET (int64_t)0x0A |
#define | FILE_SIZE_POINTER32 (int64_t)0xA8 |
#define | INDEX_POINTER32 (int64_t)0xC4 |
#define | INDEX_BACK32 (int64_t)0xC0 |
#define | SECOND_POINTER32 (int64_t)0xBC |
#define | SECOND_BACK32 (int64_t)0xB8 |
#define | ENC_TYPE32 (int64_t)0x1CD |
#define | FILE_SIZE_POINTER64 (int64_t)0xB8 |
#define | INDEX_POINTER64 (int64_t)0xF0 |
#define | INDEX_BACK64 (int64_t)0xE8 |
#define | SECOND_POINTER64 (int64_t)0xE0 |
#define | SECOND_BACK64 (int64_t)0xD8 |
#define | ENC_TYPE64 (int64_t)0x201 |
#define | FILE_SIZE_POINTER ((pf->do_read64) ? FILE_SIZE_POINTER64 : FILE_SIZE_POINTER32) |
#define | INDEX_POINTER ((pf->do_read64) ? INDEX_POINTER64 : INDEX_POINTER32) |
#define | INDEX_BACK ((pf->do_read64) ? INDEX_BACK64 : INDEX_BACK32) |
#define | SECOND_POINTER ((pf->do_read64) ? SECOND_POINTER64 : SECOND_POINTER32) |
#define | SECOND_BACK ((pf->do_read64) ? SECOND_BACK64 : SECOND_BACK32) |
#define | ENC_TYPE ((pf->do_read64) ? ENC_TYPE64 : ENC_TYPE32) |
#define | PST_SIGNATURE 0x4E444221 |
#define | ITEM_COUNT_OFFSET32 0x1f0 |
#define | LEVEL_INDICATOR_OFFSET32 0x1f3 |
#define | BACKLINK_OFFSET32 0x1f8 |
#define | ITEM_SIZE32 12 |
#define | DESC_SIZE32 16 |
#define | INDEX_COUNT_MAX32 41 |
#define | DESC_COUNT_MAX32 31 |
#define | ITEM_COUNT_OFFSET64 0x1e8 |
#define | LEVEL_INDICATOR_OFFSET64 0x1eb |
#define | BACKLINK_OFFSET64 0x1f8 |
#define | ITEM_SIZE64 24 |
#define | DESC_SIZE64 32 |
#define | INDEX_COUNT_MAX64 20 |
#define | DESC_COUNT_MAX64 15 |
#define | BLOCK_SIZE 512 |
#define | DESC_BLOCK_SIZE 512 |
#define | ITEM_COUNT_OFFSET (size_t)((pf->do_read64) ? ITEM_COUNT_OFFSET64 : ITEM_COUNT_OFFSET32) |
#define | LEVEL_INDICATOR_OFFSET (size_t)((pf->do_read64) ? LEVEL_INDICATOR_OFFSET64 : LEVEL_INDICATOR_OFFSET32) |
#define | BACKLINK_OFFSET (size_t)((pf->do_read64) ? BACKLINK_OFFSET64 : BACKLINK_OFFSET32) |
#define | ITEM_SIZE (size_t)((pf->do_read64) ? ITEM_SIZE64 : ITEM_SIZE32) |
#define | DESC_SIZE (size_t)((pf->do_read64) ? DESC_SIZE64 : DESC_SIZE32) |
#define | INDEX_COUNT_MAX (int32_t)((pf->do_read64) ? INDEX_COUNT_MAX64 : INDEX_COUNT_MAX32) |
#define | DESC_COUNT_MAX (int32_t)((pf->do_read64) ? DESC_COUNT_MAX64 : DESC_COUNT_MAX32) |
#define | SAFE_FREE(x) {if (x) free(x);} |
#define | SAFE_FREE_STR(x) SAFE_FREE(x.str) |
#define | SAFE_FREE_BIN(x) SAFE_FREE(x.data) |
#define | MALLOC_EMAIL(x) { if (!x->email) { x->email = (pst_item_email*) pst_malloc(sizeof(pst_item_email)); memset(x->email, 0, sizeof(pst_item_email) );} } |
#define | MALLOC_FOLDER(x) { if (!x->folder) { x->folder = (pst_item_folder*) pst_malloc(sizeof(pst_item_folder)); memset(x->folder, 0, sizeof(pst_item_folder) );} } |
#define | MALLOC_CONTACT(x) { if (!x->contact) { x->contact = (pst_item_contact*) pst_malloc(sizeof(pst_item_contact)); memset(x->contact, 0, sizeof(pst_item_contact) );} } |
#define | MALLOC_MESSAGESTORE(x) { if (!x->message_store) { x->message_store = (pst_item_message_store*) pst_malloc(sizeof(pst_item_message_store)); memset(x->message_store, 0, sizeof(pst_item_message_store));} } |
#define | MALLOC_JOURNAL(x) { if (!x->journal) { x->journal = (pst_item_journal*) pst_malloc(sizeof(pst_item_journal)); memset(x->journal, 0, sizeof(pst_item_journal) );} } |
#define | MALLOC_APPOINTMENT(x) { if (!x->appointment) { x->appointment = (pst_item_appointment*) pst_malloc(sizeof(pst_item_appointment)); memset(x->appointment, 0, sizeof(pst_item_appointment) );} } |
#define | LIST_COPY(targ, type) |
#define | LIST_COPY_CSTR(targ) |
#define | LIST_COPY_BOOL(label, targ) |
#define | LIST_COPY_EMAIL_BOOL(label, targ) |
#define | LIST_COPY_CONTACT_BOOL(label, targ) |
#define | LIST_COPY_APPT_BOOL(label, targ) |
#define | LIST_COPY_INT16_N(targ) |
#define | LIST_COPY_INT16(label, targ) |
#define | LIST_COPY_INT32_N(targ) |
#define | LIST_COPY_INT32(label, targ) |
#define | LIST_COPY_EMAIL_INT32(label, targ) |
#define | LIST_COPY_APPT_INT32(label, targ) |
#define | LIST_COPY_FOLDER_INT32(label, targ) |
#define | LIST_COPY_STORE_INT32(label, targ) |
#define | LIST_COPY_ENUM(label, targ, delta, count,...) |
#define | LIST_COPY_EMAIL_ENUM(label, targ, delta, count,...) |
#define | LIST_COPY_APPT_ENUM(label, targ, delta, count,...) |
#define | LIST_COPY_ENUM16(label, targ, delta, count,...) |
#define | LIST_COPY_CONTACT_ENUM16(label, targ, delta, count,...) |
#define | LIST_COPY_ENTRYID(label, targ) |
#define | LIST_COPY_EMAIL_ENTRYID(label, targ) |
#define | LIST_COPY_STORE_ENTRYID(label, targ) |
#define | LIST_COPY_STR(label, targ) |
#define | LIST_COPY_EMAIL_STR(label, targ) |
#define | LIST_COPY_CONTACT_STR(label, targ) |
#define | LIST_COPY_APPT_STR(label, targ) |
#define | LIST_COPY_JOURNAL_STR(label, targ) |
#define | LIST_COPY_TIME(label, targ) |
#define | LIST_COPY_EMAIL_TIME(label, targ) |
#define | LIST_COPY_CONTACT_TIME(label, targ) |
#define | LIST_COPY_APPT_TIME(label, targ) |
#define | LIST_COPY_JOURNAL_TIME(label, targ) |
#define | LIST_COPY_BIN(targ) |
#define | LIST_COPY_EMAIL_BIN(label, targ) |
#define | LIST_COPY_APPT_BIN(label, targ) |
#define | NULL_CHECK(x) { if (!x) { DEBUG_WARN(("NULL_CHECK: Null Found\n")); break;} } |
Functions | |
static size_t | pst_append_holder (pst_holder *h, size_t size, char **buf, size_t z) |
append (buf,z) data to the output destination (h,size) | |
static int | pst_build_desc_ptr (pst_file *pf, int64_t offset, int32_t depth, uint64_t linku1, uint64_t start_val, uint64_t end_val) |
Process the index2 b-tree from the pst file and create the pf->d_head tree from it. | |
static pst_id2_tree * | pst_build_id2 (pst_file *pf, pst_index_ll *list) |
static int | pst_build_id_ptr (pst_file *pf, int64_t offset, int32_t depth, uint64_t linku1, uint64_t start_val, uint64_t end_val) |
Process the index1 b-tree from the pst file and create the pf->i_head linked list from it. | |
static int | pst_chr_count (char *str, char x) |
static size_t | pst_ff_compile_ID (pst_file *pf, uint64_t i_id, pst_holder *h, size_t size) |
find the actual data from an indirection i_id and send it to the destination specified by the pst_holder. | |
static size_t | pst_ff_getIDblock (pst_file *pf, uint64_t i_id, char **buf) |
Read a block of data from file into memory. | |
static size_t | pst_ff_getID2block (pst_file *pf, uint64_t id2, pst_id2_tree *id2_head, char **buf) |
static size_t | pst_ff_getID2data (pst_file *pf, pst_index_ll *ptr, pst_holder *h) |
find the actual data from an i_id and send it to the destination specified by the pst_holder h. | |
static size_t | pst_finish_cleanup_holder (pst_holder *h, size_t size) |
finish cleanup for base64 encoding to a file with extra bytes left over | |
static void | pst_free_attach (pst_item_attach *attach) |
static void | pst_free_desc (pst_desc_tree *head) |
static void | pst_free_id2 (pst_id2_tree *head) |
static void | pst_free_list (pst_mapi_object *list) |
static void | pst_free_xattrib (pst_x_attrib_ll *x) |
static size_t | pst_getAtPos (pst_file *pf, int64_t pos, void *buf, size_t size) |
Read part of the pst file. | |
static int | pst_getBlockOffsetPointer (pst_file *pf, pst_id2_tree *i2_head, pst_subblocks *subblocks, uint32_t offset, pst_block_offset_pointer *p) |
The offset might be zero, in which case we have no data, so return a pair of null pointers. | |
static int | pst_getBlockOffset (char *buf, size_t read_size, uint32_t i_offset, uint32_t offset, pst_block_offset *p) |
static pst_id2_tree * | pst_getID2 (pst_id2_tree *ptr, uint64_t id) |
static pst_desc_tree * | pst_getDptr (pst_file *pf, uint64_t d_id) |
find the id in the descriptor tree rooted at pf->d_head | |
static uint64_t | pst_getIntAt (pst_file *pf, char *buf) |
static uint64_t | pst_getIntAtPos (pst_file *pf, int64_t pos) |
static pst_mapi_object * | pst_parse_block (pst_file *pf, uint64_t block_id, pst_id2_tree *i2_head) |
Process a low level descriptor block (0x0101, 0xbcec, 0x7cec) into a list of MAPI objects, each of which contains a list of MAPI elements. | |
static void | pst_printDptr (pst_file *pf, pst_desc_tree *ptr) |
static void | pst_printID2ptr (pst_id2_tree *ptr) |
static int | pst_process (uint64_t block_id, pst_mapi_object *list, pst_item *item, pst_item_attach *attach) |
process the list of MAPI objects produced from parse_block() | |
static size_t | pst_read_block_size (pst_file *pf, int64_t offset, size_t size, char **buf) |
Read a block of data from file into memory. | |
static int | pst_decrypt (uint64_t i_id, char *buf, size_t size, unsigned char type) |
Decrypt a block of data from the pst file. | |
static int | pst_strincmp (char *a, char *b, size_t x) |
static char * | pst_wide_to_single (char *wt, size_t size) |
static char * | pst_getcwd (void) |
int | pst_open (pst_file *pf, const char *name, const char *charset) |
Open a pst file. | |
int | pst_reopen (pst_file *pf) |
Reopen the pst file after a fork. | |
int | pst_close (pst_file *pf) |
Close a pst file. | |
static void | add_descriptor_to_list (pst_desc_tree *node, pst_desc_tree **head, pst_desc_tree **tail) |
add a pst descriptor node to a linked list of such nodes. | |
static void | record_descriptor (pst_file *pf, pst_desc_tree *node) |
add a pst descriptor node into the global tree. | |
static pst_id2_tree * | deep_copy (pst_id2_tree *head) |
make a deep copy of part of the id2 mapping tree, for use by an attachment containing an embedded rfc822 message. | |
pst_desc_tree * | pst_getTopOfFolders (pst_file *pf, const pst_item *root) |
Get the top of folders descriptor tree. | |
pst_binary | pst_attach_to_mem (pst_file *pf, pst_item_attach *attach) |
Assemble the binary attachment into a single buffer. | |
size_t | pst_attach_to_file (pst_file *pf, pst_item_attach *attach, FILE *fp) |
Write a binary attachment to a file. | |
size_t | pst_attach_to_file_base64 (pst_file *pf, pst_item_attach *attach, FILE *fp) |
Write a binary attachment base64 encoded to a file. | |
int | pst_load_index (pst_file *pf) |
Load the index entries from the pst file. | |
pst_desc_tree * | pst_getNextDptr (pst_desc_tree *d) |
Walk the descriptor tree. | |
int | pst_load_extended_attributes (pst_file *pf) |
Try to load the extended attributes from the pst file. | |
static size_t | pst_decode_desc (pst_file *pf, pst_desc *desc, char *buf) |
static size_t | pst_decode_table (pst_file *pf, struct pst_table_ptr_struct *table, char *buf) |
static size_t | pst_decode_index (pst_file *pf, pst_index *index, char *buf) |
static size_t | pst_decode_assoc (pst_file *pf, pst_id2_assoc *assoc, char *buf) |
static size_t | pst_decode_type3 (pst_file *pf, pst_table3_rec *table3_rec, char *buf) |
pst_item * | pst_parse_item (pst_file *pf, pst_desc_tree *d_ptr, pst_id2_tree *m_head) |
Process a high level object from the pst file. | |
static void | freeall (pst_subblocks *subs, pst_block_offset_pointer *p1, pst_block_offset_pointer *p2, pst_block_offset_pointer *p3, pst_block_offset_pointer *p4, pst_block_offset_pointer *p5, pst_block_offset_pointer *p6, pst_block_offset_pointer *p7) |
void | pst_freeItem (pst_item *item) |
Free the item returned by pst_parse_item(). | |
static int | pst_getID_compare (const void *key, const void *entry) |
pst_index_ll * | pst_getID (pst_file *pf, uint64_t i_id) |
Lookup the i_id in the index linked list, and return a pointer to the element. | |
size_t | pst_ff_getIDblock_dec (pst_file *pf, uint64_t i_id, char **buf) |
Get an ID block from file using pst_ff_getIDblock() and decrypt if necessary. | |
int | pst_stricmp (char *a, char *b) |
compare strings case-insensitive. | |
size_t | pst_fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream) |
fwrite with checking for null pointer. | |
char * | pst_rfc2426_escape (char *str, char **buf, size_t *buflen) |
Add any necessary escape characters for rfc2426 vcard format. | |
char * | pst_rfc2425_datetime_format (const FILETIME *ft, int buflen, char *result) |
Convert a FILETIME into rfc2425 date/time format 1953-10-15T23:10:00Z which is the same as one of the forms in the ISO3601 standard. | |
char * | pst_rfc2445_datetime_format (const FILETIME *ft, int buflen, char *result) |
Convert a FILETIME into rfc2445 date/time format 19531015T231000Z. | |
char * | pst_rfc2445_datetime_format_now (int buflen, char *result) |
Convert the current time rfc2445 date/time format 19531015T231000Z. | |
static const char * | codepage (int cp, int buflen, char *result) |
Convert a code page integer into a string suitable for iconv(). | |
const char * | pst_default_charset (pst_item *item, int buflen, char *result) |
Get the default character set for this item. | |
void | pst_rfc2231 (pst_string *str) |
Convert str to rfc2231 encoding of str. | |
void | pst_rfc2047 (pst_item *item, pst_string *str, int needs_quote) |
Convert str to rfc2047 encoding of str, possibly enclosed in quotes if it contains spaces. | |
void | pst_convert_utf8_null (pst_item *item, pst_string *str) |
Convert str to utf8 if possible; null strings are preserved. | |
void | pst_convert_utf8 (pst_item *item, pst_string *str) |
Convert str to utf8 if possible; null strings are converted into empty strings. | |
pst_recurrence * | pst_convert_recurrence (pst_item_appointment *appt) |
Decode raw recurrence data into a better structure. | |
void | pst_free_recurrence (pst_recurrence *r) |
Free a recurrence structure. | |
Variables | |
static unsigned char | comp_enc [] |
for "compressible" encryption, just a simple substitution cipher, plaintext = comp_enc[ciphertext]; for "strong" encryption, this is the first rotor of an Enigma 3 rotor cipher. | |
static unsigned char | comp_high1 [] |
for "strong" encryption, this is the second rotor of an Enigma 3 rotor cipher. | |
static unsigned char | comp_high2 [] |
for "strong" encryption, this is the third rotor of an Enigma 3 rotor cipher. |
#define ASSERT | ( | x | ) | { if(!(x)) raise( SIGSEGV ); } |
Definition at line 20 of file libpst.c.
Referenced by pst_vbgrow().
#define BACKLINK_OFFSET (size_t)((pf->do_read64) ? BACKLINK_OFFSET64 : BACKLINK_OFFSET32) |
Definition at line 829 of file libpst.c.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
#define BLOCK_SIZE 512 |
Definition at line 825 of file libpst.c.
Referenced by pst_build_id_ptr().
#define DESC_BLOCK_SIZE 512 |
Definition at line 826 of file libpst.c.
Referenced by pst_build_desc_ptr().
#define DESC_COUNT_MAX (int32_t)((pf->do_read64) ? DESC_COUNT_MAX64 : DESC_COUNT_MAX32) |
Definition at line 833 of file libpst.c.
Referenced by pst_build_desc_ptr().
#define DESC_SIZE (size_t)((pf->do_read64) ? DESC_SIZE64 : DESC_SIZE32) |
#define DESC_SIZE32 16 |
Definition at line 813 of file libpst.c.
Referenced by pst_build_desc_ptr().
#define ENC_TYPE ((pf->do_read64) ? ENC_TYPE64 : ENC_TYPE32) |
Definition at line 47 of file libpst.c.
Referenced by pst_open().
#define FILE_SIZE_POINTER ((pf->do_read64) ? FILE_SIZE_POINTER64 : FILE_SIZE_POINTER32) |
Definition at line 42 of file libpst.c.
Referenced by pst_open().
#define INDEX_BACK ((pf->do_read64) ? INDEX_BACK64 : INDEX_BACK32) |
Definition at line 44 of file libpst.c.
Referenced by pst_open().
#define INDEX_COUNT_MAX (int32_t)((pf->do_read64) ? INDEX_COUNT_MAX64 : INDEX_COUNT_MAX32) |
Definition at line 832 of file libpst.c.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
#define INDEX_POINTER ((pf->do_read64) ? INDEX_POINTER64 : INDEX_POINTER32) |
Definition at line 43 of file libpst.c.
Referenced by pst_open().
#define INDEX_TYPE32 0x0E |
Definition at line 22 of file libpst.c.
Referenced by pst_open().
#define INDEX_TYPE32A 0x0F |
Definition at line 23 of file libpst.c.
Referenced by pst_open().
#define INDEX_TYPE64 0x17 |
Definition at line 24 of file libpst.c.
Referenced by pst_open().
#define INDEX_TYPE64A 0x15 |
Definition at line 25 of file libpst.c.
Referenced by pst_open().
#define INDEX_TYPE_OFFSET (int64_t)0x0A |
Definition at line 26 of file libpst.c.
Referenced by pst_open().
#define ITEM_COUNT_OFFSET (size_t)((pf->do_read64) ? ITEM_COUNT_OFFSET64 : ITEM_COUNT_OFFSET32) |
Definition at line 827 of file libpst.c.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
#define ITEM_SIZE (size_t)((pf->do_read64) ? ITEM_SIZE64 : ITEM_SIZE32) |
#define ITEM_SIZE32 12 |
Definition at line 812 of file libpst.c.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
#define LEVEL_INDICATOR_OFFSET (size_t)((pf->do_read64) ? LEVEL_INDICATOR_OFFSET64 : LEVEL_INDICATOR_OFFSET32) |
Definition at line 828 of file libpst.c.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
#define LIST_COPY | ( | targ, | |||
type | ) |
{ \ targ = type pst_realloc(targ, list->elements[x]->size+1); \ memcpy(targ, list->elements[x]->data, list->elements[x]->size);\ memset(((char*)targ)+list->elements[x]->size, 0, (size_t)1); \ }
#define LIST_COPY_APPT_BIN | ( | label, | |||
targ | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_BIN(targ); \ DEBUG_INFO((label"\n")); \ DEBUG_HEXDUMP(targ.data, targ.size); \ }
Definition at line 2096 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_APPT_BOOL | ( | label, | |||
targ | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_BOOL(label, targ) \ }
Definition at line 1908 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_APPT_ENUM | ( | label, | |||
targ, | |||||
delta, | |||||
count, | |||||
... | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__); \ }
Definition at line 1976 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_APPT_INT32 | ( | label, | |||
targ | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_INT32(label, targ); \ }
Definition at line 1946 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_APPT_STR | ( | label, | |||
targ | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_STR(label, targ); \ }
Definition at line 2032 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_APPT_TIME | ( | label, | |||
targ | ) |
{ \ MALLOC_APPOINTMENT(item); \ LIST_COPY_TIME(label, targ); \ }
Definition at line 2068 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_BIN | ( | targ | ) |
{ \ targ.size = list->elements[x]->size; \ if (targ.size) { \ targ.data = (char*)pst_realloc(targ.data, targ.size); \ memcpy(targ.data, list->elements[x]->data, targ.size); \ } \ else { \ SAFE_FREE_BIN(targ); \ targ.data = NULL; \ } \ }
Definition at line 2079 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_BOOL | ( | label, | |||
targ | ) |
{ \ if (list->elements[x]->type != 0x0b) { \ DEBUG_WARN(("src not 0x0b for boolean dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ if (*(int16_t*)list->elements[x]->data) { \ DEBUG_INFO((label" - True\n")); \ targ = 1; \ } else { \ DEBUG_INFO((label" - False\n")); \ targ = 0; \ } \ }
Definition at line 1884 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_CONTACT_BOOL | ( | label, | |||
targ | ) |
{ \ MALLOC_CONTACT(item); \ LIST_COPY_BOOL(label, targ) \ }
Definition at line 1903 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_CONTACT_ENUM16 | ( | label, | |||
targ, | |||||
delta, | |||||
count, | |||||
... | ) |
{ \ MALLOC_CONTACT(item); \ LIST_COPY_ENUM16(label, targ, delta, count, __VA_ARGS__); \ }
Definition at line 1991 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_CONTACT_STR | ( | label, | |||
targ | ) |
{ \ MALLOC_CONTACT(item); \ LIST_COPY_STR(label, targ); \ }
Definition at line 2027 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_CONTACT_TIME | ( | label, | |||
targ | ) |
{ \ MALLOC_CONTACT(item); \ LIST_COPY_TIME(label, targ); \ }
Definition at line 2063 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_CSTR | ( | targ | ) |
{ \ if ((list->elements[x]->type == 0x1f) || \ (list->elements[x]->type == 0x1e) || \ (list->elements[x]->type == 0x102)) { \ LIST_COPY(targ, (char*)) \ } \ else { \ DEBUG_WARN(("src not 0x1e or 0x1f or 0x102 for string dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ SAFE_FREE(targ); \ targ = NULL; \ } \ }
Definition at line 1870 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_BIN | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_BIN(targ); \ DEBUG_INFO((label"\n")); \ }
Definition at line 2091 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_BOOL | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_BOOL(label, targ) \ }
Definition at line 1898 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_ENTRYID | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_ENTRYID(label, targ); \ }
Definition at line 2003 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_ENUM | ( | label, | |||
targ, | |||||
delta, | |||||
count, | |||||
... | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__); \ }
Definition at line 1971 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_INT32 | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_INT32(label, targ); \ }
Definition at line 1941 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_STR | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_STR(label, targ); \ }
Definition at line 2022 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_EMAIL_TIME | ( | label, | |||
targ | ) |
{ \ MALLOC_EMAIL(item); \ LIST_COPY_TIME(label, targ); \ }
Definition at line 2058 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_ENTRYID | ( | label, | |||
targ | ) |
{ \ LIST_COPY(targ, (pst_entryid*)); \ LE32_CPU(targ->u1); \ LE32_CPU(targ->id); \ DEBUG_INFO((label" u1=%#x, id=%#x\n", targ->u1, targ->id)); \ }
#define LIST_COPY_ENUM | ( | label, | |||
targ, | |||||
delta, | |||||
count, | |||||
... | ) |
{ \ char *tlabels[] = {__VA_ARGS__}; \ LIST_COPY_INT32_N(targ); \ targ += delta; \ DEBUG_INFO((label" - %s [%i]\n", \ (((int)targ < 0) || ((int)targ >= count)) \ ? "**invalid" \ : tlabels[(int)targ], (int)targ)); \ }
Definition at line 1961 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_ENUM16 | ( | label, | |||
targ, | |||||
delta, | |||||
count, | |||||
... | ) |
{ \ char *tlabels[] = {__VA_ARGS__}; \ LIST_COPY_INT16_N(targ); \ targ += delta; \ DEBUG_INFO((label" - %s [%i]\n", \ (((int)targ < 0) || ((int)targ >= count)) \ ? "**invalid" \ : tlabels[(int)targ], (int)targ)); \ }
#define LIST_COPY_FOLDER_INT32 | ( | label, | |||
targ | ) |
{ \ MALLOC_FOLDER(item); \ LIST_COPY_INT32(label, targ); \ }
Definition at line 1951 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_INT16 | ( | label, | |||
targ | ) |
{ \ LIST_COPY_INT16_N(targ); \ DEBUG_INFO((label" - %i %#x\n", (int)targ, (int)targ)); \ }
#define LIST_COPY_INT16_N | ( | targ | ) |
{ \ if (list->elements[x]->type != 0x02) { \ DEBUG_WARN(("src not 0x02 for int16 dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ memcpy(&(targ), list->elements[x]->data, sizeof(targ)); \ LE16_CPU(targ); \ }
#define LIST_COPY_INT32 | ( | label, | |||
targ | ) |
{ \ LIST_COPY_INT32_N(targ); \ DEBUG_INFO((label" - %i %#x\n", (int)targ, (int)targ)); \ }
Definition at line 1936 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_INT32_N | ( | targ | ) |
{ \ if (list->elements[x]->type != 0x03) { \ DEBUG_WARN(("src not 0x03 for int32 dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ memcpy(&(targ), list->elements[x]->data, sizeof(targ)); \ LE32_CPU(targ); \ }
#define LIST_COPY_JOURNAL_STR | ( | label, | |||
targ | ) |
{ \ MALLOC_JOURNAL(item); \ LIST_COPY_STR(label, targ); \ }
Definition at line 2037 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_JOURNAL_TIME | ( | label, | |||
targ | ) |
{ \ MALLOC_JOURNAL(item); \ LIST_COPY_TIME(label, targ); \ }
Definition at line 2073 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_STORE_ENTRYID | ( | label, | |||
targ | ) |
{ \ MALLOC_MESSAGESTORE(item); \ LIST_COPY_ENTRYID(label, targ); \ }
Definition at line 2008 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_STORE_INT32 | ( | label, | |||
targ | ) |
{ \ MALLOC_MESSAGESTORE(item); \ LIST_COPY_INT32(label, targ); \ }
Definition at line 1956 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_STR | ( | label, | |||
targ | ) |
{ \ LIST_COPY_CSTR(targ.str); \ targ.is_utf8 = (list->elements[x]->type == 0x1f) ? 1 : 0; \ DEBUG_INFO((label" - unicode %d - %s\n", targ.is_utf8, targ.str)); \ }
Definition at line 2016 of file libpst.c.
Referenced by pst_process().
#define LIST_COPY_TIME | ( | label, | |||
targ | ) |
{ \ if ((list->elements[x]->type != 0x40) || \ (list->elements[x]->size != sizeof(FILETIME))) { \ DEBUG_WARN(("src not 0x40 or wrong length for filetime dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ else { \ targ = (FILETIME*) pst_realloc(targ, sizeof(FILETIME)); \ memcpy(targ, list->elements[x]->data, sizeof(FILETIME)); \ LE32_CPU(targ->dwLowDateTime); \ LE32_CPU(targ->dwHighDateTime); \ DEBUG_INFO((label" - %s", pst_fileTimeToAscii(targ, time_buffer))); \ } \ }
Definition at line 2043 of file libpst.c.
Referenced by pst_process().
#define MALLOC_APPOINTMENT | ( | x | ) | { if (!x->appointment) { x->appointment = (pst_item_appointment*) pst_malloc(sizeof(pst_item_appointment)); memset(x->appointment, 0, sizeof(pst_item_appointment) );} } |
#define MALLOC_CONTACT | ( | x | ) | { if (!x->contact) { x->contact = (pst_item_contact*) pst_malloc(sizeof(pst_item_contact)); memset(x->contact, 0, sizeof(pst_item_contact) );} } |
#define MALLOC_EMAIL | ( | x | ) | { if (!x->email) { x->email = (pst_item_email*) pst_malloc(sizeof(pst_item_email)); memset(x->email, 0, sizeof(pst_item_email) );} } |
#define MALLOC_FOLDER | ( | x | ) | { if (!x->folder) { x->folder = (pst_item_folder*) pst_malloc(sizeof(pst_item_folder)); memset(x->folder, 0, sizeof(pst_item_folder) );} } |
Definition at line 1857 of file libpst.c.
Referenced by pst_process().
#define MALLOC_JOURNAL | ( | x | ) | { if (!x->journal) { x->journal = (pst_item_journal*) pst_malloc(sizeof(pst_item_journal)); memset(x->journal, 0, sizeof(pst_item_journal) );} } |
#define MALLOC_MESSAGESTORE | ( | x | ) | { if (!x->message_store) { x->message_store = (pst_item_message_store*) pst_malloc(sizeof(pst_item_message_store)); memset(x->message_store, 0, sizeof(pst_item_message_store));} } |
#define NULL_CHECK | ( | x | ) | { if (!x) { DEBUG_WARN(("NULL_CHECK: Null Found\n")); break;} } |
Definition at line 2103 of file libpst.c.
Referenced by pst_process().
#define PST_SIGNATURE 0x4E444221 |
Definition at line 49 of file libpst.c.
Referenced by pst_open().
#define SAFE_FREE | ( | x | ) | {if (x) free(x);} |
Definition at line 1851 of file libpst.c.
Referenced by pst_freeItem().
#define SAFE_FREE_BIN | ( | x | ) | SAFE_FREE(x.data) |
Definition at line 1853 of file libpst.c.
Referenced by pst_free_attach(), and pst_freeItem().
#define SAFE_FREE_STR | ( | x | ) | SAFE_FREE(x.str) |
Definition at line 1852 of file libpst.c.
Referenced by pst_free_attach(), and pst_freeItem().
#define SECOND_BACK ((pf->do_read64) ? SECOND_BACK64 : SECOND_BACK32) |
Definition at line 46 of file libpst.c.
Referenced by pst_open().
#define SECOND_POINTER ((pf->do_read64) ? SECOND_POINTER64 : SECOND_POINTER32) |
Definition at line 45 of file libpst.c.
Referenced by pst_open().
static void add_descriptor_to_list | ( | pst_desc_tree * | node, | |
pst_desc_tree ** | head, | |||
pst_desc_tree ** | tail | |||
) | [static] |
add a pst descriptor node to a linked list of such nodes.
node | pointer to the node to be added to the list | |
head | pointer to the list head pointer | |
tail | pointer to the list tail pointer |
Definition at line 423 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, and pst_desc_tree::prev.
Referenced by record_descriptor().
static const char * codepage | ( | int | cp, | |
int | buflen, | |||
char * | result | |||
) | [static] |
Convert a code page integer into a string suitable for iconv().
cp | the code page integer used in the pst file | |
[in] | buflen | length of the output buffer |
[out] | result | pointer to output buffer, must be at least 30 bytes |
Definition at line 4314 of file libpst.c.
Referenced by pst_default_charset().
static pst_id2_tree * deep_copy | ( | pst_id2_tree * | head | ) | [static] |
make a deep copy of part of the id2 mapping tree, for use by an attachment containing an embedded rfc822 message.
head | pointer to the subtree to be copied |
Definition at line 512 of file libpst.c.
References pst_id2_tree::child, pst_id2_tree::id, pst_id2_tree::id2, pst_id2_tree::next, and pst_malloc().
Referenced by pst_parse_item().
static void freeall | ( | pst_subblocks * | subs, | |
pst_block_offset_pointer * | p1, | |||
pst_block_offset_pointer * | p2, | |||
pst_block_offset_pointer * | p3, | |||
pst_block_offset_pointer * | p4, | |||
pst_block_offset_pointer * | p5, | |||
pst_block_offset_pointer * | p6, | |||
pst_block_offset_pointer * | p7 | |||
) | [static] |
Definition at line 1355 of file libpst.c.
References pst_subblock::buf, pst_block_offset_pointer::from, pst_block_offset_pointer::needfree, pst_subblocks::subblock_count, and pst_subblocks::subs.
Referenced by pst_parse_block().
static size_t pst_append_holder | ( | pst_holder * | h, | |
size_t | size, | |||
char ** | buf, | |||
size_t | z | |||
) | [static] |
append (buf,z) data to the output destination (h,size)
h | specifies the output destination (buffer, file, encoding) | |
size | number of bytes of data already sent to h | |
buf | reference to a pointer to the buffer to be appended to the destination | |
z | number of bytes in buf |
Definition at line 4066 of file libpst.c.
References pst_holder::base64, pst_holder::base64_extra, pst_holder::base64_extra_chars, pst_holder::base64_line_count, pst_holder::buf, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_holder::fp, pst_base64_encode_multiple(), pst_fwrite(), and pst_realloc().
Referenced by pst_ff_compile_ID(), and pst_ff_getID2data().
size_t pst_attach_to_file | ( | pst_file * | pf, | |
pst_item_attach * | attach, | |||
FILE * | fp | |||
) |
Write a binary attachment to a file.
pf | pointer to the pst_file structure setup by pst_open(). | |
attach | pointer to the attachment record | |
fp | pointer to an open FILE. |
Definition at line 580 of file libpst.c.
References pst_binary::data, pst_item_attach::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_ff_getID2data(), pst_fwrite(), pst_getID(), and pst_binary::size.
Referenced by write_msg_email(), and write_separate_attachment().
size_t pst_attach_to_file_base64 | ( | pst_file * | pf, | |
pst_item_attach * | attach, | |||
FILE * | fp | |||
) |
Write a binary attachment base64 encoded to a file.
pf | pointer to the pst_file structure setup by pst_open(). | |
attach | pointer to the attachment record | |
fp | pointer to an open FILE. |
Definition at line 604 of file libpst.c.
References pst_binary::data, pst_item_attach::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_base64_encode(), pst_ff_getID2data(), pst_fwrite(), pst_getID(), and pst_binary::size.
Referenced by write_inline_attachment().
pst_binary pst_attach_to_mem | ( | pst_file * | pf, | |
pst_item_attach * | attach | |||
) |
Assemble the binary attachment into a single buffer.
pf | pointer to the pst_file structure setup by pst_open(). | |
attach | pointer to the attachment record |
Definition at line 556 of file libpst.c.
References pst_item_attach::data, pst_binary::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_ff_getID2data(), pst_getID(), and pst_binary::size.
static int pst_build_desc_ptr | ( | pst_file * | pf, | |
int64_t | offset, | |||
int32_t | depth, | |||
uint64_t | linku1, | |||
uint64_t | start_val, | |||
uint64_t | end_val | |||
) | [static] |
Process the index2 b-tree from the pst file and create the pf->d_head tree from it.
This tree holds descriptions of the higher level objects (email, contact, etc) in the pst file.
Definition at line 1090 of file libpst.c.
References pst_desc_tree::assoc_tree, BACKLINK_OFFSET, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_desc_tree::desc, DESC_BLOCK_SIZE, DESC_COUNT_MAX, DESC_SIZE32, INDEX_COUNT_MAX, ITEM_COUNT_OFFSET, ITEM_SIZE32, LEVEL_INDICATOR_OFFSET, pst_table_ptr_struct::offset, pst_desc_tree::parent_d_id, pst_decode_desc(), pst_decode_table(), pst_getID(), pst_getIntAt(), pst_malloc(), pst_read_block_size(), record_descriptor(), pst_table_ptr_struct::start, and pst_table_ptr_struct::u1.
Referenced by pst_load_index().
static pst_id2_tree * pst_build_id2 | ( | pst_file * | pf, | |
pst_index_ll * | list | |||
) | [static] |
Definition at line 3238 of file libpst.c.
References pst_id2_tree::child, pst_id2_assoc::child_id, pst_block_header::count, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::do_read64, pst_index_ll::i_id, pst_id2_tree::id, pst_id2_assoc::id, pst_id2_tree::id2, pst_id2_assoc::id2, LE16_CPU, pst_id2_tree::next, pst_index_ll::offset, pst_decode_assoc(), pst_getID(), pst_malloc(), pst_read_block_size(), pst_index_ll::size, pst_block_header::type, and pst_index_ll::u1.
Referenced by pst_load_extended_attributes(), and pst_parse_item().
static int pst_build_id_ptr | ( | pst_file * | pf, | |
int64_t | offset, | |||
int32_t | depth, | |||
uint64_t | linku1, | |||
uint64_t | start_val, | |||
uint64_t | end_val | |||
) | [static] |
Process the index1 b-tree from the pst file and create the pf->i_head linked list from it.
This tree holds the location (offset and size) of lower level objects (0xbcec descriptor blocks, etc) in the pst file.
Definition at line 989 of file libpst.c.
References BACKLINK_OFFSET, BLOCK_SIZE, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::i_capacity, pst_file::i_count, pst_index_ll::i_id, pst_file::i_table, pst_index::id, INDEX_COUNT_MAX, ITEM_COUNT_OFFSET, ITEM_SIZE32, LEVEL_INDICATOR_OFFSET, pst_table_ptr_struct::offset, pst_index::offset, pst_decode_index(), pst_decode_table(), pst_getIntAt(), pst_read_block_size(), pst_realloc(), pst_index::size, pst_table_ptr_struct::start, pst_table_ptr_struct::u1, and pst_index::u1.
Referenced by pst_load_index().
static int pst_chr_count | ( | char * | str, | |
char | x | |||
) | [static] |
Definition at line 4258 of file libpst.c.
Referenced by pst_rfc2426_escape().
int pst_close | ( | pst_file * | pf | ) |
Close a pst file.
pf | pointer to the pst_file structure setup by pst_open(). |
Definition at line 394 of file libpst.c.
References pst_file::cwd, pst_file::d_head, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_file::fname, pst_file::fp, pst_file::i_table, pst_free_desc(), pst_free_xattrib(), and pst_file::x_head.
Referenced by main().
pst_recurrence* pst_convert_recurrence | ( | pst_item_appointment * | appt | ) |
Decode raw recurrence data into a better structure.
appt | pointer to appointment structure |
Definition at line 4497 of file libpst.c.
References pst_recurrence::bydaymask, pst_recurrence::count, pst_binary::data, pst_recurrence::dayofmonth, pst_recurrence::interval, pst_recurrence::monthofyear, pst_recurrence::parm1, pst_recurrence::parm2, pst_recurrence::parm4, pst_recurrence::parm5, pst_recurrence::position, PST_LE_GET_UINT32, PST_LE_GET_UINT8, pst_malloc(), pst_item_appointment::recurrence_data, pst_recurrence::signature, pst_binary::size, pst_recurrence::sub_type, pst_recurrence::termination, and pst_recurrence::type.
Referenced by write_appointment().
void pst_convert_utf8 | ( | pst_item * | item, | |
pst_string * | str | |||
) |
Convert str to utf8 if possible; null strings are converted into empty strings.
item | pointer to the containing mapi item | |
str | pointer to the mapi string of interest |
Definition at line 4457 of file libpst.c.
References pst_varbuf::b, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_string::is_utf8, pst_default_charset(), pst_vb_8bit2utf8(), pst_vballoc(), and pst_string::str.
Referenced by create_enter_dir(), process(), pst_convert_utf8_null(), pst_rfc2047(), and write_normal_email().
void pst_convert_utf8_null | ( | pst_item * | item, | |
pst_string * | str | |||
) |
Convert str to utf8 if possible; null strings are preserved.
item | pointer to the containing mapi item | |
str | pointer to the mapi string of interest |
Definition at line 4446 of file libpst.c.
References pst_convert_utf8(), and pst_string::str.
Referenced by process(), write_appointment(), write_journal(), write_normal_email(), and write_vcard().
static size_t pst_decode_assoc | ( | pst_file * | pf, | |
pst_id2_assoc * | assoc, | |||
char * | buf | |||
) | [static] |
Definition at line 933 of file libpst.c.
References pst_id2_assoc32::child_id, pst_id2_assoc::child_id, DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, pst_id2_assoc32::id, pst_id2_assoc::id, pst_id2_assoc32::id2, pst_id2_assoc::id2, LE32_CPU, and LE64_CPU.
Referenced by pst_build_id2().
Definition at line 837 of file libpst.c.
References pst_desc32::d_id, pst_desc::d_id, DEBUG_HEXDUMPC, DEBUG_INFO, pst_desc32::desc_id, pst_desc::desc_id, pst_file::do_read64, LE32_CPU, LE64_CPU, pst_desc32::parent_d_id, pst_desc::parent_d_id, pst_desc32::tree_id, pst_desc::tree_id, and pst_desc::u1.
Referenced by pst_build_desc_ptr().
Definition at line 900 of file libpst.c.
References DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, pst_index32::id, pst_index::id, LE16_CPU, LE32_CPU, LE64_CPU, pst_index32::offset, pst_index::offset, pst_index32::size, pst_index::size, pst_index::u0, pst_index32::u1, and pst_index::u1.
Referenced by pst_build_id_ptr().
static size_t pst_decode_table | ( | pst_file * | pf, | |
struct pst_table_ptr_struct * | table, | |||
char * | buf | |||
) | [static] |
Definition at line 871 of file libpst.c.
References DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, LE32_CPU, LE64_CPU, pst_table_ptr_struct32::offset, pst_table_ptr_struct::offset, pst_table_ptr_struct32::start, pst_table_ptr_struct::start, pst_table_ptr_struct32::u1, and pst_table_ptr_struct::u1.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
static size_t pst_decode_type3 | ( | pst_file * | pf, | |
pst_table3_rec * | table3_rec, | |||
char * | buf | |||
) | [static] |
Definition at line 961 of file libpst.c.
References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, pst_file::do_read64, pst_table3_rec32::id, pst_table3_rec::id, LE32_CPU, and LE64_CPU.
Referenced by pst_ff_compile_ID(), and pst_parse_block().
static int pst_decrypt | ( | uint64_t | i_id, | |
char * | buf, | |||
size_t | size, | |||
unsigned char | type | |||
) | [static] |
Decrypt a block of data from the pst file.
i_id | identifier of this block, needed as part of the key for the enigma cipher | |
buf | pointer to the buffer to be decrypted in place | |
size | size of the buffer | |
type |
|
Definition at line 3765 of file libpst.c.
References comp_enc, comp_high1, comp_high2, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, PST_COMP_ENCRYPT, and PST_ENCRYPT.
Referenced by pst_ff_compile_ID(), and pst_ff_getIDblock_dec().
const char* pst_default_charset | ( | pst_item * | item, | |
int | buflen, | |||
char * | result | |||
) |
Get the default character set for this item.
This is used to find the charset for pst_string elements that are not already in utf8 encoding.
item | pointer to the mapi item of interest | |
[in] | buflen | length of the output buffer |
[out] | result | pointer to output buffer, must be at least 30 bytes |
Definition at line 4362 of file libpst.c.
References pst_item::body_charset, pst_file::charset, codepage(), pst_item::internet_cpid, pst_item::message_codepage, pst_item::pf, and pst_string::str.
Referenced by pst_convert_utf8(), write_msg_email(), and write_normal_email().
static size_t pst_ff_compile_ID | ( | pst_file * | pf, | |
uint64_t | i_id, | |||
pst_holder * | h, | |||
size_t | size | |||
) | [static] |
find the actual data from an indirection i_id and send it to the destination specified by the pst_holder.
pf | PST file structure | |
i_id | ID of the block to read | |
h | specifies the output destination (buffer, file, encoding) | |
size | number of bytes of data already sent to h |
Definition at line 3990 of file libpst.c.
References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::encryption, pst_table3_rec::id, pst_block_hdr::index_offset, LE16_CPU, LE32_CPU, pst_block_hdr::offset, pst_append_holder(), pst_decode_type3(), pst_decrypt(), pst_ff_getIDblock(), pst_ff_getIDblock_dec(), and pst_block_hdr::type.
Referenced by pst_ff_getID2data().
static size_t pst_ff_getID2block | ( | pst_file * | pf, | |
uint64_t | id2, | |||
pst_id2_tree * | id2_head, | |||
char ** | buf | |||
) | [static] |
Definition at line 3936 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_id2_tree::id, pst_ff_getID2data(), and pst_getID2().
Referenced by pst_getBlockOffsetPointer(), and pst_parse_block().
static size_t pst_ff_getID2data | ( | pst_file * | pf, | |
pst_index_ll * | ptr, | |||
pst_holder * | h | |||
) | [static] |
find the actual data from an i_id and send it to the destination specified by the pst_holder h.
h must be a new empty destination.
pf | PST file structure | |
ptr | ||
h | specifies the output destination (buffer, file, encoding) |
Definition at line 3962 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_index_ll::i_id, pst_append_holder(), pst_ff_compile_ID(), pst_ff_getIDblock_dec(), and pst_finish_cleanup_holder().
Referenced by pst_attach_to_file(), pst_attach_to_file_base64(), pst_attach_to_mem(), and pst_ff_getID2block().
static size_t pst_ff_getIDblock | ( | pst_file * | pf, | |
uint64_t | i_id, | |||
char ** | buf | |||
) | [static] |
Read a block of data from file into memory.
pf | PST file structure | |
i_id | ID of block to read | |
buf | reference to pointer to buffer that will contain the data block. If this pointer is non-NULL, it will first be free()d. |
Definition at line 3919 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_index_ll::offset, pst_getID(), pst_read_block_size(), and pst_index_ll::size.
Referenced by pst_ff_compile_ID(), and pst_ff_getIDblock_dec().
size_t pst_ff_getIDblock_dec | ( | pst_file * | pf, | |
uint64_t | i_id, | |||
char ** | buf | |||
) |
Get an ID block from file using pst_ff_getIDblock() and decrypt if necessary.
Get an ID block from the file using pst_ff_getIDblock() and decrypt if necessary.
pf | PST file structure | |
i_id | ID of block to retrieve | |
buf | reference to pointer to buffer that will contain the data block. If this pointer is non-NULL, it will first be free()d. |
Definition at line 3896 of file libpst.c.
References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, pst_file::encryption, pst_decrypt(), and pst_ff_getIDblock().
Referenced by dumper(), main(), pst_ff_compile_ID(), pst_ff_getID2data(), and pst_parse_block().
static size_t pst_finish_cleanup_holder | ( | pst_holder * | h, | |
size_t | size | |||
) | [static] |
finish cleanup for base64 encoding to a file with extra bytes left over
h | specifies the output destination (buffer, file, encoding) | |
size | number of bytes of data already sent to h |
Definition at line 4122 of file libpst.c.
References pst_holder::base64, pst_holder::base64_extra, pst_holder::base64_extra_chars, pst_holder::base64_line_count, DEBUG_ENT, DEBUG_RET, pst_holder::fp, pst_base64_encode_multiple(), and pst_fwrite().
Referenced by pst_ff_getID2data().
static void pst_free_attach | ( | pst_item_attach * | attach | ) | [static] |
Definition at line 3307 of file libpst.c.
References pst_item_attach::content_id, pst_item_attach::data, pst_item_attach::filename1, pst_item_attach::filename2, pst_item_attach::id2_head, pst_item_attach::mimetype, pst_item_attach::next, pst_free_id2(), SAFE_FREE_BIN, and SAFE_FREE_STR.
Referenced by pst_freeItem().
static void pst_free_desc | ( | pst_desc_tree * | head | ) | [static] |
Definition at line 3212 of file libpst.c.
References pst_desc_tree::child, DEBUG_ENT, DEBUG_RET, and pst_desc_tree::next.
Referenced by pst_close().
static void pst_free_id2 | ( | pst_id2_tree * | head | ) | [static] |
Definition at line 3199 of file libpst.c.
References pst_id2_tree::child, DEBUG_ENT, DEBUG_RET, and pst_id2_tree::next.
Referenced by pst_free_attach(), pst_load_extended_attributes(), and pst_parse_item().
static void pst_free_list | ( | pst_mapi_object * | list | ) | [static] |
Definition at line 3177 of file libpst.c.
References pst_mapi_element::data, DEBUG_ENT, DEBUG_RET, pst_mapi_object::elements, pst_mapi_object::next, and pst_mapi_object::orig_count.
Referenced by pst_load_extended_attributes(), pst_parse_block(), and pst_parse_item().
void pst_free_recurrence | ( | pst_recurrence * | r | ) |
Free a recurrence structure.
r | input pointer to be freed |
Definition at line 4572 of file libpst.c.
Referenced by write_appointment().
static void pst_free_xattrib | ( | pst_x_attrib_ll * | x | ) | [static] |
Definition at line 3225 of file libpst.c.
References pst_x_attrib_ll::data, DEBUG_ENT, DEBUG_RET, and pst_x_attrib_ll::next.
Referenced by pst_close().
void pst_freeItem | ( | pst_item * | item | ) |
Free the item returned by pst_parse_item().
item | pointer to item returned from pst_parse_item(). |
Definition at line 3323 of file libpst.c.
References pst_item_contact::account_name, pst_item_contact::address1, pst_item_contact::address1_desc, pst_item_contact::address1_transport, pst_item_contact::address1a, pst_item_contact::address2, pst_item_contact::address2_desc, pst_item_contact::address2_transport, pst_item_contact::address2a, pst_item_contact::address3, pst_item_contact::address3_desc, pst_item_contact::address3_transport, pst_item_contact::address3a, pst_item_appointment::alarm_filename, pst_item::appointment, pst_item_email::arrival_date, pst_item::ascii_type, pst_item_contact::assistant_name, pst_item_contact::assistant_phone, pst_item::attach, pst_item_email::bcc_address, pst_item_contact::billing_information, pst_item_contact::birthday, pst_item::body, pst_item::body_charset, pst_item_contact::business_address, pst_item_contact::business_city, pst_item_contact::business_country, pst_item_contact::business_fax, pst_item_contact::business_homepage, pst_item_contact::business_phone, pst_item_contact::business_phone2, pst_item_contact::business_po_box, pst_item_contact::business_postal_code, pst_item_contact::business_state, pst_item_contact::business_street, pst_item_contact::callback_phone, pst_item_contact::car_phone, pst_item_email::cc_address, pst_item::comment, pst_item_contact::common_name, pst_item_message_store::common_view_folder, pst_item_contact::company_main_phone, pst_item_contact::company_name, pst_item_contact::computer_name, pst_item::contact, pst_item_email::conversation_index, pst_item::create_date, pst_item_contact::customer_id, DEBUG_ENT, DEBUG_RET, pst_item_contact::def_postal_address, pst_item_message_store::default_outbox_folder, pst_item_message_store::deleted_items_folder, pst_item_contact::department, pst_item_contact::display_name_prefix, pst_item::email, pst_item_email::encrypted_body, pst_item_email::encrypted_htmlbody, pst_item_appointment::end, pst_item_journal::end, pst_item::extra_fields, pst_item_extra_field::field_name, pst_item::file_as, pst_item_contact::first_name, pst_item::folder, pst_item_contact::followup, pst_item_contact::free_busy_address, pst_item_contact::ftp_site, pst_item_contact::fullname, pst_item_contact::gov_id, pst_item_email::header, pst_item_contact::hobbies, pst_item_contact::home_address, pst_item_contact::home_city, pst_item_contact::home_country, pst_item_contact::home_fax, pst_item_contact::home_phone, pst_item_contact::home_phone2, pst_item_contact::home_po_box, pst_item_contact::home_postal_code, pst_item_contact::home_state, pst_item_contact::home_street, pst_item_email::htmlbody, pst_item_email::in_reply_to, pst_item_contact::initials, pst_item_contact::isdn_phone, pst_item_contact::job_title, pst_item::journal, pst_item_contact::keyword, pst_item_contact::language, pst_item_appointment::location, pst_item_contact::location, pst_item_contact::manager_name, pst_item::message_store, pst_item_email::messageid, pst_item_contact::middle_name, pst_item_contact::mileage, pst_item_contact::mobile_phone, pst_item::modify_date, pst_item_extra_field::next, pst_item_contact::nickname, pst_item_contact::office_loc, pst_item_contact::org_id, pst_item_email::original_bcc, pst_item_email::original_cc, pst_item_email::original_to, pst_item_contact::other_address, pst_item_contact::other_city, pst_item_contact::other_country, pst_item_contact::other_phone, pst_item_contact::other_po_box, pst_item_contact::other_postal_code, pst_item_contact::other_state, pst_item_contact::other_street, pst_item_email::outlook_normalized_subject, pst_item_email::outlook_received_name1, pst_item_email::outlook_recipient, pst_item_email::outlook_recipient2, pst_item_email::outlook_recipient_name, pst_item_email::outlook_search_key, pst_item_email::outlook_sender, pst_item_email::outlook_sender2, pst_item_email::outlook_sender_name, pst_item_email::outlook_sender_name2, pst_item::outlook_version, pst_item_contact::pager_phone, pst_item_contact::personal_homepage, pst_item::predecessor_change, pst_item_contact::pref_name, pst_item_contact::primary_fax, pst_item_contact::primary_phone, pst_item_email::processed_subject, pst_item_contact::profession, pst_free_attach(), pst_item_contact::radio_phone, pst_item_email::recip2_access, pst_item_email::recip2_address, pst_item_email::recip_access, pst_item_email::recip_address, pst_item::record_key, pst_item_appointment::recurrence_data, pst_item_appointment::recurrence_description, pst_item_appointment::recurrence_end, pst_item_appointment::recurrence_start, pst_item_appointment::reminder, pst_item_email::reply_to, pst_item_email::report_text, pst_item_email::report_time, pst_item_email::return_path_address, pst_item_email::rtf_body_tag, pst_item_email::rtf_compressed, SAFE_FREE, SAFE_FREE_BIN, SAFE_FREE_STR, pst_item_message_store::search_root_folder, pst_item_email::sender2_access, pst_item_email::sender2_address, pst_item_email::sender_access, pst_item_email::sender_address, pst_item_email::sent_date, pst_item_message_store::sent_items_folder, pst_item_email::sentmail_folder, pst_item_email::sentto_address, pst_item_contact::spouse_name, pst_item_appointment::start, pst_item_journal::start, pst_item::subject, pst_item_contact::suffix, pst_item_email::supplementary_info, pst_item_contact::surname, pst_item_contact::telex, pst_item_appointment::timezonestring, pst_item_message_store::top_of_folder, pst_item_message_store::top_of_personal_folder, pst_item_contact::transmittable_display_name, pst_item_contact::ttytdd_phone, pst_item_journal::type, pst_item_message_store::user_views_folder, pst_item_extra_field::value, pst_item_contact::wedding_anniversary, pst_item_contact::work_address_city, pst_item_contact::work_address_country, pst_item_contact::work_address_postalcode, pst_item_contact::work_address_postofficebox, pst_item_contact::work_address_state, and pst_item_contact::work_address_street.
Referenced by dumper(), main(), process(), pst_parse_item(), and write_embedded_message().
size_t pst_fwrite | ( | const void * | ptr, | |
size_t | size, | |||
size_t | nmemb, | |||
FILE * | stream | |||
) |
fwrite with checking for null pointer.
ptr | pointer to the buffer | |
size | size of each item | |
nmemb | number of items | |
stream | output file |
Definition at line 4172 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, and DEBUG_WARN.
Referenced by main(), print_pdf(), pst_append_holder(), pst_attach_to_file(), pst_attach_to_file_base64(), pst_finish_cleanup_holder(), and write_email_body().
static size_t pst_getAtPos | ( | pst_file * | pf, | |
int64_t | pos, | |||
void * | buf, | |||
size_t | size | |||
) | [static] |
Read part of the pst file.
pf | PST file structure | |
pos | offset of the data in the pst file | |
buf | buffer to contain the data | |
size | size of the buffer and the amount of data to be read |
Definition at line 3853 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, and pst_file::fp.
Referenced by pst_getIntAtPos(), pst_open(), and pst_read_block_size().
static int pst_getBlockOffset | ( | char * | buf, | |
size_t | read_size, | |||
uint32_t | i_offset, | |||
uint32_t | offset, | |||
pst_block_offset * | p | |||
) | [static] |
Definition at line 3586 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_block_offset::from, LE16_CPU, and pst_block_offset::to.
Referenced by pst_getBlockOffsetPointer().
static int pst_getBlockOffsetPointer | ( | pst_file * | pf, | |
pst_id2_tree * | i2_head, | |||
pst_subblocks * | subblocks, | |||
uint32_t | offset, | |||
pst_block_offset_pointer * | p | |||
) | [static] |
The offset might be zero, in which case we have no data, so return a pair of null pointers.
Or, the offset might end in 0xf, so it is an id2 pointer, in which case we read the id2 block. Otherwise, the high order 16 bits of offset is the index into the subblocks, and the (low order 16 bits of offset)>>4 is an index into the table of offsets in the subblock.
Definition at line 3538 of file libpst.c.
References pst_subblock::buf, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_block_offset::from, pst_block_offset_pointer::from, pst_subblock::i_offset, pst_block_offset_pointer::needfree, pst_ff_getID2block(), pst_getBlockOffset(), pst_subblock::read_size, pst_subblocks::subs, pst_block_offset::to, and pst_block_offset_pointer::to.
Referenced by pst_parse_block().
static char* pst_getcwd | ( | void | ) | [static] |
Definition at line 290 of file libpst.c.
References pst_malloc().
Referenced by pst_open(), and pst_reopen().
static pst_desc_tree * pst_getDptr | ( | pst_file * | pf, | |
uint64_t | d_id | |||
) | [static] |
find the id in the descriptor tree rooted at pf->d_head
pf | global pst file pointer | |
d_id | the id we are looking for |
Definition at line 3673 of file libpst.c.
References pst_desc_tree::child, pst_file::d_head, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, and pst_desc_tree::parent.
Referenced by pst_getTopOfFolders(), pst_load_extended_attributes(), and record_descriptor().
pst_index_ll* pst_getID | ( | pst_file * | pf, | |
uint64_t | i_id | |||
) |
Lookup the i_id in the index linked list, and return a pointer to the element.
pf | pointer to the pst_file structure setup by pst_open(). | |
i_id | key for the index linked list |
Definition at line 3618 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_file::i_count, pst_file::i_table, and pst_getID_compare().
Referenced by dumper(), pst_attach_to_file(), pst_attach_to_file_base64(), pst_attach_to_mem(), pst_build_desc_ptr(), pst_build_id2(), pst_ff_getIDblock(), write_embedded_message(), write_inline_attachment(), and write_separate_attachment().
static pst_id2_tree * pst_getID2 | ( | pst_id2_tree * | ptr, | |
uint64_t | id | |||
) | [static] |
Definition at line 3639 of file libpst.c.
References pst_id2_tree::child, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_index_ll::i_id, pst_id2_tree::id, pst_id2_tree::id2, and pst_id2_tree::next.
Referenced by pst_ff_getID2block(), and pst_parse_item().
static int pst_getID_compare | ( | const void * | key, | |
const void * | entry | |||
) | [static] |
Definition at line 3610 of file libpst.c.
Referenced by pst_getID().
static uint64_t pst_getIntAt | ( | pst_file * | pf, | |
char * | buf | |||
) | [static] |
Definition at line 3813 of file libpst.c.
References pst_file::do_read64, LE32_CPU, and LE64_CPU.
Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().
static uint64_t pst_getIntAtPos | ( | pst_file * | pf, | |
int64_t | pos | |||
) | [static] |
Definition at line 3829 of file libpst.c.
References pst_file::do_read64, LE32_CPU, LE64_CPU, and pst_getAtPos().
Referenced by pst_open().
pst_desc_tree* pst_getNextDptr | ( | pst_desc_tree * | d | ) |
Walk the descriptor tree.
d | pointer to the current item in the descriptor tree. |
Definition at line 654 of file libpst.c.
References pst_desc_tree::child, DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, and pst_desc_tree::parent.
Referenced by dumper().
pst_desc_tree* pst_getTopOfFolders | ( | pst_file * | pf, | |
const pst_item * | root | |||
) |
Get the top of folders descriptor tree.
This is the main descriptor tree that needs to be walked to look at every item in the pst file.
pf | pointer to the pst_file structure setup by pst_open(). | |
root | root item, which can be obtained by pst_parse_item(pf, pf->d_head, NULL). |
Definition at line 524 of file libpst.c.
References pst_desc_tree::assoc_tree, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_desc_tree::desc, pst_entryid::id, pst_item::message_store, pst_desc_tree::parent_d_id, pst_getDptr(), pst_malloc(), record_descriptor(), and pst_item_message_store::top_of_personal_folder.
Referenced by main().
int pst_load_extended_attributes | ( | pst_file * | pf | ) |
Try to load the extended attributes from the pst file.
Load the extended attribute mapping table from the pst file.
Definition at line 678 of file libpst.c.
References pst_desc_tree::assoc_tree, pst_mapi_object::count_elements, pst_x_attrib_ll::data, pst_mapi_element::data, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_desc_tree::desc, pst_mapi_object::elements, pst_x_attrib::extended, pst_index_ll::i_id, LE32_CPU, pst_x_attrib_ll::map, pst_x_attrib::map, pst_mapi_element::mapi_id, pst_x_attrib_ll::mytype, pst_x_attrib_ll::next, pst_build_id2(), pst_free_id2(), pst_free_list(), pst_getDptr(), PST_LE_GET_UINT16, PST_LE_GET_UINT32, pst_malloc(), PST_MAP_ATTRIB, PST_MAP_HEADER, pst_parse_block(), pst_printID2ptr(), pst_wide_to_single(), pst_mapi_element::size, pst_x_attrib::type, pst_mapi_element::type, and pst_file::x_head.
Referenced by main().
int pst_load_index | ( | pst_file * | pf | ) |
Load the index entries from the pst file.
This loads both the i_id linked list, and the d_id tree, and should normally be the first call after pst_open().
pf | pointer to the pst_file structure setup by pst_open(). |
Definition at line 632 of file libpst.c.
References pst_file::d_head, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::index1, pst_file::index1_back, pst_file::index2, pst_file::index2_back, pst_build_desc_ptr(), pst_build_id_ptr(), and pst_printDptr().
Referenced by main().
int pst_open | ( | pst_file * | pf, | |
const char * | name, | |||
const char * | charset | |||
) |
Open a pst file.
pf | pointer to uninitialized pst_file structure. This structure will be filled in by this function. | |
name | name of the file, suitable for fopen(). | |
charset | default charset for item with unspecified character sets |
Definition at line 302 of file libpst.c.
References pst_file::charset, pst_file::cwd, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::do_read64, ENC_TYPE, pst_file::encryption, FILE_SIZE_POINTER, pst_file::fname, pst_file::fp, pst_file::ind_type, pst_file::index1, pst_file::index1_back, pst_file::index2, pst_file::index2_back, INDEX_BACK, INDEX_POINTER, INDEX_TYPE32, INDEX_TYPE32A, INDEX_TYPE64, INDEX_TYPE64A, INDEX_TYPE_OFFSET, LE32_CPU, pst_getAtPos(), pst_getcwd(), pst_getIntAtPos(), PST_SIGNATURE, pst_unicode_init(), SECOND_BACK, SECOND_POINTER, pst_file::size, and WARN.
Referenced by main().
static pst_mapi_object * pst_parse_block | ( | pst_file * | pf, | |
uint64_t | block_id, | |||
pst_id2_tree * | i2_head | |||
) | [static] |
Process a low level descriptor block (0x0101, 0xbcec, 0x7cec) into a list of MAPI objects, each of which contains a list of MAPI elements.
Definition at line 1382 of file libpst.c.
References pst_varbuf::b, pst_subblock::buf, pst_mapi_object::count_elements, pst_mapi_object::count_objects, pst_mapi_element::data, pst_x_attrib_ll::data, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_varbuf::dlen, pst_file::do_read64, pst_mapi_object::elements, pst_mapi_element::extra, freeall(), pst_block_offset_pointer::from, pst_subblock::i_offset, pst_table3_rec::id, pst_block_hdr::index_offset, LE16_CPU, LE32_CPU, pst_x_attrib_ll::map, pst_mapi_element::mapi_id, pst_x_attrib_ll::mytype, pst_block_offset_pointer::needfree, pst_x_attrib_ll::next, pst_mapi_object::next, pst_block_hdr::offset, pst_mapi_object::orig_count, PST_ATTRIB_HEADER, pst_decode_type3(), pst_ff_getID2block(), pst_ff_getIDblock_dec(), pst_free_list(), pst_getBlockOffsetPointer(), pst_malloc(), PST_MAP_ATTRIB, PST_MAP_HEADER, pst_vb_utf16to8(), pst_vballoc(), pst_vbappend(), pst_vbset(), pst_subblock::read_size, pst_mapi_element::size, pst_subblocks::subblock_count, pst_subblocks::subs, pst_block_offset_pointer::to, pst_mapi_element::type, pst_block_hdr::type, pst_table_ptr_struct::u1, and pst_file::x_head.
Referenced by pst_load_extended_attributes(), and pst_parse_item().
pst_item* pst_parse_item | ( | pst_file * | pf, | |
pst_desc_tree * | d_ptr, | |||
pst_id2_tree * | m_head | |||
) |
Process a high level object from the pst file.
Assemble a mapi object from a descriptor pointer.
Definition at line 1191 of file libpst.c.
References pst_desc_tree::assoc_tree, pst_item::attach, pst_id2_tree::child, pst_mapi_object::count_objects, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, deep_copy(), pst_desc_tree::desc, pst_item::flags, pst_item_attach::i_id, pst_index_ll::i_id, pst_id2_tree::id, pst_item_attach::id2_head, pst_item_attach::id2_val, pst_item_attach::next, pst_item::pf, pst_build_id2(), PST_FLAG_HAS_ATTACHMENT, pst_free_id2(), pst_free_list(), pst_freeItem(), pst_getID2(), pst_malloc(), pst_parse_block(), pst_printID2ptr(), and pst_process().
Referenced by dumper(), main(), process(), and write_embedded_message().
static void pst_printDptr | ( | pst_file * | pf, | |
pst_desc_tree * | ptr | |||
) | [static] |
Definition at line 3692 of file libpst.c.
References pst_desc_tree::assoc_tree, pst_desc_tree::child, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_desc_tree::desc, pst_index_ll::i_id, pst_desc_tree::next, and pst_desc_tree::no_child.
Referenced by pst_load_index().
static void pst_printID2ptr | ( | pst_id2_tree * | ptr | ) | [static] |
Definition at line 3707 of file libpst.c.
References pst_id2_tree::child, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_index_ll::i_id, pst_id2_tree::id, pst_id2_tree::id2, and pst_id2_tree::next.
Referenced by pst_load_extended_attributes(), and pst_parse_item().
static int pst_process | ( | uint64_t | block_id, | |
pst_mapi_object * | list, | |||
pst_item * | item, | |||
pst_item_attach * | attach | |||
) | [static] |
process the list of MAPI objects produced from parse_block()
block_id | block number used by parse_block() to produce these MAPI objects | |
list | pointer to the list of MAPI objects from parse_block() | |
item | pointer to the high level item to be updated from the list. this item may be an email, contact or other sort of item. the type of this item is generally set by the MAPI elements from the list. | |
attach | pointer to the list of attachment records. If this is non-null, the length of the this attachment list must be at least as large as the length of the MAPI objects list. |
Definition at line 2121 of file libpst.c.
References pst_item_contact::account_name, pst_item_contact::address1, pst_item_contact::address1_desc, pst_item_contact::address1_transport, pst_item_contact::address1a, pst_item_contact::address2, pst_item_contact::address2_desc, pst_item_contact::address2_transport, pst_item_contact::address2a, pst_item_contact::address3, pst_item_contact::address3_desc, pst_item_contact::address3_transport, pst_item_contact::address3a, pst_item_appointment::alarm, pst_item_appointment::alarm_filename, pst_item_appointment::alarm_minutes, pst_item_appointment::all_day, pst_item::appointment, pst_item_email::arrival_date, pst_item::ascii_type, pst_item_contact::assistant_name, pst_item_contact::assistant_phone, pst_item_folder::assoc_count, pst_item_email::autoforward, pst_item_email::bcc_address, pst_item_contact::billing_information, pst_item_contact::birthday, pst_item::block_id, pst_item::body, pst_item::body_charset, pst_item_contact::business_address, pst_item_contact::business_city, pst_item_contact::business_country, pst_item_contact::business_fax, pst_item_contact::business_homepage, pst_item_contact::business_phone, pst_item_contact::business_phone2, pst_item_contact::business_po_box, pst_item_contact::business_postal_code, pst_item_contact::business_state, pst_item_contact::business_street, pst_item_contact::callback_phone, pst_item_contact::car_phone, pst_item_email::cc_address, pst_item::comment, pst_item_contact::common_name, pst_item_message_store::common_view_folder, pst_item_contact::company_main_phone, pst_item_contact::company_name, pst_item_contact::computer_name, pst_item::contact, pst_item_attach::content_id, pst_item_email::conversation_index, pst_item_email::conversion_prohibited, pst_mapi_object::count_elements, pst_item::create_date, pst_item_contact::customer_id, pst_item_attach::data, pst_binary::data, pst_mapi_element::data, DEBUG_ENT, DEBUG_HEXDUMP, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_item_contact::def_postal_address, pst_item_message_store::default_outbox_folder, pst_item_email::delete_after_submit, pst_item_message_store::deleted_items_folder, pst_item_email::delivery_report, pst_item_contact::department, pst_item_journal::description, pst_item_contact::display_name_prefix, pst_mapi_object::elements, pst_item::email, pst_item_email::encrypted_body, pst_item_email::encrypted_htmlbody, pst_item_journal::end, pst_item_appointment::end, pst_mapi_element::extra, pst_item::extra_fields, pst_item_extra_field::field_name, pst_item::file_as, pst_item_attach::filename1, pst_item_attach::filename2, pst_item_contact::first_name, pst_item::flags, pst_item::folder, pst_item_contact::followup, pst_item_contact::free_busy_address, pst_item_contact::ftp_site, pst_item_contact::fullname, pst_item_contact::gender, pst_item_contact::gov_id, pst_item_email::header, pst_item_contact::hobbies, pst_item_contact::home_address, pst_item_contact::home_city, pst_item_contact::home_country, pst_item_contact::home_fax, pst_item_contact::home_phone, pst_item_contact::home_phone2, pst_item_contact::home_po_box, pst_item_contact::home_postal_code, pst_item_contact::home_state, pst_item_contact::home_street, pst_item_email::htmlbody, pst_item_attach::id2_val, pst_item_email::importance, pst_item_email::in_reply_to, pst_item_contact::initials, pst_item::internet_cpid, pst_item_appointment::is_recurring, pst_string::is_utf8, pst_item_contact::isdn_phone, pst_item_folder::item_count, pst_item_contact::job_title, pst_item::journal, pst_item_contact::keyword, pst_item_appointment::label, pst_item_contact::language, LIST_COPY_APPT_BIN, LIST_COPY_APPT_BOOL, LIST_COPY_APPT_ENUM, LIST_COPY_APPT_INT32, LIST_COPY_APPT_STR, LIST_COPY_APPT_TIME, LIST_COPY_BIN, LIST_COPY_BOOL, LIST_COPY_CONTACT_BOOL, LIST_COPY_CONTACT_ENUM16, LIST_COPY_CONTACT_STR, LIST_COPY_CONTACT_TIME, LIST_COPY_CSTR, LIST_COPY_EMAIL_BIN, LIST_COPY_EMAIL_BOOL, LIST_COPY_EMAIL_ENTRYID, LIST_COPY_EMAIL_ENUM, LIST_COPY_EMAIL_INT32, LIST_COPY_EMAIL_STR, LIST_COPY_EMAIL_TIME, LIST_COPY_ENUM, LIST_COPY_FOLDER_INT32, LIST_COPY_INT32, LIST_COPY_JOURNAL_STR, LIST_COPY_JOURNAL_TIME, LIST_COPY_STORE_ENTRYID, LIST_COPY_STORE_INT32, LIST_COPY_STR, LIST_COPY_TIME, pst_item_appointment::location, pst_item_contact::location, pst_item_contact::mail_permission, MALLOC_FOLDER, pst_item_contact::manager_name, pst_mapi_element::mapi_id, pst_item_email::message_cc_me, pst_item::message_codepage, pst_item_email::message_recip_me, pst_item::message_size, pst_item::message_store, pst_item_email::message_to_me, pst_item_email::messageid, pst_item_attach::method, pst_item_contact::middle_name, pst_item_contact::mileage, pst_item_attach::mimetype, pst_item_contact::mobile_phone, pst_item::modify_date, pst_item_email::ndr_diag_code, pst_item_email::ndr_reason_code, pst_item_email::ndr_status_code, pst_item_attach::next, pst_mapi_object::next, pst_item_extra_field::next, pst_item_contact::nickname, NULL_CHECK, pst_item_contact::office_loc, pst_item_contact::org_id, pst_item_email::original_bcc, pst_item_email::original_cc, pst_item_email::original_sensitivity, pst_item_email::original_to, pst_item_contact::other_address, pst_item_contact::other_city, pst_item_contact::other_country, pst_item_contact::other_phone, pst_item_contact::other_po_box, pst_item_contact::other_postal_code, pst_item_contact::other_state, pst_item_contact::other_street, pst_item_email::outlook_normalized_subject, pst_item_email::outlook_received_name1, pst_item_email::outlook_recipient, pst_item_email::outlook_recipient2, pst_item_email::outlook_recipient_name, pst_item_email::outlook_search_key, pst_item_email::outlook_sender, pst_item_email::outlook_sender2, pst_item_email::outlook_sender_name, pst_item_email::outlook_sender_name2, pst_item::outlook_version, pst_item_contact::pager_phone, pst_item_contact::personal_homepage, pst_item_attach::position, pst_item::predecessor_change, pst_item_contact::pref_name, pst_item_contact::primary_fax, pst_item_contact::primary_phone, pst_item_email::priority, pst_item::private_member, pst_item_email::processed_subject, pst_item_contact::profession, PST_ATTRIB_HEADER, pst_fileTimeToAscii(), PST_LE_GET_INT32, pst_malloc(), pst_stricmp(), pst_strincmp(), PST_TYPE_APPOINTMENT, PST_TYPE_CONTACT, PST_TYPE_JOURNAL, PST_TYPE_NOTE, PST_TYPE_OTHER, PST_TYPE_REPORT, PST_TYPE_SCHEDULE, PST_TYPE_STICKYNOTE, PST_TYPE_TASK, pst_item_message_store::pwd_chksum, pst_item_contact::radio_phone, pst_item_email::read_receipt, pst_item_email::recip2_access, pst_item_email::recip2_address, pst_item_email::recip_access, pst_item_email::recip_address, pst_item::record_key, pst_item_appointment::recurrence_data, pst_item_appointment::recurrence_description, pst_item_appointment::recurrence_end, pst_item_appointment::recurrence_start, pst_item_appointment::recurrence_type, pst_item_appointment::reminder, pst_item_email::reply_requested, pst_item_email::reply_to, pst_item_email::report_text, pst_item_email::report_time, pst_item::response_requested, pst_item_email::return_path_address, pst_item_contact::rich_text, pst_item_email::rtf_body_char_count, pst_item_email::rtf_body_crc, pst_item_email::rtf_body_tag, pst_item_email::rtf_compressed, pst_item_email::rtf_in_sync, pst_item_email::rtf_ws_prefix_count, pst_item_email::rtf_ws_trailing_count, pst_item_message_store::search_root_folder, pst_item_email::sender2_access, pst_item_email::sender2_address, pst_item_email::sender_access, pst_item_email::sender_address, pst_item_email::sensitivity, pst_item_email::sent_date, pst_item_message_store::sent_items_folder, pst_item_email::sentmail_folder, pst_item_email::sentto_address, pst_item_attach::sequence, pst_item_appointment::showas, pst_binary::size, pst_mapi_element::size, pst_item_contact::spouse_name, pst_item_journal::start, pst_item_appointment::start, pst_string::str, pst_item_folder::subfolder, pst_item::subject, pst_item_contact::suffix, pst_item_email::supplementary_info, pst_item_contact::surname, pst_item_contact::telex, pst_item_appointment::timezonestring, pst_item_message_store::top_of_folder, pst_item_message_store::top_of_personal_folder, pst_item_contact::transmittable_display_name, pst_item_contact::ttytdd_phone, pst_item_journal::type, pst_item::type, pst_mapi_element::type, pst_item_folder::unseen_item_count, pst_item_message_store::user_views_folder, pst_item_message_store::valid_mask, pst_item_extra_field::value, pst_item_contact::wedding_anniversary, pst_item_contact::work_address_city, pst_item_contact::work_address_country, pst_item_contact::work_address_postalcode, pst_item_contact::work_address_postofficebox, pst_item_contact::work_address_state, and pst_item_contact::work_address_street.
Referenced by pst_parse_item().
static size_t pst_read_block_size | ( | pst_file * | pf, | |
int64_t | offset, | |||
size_t | size, | |||
char ** | buf | |||
) | [static] |
Read a block of data from file into memory.
pf | PST file | |
offset | offset in the pst file of the data | |
size | size of the block to be read | |
buf | reference to pointer to buffer. If this pointer is non-NULL, it will first be free()d |
Definition at line 3727 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::fp, pst_getAtPos(), and pst_malloc().
Referenced by pst_build_desc_ptr(), pst_build_id2(), pst_build_id_ptr(), and pst_ff_getIDblock().
int pst_reopen | ( | pst_file * | pf | ) |
Reopen the pst file after a fork.
pf | pointer to the pst_file structure setup by pst_open(). |
Definition at line 379 of file libpst.c.
References pst_file::cwd, pst_file::fname, pst_file::fp, and pst_getcwd().
Referenced by try_fork().
void pst_rfc2047 | ( | pst_item * | item, | |
pst_string * | str, | |||
int | needs_quote | |||
) |
Convert str to rfc2047 encoding of str, possibly enclosed in quotes if it contains spaces.
item | pointer to the containing mapi item | |
str | pointer to the mapi string of interest | |
needs_quote | true if strings containing spaces should be wrapped in quotes |
Definition at line 4413 of file libpst.c.
References pst_base64_encode_single(), pst_convert_utf8(), pst_malloc(), and pst_string::str.
Referenced by write_normal_email().
void pst_rfc2231 | ( | pst_string * | str | ) |
Convert str to rfc2231 encoding of str.
str | pointer to the mapi string of interest |
Definition at line 4375 of file libpst.c.
References pst_malloc(), and pst_string::str.
Referenced by write_inline_attachment().
char* pst_rfc2425_datetime_format | ( | const FILETIME * | ft, | |
int | buflen, | |||
char * | result | |||
) |
Convert a FILETIME into rfc2425 date/time format 1953-10-15T23:10:00Z which is the same as one of the forms in the ISO3601 standard.
[in] | ft | time to be converted |
[in] | buflen | length of the output buffer |
[out] | result | pointer to output buffer, must be at least 30 bytes |
Definition at line 4268 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, and pst_fileTimeToStructTM().
Referenced by write_vcard().
char* pst_rfc2426_escape | ( | char * | str, | |
char ** | result, | |||
size_t * | resultlen | |||
) |
Add any necessary escape characters for rfc2426 vcard format.
[in] | str | pointer to input string |
[in,out] | result | pointer to a char* pointer that may be realloc'ed if needed |
[in,out] | resultlen | size of the result buffer |
Definition at line 4204 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, pst_chr_count(), and pst_realloc().
Referenced by process(), write_appointment(), write_extra_categories(), write_journal(), and write_vcard().
char* pst_rfc2445_datetime_format | ( | const FILETIME * | ft, | |
int | buflen, | |||
char * | result | |||
) |
Convert a FILETIME into rfc2445 date/time format 19531015T231000Z.
[in] | ft | time to be converted |
[in] | buflen | length of the output buffer |
[out] | result | pointer to output buffer, must be at least 30 bytes |
Definition at line 4280 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, and pst_fileTimeToStructTM().
Referenced by process(), write_appointment(), and write_journal().
char* pst_rfc2445_datetime_format_now | ( | int | buflen, | |
char * | result | |||
) |
Convert the current time rfc2445 date/time format 19531015T231000Z.
[in] | buflen | length of the output buffer |
[out] | result | pointer to output buffer, must be at least 30 bytes |
Definition at line 4292 of file libpst.c.
References DEBUG_ENT, DEBUG_INFO, and DEBUG_RET.
Referenced by write_appointment(), and write_journal().
int pst_stricmp | ( | char * | a, | |
char * | b | |||
) |
compare strings case-insensitive.
Definition at line 4142 of file libpst.c.
Referenced by acceptable_ext(), and pst_process().
static int pst_strincmp | ( | char * | a, | |
char * | b, | |||
size_t | x | |||
) | [static] |
Definition at line 4155 of file libpst.c.
Referenced by pst_process().
static char * pst_wide_to_single | ( | char * | wt, | |
size_t | size | |||
) | [static] |
Definition at line 4186 of file libpst.c.
References DEBUG_ENT, DEBUG_RET, and pst_malloc().
Referenced by pst_load_extended_attributes().
static void record_descriptor | ( | pst_file * | pf, | |
pst_desc_tree * | node | |||
) | [static] |
add a pst descriptor node into the global tree.
pf | global pst file pointer | |
node | pointer to the new node to be added to the tree |
Definition at line 447 of file libpst.c.
References add_descriptor_to_list(), pst_desc_tree::child, pst_desc_tree::child_tail, pst_file::d_head, pst_desc_tree::d_id, pst_file::d_tail, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_desc_tree::next, pst_desc_tree::no_child, pst_desc_tree::parent, pst_desc_tree::parent_d_id, pst_desc_tree::prev, and pst_getDptr().
Referenced by pst_build_desc_ptr(), and pst_getTopOfFolders().
unsigned char comp_enc[] [static] |
{ 0x47, 0xf1, 0xb4, 0xe6, 0x0b, 0x6a, 0x72, 0x48, 0x85, 0x4e, 0x9e, 0xeb, 0xe2, 0xf8, 0x94, 0x53, 0xe0, 0xbb, 0xa0, 0x02, 0xe8, 0x5a, 0x09, 0xab, 0xdb, 0xe3, 0xba, 0xc6, 0x7c, 0xc3, 0x10, 0xdd, 0x39, 0x05, 0x96, 0x30, 0xf5, 0x37, 0x60, 0x82, 0x8c, 0xc9, 0x13, 0x4a, 0x6b, 0x1d, 0xf3, 0xfb, 0x8f, 0x26, 0x97, 0xca, 0x91, 0x17, 0x01, 0xc4, 0x32, 0x2d, 0x6e, 0x31, 0x95, 0xff, 0xd9, 0x23, 0xd1, 0x00, 0x5e, 0x79, 0xdc, 0x44, 0x3b, 0x1a, 0x28, 0xc5, 0x61, 0x57, 0x20, 0x90, 0x3d, 0x83, 0xb9, 0x43, 0xbe, 0x67, 0xd2, 0x46, 0x42, 0x76, 0xc0, 0x6d, 0x5b, 0x7e, 0xb2, 0x0f, 0x16, 0x29, 0x3c, 0xa9, 0x03, 0x54, 0x0d, 0xda, 0x5d, 0xdf, 0xf6, 0xb7, 0xc7, 0x62, 0xcd, 0x8d, 0x06, 0xd3, 0x69, 0x5c, 0x86, 0xd6, 0x14, 0xf7, 0xa5, 0x66, 0x75, 0xac, 0xb1, 0xe9, 0x45, 0x21, 0x70, 0x0c, 0x87, 0x9f, 0x74, 0xa4, 0x22, 0x4c, 0x6f, 0xbf, 0x1f, 0x56, 0xaa, 0x2e, 0xb3, 0x78, 0x33, 0x50, 0xb0, 0xa3, 0x92, 0xbc, 0xcf, 0x19, 0x1c, 0xa7, 0x63, 0xcb, 0x1e, 0x4d, 0x3e, 0x4b, 0x1b, 0x9b, 0x4f, 0xe7, 0xf0, 0xee, 0xad, 0x3a, 0xb5, 0x59, 0x04, 0xea, 0x40, 0x55, 0x25, 0x51, 0xe5, 0x7a, 0x89, 0x38, 0x68, 0x52, 0x7b, 0xfc, 0x27, 0xae, 0xd7, 0xbd, 0xfa, 0x07, 0xf4, 0xcc, 0x8e, 0x5f, 0xef, 0x35, 0x9c, 0x84, 0x2b, 0x15, 0xd5, 0x77, 0x34, 0x49, 0xb6, 0x12, 0x0a, 0x7f, 0x71, 0x88, 0xfd, 0x9d, 0x18, 0x41, 0x7d, 0x93, 0xd8, 0x58, 0x2c, 0xce, 0xfe, 0x24, 0xaf, 0xde, 0xb8, 0x36, 0xc8, 0xa1, 0x80, 0xa6, 0x99, 0x98, 0xa8, 0x2f, 0x0e, 0x81, 0x65, 0x73, 0xe4, 0xc2, 0xa2, 0x8a, 0xd4, 0xe1, 0x11, 0xd0, 0x08, 0x8b, 0x2a, 0xf2, 0xed, 0x9a, 0x64, 0x3f, 0xc1, 0x6c, 0xf9, 0xec }
for "compressible" encryption, just a simple substitution cipher, plaintext = comp_enc[ciphertext]; for "strong" encryption, this is the first rotor of an Enigma 3 rotor cipher.
unsigned char comp_high1[] [static] |
{ 0x41, 0x36, 0x13, 0x62, 0xa8, 0x21, 0x6e, 0xbb, 0xf4, 0x16, 0xcc, 0x04, 0x7f, 0x64, 0xe8, 0x5d, 0x1e, 0xf2, 0xcb, 0x2a, 0x74, 0xc5, 0x5e, 0x35, 0xd2, 0x95, 0x47, 0x9e, 0x96, 0x2d, 0x9a, 0x88, 0x4c, 0x7d, 0x84, 0x3f, 0xdb, 0xac, 0x31, 0xb6, 0x48, 0x5f, 0xf6, 0xc4, 0xd8, 0x39, 0x8b, 0xe7, 0x23, 0x3b, 0x38, 0x8e, 0xc8, 0xc1, 0xdf, 0x25, 0xb1, 0x20, 0xa5, 0x46, 0x60, 0x4e, 0x9c, 0xfb, 0xaa, 0xd3, 0x56, 0x51, 0x45, 0x7c, 0x55, 0x00, 0x07, 0xc9, 0x2b, 0x9d, 0x85, 0x9b, 0x09, 0xa0, 0x8f, 0xad, 0xb3, 0x0f, 0x63, 0xab, 0x89, 0x4b, 0xd7, 0xa7, 0x15, 0x5a, 0x71, 0x66, 0x42, 0xbf, 0x26, 0x4a, 0x6b, 0x98, 0xfa, 0xea, 0x77, 0x53, 0xb2, 0x70, 0x05, 0x2c, 0xfd, 0x59, 0x3a, 0x86, 0x7e, 0xce, 0x06, 0xeb, 0x82, 0x78, 0x57, 0xc7, 0x8d, 0x43, 0xaf, 0xb4, 0x1c, 0xd4, 0x5b, 0xcd, 0xe2, 0xe9, 0x27, 0x4f, 0xc3, 0x08, 0x72, 0x80, 0xcf, 0xb0, 0xef, 0xf5, 0x28, 0x6d, 0xbe, 0x30, 0x4d, 0x34, 0x92, 0xd5, 0x0e, 0x3c, 0x22, 0x32, 0xe5, 0xe4, 0xf9, 0x9f, 0xc2, 0xd1, 0x0a, 0x81, 0x12, 0xe1, 0xee, 0x91, 0x83, 0x76, 0xe3, 0x97, 0xe6, 0x61, 0x8a, 0x17, 0x79, 0xa4, 0xb7, 0xdc, 0x90, 0x7a, 0x5c, 0x8c, 0x02, 0xa6, 0xca, 0x69, 0xde, 0x50, 0x1a, 0x11, 0x93, 0xb9, 0x52, 0x87, 0x58, 0xfc, 0xed, 0x1d, 0x37, 0x49, 0x1b, 0x6a, 0xe0, 0x29, 0x33, 0x99, 0xbd, 0x6c, 0xd9, 0x94, 0xf3, 0x40, 0x54, 0x6f, 0xf0, 0xc6, 0x73, 0xb8, 0xd6, 0x3e, 0x65, 0x18, 0x44, 0x1f, 0xdd, 0x67, 0x10, 0xf1, 0x0c, 0x19, 0xec, 0xae, 0x03, 0xa1, 0x14, 0x7b, 0xa9, 0x0b, 0xff, 0xf8, 0xa3, 0xc0, 0xa2, 0x01, 0xf7, 0x2e, 0xbc, 0x24, 0x68, 0x75, 0x0d, 0xfe, 0xba, 0x2f, 0xb5, 0xd0, 0xda, 0x3d }
for "strong" encryption, this is the second rotor of an Enigma 3 rotor cipher.
Definition at line 218 of file libpst.c.
Referenced by pst_decrypt().
unsigned char comp_high2[] [static] |
{ 0x14, 0x53, 0x0f, 0x56, 0xb3, 0xc8, 0x7a, 0x9c, 0xeb, 0x65, 0x48, 0x17, 0x16, 0x15, 0x9f, 0x02, 0xcc, 0x54, 0x7c, 0x83, 0x00, 0x0d, 0x0c, 0x0b, 0xa2, 0x62, 0xa8, 0x76, 0xdb, 0xd9, 0xed, 0xc7, 0xc5, 0xa4, 0xdc, 0xac, 0x85, 0x74, 0xd6, 0xd0, 0xa7, 0x9b, 0xae, 0x9a, 0x96, 0x71, 0x66, 0xc3, 0x63, 0x99, 0xb8, 0xdd, 0x73, 0x92, 0x8e, 0x84, 0x7d, 0xa5, 0x5e, 0xd1, 0x5d, 0x93, 0xb1, 0x57, 0x51, 0x50, 0x80, 0x89, 0x52, 0x94, 0x4f, 0x4e, 0x0a, 0x6b, 0xbc, 0x8d, 0x7f, 0x6e, 0x47, 0x46, 0x41, 0x40, 0x44, 0x01, 0x11, 0xcb, 0x03, 0x3f, 0xf7, 0xf4, 0xe1, 0xa9, 0x8f, 0x3c, 0x3a, 0xf9, 0xfb, 0xf0, 0x19, 0x30, 0x82, 0x09, 0x2e, 0xc9, 0x9d, 0xa0, 0x86, 0x49, 0xee, 0x6f, 0x4d, 0x6d, 0xc4, 0x2d, 0x81, 0x34, 0x25, 0x87, 0x1b, 0x88, 0xaa, 0xfc, 0x06, 0xa1, 0x12, 0x38, 0xfd, 0x4c, 0x42, 0x72, 0x64, 0x13, 0x37, 0x24, 0x6a, 0x75, 0x77, 0x43, 0xff, 0xe6, 0xb4, 0x4b, 0x36, 0x5c, 0xe4, 0xd8, 0x35, 0x3d, 0x45, 0xb9, 0x2c, 0xec, 0xb7, 0x31, 0x2b, 0x29, 0x07, 0x68, 0xa3, 0x0e, 0x69, 0x7b, 0x18, 0x9e, 0x21, 0x39, 0xbe, 0x28, 0x1a, 0x5b, 0x78, 0xf5, 0x23, 0xca, 0x2a, 0xb0, 0xaf, 0x3e, 0xfe, 0x04, 0x8c, 0xe7, 0xe5, 0x98, 0x32, 0x95, 0xd3, 0xf6, 0x4a, 0xe8, 0xa6, 0xea, 0xe9, 0xf3, 0xd5, 0x2f, 0x70, 0x20, 0xf2, 0x1f, 0x05, 0x67, 0xad, 0x55, 0x10, 0xce, 0xcd, 0xe3, 0x27, 0x3b, 0xda, 0xba, 0xd7, 0xc2, 0x26, 0xd4, 0x91, 0x1d, 0xd2, 0x1c, 0x22, 0x33, 0xf8, 0xfa, 0xf1, 0x5a, 0xef, 0xcf, 0x90, 0xb6, 0x8b, 0xb5, 0xbd, 0xc0, 0xbf, 0x08, 0x97, 0x1e, 0x6c, 0xe2, 0x61, 0xe0, 0xc6, 0xc1, 0x59, 0xab, 0xbb, 0x58, 0xde, 0x5f, 0xdf, 0x60, 0x79, 0x7e, 0xb2, 0x8a }
for "strong" encryption, this is the third rotor of an Enigma 3 rotor cipher.
Definition at line 239 of file libpst.c.
Referenced by pst_decrypt().