-
-
Notifications
You must be signed in to change notification settings - Fork 336
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
216 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#pragma once | ||
|
||
#include "fastfetch.h" | ||
|
||
const char* ffDetectDNS(FFlist* results /* list of FFstrbuf */); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#include "detection/dns/dns.h" | ||
|
||
#include <arpa/inet.h> | ||
#include <resolv.h> | ||
|
||
const char* ffDetectDNS(FFlist* results) | ||
{ | ||
if (res_init() < 0) | ||
return "res_init() failed"; | ||
|
||
for (int i = 0; i < _res.nscount; ++i) | ||
{ | ||
struct sockaddr_in* addr = &_res.nsaddr_list[i]; | ||
char addressBuffer[INET_ADDRSTRLEN + 4]; | ||
inet_ntop(AF_INET, &addr->sin_addr, addressBuffer, INET_ADDRSTRLEN); | ||
|
||
FFstrbuf* result = (FFstrbuf*) ffListAdd(results); | ||
ffStrbufInitS(result, addressBuffer); | ||
} | ||
|
||
for (int i = 0; i < _res._u._ext.nscount; ++i) | ||
{ | ||
struct sockaddr_in6* addr = _res._u._ext.nsaddrs[i]; | ||
char addressBuffer[INET6_ADDRSTRLEN + 4]; | ||
inet_ntop(AF_INET6, &addr->sin6_addr, addressBuffer, INET6_ADDRSTRLEN); | ||
|
||
FFstrbuf* result = (FFstrbuf*) ffListAdd(results); | ||
ffStrbufInitS(result, addressBuffer); | ||
} | ||
|
||
return NULL; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#include "detection/dns/dns.h" | ||
|
||
const char* ffDetectDNS(FF_MAYBE_UNUSED FFlist* results) | ||
{ | ||
return "Not supported on this platform"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
#include "common/printing.h" | ||
#include "common/jsonconfig.h" | ||
#include "detection/dns/dns.h" | ||
#include "modules/dns/dns.h" | ||
#include "util/stringUtils.h" | ||
|
||
#define FF_DNS_NUM_FORMAT_ARGS 1 | ||
|
||
void ffPrintDNS(FFDNSOptions* options) | ||
{ | ||
FF_LIST_AUTO_DESTROY result = ffListCreate(sizeof(FFstrbuf)); | ||
|
||
const char* error = ffDetectDNS(&result); | ||
|
||
if (error) | ||
{ | ||
ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "%s", error); | ||
return; | ||
} | ||
|
||
if (result.length == 0) | ||
{ | ||
ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "NO DNS detected"); | ||
return; | ||
} | ||
|
||
FF_STRBUF_AUTO_DESTROY buf = ffStrbufCreate(); | ||
FF_LIST_FOR_EACH(FFstrbuf, item, result) | ||
{ | ||
if (buf.length) | ||
ffStrbufAppendC(&buf, ' '); | ||
ffStrbufAppend(&buf, item); | ||
} | ||
|
||
if(options->moduleArgs.outputFormat.length == 0) | ||
{ | ||
ffPrintLogoAndKey(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT); | ||
|
||
ffStrbufPutTo(&buf, stdout); | ||
} | ||
else | ||
{ | ||
FF_PRINT_FORMAT_CHECKED(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, FF_DNS_NUM_FORMAT_ARGS, ((FFformatarg[]) { | ||
{FF_FORMAT_ARG_TYPE_STRBUF, &buf, "result"}, | ||
})); | ||
} | ||
|
||
FF_LIST_FOR_EACH(FFstrbuf, item, result) | ||
{ | ||
ffStrbufDestroy(item); | ||
} | ||
} | ||
|
||
bool ffParseDNSCommandOptions(FFDNSOptions* options, const char* key, const char* value) | ||
{ | ||
const char* subKey = ffOptionTestPrefix(key, FF_DNS_MODULE_NAME); | ||
if (!subKey) return false; | ||
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) | ||
return true; | ||
|
||
return false; | ||
} | ||
|
||
void ffParseDNSJsonObject(FFDNSOptions* options, yyjson_val* module) | ||
{ | ||
yyjson_val *key_, *val; | ||
size_t idx, max; | ||
yyjson_obj_foreach(module, idx, max, key_, val) | ||
{ | ||
const char* key = yyjson_get_str(key_); | ||
if(ffStrEqualsIgnCase(key, "type")) | ||
continue; | ||
|
||
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs)) | ||
continue; | ||
|
||
ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key); | ||
} | ||
} | ||
|
||
void ffGenerateDNSJsonConfig(FFDNSOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) | ||
{ | ||
__attribute__((__cleanup__(ffDestroyDNSOptions))) FFDNSOptions defaultOptions; | ||
ffInitDNSOptions(&defaultOptions); | ||
|
||
ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs); | ||
} | ||
|
||
void ffGenerateDNSJsonResult(FF_MAYBE_UNUSED FFDNSOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) | ||
{ | ||
FF_LIST_AUTO_DESTROY result = ffListCreate(sizeof(FFstrbuf)); | ||
|
||
const char* error = ffDetectDNS(&result); | ||
|
||
if (error) | ||
{ | ||
yyjson_mut_obj_add_str(doc, module, "error", error); | ||
goto exit; | ||
} | ||
|
||
yyjson_mut_val* arr = yyjson_mut_obj_add_arr(doc, module, "result"); | ||
|
||
FF_LIST_FOR_EACH(FFstrbuf, item, result) | ||
{ | ||
yyjson_mut_arr_add_strbuf(doc, arr, item); | ||
} | ||
|
||
exit: | ||
FF_LIST_FOR_EACH(FFstrbuf, item, result) | ||
{ | ||
ffStrbufDestroy(item); | ||
} | ||
} | ||
|
||
void ffPrintDNSHelpFormat(void) | ||
{ | ||
FF_PRINT_MODULE_FORMAT_HELP_CHECKED(FF_DNS_MODULE_NAME, "{1}", FF_DNS_NUM_FORMAT_ARGS, ((const char* []) { | ||
"DNS result - result", | ||
})); | ||
} | ||
|
||
void ffInitDNSOptions(FFDNSOptions* options) | ||
{ | ||
ffOptionInitModuleBaseInfo( | ||
&options->moduleInfo, | ||
FF_DNS_MODULE_NAME, | ||
"Print configured DNS servers", | ||
ffParseDNSCommandOptions, | ||
ffParseDNSJsonObject, | ||
ffPrintDNS, | ||
ffGenerateDNSJsonResult, | ||
ffPrintDNSHelpFormat, | ||
ffGenerateDNSJsonConfig | ||
); | ||
ffOptionInitModuleArg(&options->moduleArgs); | ||
} | ||
|
||
void ffDestroyDNSOptions(FFDNSOptions* options) | ||
{ | ||
ffOptionDestroyModuleArg(&options->moduleArgs); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#pragma once | ||
|
||
#include "fastfetch.h" | ||
|
||
#define FF_DNS_MODULE_NAME "DNS" | ||
|
||
void ffPrintDNS(FFDNSOptions* options); | ||
void ffInitDNSOptions(FFDNSOptions* options); | ||
void ffDestroyDNSOptions(FFDNSOptions* options); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#pragma once | ||
|
||
// This file will be included in "fastfetch.h", do NOT put unnecessary things here | ||
|
||
#include "common/option.h" | ||
|
||
typedef struct FFDNSOptions | ||
{ | ||
FFModuleBaseInfo moduleInfo; | ||
FFModuleArgs moduleArgs; | ||
} FFDNSOptions; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters