comparison xml/libpst.in @ 24:f4643b609bdf stable-0-5-3 **INVALID**

switch to automake/autoconf
author carl
date Mon, 20 Feb 2006 15:14:54 -0800
parents e5418051878c
children 73e8959cd86b
comparison
equal deleted inserted replaced
23:f86fa9e378a2 24:f4643b609bdf
5 <para>The various source and binary packages are available at <ulink 5 <para>The various source and binary packages are available at <ulink
6 url="http://www.five-ten-sg.com/@PACKAGE@/packages/">http://www.five-ten-sg.com/@PACKAGE@/packages/</ulink> 6 url="http://www.five-ten-sg.com/@PACKAGE@/packages/">http://www.five-ten-sg.com/@PACKAGE@/packages/</ulink>
7 The most recent documentation is available at <ulink 7 The most recent documentation is available at <ulink
8 url="http://www.five-ten-sg.com/@PACKAGE@/">http://www.five-ten-sg.com/@PACKAGE@/</ulink> 8 url="http://www.five-ten-sg.com/@PACKAGE@/">http://www.five-ten-sg.com/@PACKAGE@/</ulink>
9 </para> 9 </para>
10
11 </partintro> 10 </partintro>
11
12 12
13 <refentry id="readpst.1"> 13 <refentry id="readpst.1">
14 <refentryinfo> 14 <refentryinfo>
15 <date>2006-02-19</date> 15 <date>2006-02-20</date>
16 </refentryinfo> 16 </refentryinfo>
17 17
18 <refmeta> 18 <refmeta>
19 <refentrytitle>readpst</refentrytitle> 19 <refentrytitle>readpst</refentrytitle>
20 <manvolnum>1</manvolnum> 20 <manvolnum>1</manvolnum>
38 <arg><option>-q</option></arg> 38 <arg><option>-q</option></arg>
39 <arg><option>-r</option></arg> 39 <arg><option>-r</option></arg>
40 <arg><option>-S</option></arg> 40 <arg><option>-S</option></arg>
41 <arg><option>-V</option></arg> 41 <arg><option>-V</option></arg>
42 <arg><option>-w</option></arg> 42 <arg><option>-w</option></arg>
43 <arg>files...</arg> 43 <arg rep='repeat' choice='plain'>files</arg>
44 </cmdsynopsis> 44 </cmdsynopsis>
45 </refsynopsisdiv> 45 </refsynopsisdiv>
46 46
47 <refsect1 id='readpst.description.1'> 47 <refsect1 id='readpst.description.1'>
48 <title>Description</title> 48 <title>Description</title>
49 <para>This manual page briefly documents the <command>readpst</command> command.</para>
50 <para><command>readpst</command> is a program that can read an Outlook PST (Personal Folders) file 49 <para><command>readpst</command> is a program that can read an Outlook PST (Personal Folders) file
51 and convert it into an mbox file, a format suitable for KMail, a recursive mbox 50 and convert it into an mbox file, a format suitable for KMail, a recursive mbox
52 structure, or separate emails. 51 structure, or separate emails.
53 </para> 52 </para>
54 </refsect1> 53 </refsect1>
70 </para></listitem> 69 </para></listitem>
71 </varlistentry> 70 </varlistentry>
72 <varlistentry> 71 <varlistentry>
73 <term>-h</term> 72 <term>-h</term>
74 <listitem><para> 73 <listitem><para>
75 Show summary of options. 74 Show summary of options. Subsequent options are then ignored.
76 </para></listitem> 75 </para></listitem>
77 </varlistentry> 76 </varlistentry>
78 <varlistentry> 77 <varlistentry>
79 <term>-k</term> 78 <term>-k</term>
80 <listitem><para> 79 <listitem><para>
117 </para></listitem> 116 </para></listitem>
118 </varlistentry> 117 </varlistentry>
119 <varlistentry> 118 <varlistentry>
120 <term>-V</term> 119 <term>-V</term>
121 <listitem><para> 120 <listitem><para>
122 Show version of program. Subsequent options are then ignored. 121 Show program version. Subsequent options are then ignored.
123 </para></listitem> 122 </para></listitem>
124 </varlistentry> 123 </varlistentry>
125 <varlistentry> 124 <varlistentry>
126 <term>-w</term> 125 <term>-w</term>
127 <listitem><para> 126 <listitem><para>
179 </refentry> 178 </refentry>
180 179
181 180
182 <refentry id="readpstlog.1"> 181 <refentry id="readpstlog.1">
183 <refentryinfo> 182 <refentryinfo>
184 <date>2006-02-19</date> 183 <date>2006-02-20</date>
185 </refentryinfo> 184 </refentryinfo>
186 185
187 <refmeta> 186 <refmeta>
188 <refentrytitle>readpstlog</refentrytitle> 187 <refentrytitle>readpstlog</refentrytitle>
189 <manvolnum>1</manvolnum> 188 <manvolnum>1</manvolnum>
190 <refmiscinfo>readpstlog @VERSION@</refmiscinfo> 189 <refmiscinfo>readpstlog @VERSION@</refmiscinfo>
191 </refmeta> 190 </refmeta>
192 191
193 <refnamediv id='readpstlog.name.1'> 192 <refnamediv id='readpstlog.name.1'>
194 <refname>readpstlog</refname> 193 <refname>readpstlog</refname>
195 <refpurpose>convert a readpst logfile to text format</refpurpose> 194 <refpurpose>convert a <command>readpst</command> logfile to text format</refpurpose>
196 </refnamediv> 195 </refnamediv>
197 196
198 <refsynopsisdiv id='readpstlog.synopsis.1'> 197 <refsynopsisdiv id='readpstlog.synopsis.1'>
199 <title>Synopsis</title> 198 <title>Synopsis</title>
200 <cmdsynopsis> 199 <cmdsynopsis>
201 <command>readpst</command> 200 <command>readpstlog</command>
202 <arg><option>-f <replaceable class="parameter">format</replaceable></option></arg> 201 <arg><option>-f <replaceable class="parameter">format</replaceable></option></arg>
203 <arg><option>-t <replaceable class="parameter">include-types</replaceable></option></arg> 202 <arg><option>-t <replaceable class="parameter">include-types</replaceable></option></arg>
204 <arg><option>-x <replaceable class="parameter">exclude-types</replaceable></option></arg> 203 <arg><option>-x <replaceable class="parameter">exclude-types</replaceable></option></arg>
205 <arg>logfile</arg> 204 <arg choice='plain'>logfile</arg>
206 </cmdsynopsis> 205 </cmdsynopsis>
207 </refsynopsisdiv> 206 </refsynopsisdiv>
208 207
209 <refsect1 id='readpstlog.description.1'> 208 <refsect1 id='readpstlog.description.1'>
210 <title>Description</title> 209 <title>Description</title>
211 <para>This manual page briefly documents the <command>readpstlog</command> command.</para>
212 <para><command>readpstlog</command> 210 <para><command>readpstlog</command>
213 is a program that reads the binary logfile generated 211 is a program that converts the binary logfile generated
214 by <command>readpst</command>, and outputs it in a more desirable format (i.e. text). 212 by <command>readpst</command> to a more desirable text format.
215 </para> 213 </para>
216 </refsect1> 214 </refsect1>
217 215
218 <refsect1 id='readpstlog.options.1'> 216 <refsect1 id='readpstlog.options.1'>
219 <title>Options</title> 217 <title>Options</title>
242 </variablelist> 240 </variablelist>
243 </refsect1> 241 </refsect1>
244 242
245 <refsect1 id='readpstlog.message.types.1'> 243 <refsect1 id='readpstlog.message.types.1'>
246 <title>Message Types</title> 244 <title>Message Types</title>
247 <para> 245 <para><command>readpstlog</command> understands the following types of log
248 <command>readpstlog</command> understands the following types of log messages: 246 messages:
249 </para> 247 </para>
250 <variablelist> 248 <variablelist>
251 <varlistentry> 249 <varlistentry>
252 <term>1</term> 250 <term>1</term>
253 <listitem><para> 251 <listitem><para>
344 <para> 342 <para>
345 $Id$ 343 $Id$
346 </para> 344 </para>
347 </refsect1> 345 </refsect1>
348 </refentry> 346 </refentry>
347
348
349 <refentry id="pst2ldif.1">
350 <refentryinfo>
351 <date>2006-02-20</date>
352 </refentryinfo>
353
354 <refmeta>
355 <refentrytitle>pst2ldif</refentrytitle>
356 <manvolnum>1</manvolnum>
357 <refmiscinfo>pst2ldif @VERSION@</refmiscinfo>
358 </refmeta>
359
360 <refnamediv id='pst2ldif.name.1'>
361 <refname>pst2ldif</refname>
362 <refpurpose>extract contacts from a MS Outlook .pst file in .ldif format</refpurpose>
363 </refnamediv>
364
365 <refsynopsisdiv id='pst2ldif.synopsis.1'>
366 <title>Synopsis</title>
367 <cmdsynopsis>
368 <command>pst2ldif</command>
369 <arg><option>-h</option></arg>
370 <arg><option>-V</option></arg>
371 <arg><option>-b <replaceable class="parameter">ldap-base</replaceable></option></arg>
372 <arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
373 <arg choice='plain'>pstfilename</arg>
374 </cmdsynopsis>
375 </refsynopsisdiv>
376
377 <refsect1 id='pst2ldif.options.1'>
378 <title>Options</title>
379 <variablelist>
380 <varlistentry>
381 <term>-h</term>
382 <listitem><para>
383 Show summary of options. Subsequent options are then ignored.
384 </para></listitem>
385 </varlistentry>
386 <varlistentry>
387 <term>-V <replaceable class="parameter">include-types</replaceable></term>
388 <listitem><para>
389 Show program version. Subsequent options are then ignored.
390 </para></listitem>
391 </varlistentry>
392 <varlistentry>
393 <term>-b <replaceable class="parameter">ldap-base</replaceable></term>
394 <listitem><para>
395 Sets the ldap base value used in the dn records. You probably want to
396 use something like "o=organization, c=US".
397 </para></listitem>
398 </varlistentry>
399 <varlistentry>
400 <term>-c <replaceable class="parameter">class</replaceable></term>
401 <listitem><para>
402 Sets the objectClass values for the contact items. This class needs to be
403 defined in the schema used by your LDAP server, and at a minimum it must
404 contain the ldap attributes given below.
405 </para></listitem>
406 </varlistentry>
407 </variablelist>
408 </refsect1>
409
410 <refsect1 id='pst2ldif.description.1'>
411 <title>Description</title>
412 <para><command>pst2ldif</command>
413 reads the contact information from a MS Outlook .pst file
414 and produces a .ldif file that may be used to import those contacts
415 into an LDAP database. The following ldap attributes are generated:
416 <simplelist>
417 <member>cn </member>
418 <member>givenName </member>
419 <member>sn </member>
420 <member>personalTitle </member>
421 <member>company </member>
422 <member>mail </member>
423 <member>postalAddress </member>
424 <member>l </member>
425 <member>st </member>
426 <member>postalCode </member>
427 <member>c </member>
428 <member>homePhone </member>
429 <member>telephoneNumber </member>
430 <member>facsimileTelephoneNumber </member>
431 <member>mobile </member>
432 <member>description </member>
433 </simplelist>
434 </para>
435 </refsect1>
436
437 <refsect1 id='pst2ldif.copyright.1'>
438 <title>Copyright</title>
439 <para>
440 Copyright (C) 2006 by 510 Software Group &lt;carl@five-ten-sg.com&gt;
441 </para>
442 <para>
443 This program is free software; you can redistribute it and/or modify it
444 under the terms of the GNU General Public License as published by the
445 Free Software Foundation; either version 2, or (at your option) any
446 later version.
447 </para>
448 <para>
449 You should have received a copy of the GNU General Public License along
450 with this program; see the file COPYING. If not, please write to the
451 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
452 </para>
453 </refsect1>
454
455 <refsect1 id='pst2ldif.version.1'>
456 <title>CVS Version</title>
457 <para>
458 $Id$
459 </para>
460 </refsect1>
461 </refentry>
462
463
464 <refentry id="pst.5">
465 <refentryinfo>
466 <date>2006-02-20</date>
467 </refentryinfo>
468
469 <refmeta>
470 <refentrytitle>outlook.pst</refentrytitle>
471 <manvolnum>5</manvolnum>
472 </refmeta>
473
474 <refnamediv id='pst.name.1'>
475 <refname>outlook.pst</refname>
476 <refpurpose>format of MS Outlook .pst file</refpurpose>
477 </refnamediv>
478
479 <refsynopsisdiv id='pst.synopsis.1'>
480 <title>Synopsis</title>
481 <cmdsynopsis>
482 <command>outlook.pst</command>
483 </cmdsynopsis>
484 </refsynopsisdiv>
485
486 <refsect1 id='pst.file.overview.5'>
487 <title>Overview</title>
488 <para>
489 Each item in a .pst file is identified by two id values ID1 and ID2.
490 There are two separate b-trees indexed by these ID1 and ID2 values.
491 </para>
492 </refsect1>
493
494 <refsect1 id='pst.file.header.5'>
495 <title>File Header</title>
496 <para>
497 The file header is located at offset 0 in the .pst file.
498 </para>
499 <literallayout class="monospaced"><![CDATA[
500 0000 21 42 44 4e 49 f8 64 d9 53 4d 0e 00 13 00 01 01
501 0010 00 00 00 00 00 00 00 00 50 d6 03 00 bd 1e 02 00
502 0020 08 4c 00 00 00 04 00 00 00 04 00 00 0f 04 00 00
503 0030 0d 40 00 00 99 0a 01 00 18 04 00 00 0d 40 00 00
504 0040 0d 40 00 00 11 80 00 00 02 04 00 00 0a 04 00 00
505 0050 00 04 00 00 00 04 00 00 0f 04 00 00 0f 04 00 00
506 0060 0f 04 00 00 0d 40 00 00 00 04 00 00 00 04 00 00
507 0070 04 40 00 00 00 04 00 00 00 04 00 00 00 04 00 00
508 0080 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00
509 0090 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00
510 00a0 0c 09 00 00 00 00 00 00 00 04 27 00 00 24 23 00
511 00b0 c0 09 0a 00 00 c8 00 00 bc 1e 02 00 00 7e 0c 00
512 00c0 b4 1e 02 00 00 54 00 00 01 00 00 00 23 55 44 d1
513 00d0 5a 4f ce 6b 80 ff ff ff 00 00 00 00 00 00 00 00
514 00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
515 00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
516 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
517 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
518 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
519 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
520 0140 00 00 00 00 00 00 00 00 00 00 00 00 3f ff ff ff
521 0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
522 0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
523 0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
524 0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
525 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
526 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
527 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
528 01c0 ff ff ff ff ff ff ff ff ff ff ff ff 80 01 00 00
529 01d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
530 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
531 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
532
533 0000 signature [4 bytes] 0x4e444221 constant
534 000a index type [1 byte] 0x0e constant
535 01cd encryption type [1 byte] 0x01 constant
536 00a8 total file size [4 bytes] 0x270400 in this case
537 00c0 back-pointer-1 [4 bytes] 0x021eb4 in this case
538 00c4 offset-index-1 [4 bytes] 0x005400 in this case
539 00b8 back-pointer-2 [4 bytes] 0x021ebc in this case
540 00bc offset-index-2 [4 bytes] 0x0c7e00 in this case
541 ]]></literallayout>
542 <para>
543 We only support index type 0x0E and encryption type 0x01.
544 </para>
545 <para>
546 offset-index-1 is the file offset of the root of the
547 index1 b-tree, which contains (ID1, offset, size, unknown) tuples
548 for each item in the file. back-pointer-1 is the value that should
549 appear in the parent pointer of that root node.
550 </para>
551 <para>
552 offset-index-2 is the file offset of the root of the
553 index2 b-tree, which contains (ID2, DESC-ID1, LIST-ID1, PARENT-ID2)
554 tuples for each item in the file. back-pointer-2 is the value that should
555 appear in the parent pointer of that root node.
556 </para>
557 </refsect1>
558
559 <refsect1 id='pst.file.node1.5'>
560 <title>Index 1 Node</title>
561 <para>
562 The index1 b-tree nodes are 516 byte blocks with the following format.
563 </para>
564 <literallayout class="monospaced"><![CDATA[
565 0000 04 00 00 00 8a 1e 02 00 00 1c 0b 00
566 000c 58 27 03 00 b3 1e 02 00 00 52 00 00
567 0018 00 00 00 00 00 00 00 00 00 00 00 00
568 0024 00 00 00 00 00 00 00 00 00 00 00 00
569 0030 00 00 00 00 00 00 00 00 00 00 00 00
570 003c 00 00 00 00 00 00 00 00 00 00 00 00
571 0048 00 00 00 00 00 00 00 00 00 00 00 00
572 0054 00 00 00 00 00 00 00 00 00 00 00 00
573 0060 00 00 00 00 00 00 00 00 00 00 00 00
574 006c 00 00 00 00 00 00 00 00 00 00 00 00
575 0078 00 00 00 00 00 00 00 00 00 00 00 00
576 0084 00 00 00 00 00 00 00 00 00 00 00 00
577 0090 00 00 00 00 00 00 00 00 00 00 00 00
578 009c 00 00 00 00 00 00 00 00 00 00 00 00
579 00a8 00 00 00 00 00 00 00 00 00 00 00 00
580 00b4 00 00 00 00 00 00 00 00 00 00 00 00
581 00c0 00 00 00 00 00 00 00 00 00 00 00 00
582 00cc 00 00 00 00 00 00 00 00 00 00 00 00
583 00d8 00 00 00 00 00 00 00 00 00 00 00 00
584 00e4 00 00 00 00 00 00 00 00 00 00 00 00
585 00f0 00 00 00 00 00 00 00 00 00 00 00 00
586 00fc 00 00 00 00 00 00 00 00 00 00 00 00
587 0108 00 00 00 00 00 00 00 00 00 00 00 00
588 0114 00 00 00 00 00 00 00 00 00 00 00 00
589 0120 00 00 00 00 00 00 00 00 00 00 00 00
590 012c 00 00 00 00 00 00 00 00 00 00 00 00
591 0138 00 00 00 00 00 00 00 00 00 00 00 00
592 0144 00 00 00 00 00 00 00 00 00 00 00 00
593 0150 00 00 00 00 00 00 00 00 00 00 00 00
594 015c 00 00 00 00 00 00 00 00 00 00 00 00
595 0168 00 00 00 00 00 00 00 00 00 00 00 00
596 0174 00 00 00 00 00 00 00 00 00 00 00 00
597 0180 00 00 00 00 00 00 00 00 00 00 00 00
598 018c 00 00 00 00 00 00 00 00 00 00 00 00
599 0198 00 00 00 00 00 00 00 00 00 00 00 00
600 01a4 00 00 00 00 00 00 00 00 00 00 00 00
601 01b0 00 00 00 00 00 00 00 00 00 00 00 00
602 01bc 00 00 00 00 00 00 00 00 00 00 00 00
603 01c8 00 00 00 00 00 00 00 00 00 00 00 00
604 01d4 00 00 00 00 00 00 00 00 00 00 00 00
605 01e0 00 00 00 00 00 00 00 00 00 00 00 00
606 01ec 00 00 00 00 02 29 0c 02 80 80 b6 4a
607 01f8 b4 1e 02 00 27 9c cc 56 58 27 03 00
608
609 01f0 item-count [1 byte] 0x02 in this case
610 01f1 max-item-count [1 byte] 0x29 constant
611 01f3 node-level [1 byte] 0x02 in this case
612 01f8 back-pointer [4 bytes] 0x021eb4 in this case
613 ]]></literallayout>
614 <para>
615 The item-count specifies the number of 12 byte records that
616 are active. The node-level is non-zero for this style of nodes.
617 The leaf nodes have a different format. The back-pointer must
618 match the back-pointer from the triple that pointed to this node.
619 </para>
620 <para>
621 Each item in this node is a triple of (ID, back-pointer, offset)
622 where the offset points to the next deeper node in the tree, the
623 back-pointer value must match the back-pointer in that deeper node,
624 and ID is the lowest ID value in the subtree.
625 </para>
626 </refsect1>
627
628 <refsect1 id='pst.file.leaf1.5'>
629 <title>Index 1 Leaf Node</title>
630 <para>
631 The index1 b-tree leaf nodes are 516 byte blocks with the following format.
632 </para>
633 <literallayout class="monospaced"><![CDATA[
634 0000 04 00 00 00 00 58 00 00 64 00 0f 00
635 000c 08 00 00 00 80 58 00 00 ac 00 06 00
636 0018 0c 00 00 00 40 59 00 00 ac 00 06 00
637 0024 10 00 00 00 00 5a 00 00 bc 00 03 00
638 0030 14 00 00 00 00 5b 00 00 a4 00 02 00
639 003c 18 00 00 00 c0 5b 00 00 64 00 02 00
640 0048 1c 00 00 00 40 5c 00 00 5c 00 02 00
641 0054 50 00 00 00 80 62 00 00 60 00 02 00
642 0060 74 00 00 00 00 77 00 00 5e 00 02 00
643 006c 7c 00 00 00 80 77 00 00 66 00 02 00
644 0078 84 00 00 00 00 76 00 00 ca 00 02 00
645 0084 88 00 00 00 00 63 00 00 52 00 02 00
646 0090 90 00 00 00 00 79 00 00 58 00 02 00
647 009c cc 00 00 00 c0 61 00 00 76 00 02 00
648 00a8 e0 00 00 00 00 61 00 00 74 00 02 00
649 00b4 f4 00 00 00 80 65 00 00 6e 00 02 00
650 00c0 8c 01 00 00 40 60 00 00 70 00 02 00
651 00cc ea 01 00 00 80 61 00 00 10 00 02 00
652 00d8 ec 01 00 00 40 8a 00 00 f3 01 02 00
653 00e4 f0 01 00 00 80 93 00 00 f4 1f 02 00
654 00f0 fa 01 00 00 c0 7f 00 00 10 00 02 00
655 00fc 00 02 00 00 00 89 00 00 34 01 02 00
656 0108 1c 02 00 00 40 ec 00 00 12 06 02 00
657 0114 22 02 00 00 00 84 00 00 10 00 02 00
658 0120 24 02 00 00 c0 ea 00 00 3c 01 02 00
659 012c 40 02 00 00 00 f4 00 00 0a 06 02 00
660 0138 46 02 00 00 40 8c 00 00 10 00 02 00
661 0144 48 02 00 00 80 f2 00 00 36 01 02 00
662 0150 64 02 00 00 80 fb 00 00 bf 07 02 00
663 015c 6a 02 00 00 80 63 00 00 10 00 02 00
664 0168 6c 02 00 00 40 fa 00 00 2a 01 02 00
665 0174 6c 02 00 00 40 fa 00 00 2a 01 02 00
666 0180 6c 02 00 00 40 fa 00 00 2a 01 02 00
667 018c 6c 02 00 00 40 fa 00 00 2a 01 02 00
668 0198 6c 02 00 00 40 fa 00 00 2a 01 02 00
669 01a4 6c 02 00 00 40 fa 00 00 2a 01 02 00
670 01b0 64 02 00 00 80 fb 00 00 bf 07 02 00
671 01bc 64 02 00 00 80 fb 00 00 bf 07 02 00
672 01c8 64 02 00 00 80 fb 00 00 bf 07 02 00
673 01d4 64 02 00 00 80 fb 00 00 bf 07 02 00
674 01e0 64 02 00 00 80 fb 00 00 bf 07 02 00
675 01ec 00 00 00 00 1f 29 0c 00 80 80 5b b3
676 01f8 5a 67 01 00 4f ae 70 a7 92 06 00 00
677
678 01f0 item-count [1 byte] 0x1f in this case
679 01f1 max-item-count [1 byte] 0x29 constant
680 01f3 node-level [1 byte] 0x00 in this case
681 01f8 back-pointer [4 bytes] 0x01675a in this case
682 ]]></literallayout>
683 <para>
684 The item-count specifies the number of 12 byte records that
685 are active. The node-level is zero for these leaf nodes.
686 The back-pointer must match the back-pointer from the triple
687 that pointed to this node.
688 </para>
689 <para>
690 Each item in this node is a tuple of (ID1, offset, size, unknown)
691 </para>
692 </refsect1>
693
694 <refsect1 id='pst.file.node2.5'>
695 <title>Index 2 Node</title>
696 <para>
697 The index2 b-tree nodes are 516 byte blocks with the following format.
698 </para>
699 <literallayout class="monospaced"><![CDATA[
700 0000 21 00 00 00 bb 1e 02 00 00 e2 0b 00
701 000c 64 78 20 00 8c 1e 02 00 00 dc 0b 00
702 0018 00 00 00 00 00 00 00 00 00 00 00 00
703 0024 00 00 00 00 00 00 00 00 00 00 00 00
704 0030 00 00 00 00 00 00 00 00 00 00 00 00
705 003c 00 00 00 00 00 00 00 00 00 00 00 00
706 0048 00 00 00 00 00 00 00 00 00 00 00 00
707 0054 00 00 00 00 00 00 00 00 00 00 00 00
708 0060 00 00 00 00 00 00 00 00 00 00 00 00
709 006c 00 00 00 00 00 00 00 00 00 00 00 00
710 0078 00 00 00 00 00 00 00 00 00 00 00 00
711 0084 00 00 00 00 00 00 00 00 00 00 00 00
712 0090 00 00 00 00 00 00 00 00 00 00 00 00
713 009c 00 00 00 00 00 00 00 00 00 00 00 00
714 00a8 00 00 00 00 00 00 00 00 00 00 00 00
715 00b4 00 00 00 00 00 00 00 00 00 00 00 00
716 00c0 00 00 00 00 00 00 00 00 00 00 00 00
717 00cc 00 00 00 00 00 00 00 00 00 00 00 00
718 00d8 00 00 00 00 00 00 00 00 00 00 00 00
719 00e4 00 00 00 00 00 00 00 00 00 00 00 00
720 00f0 00 00 00 00 00 00 00 00 00 00 00 00
721 00fc 00 00 00 00 00 00 00 00 00 00 00 00
722 0108 00 00 00 00 00 00 00 00 00 00 00 00
723 0114 00 00 00 00 00 00 00 00 00 00 00 00
724 0120 00 00 00 00 00 00 00 00 00 00 00 00
725 012c 00 00 00 00 00 00 00 00 00 00 00 00
726 0138 00 00 00 00 00 00 00 00 00 00 00 00
727 0144 00 00 00 00 00 00 00 00 00 00 00 00
728 0150 00 00 00 00 00 00 00 00 00 00 00 00
729 015c 00 00 00 00 00 00 00 00 00 00 00 00
730 0168 00 00 00 00 00 00 00 00 00 00 00 00
731 0174 00 00 00 00 00 00 00 00 00 00 00 00
732 0180 00 00 00 00 00 00 00 00 00 00 00 00
733 018c 00 00 00 00 00 00 00 00 00 00 00 00
734 0198 00 00 00 00 00 00 00 00 00 00 00 00
735 01a4 00 00 00 00 00 00 00 00 00 00 00 00
736 01b0 00 00 00 00 00 00 00 00 00 00 00 00
737 01bc 00 00 00 00 00 00 00 00 00 00 00 00
738 01c8 00 00 00 00 00 00 00 00 00 00 00 00
739 01d4 00 00 00 00 00 00 00 00 00 00 00 00
740 01e0 00 00 00 00 00 00 00 00 00 00 00 00
741 01ec 00 00 00 00 02 29 0c 02 81 81 b2 60
742 01f8 bc 1e 02 00 7e 70 dc e3 21 00 00 00
743
744 01f0 item-count [1 byte] 0x02 in this case
745 01f1 max-item-count [1 byte] 0x29 constant
746 01f3 node-level [1 byte] 0x02 in this case
747 01f8 back-pointer [4 bytes] 0x021ebc in this case
748 ]]></literallayout>
749 <para>
750 The item-count specifies the number of 12 byte records that
751 are active. The node-level is non-zero for this style of nodes.
752 The leaf nodes have a different format. The back-pointer must
753 match the back-pointer from the triple that pointed to this node.
754 </para>
755 <para>
756 Each item in this node is a triple of (ID2, back-pointer, offset)
757 where the offset points to the next deeper node in the tree, the
758 back-pointer value must match the back-pointer in that deeper node,
759 and ID2 is the lowest ID2 value in the subtree.
760 </para>
761 </refsect1>
762
763 <refsect1 id='pst.file.leaf2.5'>
764 <title>Index 2 Leaf Node</title>
765 <para>
766 The index2 b-tree leaf nodes are 516 byte blocks with the following format.
767 </para>
768 <literallayout class="monospaced"><![CDATA[
769 0000 21 00 00 00 38 e6 00 00 00 00 00 00 00 00 00 00
770 0010 61 00 00 00 2c a8 02 00 36 a8 02 00 00 00 00 00
771 0020 22 01 00 00 20 a2 02 00 00 00 00 00 22 01 00 00
772 0030 2d 01 00 00 88 7b 03 00 00 00 00 00 00 00 00 00
773 0040 2e 01 00 00 08 00 00 00 00 00 00 00 00 00 00 00
774 0050 2f 01 00 00 0c 00 00 00 00 00 00 00 00 00 00 00
775 0060 e1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
776 0070 01 02 00 00 b4 e4 02 00 00 00 00 00 00 00 00 00
777 0080 61 02 00 00 a0 e4 02 00 00 00 00 00 00 00 00 00
778 0090 0d 06 00 00 04 00 00 00 00 00 00 00 00 00 00 00
779 00A0 0e 06 00 00 08 00 00 00 00 00 00 00 00 00 00 00
780 00B0 0f 06 00 00 0c 00 00 00 00 00 00 00 00 00 00 00
781 00C0 10 06 00 00 10 00 00 00 00 00 00 00 00 00 00 00
782 00D0 2b 06 00 00 84 00 00 00 00 00 00 00 00 00 00 00
783 00E0 4c 06 00 00 1c 00 00 00 00 00 00 00 00 00 00 00
784 00F0 71 06 00 00 18 00 00 00 00 00 00 00 00 00 00 00
785 0100 92 06 00 00 14 00 00 00 00 00 00 00 00 00 00 00
786 0110 23 22 00 00 14 a0 02 00 00 00 00 00 22 01 00 00
787 0120 26 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00
788 0130 27 22 00 00 1c a0 02 00 00 00 00 00 00 00 00 00
789 0140 22 80 00 00 50 00 00 00 00 00 00 00 22 01 00 00
790 0150 2d 80 00 00 f8 9f 02 00 00 00 00 00 00 00 00 00
791 0160 2e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00
792 0170 2f 80 00 00 34 e6 00 00 00 00 00 00 00 00 00 00
793 0180 42 80 00 00 3c 6d 02 00 00 00 00 00 22 80 00 00
794 0190 4d 80 00 00 04 00 00 00 00 00 00 00 00 00 00 00
795 01A0 4e 80 00 00 10 6d 02 00 00 00 00 00 00 00 00 00
796 01B0 4f 80 00 00 ec 23 00 00 00 00 00 00 00 00 00 00
797 01C0 62 80 00 00 38 78 02 00 00 00 00 00 22 01 00 00
798 01D0 6d 80 00 00 34 78 02 00 00 00 00 00 00 00 00 00
799 01E0 6e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00
800 01F0 10 1f 10 00 81 81 a0 9a ae 1e 02 00 89 44 6a 0f
801 0200 b8 b1 03 00
802
803 01f0 item-count [1 byte] 0x10 in this case
804 01f1 max-item-count [1 byte] 0x1f constant
805 01f3 node-level [1 byte] 0x00 in this case
806 01f8 back-pointer [4 bytes] 0x021eae in this case
807 ]]></literallayout>
808 <para>
809 The item-count specifies the number of 16 byte records that
810 are active. The node-level is zero for these leaf nodes.
811 The back-pointer must match the back-pointer from the triple
812 that pointed to this node.
813 </para>
814 <para>
815 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2)
816 </para>
817 </refsect1>
818
819 <refsect1 id='pst.file.list.5'>
820 <title>Associated List Item</title>
821 <para>
822 Contains associations between id1 and id2 for the items controlled by the record.
823 In the above leaf node, we have a tuple of (0x61, 0x02a82c, 0x02a836, 0)
824 0x02a836 is the ID1 of the associated list, and we can lookup that ID1 value
825 in the index1 b-tree to find the (offset,size) of the data in the .pst file.
826 </para>
827 <literallayout class="monospaced"><![CDATA[
828 0000 02 00 01 00 9f 81 00 00 30 a8 02 00 00 00 00 00
829
830 0000 unknown [2 bytes] 0x0002 constant
831 0002 count [2 bytes] 0x0001 in this case
832 repeating
833 0004 id2 [4 bytes] 0x00819f in this case
834 0008 id [4 bytes] 0x02a830 in this case
835 000c unknown [4 bytes] 0 in this case
836 ]]></literallayout>
837 </refsect1>
838
839 <refsect1 id='pst.file.desc.5'>
840 <title>Associated Descriptor Item</title>
841 <para>
842 Contains information about the item, which may be email, contact, or other outlook types.
843 In the above leaf node, we have a tuple of (0x21, 0x00e638, 0, 0)
844 0x00e638 is the ID1 of the associated descriptor, and we can lookup that ID1 value
845 in the index1 b-tree to find the (offset,size) of the data in the .pst file.
846 </para>
847 <literallayout class="monospaced"><![CDATA[
848 0000 3c 01 ec bc 20 00 00 00 00 00 00 00 b5 02 06 00
849 0010 40 00 00 00 f9 0f 02 01 60 00 00 00 01 30 1e 00
850 0020 80 00 00 00 04 30 1e 00 00 00 00 00 df 35 03 00
851 0030 ff 00 00 00 e0 35 02 01 a0 00 00 00 e2 35 02 01
852 0040 e0 00 00 00 e3 35 02 01 c0 00 00 00 e4 35 02 01
853 0050 00 01 00 00 e5 35 02 01 20 01 00 00 e6 35 02 01
854 0060 40 01 00 00 e7 35 02 01 60 01 00 00 1e 66 0b 00
855 0070 00 00 00 00 ff 67 03 00 00 00 00 00 d2 7f 17 d8
856 0080 64 8c d5 11 83 24 00 50 04 86 95 45 53 74 61 6e
857 0090 6c 65 79 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83
858 00A0 24 00 50 04 86 95 45 22 80 00 00 00 00 00 00 d2
859 00B0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 42
860 00C0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83
861 00D0 24 00 50 04 86 95 45 a2 80 00 00 00 00 00 00 d2
862 00E0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 c2
863 00F0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83
864 0100 24 00 50 04 86 95 45 e2 80 00 00 00 00 00 00 d2
865 0110 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 02
866 0120 81 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83
867 0130 24 00 50 04 86 95 45 62 80 00 00 00 0b 00 00 00
868 0140 0c 00 14 00 7c 00 8c 00 93 00 ab 00 c3 00 db 00
869 0150 f3 00 0b 01 23 01 3b 01
870
871 0000 index-offset [2 bytes] 0x013c in this case
872 0002 signature [2 bytes] 0xbcec constant
873 0004 offset [2 bytes] 0x0020 in this case
874 ]]></literallayout>
875 <para>
876 Note the index-offset of 0x013c - starting at that position in the
877 descriptor block, we have an array of two byte integers. The first
878 integer (0x000b) is a count of the number of overlapping pairs
879 following the count. The first pair is (0, 0xc), the next pair is (0xc, 0x14)
880 and the last (11th) pair is (0x10b, 0x123). These pairs are (start,end+1)
881 offsets of items in this block. So we have count+1 integers following
882 the count value.
883 </para>
884 <para>
885 Note the offset of 0x0020, which needs to be right shifted by 4 bits
886 to become 0x0002, which is then a byte offset to be added to the above
887 index-offset plus two (to skip the count), so it points to the (0xc, 0x14)
888 pair. Finally, we have the offset and size of the "b5" block located at offset 0xc
889 with a size of 8 bytes in this descriptor block. The "b5" block has the
890 following format:
891 </para>
892 <literallayout class="monospaced"><![CDATA[
893 0000 signature [2 bytes] 0x02b5 constant
894 0002 unknown [2 bytes] 0x0006 in this case
895 0004 offset [4 bytes] 0x0040 in this case
896 ]]></literallayout>
897 <para>
898 Note the "b5" offset of 0x0040, which needs to be right shifted by 4 bits
899 to become 0x0004, which is then a byte offset to be added to the above
900 index-offset plus two (to skip the count), so it points to the (0x14, 0x7c)
901 pair. We now have the offset 0x14 of the descriptor array, composed of 8 byte
902 entries. Each descriptor entry has the following format:
903 </para>
904 <literallayout class="monospaced"><![CDATA[
905 0000 item-type [2 bytes]
906 0002 reference-type [2 bytes]
907 0004 value [4 bytes]
908 ]]></literallayout>
909 <para>
910 For some reference types (2, 3, 0xb) the value is used directly. Otherwise,
911 the value is generally a non-zero offset, to be right shifted by 4 bits and used to fetch
912 a pair from the index table to find the offset and size of the item in this
913 descriptor block. However, if (value AND 0xf) == 0xf, then the value is an ID2 index.
914 </para>
915 <para>
916 The following reference types are known, but not all of these
917 are implemented in the code yet.
918 </para>
919 <literallayout class="monospaced"><![CDATA[
920 0x0002 - Signed 16bit value
921 0x0003 - Signed 32bit value
922 0x0004 - 4-byte floating point
923 0x0005 - Floating point double
924 0x0006 - Signed 64-bit int
925 0x0007 - Application Time
926 0x000A - 32-bit error value
927 0x000B - Boolean (non-zero = true)
928 0x000D - Embedded Object
929 0x0014 - 8-byte signed integer (64-bit)
930 0x001E - Null terminated String
931 0x001F - Unicode string
932 0x0040 - Systime - Filetime structure
933 0x0048 - OLE Guid
934 0x0102 - Binary data
935 0x1003 - Array of 32bit values
936 0x1014 - Array of 64bit values
937 0x101E - Array of Strings
938 0x1102 - Array of Binary data
939 ]]></literallayout>
940 <para>
941 The following item types are known, but not all of these
942 are implemented in the code yet.
943 Note: it appears that some types can have a IPOS value or a ID2 value
944 depending on the size of the field in question. It is safer to check
945 every field than for me to say what the "usually" contain. Absolute
946 values though, are generally going to be constant.
947 </para>
948 <literallayout class="monospaced"><![CDATA[
949 0002 AutoForward allowed
950 0003 Extended Attributes Table
951 0017 Importance Level
952 001a IPM Context. What type of message is this
953 0023 Global Delivery Report
954 0026 Priority
955 0029 Read Receipt
956 002b Reassignment Prohibited
957 002e Original Sensitivity
958 0036 Sensitivity
959 0037 Email Subject. The referenced item is of type "Subject Type"
960 0039 Date. This is likely to be the arrival date
961 003b Outlook Address of Sender
962 003f Outlook structure describing the recipient
963 0040 Name of the Outlook recipient structure
964 0041 Outlook structure describing the sender
965 0042 Name of the Outlook sender structure
966 0043 Another structure describing the recipient
967 0044 Name of the second recipient structure
968 004f Reply-To Outlook Structure
969 0050 Name of the Reply-To structure
970 0051 Outlook Name of recipient
971 0052 Second Outlook name of recipient
972 0057 My address in TO field
973 0058 My address in CC field
974 0059 Message addressed to me
975 0063 Response requested
976 0064 Sender's Address access method (SMTP, EX)
977 0065 Sender's Address
978 0070 Processed Subject (with Fwd:, Re, ... removed)
979 0071 Date. Another date
980 0075 Recipient Address Access Method (SMTP, EX)
981 0076 Recipient's Address
982 0077 Second Recipient Access Method (SMTP, EX)
983 0078 Second Recipient Address
984 007d Email Header. This is the header that was attached to the email
985 0c17 Reply Requested
986 0c19 Second sender struct
987 0c1a Name of second sender struct
988 0c1d Second outlook name of sender
989 0c1e Second sender access method (SMTP, EX)
990 0c1f Second Sender Address
991 0e01 Delete after submit
992 0e03 CC Address?
993 0e04 SentTo Address
994 0e06 Date.
995 0e07 Flag - contains IsSeen value
996 0e08 Message Size
997 0e0a Sentmail EntryID
998 0e1f Compressed RTF in Sync
999 0e20 Attachment Size
1000 0ff9 binary record header
1001 1000 Plain Text Email Body. Does not exist if the email doesn't have a plain text version
1002 1006 RTF Sync Body CRC
1003 1007 RTF Sync Body character count
1004 1008 RTF Sync body tag
1005 1009 RTF Compressed body
1006 1010 RTF whitespace prefix count
1007 1011 RTF whitespace tailing count
1008 1013 HTML Email Body. Does not exist if the email doesn't have a HTML version
1009 1035 Message ID
1010 1042 In-Reply-To or Parent's Message ID
1011 1046 Return Path
1012 3001 Folder Name? I have seen this value used for the contacts record aswell
1013 3002 Address Type
1014 3003 Contact Address
1015 3004 Comment
1016 3007 Date item creation
1017 3008 Date item modification
1018 300b binary record header
1019 35df Valid Folder Mask
1020 35e0 binary record found in first item. Contains the reference to "Top of Personal Folder" item
1021 35e3 binary record with a reference to "Deleted Items" item
1022 35e7 binary record with a refernece to "Search Root" item
1023 3602 the number of emails stored in a folder
1024 3603 the number of unread emails in a folder
1025 360a Has Subfolders
1026 3613 the folder content description
1027 3617 Associate Content count
1028 3701 Binary Data attachment
1029 3704 Attachment Filename
1030 3705 Attachement method
1031 3707 Attachment Filename long
1032 370b Attachment Position
1033 370e Attachment mime encoding
1034 3710 Attachment Mime Sequence
1035 3a00 Contact's Account name
1036 3a01 Contact Alternate Recipient
1037 3a02 Callback telephone number
1038 3a03 Message Conversion Prohibited
1039 3a05 Contacts Suffix
1040 3a06 Contacts First Name
1041 3a07 Contacts Government ID Number
1042 3a08 Business Telephone Number
1043 3a09 Home Telephone Number
1044 3a0a Contacts Initials
1045 3a0b Keyword
1046 3a0c Contact's Language
1047 3a0d Contact's Location
1048 3a0e Mail Permission
1049 3a0f MHS Common Name
1050 3a10 Organizational ID #
1051 3a11 Contacts Surname
1052 3a12 original entry id
1053 3a13 original display name
1054 3a14 original search key
1055 3a15 Default Postal Address
1056 3a16 Company Name
1057 3a17 Job Title
1058 3a18 Department Name
1059 3a19 Office Location
1060 3a1a Primary Telephone
1061 3a1b Business Phone Number 2
1062 3a1c Mobile Phone Number
1063 3a1d Radio Phone Number
1064 3a1e Car Phone Number
1065 3a1f Other Phone Number
1066 3a20 Transmittable Display Name
1067 3a21 Pager Phone Number
1068 3a22 user certificate
1069 3a23 Primary Fax Number
1070 3a24 Business Fax Number
1071 3a25 Home Fax Number
1072 3a26 Business Address Country
1073 3a27 Business Address City
1074 3a28 Business Address State
1075 3a29 Business Address Street
1076 3a2a Business Postal Code
1077 3a2b Business PO Box
1078 3a2c Telex Number
1079 3a2d ISDN Number
1080 3a2e Assistant Phone Number
1081 3a2f Home Phone 2
1082 3a30 Assistant's Name
1083 3a40 Can receive Rich Text
1084 3a41 Wedding Anniversary
1085 3a42 Birthday
1086 3a43 Hobbies
1087 3a44 Middle Name
1088 3a45 Display Name Prefix (Title)
1089 3a46 Profession
1090 3a47 Preferred By Name
1091 3a48 Spouse's Name
1092 3a49 Computer Network Name
1093 3a4a Customer ID
1094 3a4b TTY/TDD Phone
1095 3a4c Ftp Site
1096 3a4d Gender
1097 3a4e Manager's Name
1098 3a4f Nickname
1099 3a50 Personal Home Page
1100 3a51 Business Home Page
1101 3a57 Company Main Phone
1102 3a58 childrens names
1103 3a59 Home Address City
1104 3a5a Home Address Country
1105 3a5b Home Address Postal Code
1106 3a5c Home Address State or Province
1107 3a5d Home Address Street
1108 3a5e Home Address Post Office Box
1109 3a5f Other Address City
1110 3a60 Other Address Country
1111 3a61 Other Address Postal Code
1112 3a62 Other Address State
1113 3a63 Other Address Street
1114 3a64 Other Address Post Office box
1115 65e3 Entry ID
1116 67f2 Attachment ID2 value
1117 67ff Password checksum [0x67FF]
1118 6f02 Secure HTML Body
1119 6f04 Secure Text Body
1120 7c07 Top of folders RecID [0x7c07]
1121 8000 Contain extra bits of information that have been taken from the email's header. I call them extra lines
1122 8005 Contact Fullname
1123 801a Home Address
1124 801b Business Address
1125 801c Other Address
1126 8082 Email Address 1 Transport
1127 8083 Email Address 1 Address
1128 8084 Email Address 1 Description
1129 8085 Email Address 1 Record
1130 8092 Email Address 2 Transport
1131 8093 Email Address 2 Address
1132 8094 DEBUG_EMAIL (("Email Address 2 Description
1133 8095 Email Address 2 Record
1134 80a2 DEBUG_EMAIL (("Email Address 3 Transport
1135 80a3 Email Address 3 Address
1136 80a4 Email Address 3 Description
1137 80a5 Email Address 3 Record
1138 80d8 Internet Free/Busy
1139 8205 Appointment shows as
1140 8208 Appointment Location
1141 8214 Label for appointment
1142 8234 TimeZone of times
1143 8235 Appointment Start Time
1144 8236 Appointment End Time
1145 8516 Duplicate Time Start
1146 8517 Duplicate Time End
1147 8530 Followup String
1148 8534 Mileage
1149 8535 Billing Information
1150 8554 Outlook Version
1151 8560 Appointment Reminder Time
1152 8700 Journal Entry Type
1153 8706 Start Timestamp
1154 8708 End Timestamp
1155 8712 Journal Entry Type
1156 ]]></literallayout>
1157 </refsect1>
1158
1159 </refentry>
349 </reference> 1160 </reference>