\select@language {english}
\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}{12}{subsection.1.4.14}
\contentsline {subsubsection}{Don'ts}{12}{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}{13}{subsection.1.4.17}
\contentsline {subsubsection}{Error Messages}{13}{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}{14}{subsection.1.4.19}
\contentsline {subsubsection}{Queued Job Messages}{14}{subsection.1.4.19}
\contentsline {subsection}{\numberline {1.4.20}Memory Messages}{14}{subsection.1.4.20}
\contentsline {subsubsection}{Memory Messages}{14}{subsection.1.4.20}
\contentsline {subsection}{\numberline {1.4.21}Bugs Database}{14}{subsection.1.4.21}
\contentsline {subsubsection}{Bugs Database}{14}{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}{19}{subsection.2.3.1}
\contentsline {section}{\numberline {2.4}Forcing Changes}{20}{section.2.4}
\contentsline {chapter}{\numberline {3}Bacula FD Plugin API}{23}{chapter.3}
\contentsline {section}{\numberline {3.1}Normal vs Command vs Options Plugins}{23}{section.3.1}
\contentsline {section}{\numberline {3.2}Loading Plugins}{24}{section.3.2}
\contentsline {section}{\numberline {3.3}loadPlugin}{25}{section.3.3}
\contentsline {section}{\numberline {3.4}Plugin Entry Points}{27}{section.3.4}
\contentsline {subsection}{\numberline {3.4.1}newPlugin(bpContext *ctx)}{27}{subsection.3.4.1}
\contentsline {subsection}{\numberline {3.4.2}freePlugin(bpContext *ctx)}{28}{subsection.3.4.2}
\contentsline {subsection}{\numberline {3.4.3}getPluginValue(bpContext *ctx, pVariable var, void *value)}{28}{subsection.3.4.3}
\contentsline {subsection}{\numberline {3.4.4}setPluginValue(bpContext *ctx, pVariable var, void *value)}{28}{subsection.3.4.4}
\contentsline {subsection}{\numberline {3.4.5}handlePluginEvent(bpContext *ctx, bEvent *event, void *value)}{28}{subsection.3.4.5}
\contentsline {subsection}{\numberline {3.4.6}startBackupFile(bpContext *ctx, struct save\_pkt *sp)}{30}{subsection.3.4.6}
\contentsline {subsection}{\numberline {3.4.7}endBackupFile(bpContext *ctx)}{31}{subsection.3.4.7}
\contentsline {subsection}{\numberline {3.4.8}startRestoreFile(bpContext *ctx, const char *cmd)}{31}{subsection.3.4.8}
\contentsline {subsection}{\numberline {3.4.9}createFile(bpContext *ctx, struct restore\_pkt *rp)}{31}{subsection.3.4.9}
\contentsline {subsection}{\numberline {3.4.10}setFileAttributes(bpContext *ctx, struct restore\_pkt *rp)}{33}{subsection.3.4.10}
\contentsline {subsection}{\numberline {3.4.11}endRestoreFile(bpContext *ctx)}{33}{subsection.3.4.11}
\contentsline {subsection}{\numberline {3.4.12}pluginIO(bpContext *ctx, struct io\_pkt *io)}{33}{subsection.3.4.12}
\contentsline {subsection}{\numberline {3.4.13}bool checkFile(bpContext *ctx, char *fname)}{34}{subsection.3.4.13}
\contentsline {section}{\numberline {3.5}Bacula Plugin Entrypoints}{34}{section.3.5}
\contentsline {subsection}{\numberline {3.5.1}bRC registerBaculaEvents(bpContext *ctx, ...)}{35}{subsection.3.5.1}
\contentsline {subsection}{\numberline {3.5.2}bRC getBaculaValue(bpContext *ctx, bVariable var, void *value)}{35}{subsection.3.5.2}
\contentsline {subsection}{\numberline {3.5.3}bRC setBaculaValue(bpContext *ctx, bVariable var, void *value)}{35}{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, ...)}{35}{subsection.3.5.4}
\contentsline {subsection}{\numberline {3.5.5}bRC DebugMessage(bpContext *ctx, const char *file, int line, int level, const char *fmt, ...)}{35}{subsection.3.5.5}
\contentsline {subsection}{\numberline {3.5.6}void baculaMalloc(bpContext *ctx, const char *file, int line, size\_t size)}{35}{subsection.3.5.6}
\contentsline {subsection}{\numberline {3.5.7}void baculaFree(bpContext *ctx, const char *file, int line, void *mem)}{35}{subsection.3.5.7}
\contentsline {section}{\numberline {3.6}Building Bacula Plugins}{36}{section.3.6}
\contentsline {chapter}{\numberline {4}Platform Support}{37}{chapter.4}
\contentsline {section}{Platform Support}{37}{section*.8}
\contentsline {section}{\numberline {4.1}General}{37}{section.4.1}
\contentsline {subsection}{General}{37}{section*.9}
\contentsline {section}{\numberline {4.2}Requirements to become a Supported Platform}{37}{section.4.2}
\contentsline {subsection}{Platform Requirements}{37}{section*.10}
\contentsline {chapter}{\numberline {5}Daemon Protocol}{39}{chapter.5}
\contentsline {section}{\numberline {5.1}General}{39}{section.5.1}
\contentsline {subsection}{General}{39}{section*.11}
\contentsline {section}{\numberline {5.2}Low Level Network Protocol}{39}{section.5.2}
\contentsline {subsection}{Low Level Network Protocol}{39}{section*.12}
\contentsline {section}{\numberline {5.3}General Daemon Protocol}{39}{section.5.3}
\contentsline {subsection}{General Daemon Protocol}{39}{section*.13}
\contentsline {section}{\numberline {5.4}The Protocol Used Between the Director and the Storage Daemon}{40}{section.5.4}
\contentsline {subsection}{Protocol Used Between the Director and the Storage Daemon}{40}{section*.14}
\contentsline {section}{\numberline {5.5}The Protocol Used Between the Director and the File Daemon}{40}{section.5.5}
\contentsline {subsection}{Protocol Used Between the Director and the File Daemon}{40}{section*.15}
\contentsline {section}{\numberline {5.6}The Save Protocol Between the File Daemon and the Storage Daemon}{41}{section.5.6}
\contentsline {subsection}{Save Protocol Between the File Daemon and the Storage Daemon}{41}{section*.16}
\contentsline {subsection}{\numberline {5.6.1}Command and Control Information}{41}{subsection.5.6.1}
\contentsline {subsubsection}{Command and Control Information}{41}{subsection.5.6.1}
\contentsline {subsection}{\numberline {5.6.2}Data Information}{41}{subsection.5.6.2}
\contentsline {subsubsection}{Data Information}{41}{subsection.5.6.2}
\contentsline {chapter}{\numberline {6}Director Services Daemon}{43}{chapter.6}
\contentsline {section}{Director Services Daemon}{43}{section*.17}
\contentsline {chapter}{\numberline {7}File Services Daemon}{45}{chapter.7}
\contentsline {section}{File Services Daemon}{45}{section*.18}
\contentsline {section}{\numberline {7.1}Commands Received from the Director for a Backup}{45}{section.7.1}
\contentsline {subsection}{Commands Received from the Director for a Backup}{45}{section*.19}
\contentsline {section}{\numberline {7.2}Commands Received from the Director for a Restore}{46}{section.7.2}
\contentsline {subsection}{Commands Received from the Director for a Restore}{46}{section*.20}
\contentsline {chapter}{\numberline {8}Storage Daemon Design}{47}{chapter.8}
\contentsline {section}{Storage Daemon Design}{47}{section*.21}
\contentsline {section}{\numberline {8.1}SD Design Introduction}{47}{section.8.1}
\contentsline {section}{SD Design Introduction}{47}{section.8.1}
\contentsline {section}{\numberline {8.2}SD Development Outline}{47}{section.8.2}
\contentsline {section}{SD Development Outline}{47}{section.8.2}
\contentsline {section}{\numberline {8.3}SD Connections and Sessions}{47}{section.8.3}
\contentsline {section}{SD Connections and Sessions}{47}{section.8.3}
\contentsline {subsection}{\numberline {8.3.1}SD Append Requests}{48}{subsection.8.3.1}
\contentsline {subsection}{SD Append Requests}{48}{subsection.8.3.1}
\contentsline {subsection}{\numberline {8.3.2}SD Read Requests}{49}{subsection.8.3.2}
\contentsline {subsection}{SD Read Requests}{49}{subsection.8.3.2}
\contentsline {section}{\numberline {8.4}SD Data Structures}{49}{section.8.4}
\contentsline {section}{SD Data Structures}{49}{section.8.4}
\contentsline {chapter}{\numberline {9}Catalog Services}{51}{chapter.9}
\contentsline {section}{\numberline {9.1}General}{51}{section.9.1}
\contentsline {subsection}{General}{51}{section*.22}
\contentsline {subsection}{\numberline {9.1.1}Filenames and Maximum Filename Length}{51}{subsection.9.1.1}
\contentsline {subsubsection}{Filenames and Maximum Filename Length}{51}{subsection.9.1.1}
\contentsline {subsection}{\numberline {9.1.2}Installing and Configuring MySQL}{52}{subsection.9.1.2}
\contentsline {subsubsection}{Installing and Configuring MySQL}{52}{subsection.9.1.2}
\contentsline {subsection}{\numberline {9.1.3}Installing and Configuring PostgreSQL}{52}{subsection.9.1.3}
\contentsline {subsubsection}{Installing and Configuring PostgreSQL}{52}{subsection.9.1.3}
\contentsline {subsection}{\numberline {9.1.4}Installing and Configuring SQLite}{52}{subsection.9.1.4}
\contentsline {subsubsection}{Installing and Configuring SQLite}{52}{subsection.9.1.4}
\contentsline {subsection}{\numberline {9.1.5}Internal Bacula Catalog}{52}{subsection.9.1.5}
\contentsline {subsubsection}{Internal Bacula Catalog}{52}{subsection.9.1.5}
\contentsline {subsection}{\numberline {9.1.6}Database Table Design}{52}{subsection.9.1.6}
\contentsline {subsubsection}{Database Table Design}{52}{subsection.9.1.6}
\contentsline {section}{\numberline {9.2}Sequence of Creation of Records for a Save Job}{52}{section.9.2}
\contentsline {subsection}{Sequence of Creation of Records for a Save Job}{52}{section*.23}
\contentsline {section}{\numberline {9.3}Database Tables}{53}{section.9.3}
\contentsline {subsection}{Database Tables}{53}{section*.24}
\contentsline {subsection}{\numberline {9.3.1}MySQL Table Definition}{62}{subsection.9.3.1}
\contentsline {subsubsection}{MySQL Table Definition}{62}{subsection.9.3.1}
\contentsline {chapter}{\numberline {10}Storage Media Output Format}{65}{chapter.10}
\contentsline {section}{Storage Media Output Format}{65}{section*.25}
\contentsline {section}{\numberline {10.1}General}{65}{section.10.1}
\contentsline {subsection}{General}{65}{section*.26}
\contentsline {section}{\numberline {10.2}Definitions}{65}{section.10.2}
\contentsline {subsection}{Definitions}{65}{section*.27}
\contentsline {section}{\numberline {10.3}Storage Daemon File Output Format}{66}{section.10.3}
\contentsline {subsection}{Storage Daemon File Output Format}{66}{section*.28}
\contentsline {section}{\numberline {10.4}Overall Format}{67}{section.10.4}
\contentsline {subsection}{Overall Format}{67}{section*.29}
\contentsline {section}{\numberline {10.5}Serialization}{67}{section.10.5}
\contentsline {subsection}{Serialization}{67}{section*.30}
\contentsline {section}{\numberline {10.6}Block Header}{67}{section.10.6}
\contentsline {subsection}{Block Header}{67}{section*.31}
\contentsline {section}{\numberline {10.7}Record Header}{68}{section.10.7}
\contentsline {subsection}{Record Header}{68}{section*.32}
\contentsline {section}{\numberline {10.8}Version BB02 Block Header}{69}{section.10.8}
\contentsline {subsection}{Version BB02 Block Header}{69}{section*.33}
\contentsline {section}{\numberline {10.9}Version 2 Record Header}{69}{section.10.9}
\contentsline {subsection}{Version 2 Record Header}{69}{section*.34}
\contentsline {section}{\numberline {10.10}Volume Label Format}{69}{section.10.10}
\contentsline {subsection}{Volume Label Format}{69}{section*.35}
\contentsline {section}{\numberline {10.11}Session Label}{70}{section.10.11}
\contentsline {subsection}{Session Label}{70}{section*.36}
\contentsline {section}{\numberline {10.12}Overall Storage Format}{70}{section.10.12}
\contentsline {subsection}{Overall Storage Format}{70}{section*.37}
\contentsline {section}{\numberline {10.13}Unix File Attributes}{74}{section.10.13}
\contentsline {subsection}{Unix File Attributes}{74}{section*.38}
\contentsline {section}{\numberline {10.14}Old Depreciated Tape Format}{75}{section.10.14}
\contentsline {subsection}{Old Depreciated Tape Format}{75}{section*.39}
\contentsline {chapter}{\numberline {11}Bacula Porting Notes}{79}{chapter.11}
\contentsline {section}{Bacula Porting Notes}{79}{section*.40}
\contentsline {section}{\numberline {11.1}Porting Requirements}{79}{section.11.1}
\contentsline {section}{Porting Requirements}{79}{section.11.1}
\contentsline {section}{\numberline {11.2}Steps to Take for Porting}{80}{section.11.2}
\contentsline {section}{Steps to Take for Porting}{80}{section.11.2}
\contentsline {section}{Implementing a Bacula GUI Interface}{83}{chapter*.41}
\contentsline {section}{\numberline {11.1}General}{83}{section.11.1}
\contentsline {subsection}{General}{83}{section*.42}
\contentsline {subsection}{\numberline {11.1.1}Minimal Code in Console Program}{83}{subsection.11.1.1}
\contentsline {subsubsection}{Minimal Code in Console Program}{83}{subsection.11.1.1}
\contentsline {subsection}{\numberline {11.1.2}GUI Interface is Difficult}{83}{subsection.11.1.2}
\contentsline {subsubsection}{GUI Interface is Difficult}{83}{subsection.11.1.2}
\contentsline {section}{\numberline {11.2}Bvfs API}{84}{section.11.2}
\contentsline {chapter}{\numberline {12}TLS}{89}{chapter.12}
\contentsline {section}{\numberline {12.1}Introduction to TLS}{89}{section.12.1}
\contentsline {section}{TLS Introduction}{89}{section.12.1}
\contentsline {section}{\numberline {12.2}New Configuration Directives}{89}{section.12.2}
\contentsline {section}{New Configuration Directives}{89}{section.12.2}
\contentsline {section}{\numberline {12.3}TLS API Implementation}{90}{section.12.3}
\contentsline {section}{TLS API Implementation}{90}{section.12.3}
\contentsline {subsection}{\numberline {12.3.1}Library Initialization and Cleanup}{90}{subsection.12.3.1}
\contentsline {subsection}{Library Initialization and Cleanup}{90}{subsection.12.3.1}
\contentsline {subsection}{\numberline {12.3.2}Manipulating TLS Contexts}{90}{subsection.12.3.2}
\contentsline {subsection}{Manipulating TLS Contexts}{90}{subsection.12.3.2}
\contentsline {subsection}{\numberline {12.3.3}Performing Post-Connection Verification}{91}{subsection.12.3.3}
\contentsline {subsection}{Performing Post-Connection Verification}{91}{subsection.12.3.3}
\contentsline {subsection}{\numberline {12.3.4}Manipulating TLS Connections}{91}{subsection.12.3.4}
\contentsline {subsection}{Manipulating TLS Connections}{91}{subsection.12.3.4}
\contentsline {section}{\numberline {12.4}Bnet API Changes}{92}{section.12.4}
\contentsline {section}{Bnet API Changes}{92}{section.12.4}
\contentsline {subsection}{\numberline {12.4.1}Negotiating a TLS Connection}{92}{subsection.12.4.1}
\contentsline {subsection}{Negotiating a TLS Connection}{92}{subsection.12.4.1}
\contentsline {subsection}{\numberline {12.4.2}Manipulating Socket Blocking State}{92}{subsection.12.4.2}
\contentsline {subsection}{Manipulating Socket Blocking State}{92}{subsection.12.4.2}
\contentsline {section}{\numberline {12.5}Authentication Negotiation}{93}{section.12.5}
\contentsline {section}{Authentication Negotiation}{93}{section.12.5}
\contentsline {chapter}{\numberline {13}Bacula Regression Testing}{95}{chapter.13}
\contentsline {section}{Bacula Regression Testing}{95}{section*.52}
\contentsline {section}{\numberline {13.1}Setting up Regession Testing}{95}{section.13.1}
\contentsline {section}{Setting up Regression Testing}{95}{section.13.1}
\contentsline {section}{\numberline {13.2}Running the Regression Script}{96}{section.13.2}
\contentsline {section}{Running the Regression Script}{96}{section.13.2}
\contentsline {subsection}{\numberline {13.2.1}Setting the Configuration Parameters}{96}{subsection.13.2.1}
\contentsline {subsection}{Setting the Configuration Parameters}{96}{subsection.13.2.1}
\contentsline {subsection}{\numberline {13.2.2}Building the Test Bacula}{97}{subsection.13.2.2}
\contentsline {subsection}{Building the Test Bacula}{97}{subsection.13.2.2}
\contentsline {subsection}{\numberline {13.2.3}Setting up your SQL engine}{98}{subsection.13.2.3}
\contentsline {subsection}{Setting up your SQL engine}{98}{subsection.13.2.3}
\contentsline {subsection}{\numberline {13.2.4}Running the Disk Only Regression}{98}{subsection.13.2.4}
\contentsline {subsection}{Running the Disk Only Regression}{98}{subsection.13.2.4}
\contentsline {subsection}{\numberline {13.2.5}Other Tests}{99}{subsection.13.2.5}
\contentsline {subsection}{Other Tests}{99}{subsection.13.2.5}
\contentsline {subsection}{\numberline {13.2.6}If a Test Fails}{100}{subsection.13.2.6}
\contentsline {subsection}{If a Test Fails}{100}{subsection.13.2.6}
\contentsline {section}{\numberline {13.3}Testing a Binary Installation}{100}{section.13.3}
\contentsline {section}{\numberline {13.4}Running a Single Test}{101}{section.13.4}
\contentsline {section}{Running a Single Test}{101}{section.13.4}
\contentsline {section}{\numberline {13.5}Writing a Regression Test}{101}{section.13.5}
\contentsline {section}{Writing a Regression Test}{101}{section.13.5}
\contentsline {subsection}{\numberline {13.5.1}Running the Tests by Hand}{101}{subsection.13.5.1}
\contentsline {subsection}{Running the Tests by Hand}{101}{subsection.13.5.1}
\contentsline {subsection}{\numberline {13.5.2}Directory Structure}{101}{subsection.13.5.2}
\contentsline {subsection}{Directory Structure}{101}{subsection.13.5.2}
\contentsline {subsection}{\numberline {13.5.3}Adding a New Test}{102}{subsection.13.5.3}
\contentsline {subsection}{Adding a New Test}{102}{subsection.13.5.3}
\contentsline {subsection}{\numberline {13.5.4}Running a Test Under The Debugger}{102}{subsection.13.5.4}
\contentsline {subsection}{Running a Test Under The Debugger}{102}{subsection.13.5.4}
\contentsline {chapter}{\numberline {14}Bacula MD5 Algorithm}{103}{chapter.14}
\contentsline {section}{}{103}{section*.53}
\contentsline {section}{\numberline {14.1}Command Line Message Digest Utility }{103}{section.14.1}
\contentsline {subsection}{Command Line Message Digest Utility}{103}{section*.54}
\contentsline {subsection}{\numberline {14.1.1}Name}{103}{subsection.14.1.1}
\contentsline {subsubsection}{Name}{103}{subsection.14.1.1}
\contentsline {subsection}{\numberline {14.1.2}Synopsis}{103}{subsection.14.1.2}
\contentsline {subsubsection}{Synopsis}{103}{subsection.14.1.2}
\contentsline {subsection}{\numberline {14.1.3}Description}{103}{subsection.14.1.3}
\contentsline {subsubsection}{Description}{103}{subsection.14.1.3}
\contentsline {subsection}{\numberline {14.1.4}Options}{104}{subsection.14.1.4}
\contentsline {subsubsection}{Options}{104}{subsection.14.1.4}
\contentsline {subsection}{\numberline {14.1.5}Files}{104}{subsection.14.1.5}
\contentsline {subsubsection}{Files}{104}{subsection.14.1.5}
\contentsline {subsection}{\numberline {14.1.6}Bugs}{104}{subsection.14.1.6}
\contentsline {subsubsection}{Bugs}{104}{subsection.14.1.6}
\contentsline {section}{\numberline {14.2} \href {http://www.fourmilab.ch/md5/md5.zip}{Download md5.zip} (Zipped archive)}{104}{section.14.2}
\contentsline {subsection}{Download md5.zip (Zipped archive)}{104}{section*.55}
\contentsline {subsection}{\numberline {14.2.1}See Also}{104}{subsection.14.2.1}
\contentsline {subsubsection}{SEE ALSO}{104}{subsection.14.2.1}
\contentsline {subsection}{\numberline {14.2.2}Exit Status}{105}{subsection.14.2.2}
\contentsline {subsubsection}{Exit Status}{105}{subsection.14.2.2}
\contentsline {subsection}{\numberline {14.2.3}Copying}{105}{subsection.14.2.3}
\contentsline {subsubsection}{Copying}{105}{subsection.14.2.3}
\contentsline {subsection}{\numberline {14.2.4}Acknowledgements}{105}{subsection.14.2.4}
\contentsline {subsubsection}{Acknowledgements}{105}{subsection.14.2.4}
\contentsline {chapter}{\numberline {15}Bacula Memory Management}{107}{chapter.15}
\contentsline {section}{Bacula Memory Management}{107}{section*.56}
\contentsline {section}{\numberline {15.1}General}{107}{section.15.1}
\contentsline {subsection}{General}{107}{section*.57}
\contentsline {subsection}{\numberline {15.1.1}Statically Allocated Memory}{107}{subsection.15.1.1}
\contentsline {subsubsection}{Statically Allocated Memory}{107}{subsection.15.1.1}
\contentsline {subsection}{\numberline {15.1.2}Dynamically Allocated Memory}{107}{subsection.15.1.2}
\contentsline {subsubsection}{Dynamically Allocated Memory}{107}{subsection.15.1.2}
\contentsline {subsection}{\numberline {15.1.3}Pooled and Non-pooled Memory}{108}{subsection.15.1.3}
\contentsline {subsubsection}{Pooled and Non-pooled Memory}{108}{subsection.15.1.3}
\contentsline {chapter}{\numberline {16}TCP/IP Network Protocol}{111}{chapter.16}
\contentsline {section}{TCP/IP Network Protocol}{111}{section*.66}
\contentsline {section}{\numberline {16.1}General}{111}{section.16.1}
\contentsline {subsection}{General}{111}{section*.67}
\contentsline {section}{\numberline {16.2}bnet and Threads}{111}{section.16.2}
\contentsline {subsection}{bnet and Threads}{111}{section*.68}
\contentsline {section}{\numberline {16.3}bnet\_open}{111}{section.16.3}
\contentsline {subsection}{bnet\_open}{111}{section*.69}
\contentsline {section}{\numberline {16.4}bnet\_send}{112}{section.16.4}
\contentsline {subsection}{bnet\_send}{112}{section*.70}
\contentsline {section}{\numberline {16.5}bnet\_fsend}{112}{section.16.5}
\contentsline {subsection}{bnet\_fsend}{112}{section*.71}
\contentsline {section}{\numberline {16.6}Additional Error information}{112}{section.16.6}
\contentsline {subsection}{Additional Error information}{112}{section*.72}
\contentsline {section}{\numberline {16.7}bnet\_recv}{112}{section.16.7}
\contentsline {subsection}{bnet\_recv}{112}{section*.73}
\contentsline {section}{\numberline {16.8}bnet\_sig}{112}{section.16.8}
\contentsline {subsection}{bnet\_sig}{112}{section*.74}
\contentsline {section}{\numberline {16.9}bnet\_strerror}{113}{section.16.9}
\contentsline {subsection}{bnet\_strerror}{113}{section*.75}
\contentsline {section}{\numberline {16.10}bnet\_close}{113}{section.16.10}
\contentsline {subsection}{bnet\_close}{113}{section*.76}
\contentsline {section}{\numberline {16.11}Becoming a Server}{113}{section.16.11}
\contentsline {subsection}{Becoming a Server}{113}{section*.77}
\contentsline {section}{\numberline {16.12}Higher Level Conventions}{113}{section.16.12}
\contentsline {subsection}{Higher Level Conventions}{113}{section*.78}
\contentsline {chapter}{\numberline {17}Smart Memory Allocation}{115}{chapter.17}
\contentsline {section}{Smart Memory Allocation With Orphaned Buffer Detection}{115}{section*.79}
\contentsline {subsection}{\numberline {17.0.1} Installing SMARTALLOC}{115}{subsection.17.0.1}
\contentsline {subsection}{Installing SMARTALLOC}{115}{subsection.17.0.1}
\contentsline {subsection}{\numberline {17.0.2} Squelching a SMARTALLOC}{116}{subsection.17.0.2}
\contentsline {subsection}{Squelching a SMARTALLOC}{116}{subsection.17.0.2}
\contentsline {subsection}{\numberline {17.0.3} Living with Libraries}{116}{subsection.17.0.3}
\contentsline {subsection}{Living with Libraries}{116}{subsection.17.0.3}
\contentsline {subsection}{\numberline {17.0.4} SMARTALLOC Details}{117}{subsection.17.0.4}
\contentsline {subsection}{SMARTALLOC Details}{117}{subsection.17.0.4}
\contentsline {subsection}{\numberline {17.0.5} When SMARTALLOC is Disabled}{118}{subsection.17.0.5}
\contentsline {subsection}{When SMARTALLOC is Disabled}{118}{subsection.17.0.5}
\contentsline {subsection}{\numberline {17.0.6} The {\tt alloc()} Function}{118}{subsection.17.0.6}
\contentsline {subsection}{alloc() Function}{118}{subsection.17.0.6}
\contentsline {subsection}{\numberline {17.0.7} Overlays and Underhandedness}{119}{subsection.17.0.7}
\contentsline {subsection}{Overlays and Underhandedness}{119}{subsection.17.0.7}
\contentsline {subsection}{\numberline {17.0.8} Test and Demonstration Program}{119}{subsection.17.0.8}
\contentsline {subsection}{Test and Demonstration Program}{119}{subsection.17.0.8}
\contentsline {subsection}{\numberline {17.0.9} Invitation to the Hack}{119}{subsection.17.0.9}
\contentsline {subsection}{Invitation to the Hack}{119}{subsection.17.0.9}
\contentsline {section}{\numberline {17.1} \href {http://www.fourmilab.ch/smartall/smartall.zip}{http://www.fourmilab.ch/smartall/smartall.zip} \href {http://www.fourmilab.ch/smartall/smartall.zip}{Download smartall.zip} (Zipped archive)}{120}{section.17.1}
\contentsline {section}{ Download smartall.zip (Zipped archive)}{120}{section.17.1}
\contentsline {subsection}{\numberline {17.1.1} Copying}{120}{subsection.17.1.1}
\contentsline {subsection}{Copying}{120}{subsection.17.1.1}
\contentsline {chapter}{\numberline {18}Bacula Copyright, Trademark, and Licenses}{121}{chapter.18}
\contentsline {section}{\numberline {18.1}CC-BY-SA}{121}{section.18.1}
\contentsline {section}{\numberline {18.2}GPL}{121}{section.18.2}
\contentsline {section}{\numberline {18.3}LGPL}{121}{section.18.3}
\contentsline {section}{\numberline {18.4}Public Domain}{121}{section.18.4}
\contentsline {section}{\numberline {18.5}Trademark}{122}{section.18.5}
\contentsline {section}{\numberline {18.6}Fiduciary License Agreement}{122}{section.18.6}
\contentsline {section}{\numberline {18.7}Disclaimer}{122}{section.18.7}
\contentsline {section}{\numberline {18.8}Authors}{122}{section.18.8}
