Main Page | Namespace List | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

libpst.c File Reference

#include "define.h"

Include dependency graph for libpst.c:

Include dependency graph

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 NULL_CHECK(x)   { if (!x) { DEBUG_EMAIL(("NULL_CHECK: Null Found\n")); break;} }

Typedefs

typedef pst_block_offset pst_block_offset
typedef pst_block_offset_pointer pst_block_offset_pointer
typedef pst_holder pst_holder
typedef pst_subblock pst_subblock
typedef pst_subblocks pst_subblocks
typedef pst_mapi_element pst_mapi_element
typedef pst_mapi_object pst_mapi_object
typedef pst_desc32 pst_desc32
typedef pst_index32 pst_index32
typedef pst_desc pst_desc
typedef pst_index pst_index
typedef pst_block_header pst_block_header
typedef pst_id2_assoc32 pst_id2_assoc32
typedef pst_id2_assoc pst_id2_assoc
typedef pst_table3_rec32 pst_table3_rec32
typedef pst_table3_rec pst_table3_rec
typedef pst_block_hdr pst_block_hdr
typedef pst_x_attrib pst_x_attrib

Functions

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.
pst_id2_treepst_build_id2 (pst_file *pf, pst_index_ll *list)
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.
int pst_chr_count (char *str, char x)
size_t pst_ff_compile_ID (pst_file *pf, uint64_t i_id, pst_holder *h, size_t size)
size_t pst_ff_getID2block (pst_file *pf, uint64_t id2, pst_id2_tree *id2_head, char **buf)
size_t pst_ff_getID2data (pst_file *pf, pst_index_ll *ptr, pst_holder *h)
void pst_free_attach (pst_item_attach *attach)
void pst_free_desc (pst_desc_tree *head)
void pst_free_id2 (pst_id2_tree *head)
void pst_free_id (pst_index_ll *head)
void pst_free_list (pst_mapi_object *list)
void pst_free_xattrib (pst_x_attrib_ll *x)
size_t pst_getAtPos (pst_file *pf, int64_t pos, void *buf, size_t size)
 Read part of the pst file.
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.
int pst_getBlockOffset (char *buf, size_t read_size, uint32_t i_offset, uint32_t offset, pst_block_offset *p)
pst_id2_treepst_getID2 (pst_id2_tree *ptr, uint64_t id)
pst_desc_treepst_getDptr (pst_file *pf, uint64_t d_id)
 find the id in the descriptor tree rooted at pf->d_head
uint64_t pst_getIntAt (pst_file *pf, char *buf)
uint64_t pst_getIntAtPos (pst_file *pf, int64_t pos)
pst_mapi_objectpst_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.
void pst_printDptr (pst_file *pf, pst_desc_tree *ptr)
void pst_printIDptr (pst_file *pf)
void pst_printID2ptr (pst_id2_tree *ptr)
int pst_process (pst_mapi_object *list, pst_item *item, pst_item_attach *attach)
 process the list of MAPI objects produced from parse_block()
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.
int pst_stricmp (char *a, char *b)
int pst_strincmp (char *a, char *b, size_t x)
char * pst_wide_to_single (char *wt, size_t size)
int pst_open (pst_file *pf, char *name)
 Open a pst file.
int pst_close (pst_file *pf)
 Close a pst file.
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.
void record_descriptor (pst_file *pf, pst_desc_tree *node)
 add a pst descriptor node into the global tree.
pst_id2_treedeep_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_treepst_getTopOfFolders (pst_file *pf, pst_item *root)
 Get the top of folders descriptor tree.
size_t pst_attach_to_mem (pst_file *pf, pst_item_attach *attach, char **b)
 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_treepst_getNextDptr (pst_desc_tree *d)
 Walk the descriptor tree.
int pst_load_extended_attributes (pst_file *pf)
 Load the extended attribute mapping table from the pst file.
size_t pst_decode_desc (pst_file *pf, pst_desc *desc, char *buf)
size_t pst_decode_table (pst_file *pf, struct pst_table_ptr_struct *table, char *buf)
size_t pst_decode_index (pst_file *pf, pst_index *index, char *buf)
size_t pst_decode_assoc (pst_file *pf, pst_id2_assoc *assoc, char *buf)
size_t pst_decode_type3 (pst_file *pf, pst_table3_rec *table3_rec, char *buf)
pst_itempst_parse_item (pst_file *pf, pst_desc_tree *d_ptr, pst_id2_tree *m_head)
 Assemble a mapi object from a descriptor pointer.
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().
pst_index_llpst_getID (pst_file *pf, uint64_t i_id)
 Lookup the i_id in the index linked list, and return a pointer to the element.
int pst_decrypt (uint64_t i_id, char *buf, size_t size, unsigned char type)
 Decrypt a block of data from the pst file.
size_t pst_ff_getIDblock_dec (pst_file *pf, uint64_t i_id, char **buf)
 Get an ID block from the file using pst_ff_getIDblock() and decrypt if necessary.
size_t pst_ff_getIDblock (pst_file *pf, uint64_t i_id, char **buf)
 Read a block of data from the file into memory.
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)
 Add any necessary escape characters for rfc2426 vcard format.
char * pst_rfc2425_datetime_format (FILETIME *ft)
 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 (FILETIME *ft)
 Convert a FILETIME into rfc2445 date/time format 19531015T231000Z.
const char * codepage (int cp)
 Convert a code page integer into a string suitable for iconv().
const char * pst_default_charset (pst_item *item)
 Get the default character set for this item.
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.

Variables

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.
unsigned char comp_high1 []
 for "strong" encryption, this is the second rotor of an Enigma 3 rotor cipher.
unsigned char comp_high2 []
 for "strong" encryption, this is the third rotor of an Enigma 3 rotor cipher.


Define Documentation

#define ASSERT  )     { if(!(x)) raise( SIGSEGV ); }
 

