C library for the Public Suffix List
Go to file
Daniel Kahn Gillmor dc7bf5bbae rename src/make_dafsa.py to src/psl-make-dafsa, add documentation
I've talked to the good people on #debian-bootstrap who would be most
affected by the possible build-dep cycle, and i think the simplest
approach is actually to split out make_dafsa.py into its own
architecture-independent package.

I'm thinking i'll call the package psl-make-dafsa, and in the course of
shipping it, i'll place src/make_dafsa.py as /usr/bin/psl-make-dafsa.

This is because:

 * debian discourages scripts on the $PATH from having language-specific
   suffixes like .py:

    https://lintian.debian.org/tags/script-with-language-extension.html

 * "-" appears to be a more common delimiter in command names than "_":

    0 dkg@alice:~$ for x in - _; do printf "%s: %d " "$x" $(ls -1 ${PATH//:/ } | grep -c "$x"); done; echo
    -: 1235 _: 368
    0 dkg@alice:~$

 * i'd prefer to prefix the command with "psl-" since it really is
   producing and interpreting PSL-specific data structures.

Accepting this patch would mean i'd have fewer changes to make in the
debian packaging, and would allow other distributors to take a similar
approach if they want to.
2016-07-14 11:55:04 +02:00
contrib Fix ./configure --disable-runtime 2015-12-26 14:15:08 +01:00
docs/libpsl use https where possible 2016-07-06 15:32:51 +02:00
include s/publix/public/ 2016-07-06 15:32:51 +02:00
list@8e9aba1b72 Update PSL submodule 2016-07-13 10:49:22 +02:00
po autoconf first version 2014-03-20 22:43:04 +01:00
src rename src/make_dafsa.py to src/psl-make-dafsa, add documentation 2016-07-14 11:55:04 +02:00
tests Add test suite support for list/tests/tests.txt 2016-02-20 15:06:48 +01:00
tools Amend formatting of psl man page 2016-07-06 15:32:51 +02:00
.dir-locals.el document indentation conventions for emacs users 2014-03-21 14:39:17 -04:00
.gitignore New linter/ dir with pslint.py selftest 2016-02-18 16:40:06 +01:00
.gitmodules Add https://github.com/publicsuffix as git submodule 2015-07-14 13:25:42 +02:00
.travis.yml Travis CI only for branches develop and master 2016-02-20 23:05:34 +01:00
AUTHORS Use DAWG/DAFSA format for builtin data 2015-12-09 09:35:04 +01:00
COPYING Update copyright years 2015-09-23 14:50:01 +02:00
LICENSE Update copyright years 2015-09-23 14:50:01 +02:00
Makefile.am Remove python linter 2016-03-02 11:45:28 +01:00
NEWS Release v0.13.0 2016-03-02 12:25:35 +01:00
README inital commit 2014-03-20 17:17:24 +01:00
README.md rename src/make_dafsa.py to src/psl-make-dafsa, add documentation 2016-07-14 11:55:04 +02:00
autogen.sh Let autogen.sh work on Solaris and without gtkdocize 2016-01-02 13:01:19 +01:00
configure.ac rename src/make_dafsa.py to src/psl-make-dafsa, add documentation 2016-07-14 11:55:04 +02:00
libpsl.pc.in Fixed pkg-config file 2014-11-14 11:40:29 +01:00

README.md

Build Status

libpsl - C library to handle the Public Suffix List

A "public suffix" is a domain name under which Internet users can directly register own names.

Browsers and other web clients can use it to

  • avoid privacy-leaking "supercookies"
  • avoid privacy-leaking "super domain" certificates (see post from Jeffry Walton)
  • domain highlighting parts of the domain in a user interface
  • sorting domain lists by site

Libpsl...

  • has built-in PSL data for fast access (DAWG/DAFSA reduces size from 180kB to ~32kB)
  • allows to load PSL data from files
  • checks if a given domain is a "public suffix"
  • provides immediate cookie domain verification
  • finds the longest public part of a given domain
  • finds the shortest private part of a given domain
  • works with international domains (UTF-8 and IDNA2008 Punycode)
  • is thread-safe
  • handles IDNA2008 UTS#46 (libicu is used by psl2c if installed)

Find more information about the Publix Suffix List here.

Download the Public Suffix List here.

The DAFSA code has been taken from Chromium Project.

API Documentation

You find the current API documentation here.

Quick API example

#include <stdio.h>
#include <libpsl.h>

int main(int argc, char **argv)
{
	const char *domain = "www.example.com";
	const char *cookie_domain = ".com";
	const psl_ctx_t *psl = psl_builtin();
	int is_public, is_acceptable;

	is_public = psl_is_public_suffix(psl, domain);
	printf("%s %s a public suffix.\n", domain, is_public ? "is" : "is not");

	is_acceptable = psl_is_cookie_domain_acceptable(psl, domain, cookie_domain);
	printf("cookie domain '%s' %s acceptable for domain '%s'.\n",
		cookie_domain, is_acceptable ? "is" : "is not", domain);

	return 0;
}

Command Line Tool

Libpsl comes with a tool 'psl' that gives you access to most of the library API via command line.

$ psl --help

prints the usage.

Convert PSL into DAFSA

The DAFSA format is a compressed representation of strings. Here we use it to reduce the whole PSL to about 32k in size.

Generate psl.dafsa from list/public_suffix_list.dat

$ src/psl-make-dafsa --output-format=binary --input-format=psl list/public_suffix_list.dat psl.dafsa

Test the result (example)

$ tools/psl --load-psl-file psl.dafsa aeroclub.aero

License

Libpsl is made available under the terms of the MIT license.
See the LICENSE file that accompanies this distribution for the full text of the license.

src/psl-make-dafsa and src/lookup_string_in_fixed_set.c are licensed under the term written in src/LICENSE.chromium.

Building from git

You should have python2.7+ installed.

Download project and prepare sources with

	git clone https://github.com/rockdaboot/libpsl
	./autogen.sh
	./configure
	make
	make check

Mailing List

Mailing List Archive

Mailing List

To join the mailing list send an email to

libpsl-bugs+subscribe@googlegroups.com

and follow the instructions provided by the answer mail.

Or click join.