MDNCONV(1)

NAME
runmdn - A script to allow applications to use multilingual domain names.

SYNOPSIS
runmdn program-name [args..]

DESCRIPTION
runmdn enables applications to use multilingual domain names without recompilation. Just add ``runmdn'' before the application-name, and the application can handle non-ASCII domain names. For example, you can do:

    % runmdn telnet non-ASCII-hostname

Before using runmdn, you should set up properties related to multilingual DNS by configuring mDNkit's resolver configuration file mdnres.conf. See mdnres.conf(5) which describes the configuration.

IMPLEMENTATION
runmdn is a small shell script that sets up an environment variable called ``LD_PRELOAD'', so that an application dynamically links a shared library ``libmdnresolv'' before any other shared libraries.

The library ``libmdnresolv'' provides a special version of some resolver functions which implement features for handling multilingual domain names. runmdn replaces the following functions with the special version:

    dn_comp
    dn_expand
    res_hnok
    res_ownok
    res_mailok
    res_dnok

These are the crucial functions in resolver library for multilingual domain name processing. By overriding them in the standard libraries with the special version provided by ``libmdnresolv'', runmdn enables applications to use multilingual domain names.

    •   Resolver API (such as gethostbyname()) accepts non-ASCII domain names encoded in the local codeset that the application is using. Also the result from these APIs may contain non-ASCII domain names.

    •   The normalization and codeset conversion between application's local codeset and the codeset used in DNS protocol data are handled automatically, so users/applications need not worry about them.

Properties of multilingual DNS (such as the normalization or the codeset used on DNS protocol data) can be configured with the mDNkit's resolver configuration file ( mdnres.conf ). See mdnres.conf(5) for details.

BIND 9
runmdn is designed for BIND4 and BIND8 based resolver libraries. Since BIND9 introduces a completely different resolver called ``light-weight resolver'', runmdn cannot be used for applications using BIND9 based resolver.

Since mDNkit also contains a patch to BIND9 source which makes BIND9 multilingual-aware, use the patch to multilingualize your BIND9 based resolver.

NOTE
The idea of using ``LD_PRELOAD'' to replace some functions in the standard library was taken from ``runsocks'' script distributed as part of SOCKS5 reference implementation.

BUGS
There are many cases where runmdn does not work.

Your system must support ``LD_PRELOAD'' mechanism in the first place.

Due to security reasons, ``LD_PRELOAD'' mechanism is disabled for setuid programs in any sane systems. So runmdn does not work for setuid programs such as ping or rsh.

If your system's resolver is an exotic one that does not use the functions libmdnresolv provides, you lose.

SEE ALSO
mdnres.conf(5), runsocks(1)