Definition at line 20 of file libpst.c.

Referenced by pst_vb_utf16to8(), and pst_vbgrow().

#define BACKLINK_OFFSET   (size_t)((pf->do_read64) ? BACKLINK_OFFSET64 : BACKLINK_OFFSET32)
 

Definition at line 790 of file libpst.c.

Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().

#define BACKLINK_OFFSET32   0x1f8
 

Definition at line 772 of file libpst.c.

#define BACKLINK_OFFSET64   0x1f8
 

Definition at line 780 of file libpst.c.

#define BLOCK_SIZE   512
 

Definition at line 786 of file libpst.c.

Referenced by pst_build_id_ptr().

#define DESC_BLOCK_SIZE   512
 

Definition at line 787 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 794 of file libpst.c.

Referenced by pst_build_desc_ptr().

#define DESC_COUNT_MAX32   31
 

Definition at line 776 of file libpst.c.

#define DESC_COUNT_MAX64   15
 

Definition at line 784 of file libpst.c.

#define DESC_SIZE   (size_t)((pf->do_read64) ? DESC_SIZE64 : DESC_SIZE32)
 

Definition at line 792 of file libpst.c.

#define DESC_SIZE32   16
 

Definition at line 774 of file libpst.c.

Referenced by pst_build_desc_ptr().

#define DESC_SIZE64   32
 

Definition at line 782 of file libpst.c.

#define ENC_TYPE   ((pf->do_read64) ? ENC_TYPE64 : ENC_TYPE32)
 

Definition at line 47 of file libpst.c.

Referenced by pst_open().

#define ENC_TYPE32   (int64_t)0x1CD
 

Definition at line 33 of file libpst.c.

#define ENC_TYPE64   (int64_t)0x201
 

Definition at line 40 of file libpst.c.

#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 FILE_SIZE_POINTER32   (int64_t)0xA8
 

Definition at line 28 of file libpst.c.

#define FILE_SIZE_POINTER64   (int64_t)0xB8
 

Definition at line 35 of file libpst.c.

#define INDEX_BACK   ((pf->do_read64) ? INDEX_BACK64 : INDEX_BACK32)
 

Definition at line 44 of file libpst.c.

Referenced by pst_open().

#define INDEX_BACK32   (int64_t)0xC0
 

Definition at line 30 of file libpst.c.

#define INDEX_BACK64   (int64_t)0xE8
 

Definition at line 37 of file libpst.c.

#define INDEX_COUNT_MAX   (int32_t)((pf->do_read64) ? INDEX_COUNT_MAX64 : INDEX_COUNT_MAX32)
 

Definition at line 793 of file libpst.c.

Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().

#define INDEX_COUNT_MAX32   41
 

Definition at line 775 of file libpst.c.

#define INDEX_COUNT_MAX64   20
 

Definition at line 783 of file libpst.c.

#define INDEX_POINTER   ((pf->do_read64) ? INDEX_POINTER64 : INDEX_POINTER32)
 

Definition at line 43 of file libpst.c.

Referenced by pst_open().

#define INDEX_POINTER32   (int64_t)0xC4
 

Definition at line 29 of file libpst.c.

#define INDEX_POINTER64   (int64_t)0xF0
 

Definition at line 36 of file libpst.c.

#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 788 of file libpst.c.

#define ITEM_COUNT_OFFSET32   0x1f0
 

Definition at line 770 of file libpst.c.

#define ITEM_COUNT_OFFSET64   0x1e8
 

Definition at line 778 of file libpst.c.

#define ITEM_SIZE   (size_t)((pf->do_read64) ? ITEM_SIZE64 : ITEM_SIZE32)
 

Definition at line 791 of file libpst.c.

#define ITEM_SIZE32   12
 

Definition at line 773 of file libpst.c.

Referenced by pst_build_desc_ptr(), and pst_build_id_ptr().

#define ITEM_SIZE64   24
 

Definition at line 781 of file libpst.c.

#define LEVEL_INDICATOR_OFFSET   (size_t)((pf->do_read64) ? LEVEL_INDICATOR_OFFSET64 : LEVEL_INDICATOR_OFFSET32)
 

Definition at line 789 of file libpst.c.

#define LEVEL_INDICATOR_OFFSET32   0x1f3
 

Definition at line 771 of file libpst.c.

#define LEVEL_INDICATOR_OFFSET64   0x1eb
 

Definition at line 779 of file libpst.c.

#define LIST_COPY targ,
type   ) 
 

Value:

{                                    \
    targ = type 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);   \
}

Definition at line 1833 of file libpst.c.

#define LIST_COPY_APPT_BOOL label,
targ   ) 
 

Value:

{                      \
    MALLOC_APPOINTMENT(item);                                   \
    LIST_COPY_BOOL(label, targ)                                 \
}

Definition at line 1877 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_APPT_ENUM label,
targ,
delta,
count   ) 
 

Value:

{   \
    MALLOC_APPOINTMENT(item);                                   \
    LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__);     \
}

Definition at line 1945 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_APPT_INT32 label,
targ   ) 
 

Value:

{                     \
    MALLOC_APPOINTMENT(item);                                   \
    LIST_COPY_INT32(label, targ);                               \
}

Definition at line 1915 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_APPT_STR label,
targ   ) 
 

Value:

{                       \
    MALLOC_APPOINTMENT(item);                                   \
    LIST_COPY_STR(label, targ);                                 \
}

Definition at line 2001 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_APPT_TIME label,
targ   ) 
 

Value:

{                      \
    MALLOC_APPOINTMENT(item);                                   \
    LIST_COPY_TIME(label, targ);                                \
}

Definition at line 2034 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_BIN targ   ) 
 

Value:

