Skip to content

Commit 5040d09

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 5040d09

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

libenv/sysinfo.c

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

1164+
static void SysOSVersionMinorPutFromOSReleaseVersionID(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+
SysOSVersionMinorPutFromOSReleaseVersionID(ctx, os_release_name, os_release_version_id, tags);
1249+
free(os_release_name);
12161250
}
12171251
else
12181252
{
@@ -1733,6 +1767,7 @@ static void Apple_Version(EvalContext *ctx)
17331767
assert(ret >= 0 && (size_t) ret < sizeof(buf));
17341768
Log(LOG_LEVEL_VERBOSE, "This appears to be a %s %u.%u system.", product_name, major, minor);
17351769
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1770+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
17361771
}
17371772

17381773
if (revcomps > 2)
@@ -1798,6 +1833,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
17981833

17991834
snprintf(buf, CF_BUFSIZE, "oraclevmserver_%d_%d", major, minor);
18001835
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1836+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18011837
}
18021838

18031839
if (revcomps > 2)
@@ -1849,6 +1885,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
18491885

18501886
snprintf(buf, CF_BUFSIZE, "oracle_%d_%d", major, minor);
18511887
EvalContextClassPutHard(ctx, buf, "inventory,attribute_name=none,source=agent");
1888+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
18521889
}
18531890
}
18541891

@@ -2164,6 +2201,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
21642201
}
21652202
}
21662203

2204+
if (minor >= 0)
2205+
{
2206+
SysOSVersionMinorPutInt(ctx, minor, "source=agent,derived-from-file="RH_REL_FILENAME);
2207+
}
2208+
21672209
return 0;
21682210
}
21692211

@@ -2382,6 +2424,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
23822424
}
23832425
}
23842426

2427+
if (minor >= 0)
2428+
{
2429+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
2430+
}
2431+
23852432
Log(LOG_LEVEL_VERBOSE, "Could not find a numeric OS release in %s", SUSE_REL_FILENAME);
23862433

23872434
return 0;
@@ -2417,6 +2464,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
24172464
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u.%u system.", major, minor);
24182465
snprintf(classname, CF_MAXVARSIZE, "slackware_%u_%u", major, minor);
24192466
EvalContextClassPutHard(ctx, classname, "inventory,attribute_name=none,source=agent");
2467+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
24202468
/* Fall-through */
24212469
case 1:
24222470
Log(LOG_LEVEL_VERBOSE, "This appears to be a Slackware %u system.", major);
@@ -2624,6 +2672,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
26242672
"inventory,attribute_name=none,source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
26252673
}
26262674
}
2675+
if (release >= 0)
2676+
{
2677+
SysOSVersionMinorPutInt(ctx, release, "source=agent,derived-from-file="DEBIAN_ISSUE_FILENAME);
2678+
}
26272679

26282680
return 0;
26292681
}
@@ -2755,6 +2807,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
27552807
strcat(classbuf, "_");
27562808
strcat(classbuf, strminor);
27572809
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
2810+
2811+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
27582812
}
27592813
}
27602814

@@ -2907,6 +2961,7 @@ static int VM_Version(EvalContext *ctx)
29072961
snprintf(classbuf, CF_BUFSIZE, "VMware ESX Server %d.%d.%d", major, minor, bug);
29082962
EvalContextClassPutHard(ctx, classbuf, "inventory,attribute_name=none,source=agent");
29092963
sufficient = 1;
2964+
SysOSVersionMinorPutInt(ctx, minor, "source=agent");
29102965
}
29112966
else if (sscanf(buffer, "VMware ESX Server %255s", version) > 0)
29122967
{
@@ -3784,6 +3839,44 @@ static void SysOsVersionMajor(EvalContext *ctx)
37843839

37853840
/*****************************************************************************/
37863841

3842+
static void SysOSVersionMinorPutInt(EvalContext *ctx, int minor, char *tags)
3843+
{
3844+
char strminor[PRINTSIZE(minor)];
3845+
xsnprintf(strminor, sizeof(strminor), "%d", minor);
3846+
3847+
SysOSVersionMinorPut(ctx, strminor, tags);
3848+
}
3849+
3850+
static void SysOSVersionMinorPut(EvalContext *ctx, char *strminor, char *tags)
3851+
{
3852+
EvalContextVariablePutSpecial(ctx,
3853+
SPECIAL_SCOPE_SYS,
3854+
"os_version_minor",
3855+
strminor,
3856+
CF_DATA_TYPE_STRING,
3857+
tags
3858+
);
3859+
}
3860+
3861+
static void SysOsVersionMinorSetDefault(EvalContext *ctx)
3862+
{
3863+
DataType type_out;
3864+
const char *value = (const char *) EvalContextVariableGetSpecial(
3865+
ctx, SPECIAL_SCOPE_SYS, "os_version_minor", &type_out);
3866+
if (value == NULL)
3867+
{
3868+
EvalContextVariablePutSpecial(ctx,
3869+
SPECIAL_SCOPE_SYS,
3870+
"os_version_minor",
3871+
"Unknown",
3872+
CF_DATA_TYPE_STRING,
3873+
"source=agent"
3874+
);
3875+
}
3876+
}
3877+
3878+
/*****************************************************************************/
3879+
37873880
void DetectEnvironment(EvalContext *ctx)
37883881
{
37893882
GetNameInfo3(ctx);
@@ -3796,4 +3889,5 @@ void DetectEnvironment(EvalContext *ctx)
37963889
GetDefVars(ctx);
37973890
SysOSNameHuman(ctx);
37983891
SysOsVersionMajor(ctx);
3892+
SysOsVersionMinorSetDefault(ctx);
37993893
}

0 commit comments

Comments
 (0)