Skip to content

Commit 5b7e74f

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 5b7e74f

File tree

1 file changed

+120
-1
lines changed

1 file changed

+120
-1
lines changed

libenv/sysinfo.c

Lines changed: 120 additions & 1 deletion
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
@@ -1157,6 +1161,30 @@ static void DefineVersionedHardClasses(
11571161
free(class);
11581162
}
11591163

1164+
static void SysOSVersionMinorPutFromVersion(EvalContext *ctx, char *name, char *version_id, char *tags)
1165+
{
1166+
assert(version_id != NULL);
1167+
Item *version_tuple = SplitString(version_id, '_');
1168+
1169+
if (version_tuple == NULL)
1170+
{
1171+
return;
1172+
}
1173+
if (name != NULL && (StringStartsWith(name, "solaris") || StringStartsWith(name, "sunos")))
1174+
{
1175+
SysOSVersionMinorPut(ctx, version_tuple->name, tags);
1176+
DeleteItemList(version_tuple);
1177+
return;
1178+
}
1179+
if (version_tuple->next == NULL)
1180+
{
1181+
DeleteItemList(version_tuple);
1182+
return;
1183+
}
1184+
SysOSVersionMinorPut(ctx, version_tuple->next->name, tags);
1185+
DeleteItemList(version_tuple);
1186+
}
1187+
11601188
static void OSReleaseParse(EvalContext *ctx, const char *file_path)
11611189
{
11621190
JsonElement *os_release_json = JsonReadDataFile("system info discovery",
@@ -1213,6 +1241,12 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
12131241
*first_underscore = '\0';
12141242
SetFlavor2(ctx, os_release_id, os_release_version_id);
12151243
*first_underscore = '_';
1244+
1245+
// set os version minor
1246+
const char *const_os_release_name = JsonObjectGetAsString(os_release_json, "NAME");
1247+
char *os_release_name = SafeStringDuplicate(const_os_release_name);
1248+
SysOSVersionMinorPutFromVersion(ctx, os_release_name, os_release_version_id, tags);
1249+
free(os_release_name);
12161250
}
12171251
else
12181252
{
@@ -1461,12 +1495,29 @@ static void OSClasses(EvalContext *ctx)
14611495

14621496
// Extract major version number
14631497
char *major = NULL;
1464-
for (char *sp = vbuff; *sp != '\0'; sp++)
1498+
char *minor = NULL;
1499+
char *sp = vbuff;
1500+
for (sp; *sp != '\0'; sp++)
14651501
{
14661502
if (major == NULL && isdigit(*sp))
14671503
{
14681504
major = sp;
14691505
}
1506+
if (major == NULL && !isdigit(*sp))
1507+
{
1508+
*sp = '\0';
1509+
}
1510+
if (major != NULL && !isdigit(*sp))
1511+
{
1512+
break;
1513+
}
1514+
}
1515+
for (sp; *sp != '\0'; sp++)
1516+
{
1517+
if (minor == NULL && isdigit(*sp))
1518+
{
1519+
minor = sp;
1520+
}
14701521
else if (!isdigit(*sp))
14711522
{
14721523
*sp = '\0';
@@ -1478,6 +1529,10 @@ static void OSClasses(EvalContext *ctx)
14781529
snprintf(context, CF_BUFSIZE, "hpux_%s", major);
14791530
EvalContextClassPutHard(ctx, context, "source=agent,derived-from=sys.flavor");
14801531
}
1532+
if (minor != NULL)
1533+
{
1534+
SysOSVersionMinorPut(ctx, minor, "source=agent");
1535+
}
14811536
#endif
14821537

14831538
#ifdef __FreeBSD__
@@ -1733,6 +1788,7 @@ static void Apple_Version(EvalContext *ctx)
17331788
assert(ret >= 0 && (size_t) ret < sizeof(buf));
17341789
Log(LOG_LEVEL_VERBOSE, "This appears to be a %s %u.%u system.", product_name, major, minor);
17351790
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1791+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
17361792
}
17371793

17381794
if (revcomps > 2)
@@ -1798,6 +1854,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
17981854

17991855
snprintf(buf, CF_BUFSIZE, "oraclevmserver_%d_%d", major, minor);
18001856
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1857+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18011858
}
18021859

18031860
if (revcomps > 2)
@@ -1849,6 +1906,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
18491906

18501907
snprintf(buf, CF_BUFSIZE, "oracle_%d_%d", major, minor);
18511908
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1909+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18521910
}
18531911
}
18541912

@@ -2164,6 +2222,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
21642222
}
21652223
}
21662224

2225+
if (minor >= 0)
2226+
{
2227+
SysOSVersionMinorPutInt(ctx, minor, "source=agent,derived-from-file="RH_REL_FILENAME);
2228+
}
2229+
21672230
return 0;
21682231
}
21692232

@@ -2382,6 +2445,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
23822445
}
23832446
}
23842447

2448+
if (minor >= 0)
2449+
{
2450+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
2451+
}
2452+
23852453
Log(LOG_LEVEL_VERBOSE, "Could not find a numeric OS release in %s", SUSE_REL_FILENAME);
23862454