{                                       \
    targ.size = list->elements[x]->size;                            \
    if (targ.size) {                                                \
        targ.data = (char*)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 2045 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_BOOL label,
targ   ) 
 

Value:

{                                       \
    if (list->elements[x]->type != 0x0b) {                                  \
        DEBUG_EMAIL(("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_EMAIL((label" - True\n"));                                    \
        targ = 1;                                                           \
    } else {                                                                \
        DEBUG_EMAIL((label" - False\n"));                                   \
        targ = 0;                                                           \
    }                                                                       \
}

Definition at line 1853 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_CONTACT_BOOL label,
targ   ) 
 

Value:

{                   \
    MALLOC_CONTACT(item);                                       \
    LIST_COPY_BOOL(label, targ)                                 \
}

Definition at line 1872 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_CONTACT_ENUM16 label,
targ,
delta,
count   ) 
 

Value:

{  \
    MALLOC_CONTACT(item);                                           \
    LIST_COPY_ENUM16(label, targ, delta, count, __VA_ARGS__);       \
}

Definition at line 1960 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_CONTACT_STR label,
targ   ) 
 

Value:

{                    \
    MALLOC_CONTACT(item);                                       \
    LIST_COPY_STR(label, targ);                                 \
}

Definition at line 1996 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_CONTACT_TIME label,
targ   ) 
 

Value:

{                   \
    MALLOC_CONTACT(item);                                       \
    LIST_COPY_TIME(label, targ);                                \
}

Definition at line 2029 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_CSTR targ   ) 
 

Value:

{                                              \
    if ((list->elements[x]->type == 0x1f) ||                                \
        (list->elements[x]->type == 0x1e) ||                                \
        (list->elements[x]->type == 0x102)) {                               \
        LIST_COPY(targ, (char*))                                            \
    }                                                                       \
    else {                                                                  \
        DEBUG_EMAIL(("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 1839 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_BIN label,
targ   ) 
 

Value:

{          \
    MALLOC_EMAIL(item);                             \
    LIST_COPY_BIN(targ);                            \
    DEBUG_EMAIL((label"\n"));                       \
}

Definition at line 2057 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_BOOL label,
targ   ) 
 

Value:

{                     \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_BOOL(label, targ)                                 \
}

Definition at line 1867 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_ENTRYID label,
targ   ) 
 

Value:

{                  \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_ENTRYID(label, targ);                             \
}

Definition at line 1972 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_ENUM label,
targ,
delta,
count   ) 
 

Value:

{  \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__);     \
}

Definition at line 1940 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_INT32 label,
targ   ) 
 

Value:

{                    \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_INT32(label, targ);                               \
}

Definition at line 1910 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_STR label,
targ   ) 
 

Value:

{                      \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_STR(label, targ);                                 \
}

Definition at line 1991 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_EMAIL_TIME label,
targ   ) 
 

Value:

{                     \
    MALLOC_EMAIL(item);                                         \
    LIST_COPY_TIME(label, targ);                                \
}

Definition at line 2024 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_ENTRYID label,
targ   ) 
 

Value:

{                        \
    LIST_COPY(targ, (pst_entryid*));                            \
    LE32_CPU(targ->u1);                                         \
    LE32_CPU(targ->id);                                         \
    DEBUG_EMAIL((label" u1=%#x, id=%#x\n", targ->u1, targ->id));\
}

Definition at line 1965 of file libpst.c.

#define LIST_COPY_ENUM label,
targ,
delta,
count   ) 
 

Value:

{        \
    char *tlabels[] = {__VA_ARGS__};                            \
    LIST_COPY_INT32_N(targ);                                    \
    targ += delta;                                              \
    DEBUG_EMAIL((label" - %s [%i]\n",                           \
        (((int)targ < 0) || ((int)targ >= count))               \
            ? "**invalid"                                       \
            : tlabels[(int)targ], (int)targ));                  \
}

Definition at line 1930 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_ENUM16 label,
targ,
delta,
count   ) 
 

Value:

{      \
    char *tlabels[] = {__VA_ARGS__};                            \
    LIST_COPY_INT16_N(targ);                                    \
    targ += delta;                                              \
    DEBUG_EMAIL((label" - %s [%i]\n",                           \
        (((int)targ < 0) || ((int)targ >= count))               \
            ? "**invalid"                                       \
            : tlabels[(int)targ], (int)targ));                  \
}

Definition at line 1950 of file libpst.c.

#define LIST_COPY_FOLDER_INT32 label,
targ   ) 
 

Value:

{                   \
    MALLOC_FOLDER(item);                                        \
    LIST_COPY_INT32(label, targ);                               \
}

Definition at line 1920 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_INT16 label,
targ   ) 
 

Value:

{                          \
    LIST_COPY_INT16_N(targ);                                    \
    DEBUG_EMAIL((label" - %i %#x\n", (int)targ, (int)targ));    \
}

Definition at line 1891 of file libpst.c.

#define LIST_COPY_INT16_N targ   ) 
 

Value:

{                                           \
    if (list->elements[x]->type != 0x02) {                                  \
        DEBUG_EMAIL(("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);                                                         \
}

Definition at line 1882 of file libpst.c.

#define LIST_COPY_INT32 label,
targ   ) 
 

Value:

{                          \
    LIST_COPY_INT32_N(targ);                                    \
    DEBUG_EMAIL((label" - %i %#x\n", (int)targ, (int)targ));    \
}

Definition at line 1905 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_INT32_N targ   ) 
 

Value:

{                                           \
    if (list->elements[x]->type != 0x03) {                                  \
        DEBUG_EMAIL(("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);                                                         \
}

Definition at line 1896 of file libpst.c.

#define LIST_COPY_JOURNAL_STR label,
targ   ) 
 

Value:

{                    \
    MALLOC_JOURNAL(item);                                       \
    LIST_COPY_STR(label, targ);                                 \
}

Definition at line 2006 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_JOURNAL_TIME label,
targ   ) 
 

Value:

{                   \
    MALLOC_JOURNAL(item);                                       \
    LIST_COPY_TIME(label, targ);                                \
}

Definition at line 2039 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_STORE_ENTRYID label,
targ   ) 
 

Value:

{                  \
    MALLOC_MESSAGESTORE(item);                                  \
    LIST_COPY_ENTRYID(label, targ);                             \
}

Definition at line 1977 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_STORE_INT32 label,
targ   ) 
 

Value:

{                    \
    MALLOC_MESSAGESTORE(item);                                  \
    LIST_COPY_INT32(label, targ);                               \
}

Definition at line 1925 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_STR label,
targ   ) 
 

Value:

{                                    \
    LIST_COPY_CSTR(targ.str);                                           \
    targ.is_utf8 = (list->elements[x]->type == 0x1f) ? 1 : 0;           \
    DEBUG_EMAIL((label" - unicode %d - %s\n", targ.is_utf8, targ.str)); \
}

Definition at line 1985 of file libpst.c.

Referenced by pst_process().

#define LIST_COPY_TIME label,
targ   ) 
 

