@@ -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 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
+
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
+ SysOSVersionMinorPutFromVersion (ctx , os_release_name , os_release_version_id , tags );
1249
+ free (os_release_name );
1216
1250
}
1217
1251
else
1218
1252
{
@@ -1461,12 +1495,29 @@ static void OSClasses(EvalContext *ctx)
1461
1495
1462
1496
// Extract major version number
1463
1497
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 ++ )
1465
1501
{
1466
1502
if (major == NULL && isdigit (* sp ))
1467
1503
{
1468
1504
major = sp ;
1469
1505
}
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
+ }
1470
1521
else if (!isdigit (* sp ))
1471
1522
{
1472
1523
* sp = '\0' ;
@@ -1478,6 +1529,10 @@ static void OSClasses(EvalContext *ctx)
1478
1529
snprintf (context , CF_BUFSIZE , "hpux_%s" , major );
1479
1530
EvalContextClassPutHard (ctx , context , "source=agent,derived-from=sys.flavor" );
1480
1531
}
1532
+ if (minor != NULL )
1533
+ {
1534
+ SysOSVersionMinorPut (ctx , minor , "source=agent" );
1535
+ }
1481
1536
#endif
1482
1537
1483
1538
#ifdef __FreeBSD__
@@ -1733,6 +1788,7 @@ static void Apple_Version(EvalContext *ctx)
1733
1788
assert (ret >= 0 && (size_t ) ret < sizeof (buf ));
1734
1789
Log (LOG_LEVEL_VERBOSE , "This appears to be a %s %u.%u system." , product_name , major , minor );
1735
1790
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1791
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1736
1792
}
1737
1793
1738
1794
if (revcomps > 2 )
@@ -1798,6 +1854,7 @@ static void Linux_Oracle_VM_Server_Version(EvalContext *ctx)
1798
1854
1799
1855
snprintf (buf , CF_BUFSIZE , "oraclevmserver_%d_%d" , major , minor );
1800
1856
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1857
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1801
1858
}
1802
1859
1803
1860
if (revcomps > 2 )
@@ -1849,6 +1906,7 @@ static void Linux_Oracle_Version(EvalContext *ctx)
1849
1906
1850
1907
snprintf (buf , CF_BUFSIZE , "oracle_%d_%d" , major , minor );
1851
1908
EvalContextClassPutHard (ctx , buf , "inventory,attribute_name=none,source=agent" );
1909
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
1852
1910
}
1853
1911
}
1854
1912
@@ -2164,6 +2222,11 @@ static int Linux_Redhat_Version(EvalContext *ctx)
2164
2222
}
2165
2223
}
2166
2224
2225
+ if (minor >= 0 )
2226
+ {
2227
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent,derived-from-file=" RH_REL_FILENAME );
2228
+ }
2229
+
2167
2230
return 0 ;
2168
2231
}
2169
2232
@@ -2382,6 +2445,11 @@ static int Linux_Suse_Version(EvalContext *ctx)
2382
2445
}
2383
2446
}
2384
2447
2448
+ if (minor >= 0 )
2449
+ {
2450
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2451
+ }
2452
+
2385
2453
Log (LOG_LEVEL_VERBOSE , "Could not find a numeric OS release in %s" , SUSE_REL_FILENAME );
2386
2454
2387
2455
return 0 ;
@@ -2417,6 +2485,7 @@ static int Linux_Slackware_Version(EvalContext *ctx, char *filename)
2417
2485
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u.%u system." , major , minor );
2418
2486
snprintf (classname , CF_MAXVARSIZE , "slackware_%u_%u" , major , minor );
2419
2487
EvalContextClassPutHard (ctx , classname , "inventory,attribute_name=none,source=agent" );
2488
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2420
2489
/* Fall-through */
2421
2490
case 1 :
2422
2491
Log (LOG_LEVEL_VERBOSE , "This appears to be a Slackware %u system." , major );
@@ -2506,6 +2575,7 @@ static int Linux_Misc_Version(EvalContext *ctx)
2506
2575
nt_static_assert ((sizeof (version )) > 255 );
2507
2576
sscanf (sp + strlen ("DISTRIB_RELEASE=" ), "%255[^\n]" , version );
2508
2577
CanonifyNameInPlace (version );
2578
+ SysOSVersionMinorPutFromVersion (ctx , "" , version , "source=agent, derived-from=/etc/lsb_release" );
2509
2579
}
2510
2580
}
2511
2581
fclose (fp );
@@ -2624,6 +2694,10 @@ static int Linux_Debian_Version(EvalContext *ctx)
2624
2694
"inventory,attribute_name=none,source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2625
2695
}
2626
2696
}
2697
+ if (release >= 0 )
2698
+ {
2699
+ SysOSVersionMinorPutInt (ctx , release , "source=agent,derived-from-file=" DEBIAN_ISSUE_FILENAME );
2700
+ }
2627
2701
2628
2702
return 0 ;
2629
2703
}
@@ -2755,6 +2829,8 @@ static int Linux_Mandriva_Version_Real(EvalContext *ctx, char *filename, char *r
2755
2829
strcat (classbuf , "_" );
2756
2830
strcat (classbuf , strminor );
2757
2831
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2832
+
2833
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2758
2834
}
2759
2835
}
2760
2836
@@ -2820,6 +2896,7 @@ static void Linux_Alpine_Version(EvalContext *ctx)
2820
2896
{
2821
2897
char class [CF_MAXVARSIZE ];
2822
2898
CanonifyNameInPlace (version );
2899
+ SysOSVersionMinorPutFromVersion (ctx , "alpine_linux" , version , "source=agent,derived-from-file=/etc/alpine-release" );
2823
2900
snprintf (class , sizeof (class ), "alpine_linux_%s" , version );
2824
2901
EvalContextClassPutHard (ctx , class ,
2825
2902
"inventory,attribute_name=none,source=agent"
@@ -2848,6 +2925,7 @@ static int EOS_Version(EvalContext *ctx)
2848
2925
version [0 ] = '\0' ;
2849
2926
sscanf (buffer , "%*s %*s %*s %255s" , version );
2850
2927
CanonifyNameInPlace (version );
2928
+ SysOSVersionMinorPutFromVersion (ctx , "eos" , version , "source=agent" );
2851
2929
snprintf (class , CF_MAXVARSIZE , "eos_%s" , version );
2852
2930
EvalContextClassPutHard (ctx , class , "inventory,attribute_name=none,source=agent" );
2853
2931
}
@@ -2872,6 +2950,7 @@ static int MiscOS(EvalContext *ctx)
2872
2950
EvalContextClassPutHard (ctx , "big_ip" , "inventory,attribute_name=none,source=agent" );
2873
2951
sscanf (buffer , "%*s %255s %*s %255s" , version , build );
2874
2952
CanonifyNameInPlace (version );
2953
+ SysOSVersionMinorPutFromVersion (ctx , "" , version , "source=agent" );
2875
2954
CanonifyNameInPlace (build );
2876
2955
snprintf (class , CF_MAXVARSIZE , "big_ip_%s" , version );
2877
2956
EvalContextClassPutHard (ctx , class , "inventory,attribute_name=none,source=agent" );
@@ -2907,6 +2986,7 @@ static int VM_Version(EvalContext *ctx)
2907
2986
snprintf (classbuf , CF_BUFSIZE , "VMware ESX Server %d.%d.%d" , major , minor , bug );
2908
2987
EvalContextClassPutHard (ctx , classbuf , "inventory,attribute_name=none,source=agent" );
2909
2988
sufficient = 1 ;
2989
+ SysOSVersionMinorPutInt (ctx , minor , "source=agent" );
2910
2990
}
2911
2991
else if (sscanf (buffer , "VMware ESX Server %255s" , version ) > 0 )
2912
2992
{
@@ -3784,6 +3864,44 @@ static void SysOsVersionMajor(EvalContext *ctx)
3784
3864
3785
3865
/*****************************************************************************/
3786
3866
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
+
3787
3905
void DetectEnvironment (EvalContext * ctx )
3788
3906
{
3789
3907
GetNameInfo3 (ctx );
@@ -3796,4 +3914,5 @@ void DetectEnvironment(EvalContext *ctx)
3796
3914
GetDefVars (ctx );
3797
3915
SysOSNameHuman (ctx );
3798
3916
SysOsVersionMajor (ctx );
3917
+ SysOsVersionMinorSetDefault (ctx );
3799
3918
}
0 commit comments