{"id":20135966,"url":"https://github.com/openwall/blists","last_synced_at":"2026-03-10T02:06:39.955Z","repository":{"id":20809074,"uuid":"24094573","full_name":"openwall/blists","owner":"openwall","description":"Web interface to mailing list archives","archived":false,"fork":false,"pushed_at":"2026-02-22T07:16:12.000Z","size":1068,"stargazers_count":14,"open_issues_count":4,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-22T13:34:38.663Z","etag":null,"topics":["archive","cgi","lists","mail","web"],"latest_commit_sha":null,"homepage":"https://www.openwall.com/blists/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openwall.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-09-16T10:04:50.000Z","updated_at":"2026-02-22T07:16:17.000Z","dependencies_parsed_at":"2025-11-01T01:01:32.726Z","dependency_job_id":null,"html_url":"https://github.com/openwall/blists","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/openwall/blists","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwall%2Fblists","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwall%2Fblists/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwall%2Fblists/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwall%2Fblists/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openwall","download_url":"https://codeload.github.com/openwall/blists/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwall%2Fblists/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30322638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T01:36:58.598Z","status":"online","status_checked_at":"2026-03-10T02:00:06.579Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","cgi","lists","mail","web"],"created_at":"2024-11-13T21:17:10.892Z","updated_at":"2026-03-10T02:06:39.923Z","avatar_url":"https://github.com/openwall.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"blists is a web-based interface to mailing list archives that works off\nindexed mbox files.  There are two programs: bindex and bit.  bindex\ngenerates or updates the index file (yes, incremental updates are\nsupported).  bit is a CGI program, which generates web pages on the fly.\n\n  blists homepage: https://www.openwall.com/blists/\n  Live example with a high volume mailing list:\n      https://lists.openwall.net/linux-kernel/\n\nTo compile, simply run \"make\".  There's currently no \"install\" target;\nyou're supposed to copy the bindex and bit programs in place on your\nown, as appropriate for your setup.  Also you may need to setup for your\nhttpd: cgi, SSI (shtml), and mod_rewrite.\n\nYou will likely want to have bindex run after new messages arrive.  For\nexample, you may invoke it from a .procmailrc file like this:\n\n    :0\n    * ^TOlistname\n    {\n      :0 c\n      Mail/listname\n      \n      :0\n      | /usr/bin/bindex Mail/listname\n    }\n\nThis delivers new messages to an mbox file called \"listname\" and it\nimmediately triggers update of the index file for it.  You can also\naccomplish this from .forward and .qmail files.  Alternatively, you may\nchoose to run bindex on cron.\n\nThe index file name is produced by adding the .idx suffix to the mbox\nfilename, so in this example it will be \"listname.idx\" in the same\ndirectory.  With the default params.h settings, the index file size is\ntypically 100 KB plus around 3.5% of the mbox file's size.\n\nbit is meant to be invoked via SSI (it will refuse to work otherwise),\nand it has only been tested with Apache so far.  Here's an example\nSSI-enabled HTML file (usually with extension .shtml):\n\n    \u003c!DOCTYPE html\u003e\n    \u003chtml\u003e\n    \u003chead\u003e\n    \u003c!--#include virtual=\"/cgi-bin/bit?header\"--\u003e\n    \u003cstyle type=\"text/css\"\u003e\n    .cal_brief { text-align: center; }\n    .cal_brief td:first-child { background: inherit; }\n    .cal_brief td { background: #ccc; width: 5ex; padding: 2px; }\n    .cal_big { text-align: center; padding: 0; margin: 0; }\n    .cal_big td { padding: 0 2px; }\n    .cal_mon { text-align: center; }\n    .cal_mon th { font-size: small; padding: 0; margin: 0; }\n    .cal_mon td { background: #ccc; width: 5ex; height: 1.5em;\n                padding: 2px; text-align: right; }\n    .cal_mon td[colspan] { background: inherit; }\n    .cal_mon sup { color: #F0F0F0; text-align: left; float: left;\n                margin-top: -2pt; font-weight: bold; }\n    .cal_mon a { text-align: right; margin-left: -4em; float: right; }\n    \u003c/style\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n    \u003c!--#include virtual=\"/cgi-bin/bit?body\"--\u003e\n    \u003c/body\u003e\n    \u003c/html\u003e\n\nbit output it in UTF-8, so you will need to configure charset, for\nApache add this (for example to to .htaccess in the directory\nwhere bit.shtml is):\n\n    AddCharset UTF-8 .shtml\n\nObviously, you'll also need to adjust the /cgi-bin/bit paths, and you\nmight need to add a filename suffix to match your web server\nconfiguration (for example it could be bit.cgi).\n\nYou may need to configure MAIL_SPOOL_PATH definition in params.h to\ntell bit where mboxes are located, otherwise bit will assume they\nare in ../../blists/ relative to cgi-bin directory (where bit is).\n\nIn order for the links generated by bit to point to valid URLs, as well\nas for the URLs to look pretty, you may use mod_rewrite rules like\nthis:\n\n    RewriteEngine On\n    RewriteRule ^((listname1|listname2)/([0-9]{4}/([0-9]{2}/([0-9]{2}/([1-9][0-9]*)?)?)?)?)$ list.shtml?$1 [L]\n    RewriteRule ^((listname1|listname2)/[0-9]{4}/[0-9]{2}/[0-9]{2}/[1-9][0-9]*/[1-9][0-9]*)$ /cgi-bin/bit?attachment+$1 [L]\n\nDirect call to bit is required to set HTTP headers for attachments.\n\nTo workaround a bug in Lynx where it would omit the trailing slash when\nfollowing links to \"..\", add:\n\n    RewriteRule ^[a-z-]+([/0-9]*[0-9])?$ https://%{SERVER_NAME}%{REQUEST_URI}/ [R,L]\n\n(where \"[a-z-]+\" is supposed to match your list names; adjust it if\nnot).\n\nTo have separate HTML wrapper pages for different lists (such as to\ninclude different additional info on those pages), use:\n\n    RewriteRule ^(listname1|listname2)/(([0-9]{4}/([0-9]{2}/([0-9]{2}/([1-9][0-9]*)?)?)?)?)$ list-$1.shtml?$1/$2 [L]\n\nTo make use of the censorship feature (to hide spam messages), create a\nseparate HTML wrapper page with:\n\n    \u003c!--#include virtual=\"/cgi-bin/bit?header-censored\"--\u003e\n    ...\n    \u003c!--#include virtual=\"/cgi-bin/bit?body-censored\"--\u003e\n\nthen refer to it in more specific RewriteRule directives, which you need\nto place above the catch-all ones:\n\n    RewriteRule ^(listname1/2011/01/02/3)$ list-censor.shtml?$1 [L]\n\nYou may match multiple messages at once with trickier regexps:\n\n    RewriteRule ^(listname1/2011/01/(09/1|12/1|12/2))$ list-censor.shtml?$1 [L]\n\nGood luck!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenwall%2Fblists","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenwall%2Fblists","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenwall%2Fblists/lists"}