Value:

{                                       \
    if (list->elements[x]->type != 0x40) {                                  \
        DEBUG_EMAIL(("src not 0x40 for filetime dst\n"));                   \
        DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size);    \
    }                                                                       \
    targ = (FILETIME*) realloc(targ, sizeof(FILETIME));                     \
    memcpy(targ, list->elements[x]->data, list->elements[x]->size);         \
    LE32_CPU(targ->dwLowDateTime);                                          \
    LE32_CPU(targ->dwHighDateTime);                                         \
    DEBUG_EMAIL((label" - %s", pst_fileTimeToAscii(targ)));                     \
}

Definition at line 2012 of file libpst.c.

Referenced by pst_process().

#define MALLOC_APPOINTMENT  )     { if (!x->appointment) { x->appointment = (pst_item_appointment*) pst_malloc(sizeof(pst_item_appointment)); memset(x->appointment, 0, sizeof(pst_item_appointment) );} }
 

Definition at line 1830 of file libpst.c.

#define MALLOC_CONTACT  )     { if (!x->contact) { x->contact = (pst_item_contact*) pst_malloc(sizeof(pst_item_contact)); memset(x->contact, 0, sizeof(pst_item_contact) );} }
 

Definition at line 1827 of file libpst.c.

#define MALLOC_EMAIL  )     { if (!x->email) { x->email = (pst_item_email*) pst_malloc(sizeof(pst_item_email)); memset(x->email, 0, sizeof(pst_item_email) );} }
 

Definition at line 1825 of file libpst.c.

#define MALLOC_FOLDER  )     { 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 1826 of file libpst.c.

Referenced by pst_process().

#define MALLOC_JOURNAL  )     { if (!x->journal) { x->journal = (pst_item_journal*) pst_malloc(sizeof(pst_item_journal)); memset(x->journal, 0, sizeof(pst_item_journal) );} }
 

Definition at line 1829 of file libpst.c.

#define MALLOC_MESSAGESTORE  )     { 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));} }
 

Definition at line 1828 of file libpst.c.

#define NULL_CHECK  )     { if (!x) { DEBUG_EMAIL(("NULL_CHECK: Null Found\n")); break;} }
 

Definition at line 2063 of file libpst.c.

Referenced by pst_process().

#define PST_SIGNATURE   0x4E444221
 

Definition at line 49 of file libpst.c.

#define SAFE_FREE  )     {if (x) free(x);}
 

Definition at line 1820 of file libpst.c.

Referenced by pst_freeItem().

#define SAFE_FREE_BIN  )     SAFE_FREE(x.data)
 

Definition at line 1822 of file libpst.c.

Referenced by pst_free_attach(), and pst_freeItem().

#define SAFE_FREE_STR  )     SAFE_FREE(x.str)
 

Definition at line 1821 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_BACK32   (int64_t)0xB8
 

Definition at line 32 of file libpst.c.

#define SECOND_BACK64   (int64_t)0xD8
 

Definition at line 39 of file libpst.c.

#define SECOND_POINTER   ((pf->do_read64) ? SECOND_POINTER64 : SECOND_POINTER32)
 

Definition at line 45 of file libpst.c.

Referenced by pst_open().

#define SECOND_POINTER32   (int64_t)0xBC
 

Definition at line 31 of file libpst.c.

#define SECOND_POINTER64   (int64_t)0xE0
 

Definition at line 38 of file libpst.c.


Typedef Documentation

typedef struct pst_block_hdr pst_block_hdr
 

typedef struct pst_block_header pst_block_header
 

typedef struct pst_block_offset pst_block_offset
 

typedef struct pst_block_offset_pointer pst_block_offset_pointer
 

typedef struct pst_desc pst_desc
 

Referenced by pst_decode_desc().

typedef struct pst_desc32 pst_desc32
 

Referenced by pst_decode_desc().

typedef struct pst_holder pst_holder
 

typedef struct pst_id2_assoc pst_id2_assoc
 

Referenced by pst_decode_assoc().

typedef struct pst_id2_assoc32 pst_id2_assoc32
 

Referenced by pst_decode_assoc().

typedef struct pst_index pst_index
 

Referenced by pst_decode_index().

typedef struct pst_index32 pst_index32
 

Referenced by pst_decode_index().

typedef struct pst_mapi_element pst_mapi_element
 

Referenced by pst_parse_block().

typedef struct pst_mapi_object pst_mapi_object
 

Referenced by pst_parse_block().

typedef struct pst_subblock pst_subblock
 

typedef struct pst_subblocks pst_subblocks
 

typedef struct pst_table3_rec pst_table3_rec
 

Referenced by pst_decode_type3().

typedef struct pst_table3_rec32 pst_table3_rec32
 

Referenced by pst_decode_type3().

typedef struct pst_x_attrib pst_x_attrib
 


Function Documentation

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.

