\contentsline {chapter}{\numberline {1}Bacula Developer Notes}{1}{chapter.1}
\contentsline {section}{Bacula Developer Notes}{1}{section*.2}
\contentsline {subsection}{\numberline {1.0.1}Contributions}{1}{subsection.1.0.1}
\contentsline {subsubsection}{Contributions}{1}{subsection.1.0.1}
\contentsline {subsection}{\numberline {1.0.2}Patches}{1}{subsection.1.0.2}
\contentsline {subsubsection}{Patches}{1}{subsection.1.0.2}
\contentsline {subsection}{\numberline {1.0.3}Copyrights}{1}{subsection.1.0.3}
\contentsline {subsubsection}{Copyrights}{1}{subsection.1.0.3}
\contentsline {subsection}{\numberline {1.0.4}Copyright Assignment -- Fiduciary License Agreement}{2}{subsection.1.0.4}
\contentsline {subsubsection}{Copyright Assignment -- Fiduciary License Agreement}{2}{subsection.1.0.4}
\contentsline {section}{\numberline {1.1}The Development Cycle}{3}{section.1.1}
\contentsline {subsubsection}{Development Cycle}{3}{section.1.1}
\contentsline {section}{\numberline {1.2}Bacula Code Submissions and Projects}{4}{section.1.2}
\contentsline {subsection}{Code Submissions and Projects}{4}{section*.3}
\contentsline {section}{\numberline {1.3}Patches for Released Versions}{5}{section.1.3}
\contentsline {subsection}{Patches for Released Versions}{5}{section*.4}
\contentsline {section}{\numberline {1.4}Developing Bacula}{6}{section.1.4}
\contentsline {subsubsection}{Developing Bacula}{6}{section.1.4}
\contentsline {subsection}{\numberline {1.4.1}Debugging}{6}{subsection.1.4.1}
\contentsline {subsubsection}{Debugging}{6}{subsection.1.4.1}
\contentsline {subsection}{\numberline {1.4.2}Using a Debugger}{6}{subsection.1.4.2}
\contentsline {subsubsection}{Using a Debugger}{6}{subsection.1.4.2}
\contentsline {subsection}{\numberline {1.4.3}Memory Leaks}{6}{subsection.1.4.3}
\contentsline {subsubsection}{Memory Leaks}{6}{subsection.1.4.3}
\contentsline {subsection}{\numberline {1.4.4}Special Files}{7}{subsection.1.4.4}
\contentsline {subsubsection}{Special Files}{7}{subsection.1.4.4}
\contentsline {subsection}{\numberline {1.4.5}When Implementing Incomplete Code}{7}{subsection.1.4.5}
\contentsline {subsubsection}{When Implementing Incomplete Code}{7}{subsection.1.4.5}
\contentsline {subsection}{\numberline {1.4.6}Bacula Source File Structure}{7}{subsection.1.4.6}
\contentsline {subsubsection}{Bacula Source File Structure}{7}{subsection.1.4.6}
\contentsline {subsection}{\numberline {1.4.7}Header Files}{8}{subsection.1.4.7}
\contentsline {subsubsection}{Header Files}{8}{subsection.1.4.7}
\contentsline {subsection}{\numberline {1.4.8}Programming Standards}{9}{subsection.1.4.8}
\contentsline {subsubsection}{Programming Standards}{9}{subsection.1.4.8}
\contentsline {subsection}{\numberline {1.4.9}Do Not Use}{9}{subsection.1.4.9}
\contentsline {subsubsection}{Do Not Use}{9}{subsection.1.4.9}
\contentsline {subsection}{\numberline {1.4.10}Avoid if Possible}{9}{subsection.1.4.10}
\contentsline {subsubsection}{Avoid if Possible}{9}{subsection.1.4.10}
\contentsline {subsection}{\numberline {1.4.11}Do Use Whenever Possible}{9}{subsection.1.4.11}
\contentsline {subsubsection}{Do Use Whenever Possible}{9}{subsection.1.4.11}
\contentsline {subsection}{\numberline {1.4.12}Indenting Standards}{10}{subsection.1.4.12}
\contentsline {subsubsection}{Indenting Standards}{10}{subsection.1.4.12}
\contentsline {subsection}{\numberline {1.4.13}Tabbing}{11}{subsection.1.4.13}
\contentsline {subsubsection}{Tabbing}{11}{subsection.1.4.13}
\contentsline {subsection}{\numberline {1.4.14}Don'ts}{11}{subsection.1.4.14}
\contentsline {subsubsection}{Don'ts}{11}{subsection.1.4.14}
\contentsline {subsection}{\numberline {1.4.15}Message Classes}{12}{subsection.1.4.15}
\contentsline {subsubsection}{Message Classes}{12}{subsection.1.4.15}
\contentsline {subsection}{\numberline {1.4.16}Debug Messages}{12}{subsection.1.4.16}
\contentsline {subsubsection}{Debug Messages}{12}{subsection.1.4.16}
\contentsline {subsection}{\numberline {1.4.17}Error Messages}{12}{subsection.1.4.17}
\contentsline {subsubsection}{Error Messages}{12}{subsection.1.4.17}
\contentsline {subsection}{\numberline {1.4.18}Job Messages}{13}{subsection.1.4.18}
\contentsline {subsubsection}{Job Messages}{13}{subsection.1.4.18}
\contentsline {subsection}{\numberline {1.4.19}Queued Job Messages}{13}{subsection.1.4.19}
\contentsline {subsubsection}{Queued Job Messages}{13}{subsection.1.4.19}
\contentsline {subsection}{\numberline {1.4.20}Memory Messages}{13}{subsection.1.4.20}
\contentsline {subsubsection}{Memory Messages}{13}{subsection.1.4.20}
\contentsline {subsection}{\numberline {1.4.21}Bugs Database}{13}{subsection.1.4.21}
\contentsline {subsubsection}{Bugs Database}{13}{subsection.1.4.21}
\contentsline {chapter}{\numberline {2}Bacula Git Usage}{15}{chapter.2}
\contentsline {section}{Bacula Bit Usage}{15}{section*.5}
\contentsline {section}{\numberline {2.1}Bacula Git repositories}{15}{section.2.1}
\contentsline {subsection}{Git repositories}{15}{section*.6}
\contentsline {section}{\numberline {2.2}Git Usage}{15}{section.2.2}
\contentsline {subsection}{Git Usage}{15}{section*.7}
\contentsline {subsection}{\numberline {2.2.1}Learning Git}{16}{subsection.2.2.1}
\contentsline {section}{\numberline {2.3}Step by Step Modifying Bacula Code}{17}{section.2.3}
\contentsline {subsection}{\numberline {2.3.1}More Details}{18}{subsection.2.3.1}
\contentsline {section}{\numberline {2.4}Forcing Changes}{20}{section.2.4}
\contentsline {chapter}{\numberline {3}Bacula FD Plugin API}{21}{chapter.3}
\contentsline {section}{\numberline {3.1}Normal vs Command Plugins}{21}{section.3.1}
\contentsline {section}{\numberline {3.2}Loading Plugins}{22}{section.3.2}
\contentsline {section}{\numberline {3.3}loadPlugin}{22}{section.3.3}
\contentsline {section}{\numberline {3.4}Plugin Entry Points}{25}{section.3.4}
\contentsline {subsection}{\numberline {3.4.1}newPlugin(bpContext *ctx)}{25}{subsection.3.4.1}
\contentsline {subsection}{\numberline {3.4.2}freePlugin(bpContext *ctx)}{25}{subsection.3.4.2}
\contentsline {subsection}{\numberline {3.4.3}getPluginValue(bpContext *ctx, pVariable var, void *value)}{25}{subsection.3.4.3}
\contentsline {subsection}{\numberline {3.4.4}setPluginValue(bpContext *ctx, pVariable var, void *value)}{25}{subsection.3.4.4}
\contentsline {subsection}{\numberline {3.4.5}handlePluginEvent(bpContext *ctx, bEvent *event, void *value)}{25}{subsection.3.4.5}
\contentsline {subsection}{\numberline {3.4.6}startBackupFile(bpContext *ctx, struct save\_pkt *sp)}{27}{subsection.3.4.6}
\contentsline {subsection}{\numberline {3.4.7}endBackupFile(bpContext *ctx)}{28}{subsection.3.4.7}
\contentsline {subsection}{\numberline {3.4.8}startRestoreFile(bpContext *ctx, const char *cmd)}{28}{subsection.3.4.8}
\contentsline {subsection}{\numberline {3.4.9}createFile(bpContext *ctx, struct restore\_pkt *rp)}{28}{subsection.3.4.9}
\contentsline {subsection}{\numberline {3.4.10}setFileAttributes(bpContext *ctx, struct restore\_pkt *rp)}{30}{subsection.3.4.10}
\contentsline {subsection}{\numberline {3.4.11}endRestoreFile(bpContext *ctx)}{30}{subsection.3.4.11}
\contentsline {subsection}{\numberline {3.4.12}pluginIO(bpContext *ctx, struct io\_pkt *io)}{30}{subsection.3.4.12}
\contentsline {subsection}{\numberline {3.4.13}bool checkFile(bpContext *ctx, char *fname)}{31}{subsection.3.4.13}
\contentsline {section}{\numberline {3.5}Bacula Plugin Entrypoints}{31}{section.3.5}
\contentsline {subsection}{\numberline {3.5.1}bRC registerBaculaEvents(bpContext *ctx, ...)}{31}{subsection.3.5.1}
\contentsline {subsection}{\numberline {3.5.2}bRC getBaculaValue(bpContext *ctx, bVariable var, void *value)}{32}{subsection.3.5.2}
\contentsline {subsection}{\numberline {3.5.3}bRC setBaculaValue(bpContext *ctx, bVariable var, void *value)}{32}{subsection.3.5.3}
\contentsline {subsection}{\numberline {3.5.4}bRC JobMessage(bpContext *ctx, const char *file, int line, int type, utime\_t mtime, const char *fmt, ...)}{32}{subsection.3.5.4}
\contentsline {subsection}{\numberline {3.5.5}bRC DebugMessage(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...)}{32}{subsection.3.5.5}
\contentsline {subsection}{\numberline {3.5.6}void baculaMalloc(bpContext *ctx, const char *file, int line, size\_t size)}{32}{subsection.3.5.6}
\contentsline {subsection}{\numberline {3.5.7}void baculaFree(bpContext *ctx, const char *file, int line, void *mem)}{32}{subsection.3.5.7}
\contentsline {section}{\numberline {3.6}Building Bacula Plugins}{32}{section.3.6}
\contentsline {chapter}{\numberline {4}Platform Support}{35}{chapter.4}
\contentsline {section}{Platform Support}{35}{section*.8}
\contentsline {section}{\numberline {4.1}General}{35}{section.4.1}
\contentsline {subsection}{General}{35}{section*.9}
\contentsline {section}{\numberline {4.2}Requirements to become a Supported Platform}{35}{section.4.2}
\contentsline {subsection}{Platform Requirements}{35}{section*.10}
\contentsline {chapter}{\numberline {5}Daemon Protocol}{37}{chapter.5}
\contentsline {section}{\numberline {5.1}General}{37}{section.5.1}
\contentsline {subsection}{General}{37}{section*.11}
\contentsline {section}{\numberline {5.2}Low Level Network Protocol}{37}{section.5.2}
\contentsline {subsection}{Low Level Network Protocol}{37}{section*.12}
\contentsline {section}{\numberline {5.3}General Daemon Protocol}{37}{section.5.3}
\contentsline {subsection}{General Daemon Protocol}{37}{section*.13}
\contentsline {section}{\numberline {5.4}The Protocol Used Between the Director and the Storage Daemon}{38}{section.5.4}
\contentsline {subsection}{Protocol Used Between the Director and the Storage Daemon}{38}{section*.14}
\contentsline {section}{\numberline {5.5}The Protocol Used Between the Director and the File Daemon}{38}{section.5.5}
\contentsline {subsection}{Protocol Used Between the Director and the File Daemon}{38}{section*.15}
\contentsline {section}{\numberline {5.6}The Save Protocol Between the File Daemon and the Storage Daemon}{39}{section.5.6}
\contentsline {subsection}{Save Protocol Between the File Daemon and the Storage Daemon}{39}{section*.16}
\contentsline {subsection}{\numberline {5.6.1}Command and Control Information}{39}{subsection.5.6.1}
\contentsline {subsubsection}{Command and Control Information}{39}{subsection.5.6.1}
\contentsline {subsection}{\numberline {5.6.2}Data Information}{39}{subsection.5.6.2}
\contentsline {subsubsection}{Data Information}{39}{subsection.5.6.2}
\contentsline {chapter}{\numberline {6}Director Services Daemon}{41}{chapter.6}
\contentsline {section}{Director Services Daemon}{41}{section*.17}
\contentsline {chapter}{\numberline {7}File Services Daemon}{43}{chapter.7}
\contentsline {section}{File Services Daemon}{43}{section*.18}
\contentsline {section}{\numberline {7.1}Commands Received from the Director for a Backup}{43}{section.7.1}
\contentsline {subsection}{Commands Received from the Director for a Backup}{43}{section*.19}
\contentsline {section}{\numberline {7.2}Commands Received from the Director for a Restore}{44}{section.7.2}
\contentsline {subsection}{Commands Received from the Director for a Restore}{44}{section*.20}
\contentsline {chapter}{\numberline {8}Storage Daemon Design}{45}{chapter.8}
\contentsline {section}{Storage Daemon Design}{45}{section*.21}
\contentsline {section}{\numberline {8.1}SD Design Introduction}{45}{section.8.1}
\contentsline {section}{SD Design Introduction}{45}{section.8.1}
\contentsline {section}{\numberline {8.2}SD Development Outline}{45}{section.8.2}
\contentsline {section}{SD Development Outline}{45}{section.8.2}
\contentsline {section}{\numberline {8.3}SD Connections and Sessions}{45}{section.8.3}
\contentsline {section}{SD Connections and Sessions}{45}{section.8.3}
\contentsline {subsection}{\numberline {8.3.1}SD Append Requests}{46}{subsection.8.3.1}
\contentsline {subsection}{SD Append Requests}{46}{subsection.8.3.1}
\contentsline {subsection}{\numberline {8.3.2}SD Read Requests}{47}{subsection.8.3.2}
\contentsline {subsection}{SD Read Requests}{47}{subsection.8.3.2}
\contentsline {section}{\numberline {8.4}SD Data Structures}{47}{section.8.4}
\contentsline {section}{SD Data Structures}{47}{section.8.4}
\contentsline {chapter}{\numberline {9}Catalog Services}{49}{chapter.9}
\contentsline {section}{\numberline {9.1}General}{49}{section.9.1}
\contentsline {subsection}{General}{49}{section*.22}
\contentsline {subsection}{\numberline {9.1.1}Filenames and Maximum Filename Length}{49}{subsection.9.1.1}
\contentsline {subsubsection}{Filenames and Maximum Filename Length}{49}{subsection.9.1.1}
\contentsline {subsection}{\numberline {9.1.2}Installing and Configuring MySQL}{50}{subsection.9.1.2}
\contentsline {subsubsection}{Installing and Configuring MySQL}{50}{subsection.9.1.2}
\contentsline {subsection}{\numberline {9.1.3}Installing and Configuring PostgreSQL}{50}{subsection.9.1.3}
\contentsline {subsubsection}{Installing and Configuring PostgreSQL}{50}{subsection.9.1.3}
\contentsline {subsection}{\numberline {9.1.4}Installing and Configuring SQLite}{50}{subsection.9.1.4}
\contentsline {subsubsection}{Installing and Configuring SQLite}{50}{subsection.9.1.4}
\contentsline {subsection}{\numberline {9.1.5}Internal Bacula Catalog}{50}{subsection.9.1.5}
\contentsline {subsubsection}{Internal Bacula Catalog}{50}{subsection.9.1.5}
\contentsline {subsection}{\numberline {9.1.6}Database Table Design}{50}{subsection.9.1.6}
\contentsline {subsubsection}{Database Table Design}{50}{subsection.9.1.6}
\contentsline {section}{\numberline {9.2}Sequence of Creation of Records for a Save Job}{50}{section.9.2}
\contentsline {subsection}{Sequence of Creation of Records for a Save Job}{50}{section*.23}
\contentsline {section}{\numberline {9.3}Database Tables}{51}{section.9.3}
\contentsline {subsection}{Database Tables}{51}{section*.24}
\contentsline {subsection}{\numberline {9.3.1}MySQL Table Definition}{58}{subsection.9.3.1}
\contentsline {subsubsection}{MySQL Table Definition}{58}{subsection.9.3.1}
\contentsline {chapter}{\numberline {10}Storage Media Output Format}{61}{chapter.10}
\contentsline {section}{Storage Media Output Format}{61}{section*.25}
\contentsline {section}{\numberline {10.1}General}{61}{section.10.1}
\contentsline {subsection}{General}{61}{section*.26}
\contentsline {section}{\numberline {10.2}Definitions}{61}{section.10.2}
\contentsline {subsection}{Definitions}{61}{section*.27}
\contentsline {section}{\numberline {10.3}Storage Daemon File Output Format}{62}{section.10.3}
\contentsline {subsection}{Storage Daemon File Output Format}{62}{section*.28}
\contentsline {section}{\numberline {10.4}Overall Format}{63}{section.10.4}
\contentsline {subsection}{Overall Format}{63}{section*.29}
\contentsline {section}{\numberline {10.5}Serialization}{63}{section.10.5}
\contentsline {subsection}{Serialization}{63}{section*.30}
\contentsline {section}{\numberline {10.6}Block Header}{63}{section.10.6}
\contentsline {subsection}{Block Header}{63}{section*.31}
\contentsline {section}{\numberline {10.7}Record Header}{64}{section.10.7}
\contentsline {subsection}{Record Header}{64}{section*.32}
\contentsline {section}{\numberline {10.8}Version BB02 Block Header}{65}{section.10.8}
\contentsline {subsection}{Version BB02 Block Header}{65}{section*.33}
\contentsline {section}{\numberline {10.9}Version 2 Record Header}{65}{section.10.9}
\contentsline {subsection}{Version 2 Record Header}{65}{section*.34}
\contentsline {section}{\numberline {10.10}Volume Label Format}{65}{section.10.10}
\contentsline {subsection}{Volume Label Format}{65}{section*.35}
\contentsline {section}{\numberline {10.11}Session Label}{66}{section.10.11}
\contentsline {subsection}{Session Label}{66}{section*.36}
\contentsline {section}{\numberline {10.12}Overall Storage Format}{66}{section.10.12}
\contentsline {subsection}{Overall Storage Format}{66}{section*.37}
\contentsline {section}{\numberline {10.13}Unix File Attributes}{70}{section.10.13}
\contentsline {subsection}{Unix File Attributes}{70}{section*.38}
\contentsline {section}{\numberline {10.14}Old Depreciated Tape Format}{71}{section.10.14}
\contentsline {subsection}{Old Depreciated Tape Format}{71}{section*.39}
\contentsline {chapter}{\numberline {11}Bacula Porting Notes}{75}{chapter.11}
\contentsline {section}{Bacula Porting Notes}{75}{section*.40}
\contentsline {section}{\numberline {11.1}Porting Requirements}{75}{section.11.1}
\contentsline {section}{Porting Requirements}{75}{section.11.1}
\contentsline {section}{\numberline {11.2}Steps to Take for Porting}{76}{section.11.2}
\contentsline {section}{Steps to Take for Porting}{76}{section.11.2}
\contentsline {section}{Implementing a Bacula GUI Interface}{79}{chapter*.41}
\contentsline {section}{\numberline {11.1}General}{79}{section.11.1}
\contentsline {subsection}{General}{79}{section*.42}
\contentsline {subsection}{\numberline {11.1.1}Minimal Code in Console Program}{79}{subsection.11.1.1}
\contentsline {subsubsection}{Minimal Code in Console Program}{79}{subsection.11.1.1}
\contentsline {subsection}{\numberline {11.1.2}GUI Interface is Difficult}{79}{subsection.11.1.2}
\contentsline {subsubsection}{GUI Interface is Difficult}{79}{subsection.11.1.2}
\contentsline {section}{\numberline {11.2}Bvfs API}{80}{section.11.2}
\contentsline {chapter}{\numberline {12}TLS}{81}{chapter.12}
\contentsline {section}{\numberline {12.1}Introduction to TLS}{81}{section.12.1}
\contentsline {section}{TLS Introduction}{81}{section.12.1}
\contentsline {section}{\numberline {12.2}New Configuration Directives}{81}{section.12.2}
\contentsline {section}{New Configuration Directives}{81}{section.12.2}
\contentsline {section}{\numberline {12.3}TLS API Implementation}{82}{section.12.3}
\contentsline {section}{TLS API Implementation}{82}{section.12.3}
\contentsline {subsection}{\numberline {12.3.1}Library Initialization and Cleanup}{82}{subsection.12.3.1}
\contentsline {subsection}{Library Initialization and Cleanup}{82}{subsection.12.3.1}
\contentsline {subsection}{\numberline {12.3.2}Manipulating TLS Contexts}{82}{subsection.12.3.2}
\contentsline {subsection}{Manipulating TLS Contexts}{82}{subsection.12.3.2}
\contentsline {subsection}{\numberline {12.3.3}Performing Post-Connection Verification}{83}{subsection.12.3.3}
\contentsline {subsection}{Performing Post-Connection Verification}{83}{subsection.12.3.3}
\contentsline {subsection}{\numberline {12.3.4}Manipulating TLS Connections}{83}{subsection.12.3.4}
\contentsline {subsection}{Manipulating TLS Connections}{83}{subsection.12.3.4}
\contentsline {section}{\numberline {12.4}Bnet API Changes}{84}{section.12.4}
\contentsline {section}{Bnet API Changes}{84}{section.12.4}
\contentsline {subsection}{\numberline {12.4.1}Negotiating a TLS Connection}{84}{subsection.12.4.1}
\contentsline {subsection}{Negotiating a TLS Connection}{84}{subsection.12.4.1}
\contentsline {subsection}{\numberline {12.4.2}Manipulating Socket Blocking State}{84}{subsection.12.4.2}
\contentsline {subsection}{Manipulating Socket Blocking State}{84}{subsection.12.4.2}
\contentsline {section}{\numberline {12.5}Authentication Negotiation}{85}{section.12.5}
\contentsline {section}{Authentication Negotiation}{85}{section.12.5}
\contentsline {chapter}{\numberline {13}Bacula Regression Testing}{87}{chapter.13}
\contentsline {section}{Bacula Regression Testing}{87}{section*.43}
\contentsline {section}{\numberline {13.1}General}{87}{section.13.1}
\contentsline {section}{General}{87}{section.13.1}
\contentsline {section}{\numberline {13.2}Running the Regression Script}{88}{section.13.2}
\contentsline {section}{Running the Regression Script}{88}{section.13.2}
\contentsline {subsection}{\numberline {13.2.1}Setting the Configuration Parameters}{88}{subsection.13.2.1}
\contentsline {subsection}{Setting the Configuration Parameters}{88}{subsection.13.2.1}
\contentsline {subsection}{\numberline {13.2.2}Building the Test Bacula}{89}{subsection.13.2.2}
\contentsline {subsection}{Building the Test Bacula}{89}{subsection.13.2.2}
\contentsline {subsection}{\numberline {13.2.3}Setting up your SQL engine}{90}{subsection.13.2.3}
\contentsline {subsection}{Setting up your SQL engine}{90}{subsection.13.2.3}
\contentsline {subsection}{\numberline {13.2.4}Running the Disk Only Regression}{90}{subsection.13.2.4}
\contentsline {subsection}{Running the Disk Only Regression}{90}{subsection.13.2.4}
\contentsline {subsection}{\numberline {13.2.5}Other Tests}{91}{subsection.13.2.5}
\contentsline {subsection}{Other Tests}{91}{subsection.13.2.5}
\contentsline {subsection}{\numberline {13.2.6}If a Test Fails}{92}{subsection.13.2.6}
\contentsline {subsection}{If a Test Fails}{92}{subsection.13.2.6}
\contentsline {section}{\numberline {13.3}Testing a Binary Installation}{92}{section.13.3}
\contentsline {section}{\numberline {13.4}Running a Single Test}{92}{section.13.4}
\contentsline {section}{Running a Single Test}{92}{section.13.4}
\contentsline {section}{\numberline {13.5}Writing a Regression Test}{93}{section.13.5}
\contentsline {section}{Writing a Regression Test}{93}{section.13.5}
\contentsline {subsection}{\numberline {13.5.1}Running the Tests by Hand}{93}{subsection.13.5.1}
\contentsline {subsection}{Running the Tests by Hand}{93}{subsection.13.5.1}
\contentsline {subsection}{\numberline {13.5.2}Directory Structure}{93}{subsection.13.5.2}
\contentsline {subsection}{Directory Structure}{93}{subsection.13.5.2}
\contentsline {subsection}{\numberline {13.5.3}Adding a New Test}{93}{subsection.13.5.3}
\contentsline {subsection}{Adding a New Test}{93}{subsection.13.5.3}
\contentsline {subsection}{\numberline {13.5.4}Running a Test Under The Debugger}{93}{subsection.13.5.4}
\contentsline {subsection}{Running a Test Under The Debugger}{93}{subsection.13.5.4}
\contentsline {chapter}{\numberline {14}Bacula MD5 Algorithm}{95}{chapter.14}
\contentsline {section}{}{95}{section*.44}
\contentsline {section}{\numberline {14.1}Command Line Message Digest Utility }{95}{section.14.1}
\contentsline {subsection}{Command Line Message Digest Utility}{95}{section*.45}
\contentsline {subsection}{\numberline {14.1.1}Name}{95}{subsection.14.1.1}
\contentsline {subsubsection}{Name}{95}{subsection.14.1.1}
\contentsline {subsection}{\numberline {14.1.2}Synopsis}{95}{subsection.14.1.2}
\contentsline {subsubsection}{Synopsis}{95}{subsection.14.1.2}
\contentsline {subsection}{\numberline {14.1.3}Description}{95}{subsection.14.1.3}
\contentsline {subsubsection}{Description}{95}{subsection.14.1.3}
\contentsline {subsection}{\numberline {14.1.4}Options}{96}{subsection.14.1.4}
\contentsline {subsubsection}{Options}{96}{subsection.14.1.4}
\contentsline {subsection}{\numberline {14.1.5}Files}{96}{subsection.14.1.5}
\contentsline {subsubsection}{Files}{96}{subsection.14.1.5}
\contentsline {subsection}{\numberline {14.1.6}Bugs}{96}{subsection.14.1.6}
\contentsline {subsubsection}{Bugs}{96}{subsection.14.1.6}
\contentsline {section}{\numberline {14.2} \htmladdnormallink {Download md5.zip}{http://www.fourmilab.ch/md5/md5.zip} (Zipped archive)}{96}{section.14.2}
\contentsline {subsection}{Download md5.zip (Zipped archive)}{96}{section*.46}
\contentsline {subsection}{\numberline {14.2.1}See Also}{96}{subsection.14.2.1}
\contentsline {subsubsection}{SEE ALSO}{96}{subsection.14.2.1}
\contentsline {subsection}{\numberline {14.2.2}Exit Status}{97}{subsection.14.2.2}
\contentsline {subsubsection}{Exit Status}{97}{subsection.14.2.2}
\contentsline {subsection}{\numberline {14.2.3}Copying}{97}{subsection.14.2.3}
\contentsline {subsubsection}{Copying}{97}{subsection.14.2.3}
\contentsline {subsection}{\numberline {14.2.4}Acknowledgements}{97}{subsection.14.2.4}
\contentsline {subsubsection}{Acknowledgements}{97}{subsection.14.2.4}
\contentsline {chapter}{\numberline {15}Bacula Memory Management}{99}{chapter.15}
\contentsline {section}{Bacula Memory Management}{99}{section*.47}
\contentsline {section}{\numberline {15.1}General}{99}{section.15.1}
\contentsline {subsection}{General}{99}{section*.48}
\contentsline {subsection}{\numberline {15.1.1}Statically Allocated Memory}{99}{subsection.15.1.1}
\contentsline {subsubsection}{Statically Allocated Memory}{99}{subsection.15.1.1}
\contentsline {subsection}{\numberline {15.1.2}Dynamically Allocated Memory}{99}{subsection.15.1.2}
\contentsline {subsubsection}{Dynamically Allocated Memory}{99}{subsection.15.1.2}
\contentsline {subsection}{\numberline {15.1.3}Pooled and Non-pooled Memory}{100}{subsection.15.1.3}
\contentsline {subsubsection}{Pooled and Non-pooled Memory}{100}{subsection.15.1.3}
\contentsline {chapter}{\numberline {16}TCP/IP Network Protocol}{103}{chapter.16}
\contentsline {section}{TCP/IP Network Protocol}{103}{section*.57}
\contentsline {section}{\numberline {16.1}General}{103}{section.16.1}
\contentsline {subsection}{General}{103}{section*.58}
\contentsline {section}{\numberline {16.2}bnet and Threads}{103}{section.16.2}
\contentsline {subsection}{bnet and Threads}{103}{section*.59}
\contentsline {section}{\numberline {16.3}bnet\_open}{103}{section.16.3}
\contentsline {subsection}{bnet\_open}{103}{section*.60}
\contentsline {section}{\numberline {16.4}bnet\_send}{104}{section.16.4}
\contentsline {subsection}{bnet\_send}{104}{section*.61}
\contentsline {section}{\numberline {16.5}bnet\_fsend}{104}{section.16.5}
\contentsline {subsection}{bnet\_fsend}{104}{section*.62}
\contentsline {section}{\numberline {16.6}Additional Error information}{104}{section.16.6}
\contentsline {subsection}{Additional Error information}{104}{section*.63}
\contentsline {section}{\numberline {16.7}bnet\_recv}{104}{section.16.7}
\contentsline {subsection}{bnet\_recv}{104}{section*.64}
\contentsline {section}{\numberline {16.8}bnet\_sig}{104}{section.16.8}
\contentsline {subsection}{bnet\_sig}{104}{section*.65}
\contentsline {section}{\numberline {16.9}bnet\_strerror}{105}{section.16.9}
\contentsline {subsection}{bnet\_strerror}{105}{section*.66}
\contentsline {section}{\numberline {16.10}bnet\_close}{105}{section.16.10}
\contentsline {subsection}{bnet\_close}{105}{section*.67}
\contentsline {section}{\numberline {16.11}Becoming a Server}{105}{section.16.11}
\contentsline {subsection}{Becoming a Server}{105}{section*.68}
\contentsline {section}{\numberline {16.12}Higher Level Conventions}{105}{section.16.12}
\contentsline {subsection}{Higher Level Conventions}{105}{section*.69}
\contentsline {chapter}{\numberline {17}Smart Memory Allocation}{109}{chapter.17}
\contentsline {section}{Smart Memory Allocation With Orphaned Buffer Detection}{109}{section*.70}
\contentsline {subsection}{\numberline {17.0.1} Installing SMARTALLOC}{109}{subsection.17.0.1}
\contentsline {subsection}{Installing SMARTALLOC}{109}{subsection.17.0.1}
\contentsline {subsection}{\numberline {17.0.2} Squelching a SMARTALLOC}{110}{subsection.17.0.2}
\contentsline {subsection}{Squelching a SMARTALLOC}{110}{subsection.17.0.2}
\contentsline {subsection}{\numberline {17.0.3} Living with Libraries}{110}{subsection.17.0.3}
\contentsline {subsection}{Living with Libraries}{110}{subsection.17.0.3}
\contentsline {subsection}{\numberline {17.0.4} SMARTALLOC Details}{111}{subsection.17.0.4}
\contentsline {subsection}{SMARTALLOC Details}{111}{subsection.17.0.4}
\contentsline {subsection}{\numberline {17.0.5} When SMARTALLOC is Disabled}{112}{subsection.17.0.5}
\contentsline {subsection}{When SMARTALLOC is Disabled}{112}{subsection.17.0.5}
\contentsline {subsection}{\numberline {17.0.6} The {\tt alloc()} Function}{112}{subsection.17.0.6}
\contentsline {subsection}{alloc() Function}{112}{subsection.17.0.6}
\contentsline {subsection}{\numberline {17.0.7} Overlays and Underhandedness}{113}{subsection.17.0.7}
\contentsline {subsection}{Overlays and Underhandedness}{113}{subsection.17.0.7}
\contentsline {subsection}{\numberline {17.0.8} Test and Demonstration Program}{113}{subsection.17.0.8}
\contentsline {subsection}{Test and Demonstration Program}{113}{subsection.17.0.8}
\contentsline {subsection}{\numberline {17.0.9} Invitation to the Hack}{113}{subsection.17.0.9}
\contentsline {subsection}{Invitation to the Hack}{113}{subsection.17.0.9}
\contentsline {section}{\numberline {17.1} \htmladdnormallink {}{http://www.fourmilab.ch/smartall/smartall.zip} \htmladdnormallink {Download smartall.zip}{http://www.fourmilab.ch/smartall/smartall.zip} (Zipped archive)}{113}{section.17.1}
\contentsline {section}{ Download smartall.zip (Zipped archive)}{113}{section.17.1}
\contentsline {subsection}{\numberline {17.1.1} Copying}{114}{subsection.17.1.1}
\contentsline {subsection}{Copying}{114}{subsection.17.1.1}
\contentsline {chapter}{\numberline {18}GNU Free Documentation License}{115}{chapter.18}
\contentsline {section}{GNU ree Documentation License}{115}{section*.71}
\contentsline {section}{1. APPLICABILITY AND DEFINITIONS}{115}{section*.71}
\contentsline {section}{2. VERBATIM COPYING}{116}{section*.71}
\contentsline {section}{3. COPYING IN QUANTITY}{116}{section*.71}
\contentsline {section}{4. MODIFICATIONS}{117}{section*.71}
\contentsline {section}{5. COMBINING DOCUMENTS}{118}{section*.71}
\contentsline {section}{6. COLLECTIONS OF DOCUMENTS}{118}{section*.71}
\contentsline {section}{7. AGGREGATION WITH INDEPENDENT WORKS}{119}{section*.71}
\contentsline {section}{8. TRANSLATION}{119}{section*.71}
\contentsline {section}{9. TERMINATION}{119}{section*.71}
\contentsline {section}{10. FUTURE REVISIONS OF THIS LICENSE}{119}{section*.71}
\contentsline {section}{ADDENDUM: How to use this License for your documents}{120}{section*.71}
