Skip to content

Commit

Permalink
Fixed bug where default:sys.fqhost contained many spaces
Browse files Browse the repository at this point in the history
Fixed bug where `default:sys.fqhost` contained many spaces when domain is
set in body common control.

Ticket: CFE-4053
Changelog: Commit
Signed-off-by: Lars Erik Wik <[email protected]>
  • Loading branch information
larsewi committed Jun 5, 2024
1 parent f381773 commit 06e3eff
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 9 deletions.
25 changes: 16 additions & 9 deletions libpromises/expand.c
Original file line number Diff line number Diff line change
Expand Up @@ -945,19 +945,26 @@ static void ResolveControlBody(EvalContext *ctx, GenericAgentConfig *config,
Log(LOG_LEVEL_VERBOSE, "SET domain = %s", VDOMAIN);

EvalContextVariableRemoveSpecial(ctx, SPECIAL_SCOPE_SYS, "domain");
EvalContextVariableRemoveSpecial(ctx, SPECIAL_SCOPE_SYS, "fqhost");

// We don't expect hostname or domain name longer than 255,
// warnings are printed in sysinfo.c.
// Here we support up to 511 bytes, just in case, because we can:
snprintf(VFQNAME, CF_MAXVARSIZE, "%511s.%511s", VUQNAME, VDOMAIN);
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS, "fqhost",
VFQNAME, CF_DATA_TYPE_STRING,
"inventory,source=agent,attribute_name=Host name");
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS, "domain",
VDOMAIN, CF_DATA_TYPE_STRING,
"source=agent");
EvalContextClassPutHard(ctx, VDOMAIN, "source=agent");

int ret = snprintf(VFQNAME, CF_MAXVARSIZE, "%s.%s", VUQNAME, VDOMAIN);
assert(ret >= 0 && ret < CF_MAXVARSIZE);
if (ret < 0 || ret >= CF_MAXVARSIZE)
{
Log(LOG_LEVEL_ERR,
"Failed to update variable default:sys.fqhost to include domain name: "
"Maximum variable size was exceeded (%d >= %d)", ret, CF_MAXVARSIZE);
}
else
{
EvalContextVariableRemoveSpecial(ctx, SPECIAL_SCOPE_SYS, "fqhost");
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS, "fqhost",
VFQNAME, CF_DATA_TYPE_STRING,
"inventory,source=agent,attribute_name=Host name");
}
}

if (strcmp(lval, CFG_CONTROLBODY[COMMON_CONTROL_IGNORE_MISSING_INPUTS].lval) == 0)
Expand Down
33 changes: 33 additions & 0 deletions tests/acceptance/01_vars/01_basic/fqhost_domain.cf
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
##############################################################
#
# Test default:sys.fqhost with domain CFE-4053
#
##############################################################

body common control
{
domain => "cfengine.com";
bundlesequence => { "check" };
}

bundle agent __main__
{
methods:
"check";
}

##############################################################

bundle agent check
{
reports:
DEBUG::
"$(sys.fqhost), $(sys.uqhost).cfengine.com";

any::
"$(this.promise_filename) Pass"
if => strcmp( "$(sys.fqhost)", "$(sys.uqhost).cfengine.com" );

"$(this.promise_filename) FAIL"
unless => strcmp( "$(sys.fqhost)", "$(sys.uqhost).cfengine.com" );
}

0 comments on commit 06e3eff

Please sign in to comment.