Parameters:
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 389 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, pst_mapi_object::next, and pst_desc_tree::prev.

Referenced by record_descriptor().

const char * codepage int  cp  )  [static]
 

Convert a code page integer into a string suitable for iconv().

Parameters:
cp the code page integer used in the pst file
Returns:
pointer to a static buffer holding the string representation of the equivalent iconv character set

Definition at line 4195 of file libpst.c.

Referenced by pst_default_charset().

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.

Parameters:
head pointer to the subtree to be copied
Returns:
pointer to the new copy of the subtree

Definition at line 478 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().

Here is the call graph for this function:

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 1338 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().

size_t pst_attach_to_file pst_file pf,
pst_item_attach attach,
FILE *  fp
 

Write a binary attachment to a file.

Parameters:
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 544 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_fwrite(), pst_getID(), and pst_binary::size.

Referenced by write_separate_attachment().

Here is the call graph for this function:

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.

Parameters:
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 567 of file libpst.c.

References pst_item_attach::data, pst_binary::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().

Here is the call graph for this function:

size_t pst_attach_to_mem pst_file pf,
pst_item_attach attach,
char **  b
 

Assemble the binary attachment into a single buffer.

Parameters:
pf pointer to the pst_file structure setup by pst_open().
attach pointer to the attachment record
b pointer to location to store the buffer pointer. The caller must free this buffer.
Returns:
size of the buffer, and return the buffer pointer in *b

Definition at line 522 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.

Here is the call graph for this function:

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 1065 of file libpst.c.

References pst_desc_tree::assoc_tree, BACKLINK_OFFSET, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, DEBUG_RET, DEBUG_WARN, pst_desc_tree::desc, DESC_BLOCK_SIZE, DESC_COUNT_MAX, DESC_SIZE32, INDEX_COUNT_MAX, ITEM_SIZE32, 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().

Here is the call graph for this function:

pst_id2_tree * pst_build_id2 pst_file pf,
pst_index_ll list
[static]
 

Definition at line 3187 of file libpst.c.

References pst_id2_tree::child, pst_id2_assoc::child_id, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, 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_index_ll::u1, and WARN.

Referenced by pst_load_extended_attributes(), and pst_parse_item().

Here is the call graph for this function:

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 948 of file libpst.c.

References BACKLINK_OFFSET, BLOCK_SIZE, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, DEBUG_RET, DEBUG_WARN, pst_file::i_head, pst_file::i_tail, pst_index::id, INDEX_COUNT_MAX, ITEM_SIZE32, pst_index_ll::next, pst_table_ptr_struct::offset, pst_index::offset, pst_decode_index(), pst_decode_table(), pst_getIntAt(), pst_malloc(), pst_read_block_size(), pst_index::size, pst_table_ptr_struct::start, pst_table_ptr_struct::u1, and pst_index::u1.

Referenced by pst_load_index().

Here is the call graph for this function:

int pst_chr_count char *  str,
char  x
[static]
 

Definition at line 4152 of file libpst.c.

Referenced by pst_rfc2426_escape().

int pst_close pst_file pf  ) 
 

Close a pst file.

Parameters:
pf pointer to the pst_file structure setup by pst_open().

Definition at line 360 of file libpst.c.

References pst_file::d_head, DEBUG_ENT, DEBUG_RET, pst_file::fp, pst_file::i_head, pst_free_desc(), pst_free_id(), pst_free_xattrib(), WARN, and pst_file::x_head.

Referenced by main().

Here is the call graph for this function:

void pst_convert_utf8 pst_item item,
pst_string str
 

Convert str to utf8 if possible; null strings are converted into empty strings.

Parameters:
item pointer to the containing mapi item
str pointer to the mapi string of interest

Definition at line 4263 of file libpst.c.

References pst_varbuf::b, DEBUG_EMAIL, DEBUG_ENT, DEBUG_RET, pst_string::is_utf8, pst_default_charset(), pst_vb_8bit2utf8(), pst_vballoc(), pst_vbuf, and pst_string::str.

Referenced by create_enter_dir(), process(), pst_convert_utf8_null(), and write_normal_email().

Here is the call graph for this function:

void pst_convert_utf8_null pst_item item,
pst_string str
 

Convert str to utf8 if possible; null strings are preserved.

Parameters:
item pointer to the containing mapi item
str pointer to the mapi string of interest

Definition at line 4252 of file libpst.c.

References pst_convert_utf8(), and pst_string::str.

Referenced by write_appointment(), write_normal_email(), and write_vcard().

Here is the call graph for this function:

size_t pst_decode_assoc pst_file pf,
pst_id2_assoc assoc,
char *  buf
[static]
 

Definition at line 894 of file libpst.c.

References pst_id2_assoc32::child_id, pst_id2_assoc::child_id, DEBUG_HEXDUMPC, DEBUG_INDEX, pst_file::do_read64, pst_id2_assoc32::id, pst_id2_assoc::id, pst_id2_assoc32::id2, pst_id2_assoc::id2, LE32_CPU, LE64_CPU, pst_id2_assoc, and pst_id2_assoc32.

Referenced by pst_build_id2().

size_t pst_decode_desc pst_file pf,
pst_desc desc,
char *  buf
[static]
 

Definition at line 798 of file libpst.c.

References pst_desc32::d_id, pst_desc::d_id, DEBUG_HEXDUMPC, DEBUG_INDEX, 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_desc, pst_desc32, pst_desc32::tree_id, pst_desc::tree_id, and pst_desc::u1.

Referenced by pst_build_desc_ptr().

size_t pst_decode_index pst_file pf,
pst_index index,
char *  buf
[static]
 

Definition at line 861 of file libpst.c.

References DEBUG_HEXDUMPC, DEBUG_INDEX, pst_file::do_read64, pst_index32::id, pst_index::id, LE16_CPU, LE32_CPU, LE64_CPU, pst_index32::offset, pst_index::offset, pst_index, pst_index32, pst_index32::size, pst_index::size, pst_index::u0, pst_index32::u1, and pst_index::u1.

