Subject: dicod: wrong quotes in MediaWiki snippets in `/etc/dicod.conf`

From: Luca Capello <[email-masked]>
Date: Tue, 21 Nov 2023 15:32:29 +0100

Package: dicod
Version: 2.11-2+b3
Severity: important
Affects: dico-module-mediawiki
Tags: patch
Usertags: pca.it-communication

Hi there,

after the `load python` bug[1], I tried to configure some WikiMedia
databases using the `dicod`-commented M4 macros, without success:
```
root@harlock:~# /usr/bin/dicod --stderr -f
dicod: Error: /etc/dicod.conf:136.11-11: stray character `
dicod: Error: /etc/dicod.conf:136.14-14: stray character '
dicod: Error: /etc/dicod.conf:137.3-3: stray character `
dicod: Error: /etc/dicod.conf:137.20-20: stray character '
root@harlock:~# 
```

[1] <https://bugs.debian.org/1028487>

NB, plain non-macro configurations as the ones in the
    `dico-module-mediawiki`'s README.Debian allowed `dicod` to start.

In fact, after having read the `dico` upstream manual[2] I discovered
that for whatever reason (I am not an M4 neither a `dico` expert) the
wrong quoting characters ` and ' where used instead of [ and ][3],
albeit according to the M4 manual[4] ` and ' are indeed the M4 default
quoting characters.

[2] <https://www.gnu.org.ua/software/dico/manual/dico.html#Preprocessor>
[3] <https://stackoverflow.com/questions/66738638/how-should-i-escape-a-comma-inside-the-arguments-to-esyscmd#70503189>
[4] <https://www.gnu.org/software/m4/manual/m4.html#Quoted-strings>

Thus, replacing `' with [] in the `wikipedia` and `wiktionary` M4
macro definitions was the first step to get something working, albeit
to have everything OK I could not be able to keep the `wiktionary` and
`wiktionary` macro names, attached the full patch.

However, two final notes:

1. the snippets in `dico-module-mediawiki`'s README.Debian are IMHO
   useless if `dicod.conf` contains commented M4 macros.

2. I would go for a even more generic MediaWiki M4 macro and not 2
   different ones, as shown in the included `/etc/dicod.conf`.

Thx, bye,
Gismo / Luca

-- System Information:
Debian Release: 12.2
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'oldstable-updates'), (500, 'oldstable-security'), (500, 'oldoldstable'), (500, 'stable'), (500, 'oldstable'), (100, 'bookworm-fasttrack'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.5.0-0.deb12.1-amd64 (SMP w/8 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages dicod depends on:
ii  adduser                    3.134
ii  init-system-helpers        1.65.2
ii  libc6                      2.36-9+deb12u3
ii  libcrypt1                  1:4.4.33-2
ii  libdico2                   2.11-2+b3
ii  libgsasl18                 2.2.0-1
ii  libldap-2.5-0              2.5.13+dfsg-5
ii  libltdl7                   2.4.7-5
ii  libpam0g                   1.5.2-6+deb12u1
ii  libpcre3                   2:8.39-15
ii  m4                         1.4.19-3
ii  sysvinit-utils [lsb-base]  3.06-4
ii  zlib1g                     1:1.2.13.dfsg-1

dicod recommends no packages.

Versions of packages dicod suggests:
pn  dico-doc                         <none>
pn  openbsd-inetd | inetutils-inetd  <none>

-- Configuration Files:
/etc/dicod.conf changed:
capability (mime,xversion);
timing yes;
pidfile /var/run/dicod/dicod.pid;
listen localhost;
module-load-path ("/usr/lib/dico");
// Enable handling of databases in dict.org format:
load-module dictorg {
	command "dictorg sort trim-ws dbdir=/usr/share/dictd";
}
// dicodconfig automatically generates the database sections for dictorg
// formatted dictionaries, the following line makes use of this facility:
// Uncomment the following to enable handling of databases in Emacs outline 
// format:
/* load-module outline {
	command "outline";
}
*/
// Uncomment the following to enable Guile interface:
/* load-module guile {
	command "guile";
}
*/
// Uncomment the following to enable Python modules (e.g. MediaWiki):
// <https://bugs.debia.org/1028487>
load-module python {
	command "python load-path=/usr/share/dico/python";
}
// Emacs outline database example:
/* database {
	name "devdict";
	handler "outline /usr/share/dico/outline/devils.out";
}
*/
// WikiMedia via `debpkg:dico-module-mediawiki`
// <https://www.gnu.org.ua/software/dico/manual/dico.html#Preprocessor>
m4_define([defdbwikimedia], [
database {
	name "$1";
	handler "python load-path=/usr/share/dico/python init-script=mediawiki $2";
	mime-headers <<- EOT
	  Content-Type: text/x-wiki
	  Content-Transfer-Encoding: quoted-printable
	  X-Wiki-Language: $1
	EOT;
m4_ifelse([$2],,,[
	description "$2";])
m4_ifelse([$3],,,[
	info <<- EOT
$3
EOT;])
}
])
defdbwikimedia(wikipedia-en,
  [en.wikipedia.org],
  [English language Wikipedia, a collaborative project to produce a
   free-content multilingual encyclopedia.])
defdbwikimedia(wikipedia-fr, [fr.wikipedia.org])
defdbwikimedia(wikipedia-it, [it.wikipedia.org])
defdbwikimedia(wiktionary-en,
  [en.wiktionary.org],
  [English language Wiktionary, a collaborative project to produce a
   free-content multilingual dictionary.])
defdbwikimedia(wiktionary-fr, [fr.wiktionary.org])
defdbwikimedia(wiktionary-it, [it.wiktionary.org])
alias d DEFINE;
alias da d "*";
alias df d "!";
alias m MATCH;
alias mas m "*";
alias mfs m "!";
alias ma mas ".";
alias mf mfs ".";
alias s STATUS;
alias h HELP;
alias q QUIT;
help-text <<- EOT
	+
  The following commands are abbreviations that Gray likes to use when
  debugging the daemon.  You may or may not find them useful.  However
  it is, do not write your client software to relay on them.  They may
  disappear or change any time Gray pleases, without notice.
  d database word                 -- DEFINE database word
  da word                         -- DEFINE * word
  df word                         -- DEFINE ! word
  ma word                         -- MATCH * . word
  mf word                         -- MATCH ! . word
  mas strategy word               -- MATCH * strategy word
  mfs strategy word               -- MATCH ! strategy word
  m database strategy word        -- MATCH database strategy word
  s                               -- STATUS
  h                               -- HELP
  q                               -- QUIT
EOT;
user dicod;
max-children 18;
server-info <<EOT
This is a Dico server.
EOT;
/* load-module stratall {
  command "stratall";
}
strategy all {
  deny-all yes;
}
*/
/* load-module substr {
  command "substr";
}
strategy substr {
  deny-length-lt 3;
}
*/

-- no debconf information

---

From: Luca Capello <[email-masked]>
Date: Tue, 21 Nov 2023 17:45:45 +0100

affects 1056351 + dico-module-mediawiki
thanks

Hi there,

> Affects: dico-module-mediawiki

This did not work, fixed.

Thx, bye,
Gismo / Luca