Some modules have configuration which is _global_ to the server.
-For example, the xref:mods-available/python.adoc[python] module has
+For example, the xref:raddb/mods-available/python.adoc[python] module has
the Python path set once for the server. Due to how the underlying
Python APIs are written, this path cannot be configured on a
per-module basis. If the configuration items were instead placed in
| xref:raddb/mods-available/couchbase.adoc[couchbase] | Allows attributes to be stored and retrieved from a couchbase server. Client definitions may also be bulk loaded from a
couchbase server as FreeRADIUS starts.
| xref:raddb/mods-available/csv.adoc[csv] | Maps values in a CSV file to FreeRADIUS attributes and adds them to the request.
-| xref:raddb/mods-available/kafka.adoc[kafka] | Produces messages, placing them in a Kafka messaging queue
| xref:raddb/mods-available/passwd.adoc[passwd] | Reads and caches line-oriented files that are in a format similar to ``/etc/passwd``.
| xref:raddb/mods-available/radutmp.adoc[radutmp] | Writes a utmp style file that lists the users who are logged in. The file is used mainly for Simultaneous-Use checking
and by radwho to see who has current sessions.
xref:type/string/single.adoc[single-quoted strings], text within
double quotes can include spaces.
-For normally quoted strings, the quotation character can be placed inside of
-the string by escaping it with a backslash.
-
-For triple quoted strings, the quotation character does not need to be
-escaped. However, if the string does contain an escaped quotation
-character, the quotation character is unescaped, as with normally
-quoted strings.
+The quotation character can be placed inside of the string by escaping
+it with a backslash.
The main difference between the single and double quoted strings is
that the double quoted strings can be dynamically expanded. The syntax
`"this has embedded\ncharacters"` +
`"attribute\tvalue\nusername\t%{User-Name}\nreply-message\t%{reply.Reply-Message}"`
`"The result of 'SELECT * FROM foo WHERE 1' is: %sql(SELECT * FROM foo WHERE 1)"`
-`"""this string has a "double quoted" string in the middle of it"""`
// Licenced under CC-by-NC 4.0.
// Copyright (C) 2019 Arran Cudbard-Bell <a.cudbardb@freeradius.org>
// Copyright (C) 2019 The FreeRADIUS project.
// Copyright (C) 2021 Network RADIUS SAS.
-
-
-
-
expansion. The quotes allow the string to contain spaces, among other
special characters.
-For normally quoted strings, the quotation character can be placed inside of
-the string by escaping it with a backslash.
-
-For triple quoted strings, the quotation character does not need to be
-escaped. However, if the string does contain an escaped quotation
-character, the quotation character is unescaped, as with normally
-quoted strings.
+The quotation character can be placed inside of the string by escaping
+it with a backslash.
.Examples
`'foo bar`' +
`'foo\\'bar'` +
`'this is a long string'`
-`'''This is a string with 'embedded' quotes'''`
// Copyright (C) 2021 Network RADIUS SAS. Licenced under CC-by-NC 4.0.
// This documentation was developed by Network RADIUS SAS.
--- /dev/null
+= Triple Quoted Strings
+
+.Syntax
+`"""string"""`
+`'''string'''`
+
+Triple-quoted strings are similar to their single-quoted or
+double-quoted counterparts. The main difference is that for triple
+quoted strings, the quotation character does not need to be escaped.
+However, if the string does contain an escaped quotation character,
+the quotation character is unescaped, as with normally quoted strings.
+
+Triple-quoted strings make it easier to create strings with embedded
+quotes in them, because the quotes do not need to be escaped.
+
+.Examples
+
+`"""word"""` +
+`"a string"' +
+`"""foo"bar"!"""` +
+`"""this is a long string"""` +
+`"""this has embedded\ncharacters"""` +
+`"""this string has a "double quoted" string in the middle of it"""`
+`'''This is a string with 'embedded' quotes'''`
+
+// Licenced under CC-by-NC 4.0.
+// Copyright (C) 2025 Network RADIUS SAS.
+
+
+
+
The "return code" used by `unlang` is somewhat similar to return codes
used by functions in other languages. However, this return code is
built into `unlang`, because it simplifies most common scenarios. For
-example, automatic xref:unlang/load-balance.adocp[load-balancing]
+example, automatic xref:unlang/load-balance.adoc[load-balancing]
would be much more difficult without `unlang` hiding much of the
underlying complexity.
.Description
Functions allow for complex expansions at run time. There are many
-xref:builtin.adoc[built-in expansions]. Many modules also define
+xref:xlat/builtin.adoc[built-in expansions]. Many modules also define
their own expansions. The module-specific expansions are documented in each module.
function:: The name of the function. e.g. `md5` or `sql`, etc.