Skip to content

Commit b39b1a9

Browse files
committed
Added os_version_minor sys variable
Ticket: ENT-8118 Signed-off-by: Victor Moene <victor.moene@northern.tech>
1 parent 90e7ea1 commit b39b1a9

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

libenv/sysinfo.c

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ void CalculateDomainName(const char *nodename, const char *dnsname,
161161
char *uqname, size_t uqname_size,
162162
char *domain, size_t domain_size);
163163

164+
static void SysOSVersionMinorPut(EvalContext *ctx, char *strminor, char *tags);
165+
static void SysOSVersionMinorPutInt(EvalContext *ctx, int minor, char *tags);
166+
static void SysOsVersionMinorSetDefault(EvalContext *ctx);
167+
164168
#ifdef __APPLE__
165169
static void Apple_Version(EvalContext *ctx);
166170
#endif
@@ -1126,6 +1130,8 @@ static void SetFlavor2(
11261130

11271131
#ifdef __linux__
11281132

1133+
static void SysOSVersionMinorPutFromOSReleaseVersionID(EvalContext *ctx, char *name, char *version_id, char *tags);
1134+
11291135
/**
11301136
* @brief Combines OS and version string to define multiple hard classes
11311137
*
@@ -1213,6 +1219,12 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
12131219
*first_underscore = '\0';
12141220
SetFlavor2(ctx, os_release_id, os_release_version_id);
12151221
*first_underscore = '_';
1222+
1223+
// set os version minor
1224+
const char *const_os_release_name = JsonObjectGetAsString(os_release_json, "NAME");
1225+
char *os_release_name = SafeStringDuplicate(const_os_release_name);
1226+
SysOSVersionMinorPutFromOSReleaseVersionID(ctx, os_release_name, os_release_version_id, tags);
1227+
free(os_release_name);
12161228
}
12171229
else
12181230
{
@@ -1733,6 +1745,7 @@ static void Apple_Version(EvalContext *ctx)
17331745
assert(ret >= 0 && (size_t) ret < sizeof(buf));
17341746
Log(LOG_LEVEL_VERBOSE, "This appears to be a %s %u.%u system.", product_name, major, minor);
17351747
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1748+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
17361749
}
17371750

17381751
if (revcomps > 2)
@@ -1798,6 +1811,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
17981811

17991812
snprintf(buf, CF_BUFSIZE, "oraclevmserver_%d_%d", major, minor);
18001813
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1814+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18011815
}
18021816

18031817
if (revcomps > 2)
@@ -1849,6 +1863,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
18491863

18501864
snprintf(buf, CF_BUFSIZE, "oracle_%d_%d", major, minor);
18511865
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1866+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18521867
}
18531868
}
18541869

@@ -2164,6 +2179,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
21642179
}
21652180
}
21662181

2182+
if (minor >= 0)
2183+
{
2184+
SysOSVersionMinorPutInt(ctx, minor, "source=agent,derived-from-file="RH_REL_FILENAME);
2185+
}
2186+
21672187
return 0;
21682188
}
21692189

@@ -2382,6 +2402,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
23822402
}
23832403
}
23842404

2405+
if (minor >= 0)
2406+
{
2407+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
2408+
}
2409+
23852410
Log(LOG_LEVEL_VERBOSE, "Could not find a numeric OS release in %s", SUSE_REL_FILENAME);
23862411

23872412
return 0;
@@ -2417,6 +2442,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
24172442
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u.%u system.", major, minor);
24182443
snprintf(classname, CF_MAXVARSIZE, "slackware_%u_%u", major, minor);
24192444
EvalContextClassPutHard(ctx, classname, "inventory,attribute_name=none,source=agent");
2445+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
24202446
/* Fall-through */
24212447
case 1:
24222448
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u system.", major);
@@ -2624,6 +2650,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
26242650
"inventory,attribute_name=none,source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
26252651
}
26262652
}
2653+
if (release >= 0)
2654+
{
2655+
SysOSVersionMinorPutInt(ctx, release, "source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
2656+
}
26272657

26282658
return 0;
26292659
}
@@ -2755,6 +2785,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
27552785
strcat(classbuf, "_");
27562786
strcat(classbuf, strminor);
27572787
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
2788+
2789+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
27582790
}
27592791
}
27602792

