1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/pihole_ynh.git synced 2024-09-03 20:05:58 +02:00
pihole_ynh/sources/patches/FTL_last-dns_replacement.patch
2020-04-24 01:36:19 +02:00

131 lines
3.5 KiB
Diff

--- a/args.c 2019-05-25 21:37:26.000000000 +0200
+++ b/args.c 2020-04-24 00:32:27.000000000 +0200
@@ -17,20 +17,88 @@
int argc_dnsmasq = 0;
const char** argv_dnsmasq = NULL;
+static inline bool strEndsWith(const char *input, const char *end){
+ return strcmp(input + strlen(input) - strlen(end), end) == 0;
+}
+
void parse_args(int argc, char* argv[])
{
- int i;
-
// Regardless of any arguments, we always pass "-k" (nofork) to dnsmasq
argc_dnsmasq = 2;
argv_dnsmasq = calloc(argc_dnsmasq, sizeof(char*));
argv_dnsmasq[0] = "";
argv_dnsmasq[1] = "-k";
- // start from 1, as argv[0] is the executable name "pihole-FTL"
- for(i=1; i < argc; i++)
+ bool consume_for_dnsmasq = false;
+ // If the binary name is "dnsmasq" (e.g., symlink /usr/bin/dnsmasq -> /usr/bin/pihole-FTL),
+ // we operate in drop-in mode and consume all arguments for the embedded dnsmasq core
+ if(strEndsWith(argv[0], "dnsmasq"))
+ consume_for_dnsmasq = true;
+
+ // start from 1, as argv[0] is the executable name
+ for(int i = 1; i < argc; i++)
{
bool ok = false;
+
+ // Implement dnsmasq's test function, no need to prepare the entire FTL
+ // environment (initialize shared memory, lead queries from long-term
+ // database, ...) when the task is a simple (dnsmasq) syntax check
+ if(strcmp(argv[i], "dnsmasq-test") == 0 ||
+ strcmp(argv[i], "--test") == 0)
+ {
+ const char *arg[2];
+ arg[0] = "";
+ arg[1] = "--test";
+ main_dnsmasq(2, arg);
+ ok = true;
+ }
+
+ // If we find "--" we collect everything behind that for dnsmasq
+ if(strcmp(argv[i], "--") == 0)
+ {
+ // Remember that the rest is for dnsmasq ...
+ consume_for_dnsmasq = true;
+
+ // ... and skip the current argument ("--")
+ continue;
+ }
+
+ // If consume_for_dnsmasq is true, we collect all remaining options for
+ // dnsmasq
+ if(consume_for_dnsmasq)
+ {
+ argc_dnsmasq = argc - i + 2;
+ if(argv_dnsmasq != NULL)
+ free(argv_dnsmasq);
+
+ argv_dnsmasq = calloc(argc_dnsmasq, sizeof(const char*));
+ argv_dnsmasq[0] = "";
+
+ if(debug)
+ argv_dnsmasq[1] = "-d";
+ else
+ argv_dnsmasq[1] = "-k";
+
+ if(debug)
+ {
+ printf("dnsmasq options: [0]: %s\n", argv_dnsmasq[0]);
+ printf("dnsmasq options: [1]: %s\n", argv_dnsmasq[1]);
+ }
+
+ int j = 2;
+ while(i < argc)
+ {
+ argv_dnsmasq[j++] = strdup(argv[i++]);
+ if(debug)
+ printf("dnsmasq options: [%i]: %s\n", j-1, argv_dnsmasq[j-1]);
+ }
+
+ // Return early: We have consumes all available command line arguments
+ return;
+ }
+
+ // What follows beyond this point are FTL internal command line arguments
+
if(strcmp(argv[i], "d") == 0 ||
strcmp(argv[i], "debug") == 0)
{
@@ -97,35 +165,6 @@
ok = true;
}
- // Implement dnsmasq's test function
- if(strcmp(argv[i], "dnsmasq-test") == 0)
- {
- const char *arg[2];
- arg[0] = "";
- arg[1] = "--test";
- main_dnsmasq(2, arg);
- ok = true;
- }
-
- // If we find "--" we collect everything behind that for dnsmasq
- if(strcmp(argv[i], "--") == 0)
- {
- int j;
- argc_dnsmasq = argc - i + 1;
- if(argv_dnsmasq != NULL) free(argv_dnsmasq);
- argv_dnsmasq = calloc(argc_dnsmasq + 2,sizeof(const char*));
- argv_dnsmasq[0] = "";
- if(debug) argv_dnsmasq[1] = "-d";
- else argv_dnsmasq[1] = "-k";
-
- for(j=2; j < argc_dnsmasq; j++)
- {
- argv_dnsmasq[j] = strdup(argv[i+j-1]);
- if(debug) logg("dnsmasq options: [%i]: %s",j,argv_dnsmasq[j]);
- }
- return;
- }
-
// List of implemented arguments
if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "help") == 0 || strcmp(argv[i], "--help") == 0)
{