No side effects, no surprises.

Object composer

The object composer is called by the VLI immediately after the parser has finished reading all source code files in the rulebook.

In the previous example, two objects were specified with simple, unqualified names, [A] and [B]. Objects can also be defined with compound, qualified names—where the two components of the name are separated with a colon—as in [N:A], where N is the scoping name, and A is the base name.

A scoping object is one whose scoping name and base name are the same. Scoping objects are used when specifying statements that are common to two or more objects. In the following sample, there is one scoping object N, specified with the [N:N] object name, and two base objects A and B specified with the [N:A] and [N:B] object names. This example is equivalent to the previous example.

sample-n.v
[N:N]
type = file
permissions = 640

[N:A]
path = /etc/sysconfig/network

[N:B]
path = /etc/sysconfig/rsyslog

The object composer merges the statements of the scoping object together with the statements of the base object. The merged objects are called composed objects. Composed objects are used by the dependency tree builder, resource evaluator, variable substitution processor, rule validator, and trip-point emitter.