1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�11.�The smb.conf file</title><link rel="stylesheet" href="samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.71.0"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part�III.�Samba Subsystems"><link rel="prev" href="vfs.html" title="Chapter�10.�VFS Modules"><link rel="next" href="wins.html" title="Chapter�12.�Samba WINS Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter�11.�The smb.conf file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="vfs.html">Prev</a>�</td><th width="60%" align="center">Part�III.�Samba Subsystems</th><td width="20%" align="right">�<a accesskey="n" href="wins.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="parsing"></a>Chapter�11.�The smb.conf file</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Chris</span> <span class="surname">Hertel</span></h3></div></div><div><p class="pubdate">November 1997</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parsing.html#id325526">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id325594">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id325635">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id325680">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id325754">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id325806">About params.c</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id325526"></a>Lexical Analysis</h2></div></div></div><p> 2Basically, the file is processed on a line by line basis. There are 3four types of lines that are recognized by the lexical analyzer 4(params.c): 5</p><div class="orderedlist"><ol type="1"><li><p> 6Blank lines - Lines containing only whitespace. 7</p></li><li><p> 8Comment lines - Lines beginning with either a semi-colon or a 9pound sign (';' or '#'). 10</p></li><li><p> 11Section header lines - Lines beginning with an open square bracket ('['). 12</p></li><li><p> 13Parameter lines - Lines beginning with any other character. 14(The default line type.) 15</p></li></ol></div><p> 16The first two are handled exclusively by the lexical analyzer, which 17ignores them. The latter two line types are scanned for 18</p><div class="orderedlist"><ol type="1"><li><p> 19 - Section names 20</p></li><li><p> 21 - Parameter names 22</p></li><li><p> 23 - Parameter values 24</p></li></ol></div><p> 25These are the only tokens passed to the parameter loader 26(loadparm.c). Parameter names and values are divided from one 27another by an equal sign: '='. 28</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325594"></a>Handling of Whitespace</h3></div></div></div><p> 29Whitespace is defined as all characters recognized by the isspace() 30function (see ctype(3C)) except for the newline character ('\n') 31The newline is excluded because it identifies the end of the line. 32</p><div class="orderedlist"><ol type="1"><li><p> 33The lexical analyzer scans past white space at the beginning of a line. 34</p></li><li><p> 35Section and parameter names may contain internal white space. All 36whitespace within a name is compressed to a single space character. 37</p></li><li><p> 38Internal whitespace within a parameter value is kept verbatim with 39the exception of carriage return characters ('\r'), all of which 40are removed. 41</p></li><li><p> 42Leading and trailing whitespace is removed from names and values. 43</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325635"></a>Handling of Line Continuation</h3></div></div></div><p> 44Long section header and parameter lines may be extended across 45multiple lines by use of the backslash character ('\\'). Line 46continuation is ignored for blank and comment lines. 47</p><p> 48If the last (non-whitespace) character within a section header or on 49a parameter line is a backslash, then the next line will be 50(logically) concatonated with the current line by the lexical 51analyzer. For example: 52</p><pre class="programlisting"> 53 param name = parameter value string \ 54 with line continuation. 55</pre><p>Would be read as</p><pre class="programlisting"> 56 param name = parameter value string with line continuation. 57</pre><p> 58Note that there are five spaces following the word 'string', 59representing the one space between 'string' and '\\' in the top 60line, plus the four preceeding the word 'with' in the second line. 61(Yes, I'm counting the indentation.) 62</p><p> 63Line continuation characters are ignored on blank lines and at the end 64of comments. They are *only* recognized within section and parameter 65lines. 66</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325680"></a>Line Continuation Quirks</h3></div></div></div><p>Note the following example:</p><pre class="programlisting"> 67 param name = parameter value string \ 68 \ 69 with line continuation. 70</pre><p> 71The middle line is *not* parsed as a blank line because it is first 72concatonated with the top line. The result is 73</p><pre class="programlisting"> 74param name = parameter value string with line continuation. 75</pre><p>The same is true for comment lines.</p><pre class="programlisting"> 76 param name = parameter value string \ 77 ; comment \ 78 with a comment. 79</pre><p>This becomes:</p><pre class="programlisting"> 80param name = parameter value string ; comment with a comment. 81</pre><p> 82On a section header line, the closing bracket (']') is considered a 83terminating character, and the rest of the line is ignored. The lines 84</p><pre class="programlisting"> 85 [ section name ] garbage \ 86 param name = value 87</pre><p>are read as</p><pre class="programlisting"> 88 [section name] 89 param name = value 90</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id325754"></a>Syntax</h2></div></div></div><p>The syntax of the smb.conf file is as follows:</p><pre class="programlisting"> 91 <file> :== { <section> } EOF 92 <section> :== <section header> { <parameter line> } 93 <section header> :== '[' NAME ']' 94 <parameter line> :== NAME '=' VALUE NL 95</pre><p>Basically, this means that</p><div class="orderedlist"><ol type="1"><li><p> 96 a file is made up of zero or more sections, and is terminated by 97 an EOF (we knew that). 98</p></li><li><p> 99 A section is made up of a section header followed by zero or more 100 parameter lines. 101</p></li><li><p> 102 A section header is identified by an opening bracket and 103 terminated by the closing bracket. The enclosed NAME identifies 104 the section. 105</p></li><li><p> 106 A parameter line is divided into a NAME and a VALUE. The *first* 107 equal sign on the line separates the NAME from the VALUE. The 108 VALUE is terminated by a newline character (NL = '\n'). 109</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325806"></a>About params.c</h3></div></div></div><p> 110The parsing of the config file is a bit unusual if you are used to 111lex, yacc, bison, etc. Both lexical analysis (scanning) and parsing 112are performed by params.c. Values are loaded via callbacks to 113loadparm.c. 114</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="vfs.html">Prev</a>�</td><td width="20%" align="center"><a accesskey="u" href="pt03.html">Up</a></td><td width="40%" align="right">�<a accesskey="n" href="wins.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter�10.�VFS Modules�</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">�Chapter�12.�Samba WINS Internals</td></tr></table></div></body></html> 115