Skip to content

Commit 8379256

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

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

libenv/sysinfo.c

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,6 +1234,16 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
12341234
JsonDestroy(os_release_json);
12351235
}
12361236
}
1237+
1238+
void OSReleasePut(EvalContext *ctx, const char *key, const char *value)
1239+
{
1240+
DataType type_out;
1241+
JsonElement *os_rel = EvalContextVariableGetSpecial(
1242+
ctx, SPECIAL_SCOPE_SYS, "os_release", &type_out);
1243+
1244+
JsonObjectAppendString(os_rel, key, value);
1245+
}
1246+
12371247
#endif
12381248

12391249
static void OSClasses(EvalContext *ctx)
@@ -2164,6 +2174,17 @@ static int Linux_Redhat_Version(EvalContext *ctx)
21642174
}
21652175
}
21662176

2177+
// For CentOS 7, os-release VERSION_ID only show the major version.
2178+
// This updates it with the version major.minor from redhat-release
2179+
if (major != -1 && minor != -2)
2180+
{
2181+
char version_id[CF_MAXVARSIZE];
2182+
strcat(version_id, strmajor);
2183+
strcat(version_id, ".");
2184+
strcat(version_id, strminor);
2185+
OSReleasePut(ctx, "VERSION_ID", version_id);
2186+
}
2187+
21672188
return 0;
21682189
}
21692190

@@ -3782,6 +3803,93 @@ static void SysOsVersionMajor(EvalContext *ctx)
37823803
free(flavor);
37833804
}
37843805

3806+
/*****************************************************************************/
3807+
3808+
static const char *OSReleaseGet(EvalContext *ctx, const char *field)
3809+
{
3810+
DataType type_out;
3811+
const JsonElement *os_rel = EvalContextVariableGetSpecial(
3812+
ctx, SPECIAL_SCOPE_SYS, "os_release", &type_out);
3813+
3814+
if (type_out != CF_DATA_TYPE_CONTAINER)
3815+
{
3816+
return NULL;
3817+
}
3818+
const JsonElement *child = JsonObjectGet(os_rel, field);
3819+
if (child == NULL)
3820+
{
3821+
return NULL;
3822+
}
3823+
const char *result = JsonPrimitiveGetAsString(child);
3824+
return result;
3825+
}
3826+
3827+
static void OSVersionMinorPut(EvalContext *ctx, const char *minor)
3828+
{
3829+
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS,
3830+
"os_version_minor",
3831+
(minor == NULL) ? "Unknown" : minor,
3832+
CF_DATA_TYPE_STRING,
3833+
"source=agent,derived-from=os_release");
3834+
}
3835+
3836+
static void SysOSVersionMinor(EvalContext *ctx)
3837+
{
3838+
#ifndef __MINGW32__
3839+
3840+
const char *version_id = OSReleaseGet(ctx, "VERSION_ID");
3841+
const char *name = OSReleaseGet(ctx, "NAME");
3842+
if ((version_id == NULL) || (name == NULL))
3843+
{
3844+
return OSVersionMinorPut(ctx, NULL);
3845+
}
3846+
Item *version_tuple = SplitString(version_id, '.');
3847+
if (version_tuple == NULL)
3848+
{
3849+
return OSVersionMinorPut(ctx, NULL);
3850+
}
3851+
if (StringStartsWith(name, "solaris") || StringStartsWith(name, "sunos"))
3852+
{
3853+
OSVersionMinorPut(ctx, version_tuple->name);
3854+
return DeleteItemList(version_tuple);
3855+
}
3856+
if (version_tuple->next == NULL)
3857+
{
3858+
OSVersionMinorPut(ctx, NULL);
3859+
return DeleteItemList(version_tuple);
3860+
}
3861+
OSVersionMinorPut(ctx, version_tuple->next->name);
3862+
return DeleteItemList(version_tuple);
3863+
3864+
#else
3865+
3866+
char *release = SafeStringDuplicate(VSYSNAME.release);
3867+
char *major = NULL;
3868+
char *minor = NULL;
3869+
char *rel;
3870+
rel = FindNextInteger(release, &major);
3871+
if (rel == NULL)
3872+
{
3873+
free(release);
3874+
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS,
3875+
"os_version_minor",
3876+
"Unknown",
3877+
CF_DATA_TYPE_STRING,
3878+
"source=agent");
3879+
return;
3880+
}
3881+
rel = FindNextInteger(rel, &minor);
3882+
EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS,
3883+
"os_version_minor",
3884+
(minor == NULL) ? "Unknown" : minor,
3885+
CF_DATA_TYPE_STRING,
3886+
"source=agent");
3887+
free(release);
3888+
3889+
#endif
3890+
}
3891+
3892+
37853893
/*****************************************************************************/
37863894

37873895
void DetectEnvironment(EvalContext *ctx)
@@ -3796,4 +3904,5 @@ void DetectEnvironment(EvalContext *ctx)
37963904
GetDefVars(ctx);
37973905
SysOSNameHuman(ctx);
37983906
SysOsVersionMajor(ctx);
3907+
SysOSVersionMinor(ctx);
37993908
}

0 commit comments

Comments
 (0)