diff --git a/COPYING b/COPYING deleted file mode 120000 index caeca07..0000000 --- a/COPYING +++ /dev/null @@ -1 +0,0 @@ -/usr/share/automake-1.14/COPYING \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..1c94b98 --- /dev/null +++ b/COPYING @@ -0,0 +1,17 @@ + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. diff --git a/LICENSE b/LICENSE index bde60ce..1c94b98 100644 --- a/LICENSE +++ b/LICENSE @@ -1,165 +1,17 @@ -GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. diff --git a/include/Makefile.am b/include/Makefile.am index dd315d8..a45de59 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1 +1 @@ -include_HEADERS = libpsl.h libpsl-inline.h +include_HEADERS = libpsl.h diff --git a/include/libpsl-inline.h b/include/libpsl-inline.h deleted file mode 100644 index d4ad50f..0000000 --- a/include/libpsl-inline.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright(c) 2014 Tim Ruehsen - * - * This file is part of libpsl. - * - * Libpsl is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libpsl is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with libpsl. If not, see . - * - * - * Header file for libpsl library routines - * - * Changelog - * 22.03.2014 Tim Ruehsen created - * - */ - -#ifndef _LIBPSL_LIBPSL_INLINE_H -#define _LIBPSL_LIBPSL_INLINE_H - -#include - -// Let C++ include C headers -#ifdef __cplusplus -# define PSL_BEGIN_DECLS extern "C" { -# define PSL_END_DECLS } -#else -# define PSL_BEGIN_DECLS -# define PSL_END_DECLS -#endif - -#if ENABLE_NLS != 0 -# include -# define _(STRING) gettext(STRING) -#else -# define _(STRING) STRING -# define ngettext(STRING1,STRING2,N) STRING2 -#endif - -PSL_BEGIN_DECLS - -void - psl_inline_init(void); -void - psl_inline_deinit(void); -int - psl_inline_is_public(const char *domain); - -/* does not include exceptions */ -int - psl_inline_suffix_count(void); -/* just counts exceptions */ -int - psl_inline_suffix_exception_count(void); - -// returns compilation time -time_t - psl_inline_builtin_compile_time(void); -// returns mtime of PSL source file -time_t - psl_inline_builtin_file_time(void); - -// returns MD5 checksum (hex-encoded, lowercase) of PSL source file -const char * - psl_inline_builtin_sha1sum(void); - -PSL_END_DECLS - -#endif /* _LIBPSL_LIBPSL_INLINE_H */ diff --git a/src/psl-inline.c b/src/psl-inline.c deleted file mode 100644 index 51600d9..0000000 --- a/src/psl-inline.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright(c) 2014 Tim Ruehsen - * - * This file is part of MGet. - * - * Mget is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Mget is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Mget. If not, see . - * - * - * Public Suffix List routines (right now experimental) - * - * Changelog - * 22.03.2014 Tim Ruehsen created - * - */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include -#include -#include - -#include - -#define countof(a) (sizeof(a)/sizeof(*(a))) - -typedef struct { - char - label_buf[48]; - const char * - label; - unsigned short - length; - unsigned char - nlabels, // number of labels - wildcard; // this is a wildcard rule (e.g. *.sapporo.jp) -} _psl_entry_t; - -#include "suffixes.c" - -// by this kind of sorting, we can easily see if a domain matches or not (match = supercookie !) - -static int _suffix_compare(const _psl_entry_t *s1, const _psl_entry_t *s2) -{ - int n; - - if ((n = s2->nlabels - s1->nlabels)) - return n; // most labels first - - if ((n = s1->length - s2->length)) - return n; // shorter rules first - - return strcmp(s1->label, s2->label); -} - -void psl_inline_init(void) -{ - size_t it; - - for (it = 0; it < countof(suffixes); it++) - suffixes[it].label = suffixes[it].label_buf; - - for (it = 0; it < countof(suffix_exceptions); it++) - suffix_exceptions[it].label = suffix_exceptions[it].label_buf; -} - -void psl_inline_deinit(void) -{ -} - -int psl_inline_is_public(const char *domain) -{ - _psl_entry_t suffix, *rule; - const char *p, *label_bak; - unsigned short length_bak; - - // this function should be called without leading dots, just make sure - suffix.label = domain + (*domain == '.'); - suffix.length = strlen(suffix.label); - suffix.wildcard = 0; - suffix.nlabels = 1; - - for (p = suffix.label; *p; p++) - if (*p == '.') - suffix.nlabels++; - - // if domain has enough labels, it is public - rule = &suffixes[0]; - if (!rule || rule->nlabels < suffix.nlabels - 1) - return 1; - - rule = bsearch(&suffix, suffixes, countof(suffixes), sizeof(suffixes[0]), (int(*)(const void *, const void *))_suffix_compare); - if (rule) { - // definitely a match, no matter if the found rule is a wildcard or not - return 0; - } - - label_bak = suffix.label; - length_bak = suffix.length; - - if ((suffix.label = strchr(suffix.label, '.'))) { - suffix.label++; - suffix.length = strlen(suffix.label); - suffix.nlabels--; - - rule = bsearch(&suffix, suffixes, countof(suffixes), sizeof(suffixes[0]), (int(*)(const void *, const void *))_suffix_compare); - if (rule) { - if (rule->wildcard) { - // now that we matched a wildcard, we have to check for an exception - suffix.label = label_bak; - suffix.length = length_bak; - suffix.nlabels++; - - if (bsearch(&suffix, suffix_exceptions, countof(suffix_exceptions), sizeof(suffix_exceptions[0]), (int(*)(const void *, const void *))_suffix_compare)) - return 1; // found an exception, so 'domain' is public - - return 0; - } - } - } - - return 1; -} - -/* does not include exceptions */ -int psl_inline_suffix_count(void) -{ - return countof(suffixes); -} - -/* just counts exceptions */ -int psl_inline_suffix_exception_count(void) -{ - return countof(suffix_exceptions); -} - -// returns compilation time -time_t psl_inline_builtin_compile_time(void) -{ - return _psl_compile_time; -} - -// returns mtime of PSL source file -time_t psl_inline_builtin_file_time(void) -{ - return _psl_file_time; -} - -// returns MD5 checksum (hex-encoded, lowercase) of PSL source file -const char *psl_inline_builtin_sha1sum(void) -{ - return _psl_sha1_checksum; -} diff --git a/src/psl2c.c b/src/psl2c.c index d18f280..25bba97 100644 --- a/src/psl2c.c +++ b/src/psl2c.c @@ -1,22 +1,26 @@ /* * Copyright(c) 2014 Tim Ruehsen * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * * This file is part of libpsl. * - * Libpsl is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libpsl is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with libpsl. If not, see . - * - * * Precompile Public Suffix List into * * Changelog @@ -109,25 +113,6 @@ static _psl_entry_t *_vector_get(const _psl_vector_t *v, int pos) return v->entry[pos]; } -// the entries must be sorted by -static int _vector_find(const _psl_vector_t *v, const _psl_entry_t *elem) -{ - if (v) { - int l, r, m; - int res; - - // binary search for element (exact match) - for (l = 0, r = v->cur - 1; l <= r;) { - m = (l + r) / 2; - if ((res = v->cmp(elem, v->entry[m])) > 0) l = m + 1; - else if (res < 0) r = m - 1; - else return m; - } - } - - return -1; // not found -} - static int _vector_add(_psl_vector_t *v, const _psl_entry_t *elem) { if (v) { diff --git a/tests/Makefile.am b/tests/Makefile.am index b644ffb..f7e21cf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,15 +1,12 @@ #DEFS = @DEFS@ -DDATADIR=\"$(datadir)/@PACKAGE@\" -DSRCDIR=\"$(srcdir)\" DEFS = @DEFS@ -DDATADIR=\"$(top_srcdir)/data\" -DSRCDIR=\"$(srcdir)\" -AM_CPPFLAGS = -Wno-missing-field-initializers -I$(top_srcdir)/include -AM_LDFLAGS = -static +AM_CPPFLAGS = -I$(top_srcdir)/include +#AM_LDFLAGS = -static LDADD = ../src/libpsl-@LIBPSL_API_VERSION@.la -PSL_TESTS = test-is-public test-is-public-inline +PSL_TESTS = test-is-public test-is-public-builtin check_PROGRAMS = $(PSL_TESTS) -#test_is_public_inline_SOURCES = test-is-public-inline.c -#test_is_public_inline_LDADD = ../src/libpsl-inline-@LIBPSL_API_VERSION@.la - TESTS_ENVIRONMENT = TESTS_VALGRIND="@VALGRIND_ENVIRONMENT@" TESTS = $(PSL_TESTS) diff --git a/tests/test-is-public-inline.c b/tests/test-is-public-builtin.c similarity index 67% rename from tests/test-is-public-inline.c rename to tests/test-is-public-builtin.c index 8ab4ad2..adc28d4 100644 --- a/tests/test-is-public-inline.c +++ b/tests/test-is-public-builtin.c @@ -1,23 +1,27 @@ /* * Copyright(c) 2014 Tim Ruehsen * - * This file is part of MGet. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * Mget is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * Mget is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * - * You should have received a copy of the GNU General Public License - * along with Mget. If not, see . + * This file is part of the test suite of libpsl. * - * - * Public Suffix List routines (right now experimental) + * Test case for psl built-in functions * * Changelog * 19.03.2014 Tim Ruehsen created from libmget/cookie.c diff --git a/tests/test-is-public.c b/tests/test-is-public.c index 1057fa8..34ad543 100644 --- a/tests/test-is-public.c +++ b/tests/test-is-public.c @@ -1,23 +1,27 @@ /* * Copyright(c) 2014 Tim Ruehsen * - * This file is part of MGet. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * Mget is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * Mget is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * - * You should have received a copy of the GNU General Public License - * along with Mget. If not, see . + * This file is part of the test suite of libpsl. * - * - * Public Suffix List routines (right now experimental) + * Test case for psl_load_file(), psl_is_public(), psl_free() * * Changelog * 19.03.2014 Tim Ruehsen created from libmget/cookie.c