@@ -2907,6 +2939,7 @@ static int VM_Version(EvalContext *ctx)
29072939
snprintf(classbuf, CF_BUFSIZE, "VMware ESX Server %d.%d.%d", major, minor, bug);
29082940
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
29092941
sufficient = 1;
2942+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
29102943
}
29112944
else if (sscanf(buffer, "VMware ESX Server %255s", version) > 0)
29122945
{
@@ -3784,6 +3817,68 @@ static void SysOsVersionMajor(EvalContext *ctx)
37843817

37853818
/*****************************************************************************/
37863819

3820+
static void SysOSVersionMinorPutFromOSReleaseVersionID(EvalContext *ctx, char *name, char *version_id, char *tags)
3821+
{
3822+
assert(version_id != NULL);
3823+
Item *version_tuple = SplitString(version_id, '_');
3824+
3825+
if (version_tuple == NULL)
3826+
{
3827+
return;
3828+
}
3829+
if (name != NULL && (StringStartsWith(name, "solaris") || StringStartsWith(name, "sunos")))
3830+
{
3831+
SysOSVersionMinorPut(ctx, version_tuple->name, tags);
3832+
DeleteItemList(version_tuple);
3833+
return;
3834+
}
3835+
if (version_tuple->next == NULL)
3836+
{
3837+
DeleteItemList(version_tuple);
3838+
return;
3839+
}
3840+
SysOSVersionMinorPut(ctx, version_tuple->next->name, tags);
3841+
DeleteItemList(version_tuple);
3842+
}
3843+
3844+
static void SysOSVersionMinorPutInt(EvalContext *ctx, int minor, char *tags)
3845+
{
3846+
char strminor[PRINTSIZE(minor)];
3847+
xsnprintf(strminor, sizeof(strminor), "%d", minor);
3848+
3849+
SysOSVersionMinorPut(ctx, strminor, tags);
3850+
}
3851+
3852+
static void SysOSVersionMinorPut(EvalContext *ctx, char *strminor, char *tags)
3853+
{
3854+
EvalContextVariablePutSpecial(ctx,
3855+
SPECIAL_SCOPE_SYS,
3856+
"os_version_minor",
3857+
strminor,
3858+
CF_DATA_TYPE_STRING,
3859+
tags
3860+
);
3861+
}
3862+
3863+
static void SysOsVersionMinorSetDefault(EvalContext *ctx)
3864+
{
3865+
DataType type_out;
3866+
const char *value = (const char *) EvalContextVariableGetSpecial(
3867+
ctx, SPECIAL_SCOPE_SYS, "os_version_minor", &type_out);
3868+
if (value == NULL)
3869+
{
3870+
EvalContextVariablePutSpecial(ctx,
3871+
SPECIAL_SCOPE_SYS,
3872+
"os_version_minor",
3873+
"Unknown",
3874+
CF_DATA_TYPE_STRING,
3875+
"source=agent"
3876+
);
3877+
}
3878+
}
3879+
3880+
/*****************************************************************************/
3881+
37873882
void DetectEnvironment(EvalContext *ctx)
37883883
{
37893884
GetNameInfo3(ctx);
@@ -3796,4 +3891,5 @@ void DetectEnvironment(EvalContext *ctx)
37963891
GetDefVars(ctx);
37973892
SysOSNameHuman(ctx);
37983893
SysOsVersionMajor(ctx);
3894+
SysOsVersionMinorSetDefault(ctx);
37993895
}

0 commit comments

Comments
 (0)