Referenced by pst_build_id_ptr().

size_t pst_decode_table pst_file pf,
struct pst_table_ptr_struct table,
char *  buf
[static]
 

Definition at line 832 of file libpst.c.

References DEBUG_HEXDUMPC, DEBUG_INDEX, 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().

size_t pst_decode_type3 pst_file pf,
pst_table3_rec table3_rec,
char *  buf
[static]
 

Definition at line 922 of file libpst.c.

References DEBUG_HEXDUMPC, DEBUG_INDEX, pst_file::do_read64, pst_table3_rec32::id, pst_table3_rec::id, LE32_CPU, LE64_CPU, pst_table3_rec, and pst_table3_rec32.

Referenced by pst_ff_compile_ID(), and pst_parse_block().

int pst_decrypt uint64_t  i_id,
char *  buf,
size_t  size,
unsigned char  type
 

Decrypt a block of data from the pst file.

Parameters:
i_id identifier of this block, needed as part of the key for the enigma cipher
buf pointer to the buffer to be decrypted
size size of the buffer
type 
  • 0 PST_NO_ENCRYPT, none
  • 1 PST_COMP_ENCRYPT, simple byte substitution cipher with fixed key
  • 2 PST_ENCRYPT, german enigma 3 rotor cipher with fixed key
Returns:
0 if ok, -1 if error (NULL buffer or unknown encryption type)

Definition at line 3704 of file libpst.c.

References comp_enc, comp_high1, comp_high2, DEBUG_ENT, DEBUG_RET, and WARN.

Referenced by main(), pst_ff_compile_ID(), and pst_ff_getIDblock_dec().

const char* pst_default_charset pst_item item  ) 
 

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.

Parameters:
item pointer to the mapi item of interest
Returns:
default character set as a string useable by iconv()

Definition at line 4239 of file libpst.c.

References pst_item::body_charset, codepage(), pst_item::internet_cpid, pst_item::message_codepage, and pst_string::str.

Referenced by pst_convert_utf8(), and write_normal_email().

Here is the call graph for this function:

size_t pst_ff_compile_ID pst_file pf,
uint64_t  i_id,
pst_holder h,
size_t  size
[static]
 

Definition at line 3925 of file libpst.c.

References pst_holder::base64, pst_holder::buf, DEBUG_EMAIL, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_READ, DEBUG_RET, DEBUG_WARN, pst_file::encryption, pst_holder::fp, pst_table3_rec::id, LE16_CPU, LE32_CPU, pst_base64_encode(), pst_base64_encode_multiple(), pst_decode_type3(), pst_decrypt(), pst_ff_getIDblock(), pst_ff_getIDblock_dec(), and pst_fwrite().

Referenced by pst_ff_getID2data().

Here is the call graph for this function:

size_t pst_ff_getID2block pst_file pf,
uint64_t  id2,
pst_id2_tree id2_head,
char **  buf
[static]
 

Definition at line 3875 of file libpst.c.

References DEBUG_ENT, DEBUG_INDEX, DEBUG_RET, pst_id2_tree::id, pst_ff_getID2data(), and pst_getID2().

Referenced by pst_getBlockOffsetPointer(), and pst_parse_block().

Here is the call graph for this function:

size_t pst_ff_getID2data pst_file pf,
pst_index_ll ptr,
pst_holder h
[static]
 

Definition at line 3893 of file libpst.c.

References pst_holder::base64, pst_holder::buf, DEBUG_ENT, DEBUG_READ, DEBUG_RET, pst_holder::fp, pst_index_ll::i_id, pst_base64_encode(), pst_ff_compile_ID(), pst_ff_getIDblock_dec(), and pst_fwrite().

Referenced by pst_attach_to_file(), pst_attach_to_file_base64(), pst_attach_to_mem(), and pst_ff_getID2block().

Here is the call graph for this function:

size_t pst_ff_getIDblock pst_file pf,
uint64_t  i_id,
char **  buf
 

Read a block of data from the file into memory.

Parameters:
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.
Returns:
size of block read into memory

Definition at line 3858 of file libpst.c.

References DEBUG_ENT, DEBUG_INDEX, 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().

Here is the call graph for this function:

size_t pst_ff_getIDblock_dec pst_file pf,
uint64_t  i_id,
char **  buf
 

Get an ID block from the file using pst_ff_getIDblock() and decrypt if necessary.

Parameters:
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.
Returns:
Size of block read into memory

Definition at line 3835 of file libpst.c.

References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, 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().

Here is the call graph for this function:

void pst_free_attach pst_item_attach attach  )  [static]
 

Definition at line 3256 of file libpst.c.

References 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().

Here is the call graph for this function:

void pst_free_desc pst_desc_tree head  )  [static]
 

Definition at line 3150 of file libpst.c.

References pst_desc_tree::child, DEBUG_ENT, DEBUG_RET, DIE, pst_desc_tree::next, and pst_desc_tree::parent.

Referenced by pst_close().

void pst_free_id pst_index_ll head  )  [static]
 

Definition at line 3138 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, and pst_index_ll::next.

Referenced by pst_close().

void pst_free_id2 pst_id2_tree head  )  [static]
 

Definition at line 3125 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().

void pst_free_list pst_mapi_object list  )  [static]
 

Definition at line 3103 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_xattrib pst_x_attrib_ll x  )  [static]
 

Definition at line 3174 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().

Parameters:
item pointer to item returned from pst_parse_item().

Definition at line 3271 of file libpst.c.

References pst_item_contact::access_method, 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_journal::end, pst_item_appointment::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_contact::location, pst_item_appointment::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_recipient, pst_item_email::outlook_recipient2, pst_item_email::outlook_recipient_name, pst_item_email::outlook_sender, pst_item_email::outlook_sender2, pst_item_email::outlook_sender_name, 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, 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_journal::start, pst_item_appointment::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().

