Description

The template validation functions offer a way to validate the configuration data
of an service instance against the appropriate template data. The scf_tmpl_validate_fmri() function
returns the full set of errors for the specified instance, and those
errors can be printed or explored directly.

By default, the validation is performed on the composed data from the
running snapshot of an instance. A different snapshot can be explicitly selected
by specifying a valid snapshot name rather than NULL for the snapshot
argument. If flags includes SCF_TMPL_VALIDATE_FLAG_CURRENT, the snapshot argument is ignored and the
current configuration is used.

By default, these functions also explore template data defined by the service
or instance itself, the service's restarter, and global template data. See smf_template(5)
for more information about this composition.

An instance FMRI is required, and FMRIs that specify other entities (for
example, services) are explicitly rejected.

The scf_tmpl_validate_fmri() function validates an instance FMRI against the template data in
the repository. As described above, when the snapshot argument is NULL, the
default running snapshot is used. If scf_tmpl_errors_t ** is non-null, the structure is
allocated and returned to the caller for further perusal or printing of
the errors.

The scf_tmpl_errors_destroy() function destroys and frees the scf_tmpl_errors_t and all of the
scf_tmpl_error_t structures to which it refers.

The scf_tmpl_next_error() function takes a pointer to a scf_tmpl_errors_t structure previously returned
by scf_tmpl_validate_fmri(). On the first call, it returns a pointer to the
first scf_tmpl_error_t found during validation. On subsequent calls, the next error is returned.
To resume processing from the first error, the caller can use scf_tmpl_reset_errors().

The contents of an scf_tmpl_error_t are determined by its type. Types added
as additional validation checks are introduced. Based on the error type, a
set of fields can be retrieved from the error.

The scf_tmpl_error_source_fmri() function retrieves a string with the FMRI of the source
of the template that was violated. This string is freed by scf_tmpl_errors_destroy().

The scf_tmpl_error_pg_tmpl() function retrieves strings with the name and type of the
property group template that was violated. If the property group name or
type was implicitly wildcarded (see smf_template(5)) in the template, this function returns
a string containing SCF_TMPL_WILDCARD (“*”). These strings are freed by scf_tmpl_errors_destroy().

The scf_tmpl_error_pg() function retrieves strings with the name and type of the
property group that was violated. These strings are freed by scf_tmpl_errors_destroy().

The scf_tmpl_error_prop_tmpl() function retrieves strings with the name and type of the
property template that was violated. If the property type was implicitly wildcarded
(see smf_template(5)) in the template, this function returns a string containing SCF_TMPL_WILDCARD
(“*”). These strings are freed by scf_tmpl_errors_destroy().

The scf_tmpl_error_prop() function retrieves strings with the name and type of the
property that was violated. These strings are freed by scf_tmpl_errors_destroy().

The scf_tmpl_error_value() function retrieves a string with the value containing the error
in val. This string are freed by scf_tmpl_errors_destroy().

The scf_tmpl_strerror() function takes an scf_tmpl_error_t previously returned by scf_tmpl_next_error() and returns
in s. If flags includes SCF_TMPL_STRERROR_HUMAN, s is a human-readable, localized description of
the error. Otherwise, s is a one-line string suitable for logfile output.

Return Values

The scf_tmpl_validate_fmri() function returns 0 on successful completion with no validation failures.
It returns 1 if there are validation failures. It returns -1 if
there is an error validating the instance.

The scf_tmpl_next_error() function returns a pointer to the next scf_tmpl_error_t. When none
remain, it returns NULL.