23872455
return 0;
@@ -2417,6 +2485,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
24172485
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u.%u system.", major, minor);
24182486
snprintf(classname, CF_MAXVARSIZE, "slackware_%u_%u", major, minor);
24192487
EvalContextClassPutHard(ctx, classname, "inventory,attribute_name=none,source=agent");
2488+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
24202489
/* Fall-through */
24212490
case 1:
24222491
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u system.", major);
@@ -2506,6 +2575,7 @@ static int Linux_Misc_Version(EvalContext *ctx)
25062575
nt_static_assert((sizeof(version)) > 255);
25072576
sscanf(sp + strlen("DISTRIB_RELEASE="), "%255[^\n]", version);
25082577
CanonifyNameInPlace(version);
2578+
SysOSVersionMinorPutFromVersion(ctx, "", version, "source=agent, derived-from=/etc/lsb_release");
25092579
}
25102580
}
25112581
fclose(fp);
@@ -2624,6 +2694,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
26242694
"inventory,attribute_name=none,source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
26252695
}
26262696
}
2697+
if (release >= 0)
2698+
{
2699+
SysOSVersionMinorPutInt(ctx, release, "source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
2700+
}
26272701

26282702
return 0;
26292703
}
@@ -2755,6 +2829,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
27552829
strcat(classbuf, "_");
27562830
strcat(classbuf, strminor);
27572831
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
2832+
2833+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
27582834
}
27592835
}
27602836

@@ -2820,6 +2896,7 @@ static void Linux_Alpine_Version(EvalContext *ctx)
28202896
{
28212897
char class[CF_MAXVARSIZE];
28222898
CanonifyNameInPlace(version);
2899+
SysOSVersionMinorPutFromVersion(ctx, "alpine_linux", version, "source=agent,derived-from-file=/etc/alpine-release");
28232900
snprintf(class, sizeof(class), "alpine_linux_%s", version);
28242901
EvalContextClassPutHard(ctx, class,
28252902
"inventory,attribute_name=none,source=agent"
@@ -2848,6 +2925,7 @@ static int EOS_Version(EvalContext *ctx)
28482925
version[0] = '\0';
28492926
sscanf(buffer, "%*s %*s %*s %255s", version);
28502927
CanonifyNameInPlace(version);
2928+
SysOSVersionMinorPutFromVersion(ctx, "eos", version, "source=agent");
28512929
snprintf(class, CF_MAXVARSIZE, "eos_%s", version);
28522930
EvalContextClassPutHard(ctx, class, "inventory,attribute_name=none,source=agent");
28532931
}
@@ -2872,6 +2950,7 @@ static int MiscOS(EvalContext *ctx)
28722950
EvalContextClassPutHard(ctx, "big_ip", "inventory,attribute_name=none,source=agent");
28732951
sscanf(buffer, "%*s %255s %*s %255s", version, build);
28742952
CanonifyNameInPlace(version);
2953+
SysOSVersionMinorPutFromVersion(ctx, "", version, "source=agent");
28752954
CanonifyNameInPlace(build);
28762955
snprintf(class, CF_MAXVARSIZE, "big_ip_%s", version);
28772956
EvalContextClassPutHard(ctx, class, "inventory,attribute_name=none,source=agent");
@@ -2907,6 +2986,7 @@ static int VM_Version(EvalContext *ctx)
29072986
snprintf(classbuf, CF_BUFSIZE, "VMware ESX Server %d.%d.%d", major, minor, bug);
29082987
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
29092988
sufficient = 1;
2989+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
29102990
}
29112991
else if (sscanf(buffer, "VMware ESX Server %255s", version) > 0)
29122992
{
@@ -3784,6 +3864,44 @@ static void SysOsVersionMajor(EvalContext *ctx)
37843864

37853865
/*****************************************************************************/
37863866

3867+
static void SysOSVersionMinorPutInt(EvalContext *ctx, int minor, char *tags)
3868+
{
3869+
char strminor[PRINTSIZE(minor)];
3870+
xsnprintf(strminor, sizeof(strminor), "%d", minor);
3871+
3872+
SysOSVersionMinorPut(ctx, strminor, tags);
3873+
}
3874+
3875+
static void SysOSVersionMinorPut(EvalContext *ctx, char *strminor, char *tags)
3876+
{
3877+
EvalContextVariablePutSpecial(ctx,
3878+
SPECIAL_SCOPE_SYS,
3879+
"os_version_minor",
3880+
strminor,
3881+
CF_DATA_TYPE_STRING,
3882+
tags
3883+
);
3884+
}
3885+
3886+
static void SysOsVersionMinorSetDefault(EvalContext *ctx)
3887+
{
3888+
DataType type_out;
3889+
const char *value = (const char *) EvalContextVariableGetSpecial(
3890+
ctx, SPECIAL_SCOPE_SYS, "os_version_minor", &type_out);
3891+
if (value == NULL)
3892+
{
3893+
EvalContextVariablePutSpecial(ctx,
3894+
SPECIAL_SCOPE_SYS,
3895+
"os_version_minor",
3896+
"Unknown",
3897+
CF_DATA_TYPE_STRING,
3898+
"source=agent"
3899+
);
3900+
}
3901+
}
3902+
3903+
/*****************************************************************************/
3904+
37873905
void DetectEnvironment(EvalContext *ctx)
37883906
{
37893907
GetNameInfo3(ctx);
@@ -3796,4 +3914,5 @@ void DetectEnvironment(EvalContext *ctx)
37963914
GetDefVars(ctx);
37973915
SysOSNameHuman(ctx);
37983916
SysOsVersionMajor(ctx);
3917+
SysOsVersionMinorSetDefault(ctx);
37993918
}

0 commit comments

Comments
 (0)