Skip to content

Commit c53ccc7

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 c53ccc7

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

libenv/sysinfo.c

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ 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 SysOSVersionMinorPutFromOSReleaseVersionID(EvalContext *ctx, char *name, char *version_id, char *tags);
167+
static void SysOsVersionMinorSetDefault(EvalContext *ctx);
168+
164169
#ifdef __APPLE__
165170
static void Apple_Version(EvalContext *ctx);
166171
#endif
@@ -1213,6 +1218,15 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
12131218
*first_underscore = '\0';
12141219
SetFlavor2(ctx, os_release_id, os_release_version_id);
12151220
*first_underscore = '_';
1221+
1222+
// set os version minor
1223+
const char *const_os_release_name = JsonObjectGetAsString(os_release_json, "NAME");
1224+
char *os_release_name = SafeStringDuplicate(const_os_release_name);
1225+
SysOSVersionMinorPutFromOSReleaseVersionID(ctx, os_release_name, os_release_version_id, tags);
1226+
if (os_release_name != NULL)
1227+
{
1228+
free(os_release_name);
1229+
}
12161230
}
12171231
else
12181232
{
@@ -1733,6 +1747,7 @@ static void Apple_Version(EvalContext *ctx)
17331747
assert(ret >= 0 && (size_t) ret < sizeof(buf));
17341748
Log(LOG_LEVEL_VERBOSE, "This appears to be a %s %u.%u system.", product_name, major, minor);
17351749
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1750+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
17361751
}
17371752

17381753
if (revcomps > 2)
@@ -1798,6 +1813,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
17981813

17991814
snprintf(buf, CF_BUFSIZE, "oraclevmserver_%d_%d", major, minor);
18001815
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1816+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18011817
}
18021818

18031819
if (revcomps > 2)
@@ -1849,6 +1865,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
18491865

18501866
snprintf(buf, CF_BUFSIZE, "oracle_%d_%d", major, minor);
18511867
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1868+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18521869
}
18531870
}
18541871

@@ -2164,6 +2181,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
21642181
}
21652182
}
21662183

2184+
if (minor >= 0)
2185+
{
2186+
SysOSVersionMinorPutInt(ctx, minor, "source=agent,derived-from-file="RH_REL_FILENAME);
2187+
}
2188+
21672189
return 0;
21682190
}
21692191

@@ -2382,6 +2404,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
23822404
}
23832405
}
23842406

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

23872414
return 0;
@@ -2417,6 +2444,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
24172444
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u.%u system.", major, minor);
24182445
snprintf(classname, CF_MAXVARSIZE, "slackware_%u_%u", major, minor);
24192446
EvalContextClassPutHard(ctx, classname, "inventory,attribute_name=none,source=agent");
2447+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
24202448
/* Fall-through */
24212449
case 1:
24222450
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u system.", major);
@@ -2624,6 +2652,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
26242652
"inventory,attribute_name=none,source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
26252653
}
26262654
}
2655+
if (release >= 0)
2656+
{
2657+
SysOSVersionMinorPutInt(ctx, release, "source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
2658+
}
26272659

26282660
return 0;
26292661
}
@@ -2755,6 +2787,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
27552787
strcat(classbuf, "_");
27562788
strcat(classbuf, strminor);
27572789
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
2790+
2791+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
27582792
}
27592793
}
27602794

@@ -2907,6 +2941,7 @@ static int VM_Version(EvalContext *ctx)
29072941
snprintf(classbuf, CF_BUFSIZE, "VMware ESX Server %d.%d.%d", major, minor, bug);
29082942
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
29092943
sufficient = 1;
2944+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
29102945
}
29112946
else if (sscanf(buffer, "VMware ESX Server %255s", version) > 0)
29122947
{
@@ -3784,6 +3819,68 @@ static void SysOsVersionMajor(EvalContext *ctx)
37843819

37853820
/*****************************************************************************/
37863821

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

0 commit comments

Comments
 (0)