diff --git a/src/detection/chassis/chassis.h b/src/detection/chassis/chassis.h index 6990a09e4..0c9c0380d 100644 --- a/src/detection/chassis/chassis.h +++ b/src/detection/chassis/chassis.h @@ -5,6 +5,7 @@ typedef struct FFChassisResult { FFstrbuf type; + FFstrbuf serial; FFstrbuf vendor; FFstrbuf version; } FFChassisResult; diff --git a/src/detection/chassis/chassis_bsd.c b/src/detection/chassis/chassis_bsd.c index c38b562c2..816a5dcad 100644 --- a/src/detection/chassis/chassis_bsd.c +++ b/src/detection/chassis/chassis_bsd.c @@ -9,6 +9,8 @@ const char* ffDetectChassis(FFChassisResult* result) ffCleanUpSmbiosValue(&result->type); ffSettingsGetFreeBSDKenv("smbios.chassis.maker", &result->vendor); ffCleanUpSmbiosValue(&result->vendor); + ffSettingsGetFreeBSDKenv("smbios.chassis.serial", &result->serial); + ffCleanUpSmbiosValue(&result->serial); ffSettingsGetFreeBSDKenv("smbios.chassis.version", &result->version); ffCleanUpSmbiosValue(&result->version); return NULL; diff --git a/src/detection/chassis/chassis_linux.c b/src/detection/chassis/chassis_linux.c index 9390169cf..8968a2093 100644 --- a/src/detection/chassis/chassis_linux.c +++ b/src/detection/chassis/chassis_linux.c @@ -7,6 +7,7 @@ const char* ffDetectChassis(FFChassisResult* result) { ffGetSmbiosValue("/sys/devices/virtual/dmi/id/chassis_type", "/sys/class/dmi/id/chassis_type", &result->type); + ffGetSmbiosValue("/sys/devices/virtual/dmi/id/chassis_serial", "/sys/class/dmi/id/chassis_serial", &result->serial); ffGetSmbiosValue("/sys/devices/virtual/dmi/id/chassis_vendor", "/sys/class/dmi/id/chassis_vendor", &result->vendor); ffGetSmbiosValue("/sys/devices/virtual/dmi/id/chassis_version", "/sys/class/dmi/id/chassis_version", &result->version); diff --git a/src/detection/chassis/chassis_windows.c b/src/detection/chassis/chassis_windows.c index 3279840c5..754b85a3d 100644 --- a/src/detection/chassis/chassis_windows.c +++ b/src/detection/chassis/chassis_windows.c @@ -37,6 +37,8 @@ const char* ffDetectChassis(FFChassisResult* result) ffStrbufSetStatic(&result->vendor, ffSmbiosLocateString(strings, data->Manufacturer)); ffCleanUpSmbiosValue(&result->vendor); + ffStrbufSetStatic(&result->serial, ffSmbiosLocateString(strings, data->SerialNumber)); + ffCleanUpSmbiosValue(&result->serial); ffStrbufSetStatic(&result->version, ffSmbiosLocateString(strings, data->Version)); ffCleanUpSmbiosValue(&result->version); ffStrbufSetStatic(&result->type, ffChassisTypeToString(data->Type)); diff --git a/src/modules/chassis/chassis.c b/src/modules/chassis/chassis.c index 1cb414f58..4966053a1 100644 --- a/src/modules/chassis/chassis.c +++ b/src/modules/chassis/chassis.c @@ -12,6 +12,7 @@ void ffPrintChassis(FFChassisOptions* options) ffStrbufInit(&result.type); ffStrbufInit(&result.vendor); ffStrbufInit(&result.version); + ffStrbufInit(&result.serial); const char* error = ffDetectChassis(&result); @@ -41,6 +42,7 @@ void ffPrintChassis(FFChassisOptions* options) {FF_FORMAT_ARG_TYPE_STRBUF, &result.type}, {FF_FORMAT_ARG_TYPE_STRBUF, &result.vendor}, {FF_FORMAT_ARG_TYPE_STRBUF, &result.version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result.serial}, }); } @@ -48,6 +50,7 @@ exit: ffStrbufDestroy(&result.type); ffStrbufDestroy(&result.vendor); ffStrbufDestroy(&result.version); + ffStrbufDestroy(&result.serial); } bool ffParseChassisCommandOptions(FFChassisOptions* options, const char* key, const char* value) @@ -91,6 +94,7 @@ void ffGenerateChassisJsonResult(FF_MAYBE_UNUSED FFChassisOptions* options, yyjs ffStrbufInit(&result.type); ffStrbufInit(&result.vendor); ffStrbufInit(&result.version); + ffStrbufInit(&result.serial); const char* error = ffDetectChassis(&result); @@ -110,11 +114,13 @@ void ffGenerateChassisJsonResult(FF_MAYBE_UNUSED FFChassisOptions* options, yyjs yyjson_mut_obj_add_strbuf(doc, obj, "type", &result.type); yyjson_mut_obj_add_strbuf(doc, obj, "vendor", &result.vendor); yyjson_mut_obj_add_strbuf(doc, obj, "version", &result.version); + yyjson_mut_obj_add_strbuf(doc, obj, "serial", &result.serial); exit: ffStrbufDestroy(&result.type); ffStrbufDestroy(&result.vendor); ffStrbufDestroy(&result.version); + ffStrbufDestroy(&result.serial); } void ffPrintChassisHelpFormat(void) @@ -122,7 +128,8 @@ void ffPrintChassisHelpFormat(void) ffPrintModuleFormatHelp(FF_CHASSIS_MODULE_NAME, "{1}", FF_CHASSIS_NUM_FORMAT_ARGS, (const char* []) { "chassis type", "chassis vendor", - "chassis version" + "chassis version", + "chassis serial number", }); }