C library for the Public Suffix List
Go to file
Chun-wei Fan 6a5da68ccf Add NMake Makefiles for Visual Studio builds
This adds a set of Visual Studio NMake Makefiles that can be used to
build libpsl, either as a DLL or as a static .lib.  Building of the psl
tool and the tests in tests/ (but not fuzz, since those tests use
fmemopen(), that is not supported on Windows) are also supported.

A simplified "install" target is provided that copies the build
results to a default or set prefix with the pkg-config file so that
other packages (such as libsoup) with build systems that depend on this
.pc file can be built.

These files make use of autotools stuff so that they have the up-to-date
version info upon a release.

Currently, only builds using the ICU runtime/builtin or with no
runtime/builtin are supported with Visual Studio builds.
2018-04-26 17:09:28 +08:00
contrib Update contrib/check-hard 2017-07-20 14:46:55 +02:00
docs/libpsl fix spelling errors 2018-03-23 11:33:55 +00:00
fuzz fuzz: Skip the tests if fmemopen() is not found 2018-04-20 14:46:02 +02:00
include Remove leading _ from header guard 2018-04-19 10:16:45 +02:00
list@c45eff1c74 Update PSL submodule 2018-02-21 20:51:29 +01:00
m4 Add m4/ax_check_compile_flag.m4 2017-07-27 11:55:29 +02:00
msvc Add NMake Makefiles for Visual Studio builds 2018-04-26 17:09:28 +08:00
po autoconf first version 2014-03-20 22:43:04 +01:00
src Add NMake Makefiles for Visual Studio builds 2018-04-26 17:09:28 +08:00
tests Make global vars static in test-is-public-all.c 2018-04-19 10:21:25 +02:00
tools src/psl.c: Fix build on Visual Studio 2018-04-20 14:46:26 +02:00
.dir-locals.el document indentation conventions for emacs users 2014-03-21 14:39:17 -04:00
.gitignore Add fuzz/ stuff to .gitignore 2017-06-14 14:37:23 +02:00
.gitmodules Add https://github.com/publicsuffix as git submodule 2015-07-14 13:25:42 +02:00
.travis.yml fix spelling errors 2018-03-23 11:33:55 +00:00
.travis_coveralls.sh Cleanup .travis_coveralls.sh 2017-07-27 11:07:00 +02:00
AUTHORS Add Daurnimator to AUTHORS 2016-11-06 16:22:52 +01:00
COPYING Update copyrights 2018-02-22 10:04:00 +01:00
LICENSE Update copyright years 2015-09-23 14:50:01 +02:00
Makefile.am Add NMake Makefiles for Visual Studio builds 2018-04-26 17:09:28 +08:00
NEWS Release V0.20.1 2018-02-26 11:47:27 +01:00
README inital commit 2014-03-20 17:17:24 +01:00
README.md Expand defintion of PSL; add ICANN reference 2018-01-05 10:16:11 +01:00
autogen.sh Let autogen.sh work on Solaris and without gtkdocize 2016-01-02 13:01:19 +01:00
configure.ac Add NMake Makefiles for Visual Studio builds 2018-04-26 17:09:28 +08:00
libpsl.pc.in s/Publix/Public/ 2016-12-07 16:14:04 +08:00

README.md

Travis-CI Status Coverity Scan Coverage Status

Solaris OpenCSW Build Status Solaris amd64 Build Status Solaris i386 Build Status Solaris Sparc Build Status Solaris SparcV9

libpsl - C library to handle the Public Suffix List

A Public Suffix List is a collection of Top Level Domains (TLDs) suffixes. TLDs include Global Top Level Domains (gTLDs) like .com and .net; Country Top Level Domains (ccTLDs) like .de and .cn; and Brand Top Level Domains like .apple and .google. Brand TLDs allows users to register their own top level domain that exist at the same level as ICANN's gTLDs. Brand TLDs are sometimes referred to as Vanity Domains.

Browsers, web clients and other user agents can use a public suffix list 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 (if libicu is available)

Find more information about the Public 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 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.