From 58b37572718ed65d1b143f44de16aa5efb512f11 Mon Sep 17 00:00:00 2001 From: vorlon Date: Wed, 21 Nov 2007 17:29:21 +0000 Subject: Load samba-3.0.27a into branches/upstream. git-svn-id: svn://svn.debian.org/svn/pkg-samba/branches/upstream@1583 fc4039ab-9d04-0410-8cac-899223bdd6b0 --- docs/htmldocs/Samba3-Developers-Guide/parsing.html | 114 +++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/htmldocs/Samba3-Developers-Guide/parsing.html (limited to 'docs/htmldocs/Samba3-Developers-Guide/parsing.html') diff --git a/docs/htmldocs/Samba3-Developers-Guide/parsing.html b/docs/htmldocs/Samba3-Developers-Guide/parsing.html new file mode 100644 index 0000000000..ee940e91d0 --- /dev/null +++ b/docs/htmldocs/Samba3-Developers-Guide/parsing.html @@ -0,0 +1,114 @@ +Chapter 11. The smb.conf file

Chapter 11. The smb.conf file

Chris Hertel

November 1997

Lexical Analysis

+Basically, the file is processed on a line by line basis. There are +four types of lines that are recognized by the lexical analyzer +(params.c): +

  1. +Blank lines - Lines containing only whitespace. +

  2. +Comment lines - Lines beginning with either a semi-colon or a +pound sign (';' or '#'). +

  3. +Section header lines - Lines beginning with an open square bracket ('['). +

  4. +Parameter lines - Lines beginning with any other character. +(The default line type.) +

+The first two are handled exclusively by the lexical analyzer, which +ignores them. The latter two line types are scanned for +

  1. + - Section names +

  2. + - Parameter names +

  3. + - Parameter values +

+These are the only tokens passed to the parameter loader +(loadparm.c). Parameter names and values are divided from one +another by an equal sign: '='. +

Handling of Whitespace

+Whitespace is defined as all characters recognized by the isspace() +function (see ctype(3C)) except for the newline character ('\n') +The newline is excluded because it identifies the end of the line. +

  1. +The lexical analyzer scans past white space at the beginning of a line. +

  2. +Section and parameter names may contain internal white space. All +whitespace within a name is compressed to a single space character. +

  3. +Internal whitespace within a parameter value is kept verbatim with +the exception of carriage return characters ('\r'), all of which +are removed. +

  4. +Leading and trailing whitespace is removed from names and values. +

Handling of Line Continuation

+Long section header and parameter lines may be extended across +multiple lines by use of the backslash character ('\\'). Line +continuation is ignored for blank and comment lines. +

+If the last (non-whitespace) character within a section header or on +a parameter line is a backslash, then the next line will be +(logically) concatonated with the current line by the lexical +analyzer. For example: +

+	param name = parameter value string \
+	with line continuation.
+

Would be read as

+    param name = parameter value string     with line continuation.
+

+Note that there are five spaces following the word 'string', +representing the one space between 'string' and '\\' in the top +line, plus the four preceeding the word 'with' in the second line. +(Yes, I'm counting the indentation.) +

+Line continuation characters are ignored on blank lines and at the end +of comments. They are *only* recognized within section and parameter +lines. +

Line Continuation Quirks

Note the following example:

+	param name = parameter value string \
+    \
+    with line continuation.
+

+The middle line is *not* parsed as a blank line because it is first +concatonated with the top line. The result is +

+param name = parameter value string         with line continuation.
+

The same is true for comment lines.

+	param name = parameter value string \
+	; comment \
+    with a comment.
+

This becomes:

+param name = parameter value string     ; comment     with a comment.
+

+On a section header line, the closing bracket (']') is considered a +terminating character, and the rest of the line is ignored. The lines +

+	[ section   name ] garbage \
+    param  name  = value
+

are read as

+	[section name]
+    param name = value
+

Syntax

The syntax of the smb.conf file is as follows:

+  <file>            :==  { <section> } EOF
+  <section>         :==  <section header> { <parameter line> }
+  <section header>  :==  '[' NAME ']'
+  <parameter line>  :==  NAME '=' VALUE NL
+

Basically, this means that

  1. + a file is made up of zero or more sections, and is terminated by + an EOF (we knew that). +

  2. + A section is made up of a section header followed by zero or more + parameter lines. +

  3. + A section header is identified by an opening bracket and + terminated by the closing bracket. The enclosed NAME identifies + the section. +

  4. + A parameter line is divided into a NAME and a VALUE. The *first* + equal sign on the line separates the NAME from the VALUE. The + VALUE is terminated by a newline character (NL = '\n'). +

About params.c

+The parsing of the config file is a bit unusual if you are used to +lex, yacc, bison, etc. Both lexical analysis (scanning) and parsing +are performed by params.c. Values are loaded via callbacks to +loadparm.c. +

-- cgit v1.2.3