@@ -161,6 +161,10 @@ void CalculateDomainName(const char *nodename, const char *dnsname,
161
161
char * uqname , size_t uqname_size ,
162
162
char * domain , size_t domain_size );
163
163
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
+
164
168
#ifdef __APPLE__
165
169
static void Apple_Version (EvalContext * ctx );
166
170
#endif
@@ -1126,6 +1130,8 @@ static void SetFlavor2(
1126
1130
1127
1131
#ifdef __linux__
1128
1132
1133
+ static void SysOSVersionMinorPutFromOSReleaseVersionID (EvalContext * ctx , char * name , char * version_id , char * tags );
1134
+
1129
1135
/**
1130
1136
* @brief Combines OS and version string to define multiple hard classes
1131
1137
*
@@ -1213,6 +1219,12 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
1213
1219
* first_underscore = '\0' ;
1214
1220
SetFlavor2 (ctx , os_release_id , os_release_version_id );
1215
1221
* 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 );
1216
1228
}
1217
1229
else
1218
1230
{
@@ -1733,6 +1745,7 @@ static void Apple_Version(EvalContext *ctx)
1733
1745
assert (ret >= 0 && (size_t ) ret < sizeof (buf ));
1734
1746
Log (LOG_LEVEL_VERBOSE , "This appears to be a %s %u.%u system." , product_name , major , minor );
1735
1747
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1748
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1736
1749
}
1737
1750
1738
1751
if (revcomps > 2 )
@@ -1798,6 +1811,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
1798
1811
1799
1812
snprintf (buf , CF_BUFSIZE , "oraclevmserver_%d_%d" , major , minor );
1800
1813
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1814
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1801
1815
}
1802
1816
1803
1817
if (revcomps > 2 )
@@ -1849,6 +1863,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
1849
1863
1850
1864
snprintf (buf , CF_BUFSIZE , "oracle_%d_%d" , major , minor );
1851
1865
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1866
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1852
1867
}
1853
1868
}
1854
1869
@@ -2164,6 +2179,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
2164
2179
}
2165
2180
}
2166
2181
2182
+ if (minor >= 0 )
2183
+ {
2184
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent,derived-from-file=" RH_REL_FILENAME );
2185
+ }
2186
+
2167
2187
return 0 ;
2168
2188
}
2169
2189
@@ -2382,6 +2402,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
2382
2402
}
2383
2403
}
2384
2404
2405
+ if (minor >= 0 )
2406
+ {
2407
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2408
+ }
2409
+
2385
2410
Log (LOG_LEVEL_VERBOSE , "Could not find a numeric OS release in %s" , SUSE_REL_FILENAME );
2386
2411
2387
2412
return 0 ;
@@ -2417,6 +2442,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
2417
2442
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u.%u system." , major , minor );
2418
2443
snprintf (classname , CF_MAXVARSIZE , "slackware_%u_%u" , major , minor );
2419
2444
EvalContextClassPutHard (ctx , classname , "inventory,attribute_name=none,source=agent" );
2445
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2420
2446
/* Fall-through */
2421
2447
case 1 :
2422
2448
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u system." , major );
@@ -2624,6 +2650,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
2624
2650
"inventory,attribute_name=none,source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2625
2651
}
2626
2652
}
2653
+ if (release >= 0 )
2654
+ {
2655
+ SysOSVersionMinorPutInt (ctx , release , "source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2656
+ }
2627
2657
2628
2658
return 0 ;
2629
2659
}
@@ -2755,6 +2785,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
2755
2785
strcat (classbuf , "_" );
2756
2786
strcat (classbuf , strminor );
2757
2787
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2788
+
2789
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2758
2790
}
2759
2791
}
2760
2792
@@ -2907,6 +2939,7 @@ static int VM_Version(EvalContext *ctx)
2907
2939
snprintf (classbuf , CF_BUFSIZE , "VMware ESX Server %d.%d.%d" , major , minor , bug );
2908
2940
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2909
2941
sufficient = 1 ;
2942
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2910
2943
}
2911
2944
else if (sscanf (buffer , "VMware ESX Server %255s" , version ) > 0 )
2912
2945
{
@@ -3784,6 +3817,68 @@ static void SysOsVersionMajor(EvalContext *ctx)
3784
3817
3785
3818
/*****************************************************************************/
3786
3819
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
+
3787
3882
void DetectEnvironment (EvalContext * ctx )
3788
3883
{
3789
3884
GetNameInfo3 (ctx );
@@ -3796,4 +3891,5 @@ void DetectEnvironment(EvalContext *ctx)
3796
3891
GetDefVars (ctx );
3797
3892
SysOSNameHuman (ctx );
3798
3893
SysOsVersionMajor (ctx );
3894
+ SysOsVersionMinorSetDefault (ctx );
3799
3895
}
0 commit comments