@@ -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
@@ -1157,6 +1161,30 @@ static void DefineVersionedHardClasses(
1157
1161
free (class );
1158
1162
}
1159
1163
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
+
1160
1188
static void OSReleaseParse (EvalContext * ctx , const char * file_path )
1161
1189
{
1162
1190
JsonElement * os_release_json = JsonReadDataFile ("system info discovery" ,
@@ -1213,6 +1241,12 @@ static void OSReleaseParse(EvalContext *ctx, const char *file_path)
1213
1241
* first_underscore = '\0' ;
1214
1242
SetFlavor2 (ctx , os_release_id , os_release_version_id );
1215
1243
* 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 );
1216
1250
}
1217
1251
else
1218
1252
{
@@ -1733,6 +1767,7 @@ static void Apple_Version(EvalContext *ctx)
1733
1767
assert (ret >= 0 && (size_t ) ret < sizeof (buf ));
1734
1768
Log (LOG_LEVEL_VERBOSE , "This appears to be a %s %u.%u system." , product_name , major , minor );
1735
1769
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1770
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1736
1771
}
1737
1772
1738
1773
if (revcomps > 2 )
@@ -1798,6 +1833,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
1798
1833
1799
1834
snprintf (buf , CF_BUFSIZE , "oraclevmserver_%d_%d" , major , minor );
1800
1835
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1836
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1801
1837
}
1802
1838
1803
1839
if (revcomps > 2 )
@@ -1849,6 +1885,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
1849
1885
1850
1886
snprintf (buf , CF_BUFSIZE , "oracle_%d_%d" , major , minor );
1851
1887
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1888
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1852
1889
}
1853
1890
}
1854
1891
@@ -2164,6 +2201,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
2164
2201
}
2165
2202
}
2166
2203
2204
+ if (minor >= 0 )
2205
+ {
2206
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent,derived-from-file=" RH_REL_FILENAME );
2207
+ }
2208
+
2167
2209
return 0 ;
2168
2210
}
2169
2211
@@ -2382,6 +2424,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
2382
2424
}
2383
2425
}
2384
2426
2427
+ if (minor >= 0 )
2428
+ {
2429
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2430
+ }
2431
+
2385
2432
Log (LOG_LEVEL_VERBOSE , "Could not find a numeric OS release in %s" , SUSE_REL_FILENAME );
2386
2433
2387
2434
return 0 ;
@@ -2417,6 +2464,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
2417
2464
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u.%u system." , major , minor );
2418
2465
snprintf (classname , CF_MAXVARSIZE , "slackware_%u_%u" , major , minor );
2419
2466
EvalContextClassPutHard (ctx , classname , "inventory,attribute_name=none,source=agent" );
2467
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2420
2468
/* Fall-through */
2421
2469
case 1 :
2422
2470
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u system." , major );
@@ -2624,6 +2672,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
2624
2672
"inventory,attribute_name=none,source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2625
2673
}
2626
2674
}
2675
+ if (release >= 0 )
2676
+ {
2677
+ SysOSVersionMinorPutInt (ctx , release , "source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2678
+ }
2627
2679
2628
2680
return 0 ;
2629
2681
}
@@ -2755,6 +2807,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
2755
2807
strcat (classbuf , "_" );
2756
2808
strcat (classbuf , strminor );
2757
2809
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2810
+
2811
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2758
2812
}
2759
2813
}
2760
2814
@@ -2907,6 +2961,7 @@ static int VM_Version(EvalContext *ctx)
2907
2961
snprintf (classbuf , CF_BUFSIZE , "VMware ESX Server %d.%d.%d" , major , minor , bug );
2908
2962
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2909
2963
sufficient = 1 ;
2964
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2910
2965
}
2911
2966
else if (sscanf (buffer , "VMware ESX Server %255s" , version ) > 0 )
2912
2967
{
@@ -3784,6 +3839,44 @@ static void SysOsVersionMajor(EvalContext *ctx)
3784
3839
3785
3840
/*****************************************************************************/
3786
3841
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
+
3787
3880
void DetectEnvironment (EvalContext * ctx )
3788
3881
{
3789
3882
GetNameInfo3 (ctx );
@@ -3796,4 +3889,5 @@ void DetectEnvironment(EvalContext *ctx)
3796
3889
GetDefVars (ctx );
3797
3890
SysOSNameHuman (ctx );
3798
3891
SysOsVersionMajor (ctx );
3892
+ SysOsVersionMinorSetDefault (ctx );
3799
3893
}
0 commit comments