Here is the call graph for this function:

size_t pst_fwrite const void *  ptr,
size_t  size,
size_t  nmemb,
FILE *  stream
 

fwrite with checking for null pointer.

Parameters:
ptr pointer to the buffer
size size of each item
nmemb number of items
stream output file
Returns:
number of bytes written, zero if ptr==NULL

Definition at line 4066 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, and DEBUG_WARN.

Referenced by main(), print_pdf(), pst_attach_to_file(), pst_attach_to_file_base64(), pst_ff_compile_ID(), pst_ff_getID2data(), write_email_body(), write_inline_attachment(), and write_separate_attachment().

size_t pst_getAtPos pst_file pf,
int64_t  pos,
void *  buf,
size_t  size
[static]
 

Read part of the pst file.

Parameters:
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
Returns:
actual read size, 0 if seek error

Definition at line 3792 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, and pst_file::fp.

Referenced by pst_getIntAtPos(), pst_open(), and pst_read_block_size().

int pst_getBlockOffset char *  buf,
size_t  read_size,
uint32_t  i_offset,
uint32_t  offset,
pst_block_offset p
[static]
 

Definition at line 3529 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().

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 3482 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::subblock_count, pst_subblocks::subs, pst_block_offset::to, and pst_block_offset_pointer::to.

Referenced by pst_parse_block().

Here is the call graph for this function:

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

Parameters:
pf global pst file pointer
d_id the id we are looking for
Returns:
pointer to the pst_desc_tree node in the descriptor tree

Definition at line 3611 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.

Parameters:
pf pointer to the pst_file structure setup by pst_open().
i_id key for the index linked list
Returns:
pointer to the element, or NULL if not found.

Definition at line 3553 of file libpst.c.

References DEBUG_ENT, DEBUG_INDEX, DEBUG_RET, pst_file::i_head, pst_index_ll::i_id, and pst_index_ll::next.

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().

pst_id2_tree * pst_getID2 pst_id2_tree ptr,
uint64_t  id
[static]
 

Definition at line 3577 of file libpst.c.

References pst_id2_tree::child, DEBUG_ENT, DEBUG_INDEX, 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().

uint64_t pst_getIntAt pst_file pf,
char *  buf
[static]
 

Definition at line 3752 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().

uint64_t pst_getIntAtPos pst_file pf,
int64_t  pos
[static]
 

Definition at line 3768 of file libpst.c.

References pst_file::do_read64, LE32_CPU, LE64_CPU, and pst_getAtPos().

Referenced by pst_open().

Here is the call graph for this function:

pst_desc_tree* pst_getNextDptr pst_desc_tree d  ) 
 

Walk the descriptor tree.

Parameters:
d pointer to the current item in the descriptor tree.
Returns:
pointer to the next item in the descriptor tree.

Definition at line 615 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,
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.

Parameters:
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 490 of file libpst.c.

References pst_desc_tree::assoc_tree, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_INDEX, 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().

Here is the call graph for this function:

int pst_load_extended_attributes pst_file pf  ) 
 

Load the extended attribute mapping table from the pst file.

Returns:
true(1) or false(0) to indicate whether the extended attributes have been loaded

Definition at line 639 of file libpst.c.

References pst_desc_tree::assoc_tree, pst_mapi_object::count_elements, pst_mapi_element::data, DEBUG_EMAIL, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, 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::map, pst_x_attrib_ll::map, pst_mapi_element::mapi_id, 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_parse_block(), pst_printID2ptr(), pst_wide_to_single(), pst_mapi_element::size, pst_mapi_element::type, pst_x_attrib::type, and pst_file::x_head.

Referenced by main().

Here is the call graph for this function:

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().

Parameters:
pf pointer to the pst_file structure setup by pst_open().

Definition at line 594 of file libpst.c.

References pst_file::d_head, DEBUG_CODE, DEBUG_ENT, DEBUG_INDEX, DEBUG_RET, pst_file::index1, pst_file::index1_back, pst_file::index2, pst_file::index2_back, pst_build_desc_ptr(), pst_build_id_ptr(), pst_printDptr(), and WARN.

Referenced by main().

Here is the call graph for this function:

int pst_open pst_file pf,
char *  name
 

Open a pst file.

Parameters:
pf pointer to uninitialized pst_file structure. This structure will be filled in by this function.
name name of the file, suitable for fopen().
Returns:
0 if ok, -1 if error

Definition at line 287 of file libpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, ENC_TYPE, FILE_SIZE_POINTER, INDEX_BACK, INDEX_POINTER, INDEX_TYPE32, INDEX_TYPE32A, INDEX_TYPE64, INDEX_TYPE64A, INDEX_TYPE_OFFSET, LE32_CPU, pst_getAtPos(), pst_getIntAtPos(), pst_unicode_init(), SECOND_BACK, SECOND_POINTER, and WARN.

Referenced by main().

Here is the call graph for this function:

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.

Returns:
list of MAPI objects

Definition at line 1365 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_EMAIL, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INDEX, DEBUG_RET, DEBUG_WARN, pst_varbuf::dlen, pst_mapi_object::elements, pst_mapi_element::extra, freeall(), pst_block_offset_pointer::from, pst_subblock::i_offset, pst_table3_rec::id, 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_mapi_object::orig_count, pst_decode_type3(), pst_ff_getID2block(), pst_ff_getIDblock_dec(), pst_free_list(), pst_getBlockOffsetPointer(), pst_malloc(), pst_mapi_element, pst_mapi_object, pst_vb_utf16to8(), pst_vballoc(), pst_vbappend(), pst_vbset(), pst_vbuf, pst_subblock::read_size, pst_mapi_element::size, pst_subblocks::subblock_count, pst_subblocks::subs, pst_block_offset_pointer::to, pst_x_attrib_ll::type, pst_mapi_element::type, WARN, and pst_file::x_head.

