diff --git a/README.md b/README.md index f3f7fc98da60bb2c3ebb159788664e192af03f76..71e8c2eb92865032d3f52347c96c5264296c1bdb 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,12 @@ config globals 'globals' list blacklist_url 'instagram.com' config profile 'homeoffice' + option name 'homeoffice' list whitelist_url 'facebook.com' list whitelist_url 'instagram.com' config profile 'kids' + option name 'kids' list blacklist_url 'youtube.com' list blacklist_url 'game.com' diff --git a/docs/uci_urlfilter.md b/docs/uci_urlfilter.md index 335c77571a844d25aa1d69de4650117c686ff777..6f547022ffb1475376f50220a3e59fe4b8ebc4ba 100644 --- a/docs/uci_urlfilter.md +++ b/docs/uci_urlfilter.md @@ -1 +1 @@ -<tbody><tr><td colspan="2"><div style="font-weight: bold">urlfilter</div><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">section</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td><td><div style="font-weight: bold; font-size: 14px">multi</div></td><td><div style="font-weight: bold; font-size: 14px">options</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">globals</div></td><td class="td_row_even"><div class="td_row_even">global configuration for url filtering.</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables filtering globally.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">global_blacklist</div></td><td class="td_row_odd"><div class="td_row_odd">boolean</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">false</div></td><td class="td_row_odd"><div class="td_row_odd">Enables or disables global blacklist.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">blacklist_url</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Globally blacklisted urls i.e., facebook.com.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">profile</div></td><td class="td_row_odd"><div class="td_row_odd">Whitelist or blacklist urls for configured profile.</div></td><td class="td_row_odd"><div class="td_row_odd">true</div></td><td class="td_row_odd"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">whitelist_url</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Whitelist urls for configured profile.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">blacklist_url</div></td><td class="td_row_odd"><div class="td_row_odd">list</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Blacklist urls for configured profile.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_even"><div class="td_row_even">filter</div></td><td class="td_row_even"><div class="td_row_even">Filter urls based on mac and for specific days and time.</div></td><td class="td_row_even"><div class="td_row_even">true</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables specified filter.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">profile</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">yes</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Specify profile on which to apply filter.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">macaddr</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Physical address to apply filter on.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">day</div></td><td class="td_row_odd"><div class="td_row_odd">list</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Specific day for filter.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">start_time</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Specific time for filtering.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">duration</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Duration of filtering.</div></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody> \ No newline at end of file +<tbody><tr><td colspan="2"><div style="font-weight: bold">urlfilter</div><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">section</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td><td><div style="font-weight: bold; font-size: 14px">multi</div></td><td><div style="font-weight: bold; font-size: 14px">options</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">globals</div></td><td class="td_row_even"><div class="td_row_even">global configuration for url filtering.</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables filtering globally.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">global_blacklist</div></td><td class="td_row_odd"><div class="td_row_odd">boolean</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">false</div></td><td class="td_row_odd"><div class="td_row_odd">Enables or disables global blacklist.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">blacklist_url</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Globally blacklisted urls i.e., facebook.com.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">profile</div></td><td class="td_row_odd"><div class="td_row_odd">Whitelist or blacklist urls for configured profile.</div></td><td class="td_row_odd"><div class="td_row_odd">true</div></td><td class="td_row_odd"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">name</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Name of profile.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">whitelist_url</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Whitelist urls for configured profile.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">blacklist_url</div></td><td class="td_row_odd"><div class="td_row_odd">list</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Blacklist urls for configured profile.</div></td></tr></tbody></table></td></tr><tr><td class="td_row_even"><div class="td_row_even">filter</div></td><td class="td_row_even"><div class="td_row_even">Filter urls based on mac and for specific days and time.</div></td><td class="td_row_even"><div class="td_row_even">true</div></td><td class="td_row_even"><table style="width:100%"><tbody><tr><td><div style="font-weight: bold; font-size: 14px">name</div></td><td><div style="font-weight: bold; font-size: 14px">type</div></td><td><div style="font-weight: bold; font-size: 14px">required</div></td><td><div style="font-weight: bold; font-size: 14px">default</div></td><td><div style="font-weight: bold; font-size: 14px">description</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">enable</div></td><td class="td_row_even"><div class="td_row_even">boolean</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">false</div></td><td class="td_row_even"><div class="td_row_even">Enables or disables specified filter.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">profile</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">yes</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Specify profile on which to apply filter.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">macaddr</div></td><td class="td_row_even"><div class="td_row_even">list</div></td><td class="td_row_even"><div class="td_row_even">yes</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Physical address to apply filter on.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">day</div></td><td class="td_row_odd"><div class="td_row_odd">list</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Specific day for filter.</div></td></tr><tr><td class="td_row_even"><div class="td_row_even">start_time</div></td><td class="td_row_even"><div class="td_row_even">string</div></td><td class="td_row_even"><div class="td_row_even">no</div></td><td class="td_row_even"><div class="td_row_even">null</div></td><td class="td_row_even"><div class="td_row_even">Specific time for filtering.</div></td></tr><tr><td class="td_row_odd"><div class="td_row_odd">duration</div></td><td class="td_row_odd"><div class="td_row_odd">string</div></td><td class="td_row_odd"><div class="td_row_odd">no</div></td><td class="td_row_odd"><div class="td_row_odd">null</div></td><td class="td_row_odd"><div class="td_row_odd">Duration of filtering.</div></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody> \ No newline at end of file diff --git a/schemas/uci/urlfilter.json b/schemas/uci/urlfilter.json index 5a403c72606434f557f12da5d8ace70c2a5dd8f5..d13f2f26ef0cab69888d9c670c34cad4c38b0bbf 100644 --- a/schemas/uci/urlfilter.json +++ b/schemas/uci/urlfilter.json @@ -36,6 +36,13 @@ "multi": true, "options": [ + { + "name": "name", + "type": "string", + "required": "yes", + "default": null, + "description": "Name of profile." + }, { "name": "whitelist_url", "type": "list", diff --git a/src/config.c b/src/config.c index 4e3fdeaa641bb037c945eda333cc87f8dc93d91f..3f5d14f88fa9f43723dbf6371c310bbc33a46e4c 100644 --- a/src/config.c +++ b/src/config.c @@ -42,6 +42,30 @@ size_t profile_cnt = 0; size_t filter_cnt = 0; size_t dns_cache_cnt = 0; +// This function used to store the name of profile in the glabal +// array url_profile which is identified with i index +// @param i is the index of glabal array url_profile, this url_profile +// for which the name of profile will be stored +// @param s is the pointer to the uci structure to be used to extract name of +// profile entry in the profile section +// @return nothing +static void get_profile_name(size_t i, struct uci_section *s) +{ + struct uci_element *element = NULL; + struct uci_option *option = NULL; + + (url_profile + i)->name[0] = 0; + + uci_foreach_element(&s->options, element) { + option = uci_to_option(element); + + if (strcmp(option->e.name, "name") == 0) { + strncpy((url_profile + i)->name, option->v.string, sizeof((url_profile + i)->name)); + break; + } + } +} + // This function returns the number of list elements of name option_name in uci // section s // @param s is pointer to uci section @@ -216,10 +240,10 @@ static int read_profile_data(void) if (strcmp(s->type, "profile") != 0) continue; - if (s->e.name[0] == '\0') - continue; + get_profile_name(i, s); - strncpy((url_profile + i)->name, s->e.name, sizeof((url_profile + i)->name)); + if ((url_profile + i)->name[0] == '\0') + continue; create_url_list(i, s); populate_string_from_list(s, "blacklist_url", (url_profile + i)->blacklist_url); diff --git a/test/files/etc/config/urlfilter b/test/files/etc/config/urlfilter index 388cb1205eb23d6f3faadde59c6bc616523b6ffe..4101214fae581bccabc7505660e73b704b64adce 100644 --- a/test/files/etc/config/urlfilter +++ b/test/files/etc/config/urlfilter @@ -7,10 +7,12 @@ config globals 'globals' list blacklist_url 'instagram.com' config profile 'homeoffice' + option name 'homeoffice' list whitelist_url 'facebook.com' list whitelist_url 'instagram.com' config profile 'kids' + option name 'kids' list blacklist_url 'youtube.com' list blacklist_url 'game.com'