Referenced by pst_load_extended_attributes(), and pst_parse_item().

Here is the call graph for this function:

pst_item* pst_parse_item pst_file pf,
pst_desc_tree d_ptr,
pst_id2_tree m_head
 

Assemble a mapi object from a descriptor pointer.

Parameters:
pf pointer to the pst_file structure setup by pst_open().
d_ptr pointer to an item in the descriptor tree.
m_head normally NULL. This is only used when processing embedded attached rfc822 messages, in which case it is attach->id2_head.
Returns:
pointer to the mapi object. Must be free'd by pst_freeItem().

Definition at line 1182 of file libpst.c.

References pst_desc_tree::assoc_tree, pst_item::attach, pst_id2_tree::child, pst_mapi_object::count_objects, DEBUG_EMAIL, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, deep_copy(), pst_desc_tree::desc, pst_index_ll::i_id, pst_item_attach::i_id, pst_id2_tree::id, pst_item_attach::id2_head, pst_item_attach::id2_val, pst_item_attach::next, pst_build_id2(), pst_free_id2(), pst_free_list(), pst_freeItem(), pst_getID2(), pst_item, pst_item_attach, pst_malloc(), pst_parse_block(), pst_printID2ptr(), and pst_process().

Referenced by dumper(), main(), process(), and write_embedded_message().

Here is the call graph for this function:

void pst_printDptr pst_file pf,
pst_desc_tree ptr
[static]
 

Definition at line 3630 of file libpst.c.

References pst_desc_tree::assoc_tree, pst_desc_tree::child, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_INDEX, 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().

void pst_printID2ptr pst_id2_tree ptr  )  [static]
 

Definition at line 3656 of file libpst.c.

References pst_id2_tree::child, DEBUG_ENT, DEBUG_INDEX, 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().

void pst_printIDptr pst_file pf  )  [static]
 

Definition at line 3645 of file libpst.c.

References DEBUG_ENT, DEBUG_INDEX, DEBUG_RET, pst_file::i_head, pst_index_ll::i_id, pst_index_ll::next, pst_index_ll::offset, and pst_index_ll::size.

int pst_process pst_mapi_object list,
pst_item item,
pst_item_attach attach
[static]
 

process the list of MAPI objects produced from parse_block()

Parameters:
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.
Returns:
0 for ok, -1 for error.

Definition at line 2080 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::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_email::conversion_prohibited, pst_mapi_object::count_elements, pst_item::create_date, pst_item_contact::customer_id, pst_binary::data, pst_item_attach::data, pst_mapi_element::data, DEBUG_EMAIL, DEBUG_EMAIL_HEXPRINT, DEBUG_ENT, DEBUG_HEXDUMP, DEBUG_RET, 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_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, LE32_CPU, 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_recipient, pst_item_email::outlook_recipient2, pst_item_email::outlook_recipient_name, pst_item_email::outlook_sender, pst_item_email::outlook_sender2, pst_item_email::outlook_sender_name, 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_item_extra_field, pst_malloc(), pst_stricmp(), pst_strincmp(), 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, 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().

Here is the call graph for this function:

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.

Parameters:
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
Returns:
size of block read into memory

Definition at line 3676 of file libpst.c.

References DEBUG_ENT, DEBUG_READ, 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().

Here is the call graph for this function:

char* pst_rfc2425_datetime_format FILETIME ft  ) 
 

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.

Parameters:
ft time to be converted
Returns:
time in rfc2425 format

Definition at line 4162 of file libpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, and pst_fileTimeToStructTM().

Referenced by write_vcard().

Here is the call graph for this function:

char* pst_rfc2426_escape char *  str  ) 
 

Add any necessary escape characters for rfc2426 vcard format.

Parameters:
str pointer to input string
Returns:
pointer to output string, either the input pointer if there are no characters that need escapes, or a pointer to a different buffer containing the escaped string. In either case, you don't need to free this returned pointer.

Definition at line 4098 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, and pst_chr_count().

Referenced by process(), write_appointment(), and write_vcard().

Here is the call graph for this function:

char* pst_rfc2445_datetime_format FILETIME ft  ) 
 

Convert a FILETIME into rfc2445 date/time format 19531015T231000Z.

Parameters:
ft time to be converted
Returns:
time in rfc2445 format

Definition at line 4175 of file libpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, and pst_fileTimeToStructTM().

Referenced by process(), and write_appointment().

Here is the call graph for this function:

int pst_stricmp char *  a,
char *  b
[static]
 

Definition at line 4034 of file libpst.c.

Referenced by pst_process().

int pst_strincmp char *  a,
char *  b,
size_t  x
[static]
 

Definition at line 4049 of file libpst.c.

Referenced by pst_process().

char * pst_wide_to_single char *  wt,
size_t  size
[static]
 

Definition at line 4080 of file libpst.c.

References DEBUG_ENT, DEBUG_RET, and pst_malloc().

Referenced by pst_load_extended_attributes().

Here is the call graph for this function:

void record_descriptor pst_file pf,
pst_desc_tree node
[static]
 

add a pst descriptor node into the global tree.

Parameters:
pf global pst file pointer
node pointer to the new node to be added to the tree

Definition at line 413 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_INDEX, 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().

Here is the call graph for this function:


Variable Documentation

unsigned char comp_enc[] [static]
 

Initial value:

 {
    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.

Definition at line 194 of file libpst.c.

unsigned char comp_high1[] [static]
 

Initial value:

 {
    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 215 of file libpst.c.

Referenced by pst_decrypt().

unsigned char comp_high2[] [static]
 

Initial value:

 {
    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 236 of file libpst.c.

Referenced by pst_decrypt().


Generated on Fri Apr 17 12:59:16 2009 for 'LibPst' by  doxygen 1.3.9.1