inadyn-mt - Simple DYNAMIC DNS client.

Version 02.28.10, October 2016

INADYN Advanced Help

INADYN Advanced is a dynamic DNS client. That is, it maintains the IP address of a host name. It periodically checks whether the IP address stored by the DNS server is the real current address of the machine that is running INADYN Advanced.

inadyn-mt contains some substantive bug fixes, and feature additions, including built in Windows service installation and management, connection event trapping, unicode, additional dynamic dns servers support, IPv6, and a few other things.

inadyn-mt source, and binaries can be found at http://sourceforge.net/projects/inadyn-mt/

Download

http://sourceforge.net/projects/inadyn-mt/

Older versions:

Original Inadyn

Features:

Thanks to:
Thomas Morgan of zerigo.com for IPv6 parameter suggestions, and IPv6 related testing.
Roman, for prompting me to continue working on the project after having set aside a while.
Sander Jonkers for helping to track down afraid.org null hash, IPv6 address parameter bugs, and prompting update results detection improvements.
And everyone else who has taken the time to report bugs, make feature requests, suggestions.


Installation

    For Windows:
  1. As of version 02.00.00 inadyn-mt, MS service related files aren't needed (but, still work if desired). The program can be started as a service (Windows NT) without these files, either from the command line, or the Windows service interface after command line installation. The service is named 'inadyn-mt'.

    Install

    inadyn-mt -i ["My Service Description"]

    Optionally, a service may be installed with a specified name (defaults to inadyn-mt), providing for multiple service instances, useful for multiple dynamic dns server accounts (just point AppParamerters registry entry to corresponding configuration file, with the --input_file (see inadyn-mt program parameters below) parameter):

    inadyn-mt -i ["My Service Description"] -n <service_name>

    Installation gives a default registry setup. The registry entry can be found at:

    HKEY_LOCAL_MACHINE\CurrentControlSet\Control\Services\inadyn-mt

    Edit the Parameters\AppParameters default string value to customize to your dynamic dns system, and preferences. See below for a full list of parameters, or simply type the program name, with no commands to see a listing.

    Post installation configuration can also be done using the registry files method listed in step 2 below (edit the "mt" registry file for inadyn-mt -i install method).

    Start

    inadyn-mt -s

    Or:

    inadyn-mt -s -n <service_name>

    (The service name (-n) parameter may be similarly applied to all service commands.)

    Assuming a configuration file of say, d:\inadyn-mt\inadyn-mt.cfg, the service can be installed, and started from the command line, with:

    inadyn-mt -i ["My Service Description"] -s --input_file d:\inadyn-mt\inadyn-mt.cfg

    The optional service description command option is commited to Windows registry. Other parameters are not commited to the Windows registry, and still need setting up as listed in step 2 (edit the "mt" registry file for inadyn-mt -i install method), or by editing installation registry defaults directly, as described in Install section above.

    Command line parameters override registry, parameters. Configuration file parameters are inserted at point configuration file command appears.

    Exit

    inadyn-mt -e

    Uninstall

    inadyn-mt -x

    Restart (if the service is not running, this command will start it):

    inadyn-mt -r

    If it appears commands are not carried out according to parameters given on command line, try closing other service related programs such as the Windows Services interface.

    See inadyn-mt\bin\win32 for registry, and batch files named corresponding to the present program version, and function corresponding to registry, and batch files mentioned in the present html page. The batch files are convenient for service installation, or removal without the command line -- just double click.

    Windows 95/98

    For unicode compatibility on Windows 95/98, in MS VC6 Project Settings, C/C++ tab, define preprocessor definition, UNICOWS, link with unicows.lib, and place the dll, unicows.dll in program executable directory.

  2. Edit the registry file with the correct name for your service (e.g. 'configure_inadyn-mt_service_dyndns.reg') in order to pass your username, password, aliases, and other params to inadyn-mt. After you have finished double click on the reg file.

    Notes:

    After you have finished double click on the reg file.

  3. Go to ControlPanel/AdministrativeTools/Services/inadyn-mt and START the service. Also make sure that the startup mode is 'automatic'.
   For Linux:
	(As of inadyn-mt version 02.16.01-beta, regular makefile is deprecated for automake.  makefile is still maintained, 
	but must be copied from makefile-deprecated to makefile in order to use.)
  1. No installation necessary. The inadyn-mt executable found in bin/linux/inadyn-mt is self contained and can be launched at any time
    For MAC (thanks to Rob.S)
  1. Put the binary somewhere in path (e.g. ~/bin),
    Start it with the following AppleScript saved as an Application and dragged to
    System Preferences -> Accounts -> Login Items:

    do shell script "~/bin/inadyn-mt -a HOST.dyndns.org -u USER -p PASSWORD"


    Alternatively, one can put it in the system startup scripts.

    For other operating systems:
  1. Adjust the makefile - change the architecture to yours. (e.g. solaris)
  2. Recompile  - make clean all

Command line options

They are automatically printed if inadyn-mt gets wrong parameters or if --help option is used.

Typical usage:

-for dyndns.org system:
    inadyn-mt -u username -p password -a my.registered.name
-for freedns.afraid.org:
    inadyn-mt --dyndns_system default@freedns.afraid.org -a my.registered.name,hash -a anothername,hash2
    'hash' is extracted from the grab url batch file that is downloaded from freedns.afraid.org

Parameters:

'--help': help
'-h': help

'--username <name>': your membername/hash
'-u <name>': your membername/hash

'--password <password>': your password. Optional.
'-p <password>': your password. Optional.

'--alias <alias host name>[, hash] [ip type] [if] [addr pref] [ip server[:port] <ip server url> [ip server host]]':
     alias host name, optional comma delimted hash, optional ip version (default auto), ipv6 source address preference, network interface, ip server, ip server port, ip server host.
'-a <alias host name>' --alias short option.

     This option can appear multiple times.

A host name alias, optional comma delimited hash, and optional ip version (default auto), network interface, address preference, ip server (and optional colon delimited port) and url, ip server host.

IP types are dual, coupled, ip4, ip6, or auto. IP type auto is the default. IP type dual (for dual ip stack), denotes the alias should be updated to both ipv6, ipv4. Coupled is like dual, but denotes DDNS server accepts dual stack updates in a single request, where the ipv4, ipv6 addresses are presented as a comma delimited list.

Network interface parameter should denote the network interface to be used as the ip server connect source address. When this parameter is opted, unless ip type is ip4, the alias will be updated to the ipv6 address obtained from this interface, along with, if indicated, the ipv4 address obtained from ip server.

The addr pref parameter denotes ipv6 privacy extentions address preference. It can be one of either pub, policy, home, careof, crypto, nocrypto, tmp, pubtmp. Logical OR not yet supported. The default is pub.

Use the ip server parameter for other than the DDNS server's ip server as per default inadyn-mt hard coded configuration set‐ tings. It can include a colon delimted port number. It must be accompanied by a url parameter. Finally, an ip server host can be designated - useful in case of ip server running on multiple server hosts, or the ip server domain name used to reach the server otherwise differs from actual ip server domain name.

Except the host (alias) parameter, all of these parameters are optional, but order matters.

'--debug': <#> - debug level 1..7 (higher = more output)
'-d': debug level 1..7 (higher = more output).

'-i [quoted service description] [-n <service name>]': install service

'-s [-n <service name>]': start service

'-e [-n <service name>]': exit service

'-r [-n <service name>]': restart service

'-x [-n <service name>]': remove service

'--input_file <path/file>': input file name that contains inadyn-mt command options (adds to those already present in the cmd line). The default configuration file name is '/etc/inadyn-mt.conf'. It is only used if inadyn-mt is called without any command line options. This allows inadyn-mt to be called without any arguments. The format is as expected for a **NIX config  file. See below for details.

'--ip_server_name <name>[:port] <url>': The client IP is detected by calling 'url' from this 'ip_server_name:port'.

Choice of ip server name parameter option can determine what type of address is updated. To update an IPv6 address, simply choose an ip server that supports IPv6, such as, ip6.me /, myip.dk /, dhis.org /, among others. And, of course, dynamic dns server should be set to one that supports IPv6. See IPv6 section below for more information.

'--ip_server_host <host>': Host name used in http request to ip server if different from ip server name, as when, e.g., ip_server_name is 'localhost:port /' through an SSL bridge. Defaults to ip server name.

'--dyndns_server_name <name>[:port]': dynamic dns server name, and optional port.

The server that receives the update DNS request.
If no proxy is wanted, then it is enough to set the dyndns system. The default servers will be taken.

'--dyndns_server_url <url>': full URL relative to DynDNS server root.

'--dyndns_server_host <host>': Host name used in http update DNS request, if different from dyndns server name, as when, e.g., ip_server_name is 'localhost:port' through an SLL bridge. Defaults to dyndns server name.

'--dyndns_system <NAME>': optional DYNDNS service type.

This option can be used multiple times - once for each DDNS server to update - followed by --alias, and other options corresponding to the --dyndns_system entry. Per --dyndns_system entry options are username, password, alias, ip_server_name, ip_server_host, dyndns_server_name, dyndns_server_url, dyndns_server_host, and proxy_server.

dyndns_system parameter should be one of the following:

-For dyndns.org DNS system: dyndns@dyndns.org, dual@dyndns.org OR statdns@dyndns.org OR custom@dyndns.org.
-For freedns.afraid.org DNS system: default@freedns.afraid.org
-For zoneedit.com: default@zoneedit.com
-For no-ip.com: default@no-ip.com
-For easydns.com: default@easydns.com
-For 3322.org: dyndns@3322.org
-For sitelutions.com: default@sitelutions.com
-For dnsomatic.com: default@dnsomatic.com
-For tunnelbroker.net: ipv6tb@he.net
-For tzo.com: default@tzo.com
-For dynsip.org: default@dynsip.org
-For dhis.org: default@dhis.org
-For zerigo.com: default@zerigo.com
-For two-dns.de: default@two-dns.de
-For www.dnsdynamic.org: default@dnsdynamic.org
-For dnspark.com: default@dnspark.com
-For regfish.de: ipv4@regfish.de
-For regfish.de: ipv6@regfish.de
-For www.ovh.com: default@ovh.com
-For joker.com: default@joker.com
-For dyndns.strato.com: default@strato.com
-For system-ns.com: default@system-ns.com
-For www.dtdns.com: default@dtdns.com
-For changeip.com: default@changeip.com
-For dnsexit.com: default@dnsexit.com
-For nsupdate.info: ipv4@nsupdate.info
-For nsupdate.info: ipv6@nsupdate.info
-For loopia.com: default@loopia.com
-For domains.google.com: default@domains.google.com (requires SSL bridge, like stunnel)
-For duckdns.org: default@duckdns.org
-For dy.fi: default@dy.fi
-For ddnss.de: default@ddnss.de
-For dynv6.com: ipv4@dynv6.com
-For dynv6.com: ipv6@dynv6.com
-For dynv6.com: dual@dynv6.com
-For selfhost.de: default@selfhost.de
-For generic DNS system: custom@http_svr_basic_auth

DEFAULT: dyndns@dyndns.org.

'--proxy_server <name[:port]>': the http proxy server name and port. Default is none.

'--update_period <#>': how often the IP is checked. The period is in [ms]. 30000..864000000. Default is about 10 min. Max is 10 days

'--update_period_sec <#>': how often the IP is checked. The period is in [sec]. 30..864000. Default is about 10 min. Max is 10 days

'--forced_update_period <#>': how often, in seconds, the IP is updated even if it is not changed. 30 sec..30 days, default, 30 days.

'--log_file <path/file>': log file path and name

'--background': runs in background.  Output to syslog or to log file [if specified].

'--verbose <#>': set dbg level. 0 to 5

'--iterations <#>': set the number of DNS updates. Default is 0, which means infinity.

'--syslog': explicit set output to syslog. (e.g. /var/log/messages). Works on **NIX systems only.

'--change_persona <uid[:gid]>': After init changes user ID and group ID to the provided ones. This allows dropping
    unneeded [root] privileges after startup. Works for **NIX only.

'--exec <command>': external command to exec after an IP update. Include the full path.

'--cache_dir <path>': cache directory name. (e.g. /tmp/ddns). Defaults to /tmp on **NIX systems.

'--wildcard': enable domain wildcarding for dyndns.org, 3322.org, or easydns.com.

'--retries <#>': network comm retry attempts. 0 to 100, default 0.

'--retry_interval <#>': network comm miliseconds retry interval. 0 to 30,000, default 1,000.

'--retry_pending': retry ip update even after network comm retries exhausted, default on.

'--retry_pending_interval <#>': network comm seconds update retry interval, after retries exhausted, 5 to 3600,
    default 300.

'--lang_file <path/file>': [language file path, and file name]. defaults to either ../inadyn-mt/lang/en.lng,
    or /etc/inadyn-mt/en.lng. No parameter option gives hard coded defaults

'--online_check_url <srv_name[:port] url>': server name, optional port, and url to reach to confirm online status.

'--status_interval <#>': seconds [30..864000] interval at which to check online status, default 600.

'--alert_retries <#>': network retries before audible network status alerts. [0..100], default 0.

'--status_offline_interval <#>': seconds [5..864000] interval at which to check online status, after offline detected,
    default 15.

'--audible': audible network status alerts toggle. default off.

'--wave_file <file/path>': audible network status alerts wave file path, and file name. defaults to either
    ../inadyn-mt/extra/wav/alarm.wav, or etc/inadyn-mt/extra/wav/alarm.wav [wave loops: 0..100; -1 for
    infinite] same as wave_loops below -- optional number of times per wave play call to repeat wave file
    play, default 0.

'--wave_loops <#>': same as wave_file parameter optional parameter -- 0..100 or -1 for infinite number of times
    per wave play call to repeat wave file play, default 0.

'--wave_buff <#>': wave file output buffer size control -- integer or float multiple of wave file bytes per sec.
    [.25..10], default .25.

'--wave_gain <#>': gain (amplitude adjust) at which to play audible alert (beware clipping), integer or float.
    [-10..10], default 10 (0db, no attenuation).

'--alert_interval <#>': time in miliseconds between consecutive audible network status alerts. [0..3600000],
    default 0.

'--svr_rsp_success <custom DDNS server update success return code>': Optional for custom DDNS updates. A comma delimited quoted
    string, e.g., "good, nochg", representing custom DDNS server successful update return values.

'--svr_rsp_other <custom DDNS server non-fatal return codes>': Optional for custom DDNS updates. A comma delimited quoted string
    representing custom DDNS server non-fatal update failure return values, e.g., "dnserr,911,unknown error".

'--svr_ip_param <custom DDNS server ip name parameter> [user] [pass]': Optional for custom DDNS updates. DDNS url parameter for ip address,
    e.g., myip.

'--svr_ip_in_rsp': Optional for custom DDNS updates. Flag that custom DDNS server returns your ip address on update success.
    Defaults to false.

'--svr_auto_dual': Flag that server defaults to dual list (coupled) alias ip type. Defaults to false.

'--svr_auto_detect': Flag server auto detects ip. Defaults to false.

'--svr_add_cfg <full path, file name>': Additional servers file. Default search for servers_additional.cfg in ./extra, /etc, /etc/inadyn-mt,
     /etc/inadyn-mt/extra. Contains additional preconfigured DDNS servers to be used as --dyndns_system option parameter in same
     fashion as servers inadyn-mt supports natively. Should appear before any dyndns_system option in inadyn-mt.conf or command
     line if not using inadyn-mt.conf.

'--if <network interface name>': Name of network interface to use for ip server, and DDNS server comm. Defaults to
    system configured default.

'--addr_pref <pub | policy | home | careof | crypto | nocrypto | tmp | pubtmp>': ipv6 privacy extensions address
    preference. Valid parameters are 'pub,' 'policy,' 'home,' 'careof,' 'crypto,' 'nocrypto,' 'tmp,'
    'pubtmp.' Defaults to 'pub.' See rfc5014. Combining via logical OR not presently supported.

'--if_enum': Enumerate network interfaces.

'--improb': ????

SPECIAL NOTE: Cache file :

There are two cache files: inadyn_time.cache and inadyn_ip.cache. They store the time and IP address when an update last occurred. Under **NIX systems, the cache directory defaults to /tmp, under windows it defaults to the directory where inadyn-mt.exe was launched.

Example usage:

1. Update every minute, in console mode, for a dyndns.org system:

inadyn-mt --username test --password test --update_period 60000 --alias test.homeip.net --alias my.second.domain

2. Update every minute, in demon mode (background task), with log file, of an dyndns.org address:

inadyn-mt --background -u test -p test --update_period 60000 --alias inarcis.homeip.net --alias my.second.domain --log_file inadyn_srv.log

3. Update freedns.afraid.org, every minute, in daemon mode, with configuration read from file.

Config file can be placed anywhere. In linux, default location: /etc/inadyn-mt.conf

Content of config file:

--update_period 60000
--alias test.homeip.net, hash_for_host1
--log_file /var/log/inadyn.log
--change_persona 10012 #to change to another user id after init.

Launching of inadyn-mt does not need any params. It looks for /etc/inadyn-mt.conf

4. Freedns update in console

inadyn-mt --update_period 60000 --alias test.homeip.net,hash_for_host1 -a my.second.domain,hash2 --dyndns_system default@freedns.afraid.org

Configuration file

inadyn-mt can read the very same options which can be present in the command line from a configuration file. This feature allows the user to write the options only once, and avoids frequent retyping.

Default configuration file is /etc/inadyn.conf under Unix systems.
The location of the config file can be given to inadyn-mt via --input_file option

The format :

- '#' is a comment sign.
- the long options (those with '--' in front) can also be placed at the beginning of the line without '--' signs

Examples:

1.

#Some comment about  inadyn-mt  cfg file
--username test --password test --update_period 60000 --alias test.homeip.net --alias my.second.domain

2.

--username test #user
--password test
update_period 60000  #some other param without '--'
alias test.homeip.net

LOG Output

inadyn-mt prints messages to the log when the ip is updated.

When the connection goes down it is possible that inadyn-mt displays some errors. But they should be followed by 'OK' messages after the connection is up again.

Adjust log output verbosity with option, --debug (see above). Configure with option, --enable-debug, and use program configuration option, --debug, with option parameter 7 (i.e., --debug 7), for maximum log output.

IPv6

If you wish to update an IPv6 address, choose an ip server that is IPv6 capable -- that is, will return your IPv6 address. And, you'll need a dynamic dns service that honors IPv6 addresses (you may need to use this program's "custom" type dynamic dns server option -- see preceding documentation).

If your IPv6 ip server gives an IPv4 address, it may be because of ip server preference for IPv4. Choose an IPv6 ip server that gives IPv6 addresses preference. Some Teredo clients may require precedence adjustment.

A few IPv6 --ip_server_name parameter options values known to work with inadyn-mt are ip6.me /, dhis.org /, myip.dk /.

At this writing, recent inadyn-mt dual stack dynamic dns server support additions are zerigo.com, majimoto.net, and dhis.org.

If updating an IPv6 tunnel broker, your selected ip server should not prefer IPv6 addresses (alternatively, see alias option, and associated ip type parameters above). ip4.me, and default ip server, checkip.dyndns.org, at this writing, are two ip servers that return IPv4 addresses.

Note that, ideally, ip server response should be relatively small. At least one, is upwards of 3.5 killobytes. This program allocates 4.5 killobytes for the response. Any beyond that, and the program may not be able to parse the ip address contained in the ip server response.

Special notes for freedns.afraid.org

This provider prefers to get as parameter a single hashed (base64 encoded) value.

As of inadyn-mt version 02.24.07-afraid_00_patch, aliases hashes can be automatically obtained via sha1 hashed 'username|password'. To this end, use options username, and password.

Otherwise, the freedns.afraid.org DDNS web user interface provides a "Direct URL" link via which corresponding alias hash may be copied, and pasted into inadyn-mt config as alias option hash paramter.

Example: Resulting address window url looks like this:

http://freedns.afraid.org/dynamic/update.php?YUGIUGSEIUFGOUIHEOIFEOIHJFEIO=

The user has to copy and paste the hash value after the '?' until the end of line.

The hash will be used as additional param in --alias option. (see typical usage above)

Support and Bug reports

http://sourceforge.net/p/inadyn-mt/discussion/751470/

Contact info:
Original Inadyn Web: www.inatech.eu
Inadyn Advanced Web: stevehorbachuk.com
inadyn-mt: bhoover@wecs.com

HISTORY

Ver.  inadyn-mt 2.28.10 - October 2016
       Changes:
       - broken ipv4, dual stack ip fetch fixed

Ver.  inadyn-mt 2.28.08 - October 2016
       Changes:
       - fetch freedns.afraid.org alias update tokens
       - fix Windows 02.28.05 short options fail regress bug
       - fixes changeip.com url type-o
       - added option --if_enum - net if enum
       - Fabian Raab's regfish.de server response code fixes
       - ip lookup ip version precedence independence
       - some refactoring

Ver.  inadyn-mt 2.28.07 - August 2016
       Changes:
       - accomodate ipv4 only client stack, ipv6 socket create failure
       - finally fix no ifaddrs.h compile failures
       - added explicit DDNS ip auto detect option --svr_auto_detect

Ver.  inadyn-mt 2.28.06 - May 2016
       Changes:
       - fixed missing --ip_server_name_global option
       - added ipv4.dynv6.com, ipv6.dynv6.com, ddnss.de...
       - added --svr_auto_dual option
       - added servers_additional.cfg vars IP_ADDR4, IP_ADDR6

Ver.  inadyn-mt 2.28.05 - April 2016
       Changes:
       - improved thread synchronization
       - audio output allocation error fixed
       - Linux mono audio output fixed
       - some bind, address pref refactoring
       - fixed short options
       - --svr_ip_param sprintf dest, src overlap trunc fix
       - fixes Solaris ifaddrs.h include conditional compile
       - added XP401 CIA engram protection encoding, 8-2

Ver.  inadyn-mt 2.28.04 - March 2016
       Changes:
       - ARM signed char bug fixed
       - Windows config file relative path
       - Windows --if option bugs fixed
       - Windows registry defaults changed

Ver.  inadyn-mt 2.24.49 - January 2016
       Changes:
       - debug output null pointer fixed
       - back compat custom success ret fixed
       - more flexible custom script like vars
       - added config examples, examples.conf

Ver.  inadyn-mt 2.24.48 - January 2016
       Changes:
       - Multiple services, in single program instance
       - additional alias option parameters (see --alias)
       - Windows --addr_pref, --if implementation
       - default DDNS server --addrs_pref default
       - Riot Nrrrd's Solaris build, queue_t collision fix patch
       - adds Ville Skyttä's man page fixes patch
       - adds DDNS, www.dy.fi
       - improbability option manifests (improbably) as --improb
       - more general, missing ifaddrs.h compile
       - backward compatibly removed win/dos '\' escape require

Ver.  inadyn-mt 2.24.47 - August 2015
       Changes:
       - avoid unnecessary config change related alias updates
       - init to empty string(s) if not one, nor either of user, pass
       - cache updates refactored for ip fetch fail
       - robert-tx' MAC OS X semaphore excessive cpu use fix patch
       - add src/cache_list.* to MS VC 6 project file

Ver.  inadyn-mt 2.24.46 - June 2015
       Changes:
       - added network interface bind option --if
       - added custom DDNS server option --svr_ip_param
       - added custom DDNS server option --svr_rsp_other
       - added custom DDNS server option --svr_rsp_success
       - added custom DDNS server option --svr_ip_in_rsp
       - added additional DDNS server option --svr_add_cfg
       - added host name option, --dyndns_server_host
       - added host name option, --ip_server_host
       - some refactoring, doc, man file editing, updates
       - language file duplicate entries input ignored
       - fixed unicode file test routine file pointer reset
       - /usr/local added to shared library search
       - accepts ::1 as ip_server_name option host parameter
       - recompile not required for debug_level above 5
       - added some DDNS servers
       - imaginary options now with enhanced lucidity xp

Ver.  inadyn-mt 2.24.45 - March 2015
       Changes:
       - remote controlled sarcasm automation
       - it puts on the lotion, and rubs it into...
       - drools at the very mention of your name
       - much weeping, and gnashing of teeth

Ver.  inadyn-mt 2.24.44 - January 2015
       Changes:
       - fixes shared library, libao open failure

Ver.  inadyn-mt 2.24.43 - August 2014
       Changes:
       - pre v.02.24.40 ip cache read incompatibility fixed
       - decoupled ip cache reads, and struct update
       - removed v.02.24.42 improbability related functionality

Ver.  inadyn-mt 2.24.42 - February 2015 (probably)
       Changes:
       - added option --improbabilty
       - added --improbabilty option related listener socket
       - various --improbabilty option parameters

Ver.  inadyn-mt 2.24.40 - June 2014
       Changes:
       - change config w/o cache deletion
       - alias update logging includes associated DDNS server
       - some code clean up, and formatting
       - ip server request format supports vanity domains
       - Windows missing _vsnprintf conditional compile updated
       - Windows legacy, e.g. _vsnprintf compiler define _WIN_LEG
       - added ipv6 privacy extensions option --addr_pref
       - refactored to decouple sockets init, and connect
       - fixed coupled alias type parse error
       - includes previous patches (excluding multi-services)
       - dns server port allocation error fixed
       - Windows version shell execute bug fixed
       - Windows version corrupt .exe fixed
       - added DDNS server, two-dns.de

Ver.  inadyn-mt 2.24.38 - January 2013
       Changes:
       - fatal configuration selector fault fixed

Ver.  inadyn-mt 2.24.36 - March 2011
       Changes:
       - fix debug output out of bounds array index bug
       - fail on partial "coupled" address update attempt

Ver.  inadyn-mt 2.24.34 - March 2011
       Changes:
       - default debug output level
       - some minor housekeeping

Ver.  inadyn-mt 2.24.32 - March 2011
       Changes:
       - ip type, coupled, cache related update state bug fixed

Ver.  inadyn-mt 2.24.30 - March 2011
       Changes:
       - *nix broken pipe signal trapped

Ver.  inadyn-mt 2.24.28 - March 2011
       Changes:
       - added ip type, coupled, for comma delimited ip updates
       - option status_interval default changed to 10 minutes
       - changed default ip server
       - changed default online status check url

Ver.  inadyn-mt 2.24.26 - March 2011
       Changes:
       - ip type change, cache related update state bug fixed
       - readme.html IPv6 section Teredo clients comment
       - short version parameters hyphen/defaults parse bug fixed
       - dual ip type max alias increase bug fixed

Ver.  inadyn-mt 2.24.24 - March 2011
       Changes:
       - afraid.org update results detection improvements
       - afraid.org dual ip type null hash bug fixed/refactored
       - afraid.org update ip address parameter implemented

Ver.  inadyn-mt 2.24.22 - February 2011
       Changes:
       - zerigo.com specific return codes, default ip server

Ver.  inadyn-mt 2.24.20 - February 2011
       Changes:
       - uninitialized ip type flag fixed

Ver.  inadyn-mt 2.24.14 - February 2011
       Changes:
       - reverted command loop design/branching logic restored

Ver.  inadyn-mt 2.24.12 - February 2011
       Changes:
       - ip buffer initialization fixed
       - increased max alias to accomodate type, dual
       - added more ip type flow control/bullet proofing
       - dual stack ip4 without ip6 updates allowed
       - forced update triggered on program start-up
       - allow no user name, password, as well as neither or both
       - ip version related refactoring, improvements
       - some documentation additions
       - added alias option ip type parameters
       - Windows version socket layer start/stop bug fixed
       - one off utf file type check memory error fixed

Ver.  inadyn-mt 2.24.10 - January 2011
       Changes:
       - abstracted invalid socket value check, Windows version
       - restored invalid socket checks on object shutdown
       - fixed ip parser fail mode (potential) memory leak
       - man file updates

Ver.  inadyn-mt 2.24.08 - January 2011
       Changes:
       - "custom" IPv4 updates to dual stack auto detecting servers
       - zerigo.com dynamic dns server added
       - fixed majimoto.com update request format

Ver.  inadyn-mt 2.24.06 - January 2011
       Changes:
       - some minor "class" hierarchy balancing

Ver.  inadyn-mt 2.24.04 - January 2011
       Changes:
       - IPv6 fallback to IPv4 failure corrected
       - some more "class" hierarchy cleanup/improvment
       - some default option parameter values changes
       - man files, online help, readme.html updates, sync

Ver.  inadyn-mt 2.24.02 - January 2011
       Changes:
       - added missing OOP superclass defines
       - completed IPv6 architectural shift
       - added dhis.org dynamic dns server
       - added majimoto.net dynamic dns server
       - added ip parameter to sitelutions.com updates
       - changed status, and update interval defaults to more server friendly 10 minutes
       - IPv6 dynamic dns updates

Ver.  inadyn-mt 2.20.46 - January 2011
       Changes:
       - zoneedit.com config invalid user, pass detected

Ver.  inadyn-mt 2.20.44 - December 2010
       Changes:
       - uninitialized timer structure fixed
       - unicode user, pass, dynamic allocation
       - main loop clean-up

Ver.  inadyn-mt 2.20.42 - December 2010
       Changes:
       - minor forced update period improvements
       - added SIG_USR1 to man file
       - corrected man file, system_service reference

Ver.  inadyn-mt 2.20.40 - December 2010
       Changes:
       - libao data structure future proofing
       - potential libao, main init bug fixed

Ver.  inadyn-mt 2.20.38 - November 2010
       Changes:
       - ALL aliases updated on forced update

Ver.  inadyn-mt 2.20.36 - November 2010
       Changes:
       - faulty *nix audio library parameter init fixed
       - several faulty type safe variable inits fixed
       - fixed mutiple alias forced update
       - some formatting, and minor code clean up

Ver.  inadyn-mt 2.20.34 - November 2010
       Changes:
       - TIME_WAIT socket linger removed
       - added v.02.20.32 server support additions to help output
       - man file formatting
       - corrections to present (readme.html) file

Ver.  inadyn-mt 2.20.32 - November 2010
       Changes:
       - fixed zoneedit.com bad config false positive
       - added troglobit.com's ipv6tb, dnsomatic, tzo, milkfish sip
       - implemented tzo.com's update okay response detect
       - implemented tzo.com's update config error response detect
       - implemented milkfish sip update config error response detect
       - some minor code clean up

Ver.  inadyn-mt 2.20.28 - November 2010
       Changes:
       - added multiple Windows service instance support
       - multiple aliases ip cache updated correctly

Ver.  inadyn-mt 2.20.27 - November 2010
       Changes:
       - cvs updated supporting multiple accounts

Ver.  inadyn-mt 2.20.22 - November 2010
       Changes:
       - online status check socket resource leak fixed
       - status_offline_interval help output entry corrected

Ver.  inadyn-mt 2.20.20 - November 2010
       Changes:
       - successful updates repeated with pendings bug fixed
       - unchanged ip forced update succeeds on first alias update
       - no configure/restart on multi alias single config fail

Ver.  inadyn-mt 2.20.18 - November 2010
       Changes:
       - pending update ip change not detected fixed

Ver.  inadyn-mt 2.20.16 - November 2010
       Changes:
       - stray ip cache file update remove

Ver.  inadyn-mt 2.20.14 - November 2010
       Changes:
       - freedns.org client config fail false positive fixed

Ver.  inadyn-mt 2.20.12 - November 2010
       Changes:
       - multi alias related forced update period reset bug fixed

Ver.  inadyn-mt 2.20.10 - November 2010
       Changes:
       - initial update bounded forced update if pendings off
       - fixed multiple alias update break on first alias update fail
       - ip update files cache updated on all alias success only
       - no command loop forced update break for bad config

Ver.  inadyn-mt 2.20.08 - November 2010
       Changes:
       - forced update failure fallback to update period retry
       - --retry_pending_interval changed to seconds, default 900
       - man, readme.html, help screen updates, corrections

Ver.  inadyn-mt 2.20.06 - November 2010
       Changes:
       - updates, forced updates, pending updates coordinated
       - unsigned integer overflow checked
       - readme.html wrong version changes log entry fixed

Ver.  inadyn-mt 2.20.04 - November 2010
       Changes:
       - --disable-threads related compiler error fixed
       - update period cache file ignored bug fixed

Ver.  inadyn-mt 2.20.02 - October 2010
       Changes:
       - update failure config implicit inverted to explicit
       - forced_update_period checked inside update period
       - forced_update_period input parameter range check
       - simplified RAS trigger to only signaling update need
       - fixed freedns.afraid.org fail on user id params bug
       - added support for Windows processed console output
       - repeated config error log priority treated lower

Ver.  inadyn-mt 2.18.50 - October 2010
       Changes:
       - improperly initialized timer fixed

Ver.  inadyn-mt 2.18.48 - October 2010
       Changes:
       - several pending update logic errors fixed

Ver.  inadyn-mt 2.18.46 - October 2010
       Changes:
       - parameter retry_interval set to net_retries fixed
       - more specific ip update debug output
       - added --retry_pending toggle parameter
       - added --retry_pending_interval parameter
       - improved --forced_update_period timing accuracy
       - timer loop command response time adjust bug fixed

Ver.  inadyn-mt 2.18.42 - October 2010
       Changes:
       - too many net retries before fail bug fixed

Ver.  inadyn-mt 2.18.40 - October 2010
       Changes:
       - ver. 02.18.38 --net_retries iterations fail/config response bug fixed
       - yet more update loop fail safety

Ver.  inadyn-mt 2.18.38 - October 2010
       Changes:
       - added support for quoted option parameters, and spaces in file/directory paths
       - added online_check_url parameter, decoupling ip server from online status checks url
       - improved audible alert exit condition responsiveness
       - fixed Windows version iterations over counting bug
       - added more specific dynamic dns server error return code client response

Ver.  inadyn-mt 2.18.36 - July 2010
       Changes:
       - socket handle value of 0, error detected as NULL, fixed
       - a couple thread stack data sharing moved to global
       - wave file output, --wave_gain parameter changed to float
       - option file parse error aborts config file search

Ver.  inadyn-mt 2.18.34 - July 2010
       Changes:
       - corrected previous changelog entry, Win32s reference
       - some wave_util.c refactoring
       - some readme.html formatting

Ver.  inadyn-mt 2.18.32 - July 2010
       Changes:
       - 32 bit Windows pre WAVE_FORMAT_EXTENSIBLE wave output
       - improved Windows wave output error checking
       - updated debian changelog

Ver.  inadyn-mt 2.18.30 - June 2010
       Changes:
       - threads_wrapper_init undefined reference fixed

Ver.  inadyn-mt 2.18.28 - June 2010
       Changes:
       - improved mutex create in threads_wrapper.c
       - automake cleaned

Ver.  inadyn-mt 2.18.26 - June 2010
       Changes:
       - inadyn man files updated to inadyn-mt
       - *nix inadyn-mt.conf moved to /etc
       - added debian dpkg-buildpackage directory, et al
       - moved *nix meta files to /usr/share

Ver.  inadyn-mt 2.18.24 - May 2010
       Changes:
       - removed bird-calls-32.wav from NOTICE license file

Ver.  inadyn-mt 2.18.22 - May 2010
       Changes:
       - *nix meta files search root /etc, /usr/share, /usr/local/etc
       - too many params compiler warning fixed

Ver.  inadyn-mt 2.18.20 - May 2010
       Changes:
       - update server fatal error shutdown more readable debug
       - downstream Fedora patch, lang file default, and install path
       - autoconf reflects lang file, path patch
       - empty --lang_file parameter option gives hard coded output strings defaults

Ver.  inadyn-mt 2.18.18 - May 2010
       Changes:
       - broken update server fatal error shutdown fixed

Ver.  inadyn-mt 2.18.16 - May 2010
       Changes:
       - downstream Fedora patch, gethostbyname size_t crash fixed
       - improved ip update loop reliability
       - downstream Fedora patch, src/Makefile.am improvements

Ver.  inadyn-mt 2.18.14 - Feb. 2010
       Changes:
       - wave_file parameter options documentation corrections to present readme.html
       - *nix manual files updated for parameter, wave_buff
       - some comments removed form ./src/tcp.c

Ver.  inadyn-mt 2.18.12 - Feb. 2010
       Changes:
       - --wave_buff [.25..10], option added for controlling wave file output buffer size
       - some configure.ac variable assignments syntax changes

Ver.  inadyn-mt 2.18.10 - Feb. 2010
       Changes:
       - Restored distribution archive, FreeBSD version binary
       - --cache_dir parameter option pointer check
       - stray dyndns.h version constant, linefeed removed

Ver.  inadyn-mt 2.18.08 - Feb. 2010
       Changes:
       - logfile pointer check error fixed
       - FreeBSD version source compile required

Ver.  inadyn-mt 2.18.06 - Dec. 2009
       Changes:
       - no libao compile errors fixed

Ver.  inadyn-mt 2.18.04 - Dec. 2009
       Changes:
       - wave output attenuation range check

Ver.  inadyn-mt 2.18.02 - Dec. 2009
       Changes:
       - removed Makefile.am 32 bit wave files install

Ver.  inadyn-mt 2.17.14 - Dec. 2009
       Changes:
       - shutdown/destroy global http client in test_connect fixed

Ver.  inadyn-mt 2.17.12-beta - Dec 2009
       Changes:
       - wave_gain parameter default to 10
       - wave_gain parameter range check

Ver.  inadyn-mt 2.17.10-beta - Dec 2009
       Changes:
       - remaining legacy string storage changed to heap

Ver.  inadyn-mt 2.17.09-beta - Dec 2009
       Changes:
       - async connect test initialization bug fixed
       - sans ip_server_name parameter default ip server bug fixed

Ver.  inadyn-mt 2.17.08-beta - Dec 2009
       Changes:
       - ip, time cache directory parameter handler refactored, error checked
       - wave_gain parameter documentation updated

Ver.  inadyn-mt 2.17.07-beta - Nov 2009
       Changes:
       - added wave format 32 bit ieee float support
       - gain attenuation extended for 8, 16, 24 bit depths
       - changed wave_gain option parameter gain parameter range to [-10..10]
       - gain mapped to [0..120] decibels
       - improved wave file parsing code
       - cache dir, log file updated to unicode
       - removed 32 bit ./extra/wav wave files

Ver.  inadyn-mt 2.17.06-beta - Nov 2009
       Changes:
       - source file, wave_util.c amplitude attenuation
       - changed option parameter, wave_volume to wave_gain

Ver.  inadyn-mt 2.17.05-beta - Nov 2009
       Changes:
       - wave audio output --wave_gain option parameter added
       - wave structure destroy null ptr check
       - wave format error debug output format fixed
       - added inadyn-mt/extra/wav 32 bit wav files
       - updated wav files copyright NOTICE file

Ver.  inadyn-mt 2.17.03-beta - Nov 2009
       Changes:
       - zero wait mutex release ownership test
       - null terminated wave error table
       - modularized exit testing sleep timer routine

Ver.  inadyn-mt 2.17.02-beta - Oct 2009
       Changes:
       - libao dynamic loading
       - --disable-dynamic configure option
       - makefile-deprecated NO_DYN_LOAD preproc option
       - makefile-deprecated NO_LIBDL preproc option
       - makefile-deprecated GETHOSTBYNAME_PARAMS preproc option
       - makefile-deprecated non-reentrant ASYNC_LOOKUP preproc option
       - archive *nix executables audible support as Windows version

Ver.  inadyn-mt 2.16.38-beta - Oct 2009
       Changes:
       - linux version libao audible alerts requires recompile
       - no gethostbyname_r gethostname.c compile exclusion
       - threads disabled gethostname.c compile exclusion

Ver.  inadyn-mt 2.16.36-beta - Oct 2009
       Changes:
       - configure script syntax error fixed
       - config.h source includes
       - makefile-deprecated config.h preprocessor option
       - Windows config.h preprocessor option

Ver.  inadyn-mt 2.16.34-beta - Oct 2009
       Changes:
       - gethostbyname_r detection
       - reentrant, async dns lookup
       - non-reentrant asynchronous dns lookup mutex protection
       - autotools macros clean up
       - makefile-deprecated preprocessor lookup options
       - *nix automake compile sound, network status checks default on
       - option parameter, --audible-off changed to --audible toggle, defaults to off

Ver.  inadyn-mt 2.16.32-beta - Oct 2009
       Changes:
       - debug level global for os.c

Ver.  inadyn-mt 2.16.31-beta - Oct 2009
       Changes:
       - Windows, pthreads threads wrapper

Ver.  inadyn-mt 2.16.29-beta - Oct 2009
       Changes:
       - changed tcp.c mutexes' storage class
       - null ptr assignment compiler error fixed

Ver.  inadyn-mt 2.16.27-beta - Oct 2009
       Changes:
       - improved connection synchronization

Ver.  inadyn-mt 2.16.25-beta - Oct 2009
       Changes:
       - improved connection testing synchronization

Ver.  inadyn-mt 2.16.23-beta - Oct 2009
       Changes:
       - src/Makefile.am lib path to include /usr/lib
       - limit number of threads in async connect test

Ver.  inadyn-mt 2.16.21-beta - Sept 2009
    Changes:
       - status_offline_interval documentation, man file correction

Ver.  inadyn-mt 2.16.19-beta - Sept 2009
    Changes:
       - socket create fail debug output level quiet
       - configure.ac version update

Ver.  inadyn-mt 2.16.17-beta - Sept 2009
    Changes:
       - async connect test not based solely on successful socket create

Ver.  inadyn-mt 2.16.15-beta - Sept 2009
    Changes:
       - non-blocking network socket connect
       - consistent windows socket layer shutdown per startup
       - makefile-deprecated preprocessor option, USE_THREADS changed to DISABLE_THREADS
       - configure --enable-threads option when --enable-sound not used
       - fixed possible allocation error in Windows version cross_platform_cwd
       - removed unused mythreads.c, mythreads.h from archive
       - more reliable Windows version connection test

Ver.  inadyn-mt 2.16.13-beta - Sept 2009
    Changes:
       - small man file edit
       - sound entry/exit debug level downgraded
       - unneccessary wave file read sign conversion removed
       - --wave_loops option added
       - wave loops optional option parameter added to --wave_file option parameter

Ver.  inadyn-mt 2.16.12-beta - Sept 2009
    Changes:
       - retro fix for 8 bit sample sized wave files format

Ver.  inadyn-mt 2.16.09-beta - Sept 2009
    Changes:
       - ./extra/wav/bird-calls.wav, and corresponding copyright notice included
       - waveout.c accomodation for 8 bit sample sized wave files format
       - some refactoring

Ver.  inadyn-mt 2.16.07-beta - Sept 2009
    Changes:
       - updated man file

Ver.  inadyn-mt 2.16.05-beta - Sept 2009
    Changes:
       - waveout.c refactor
       - destroy wave data structure call for Linux/FreeBSD play_wave
       - init dyndns.c main data structure defaults only once

Ver.  inadyn-mt 2.16.03-beta - Sept 2009
    Changes:
       - control flow so as not to overwrite --wave_file option with default

Ver.  inadyn-mt 2.16.02-beta - Sept 2009
    Changes:
       - configure, make install, dist improvements

Ver.  inadyn-mt 2.16.01-beta - Sept 2009
    Changes:
       - Audible alerts if offline -- *nix/BSD requires recompile with ./configure --enable-sound; libao, and libao dev installed.
       - Audible alerts options -- run: inadyn-mt --help
       - Deprecated make (copy from makefile-deprecated), for autoconf, make
       - Added configure options: --disable-threads to disable concurrent online status checks; --enable-sound; --enable-debug
       - Added to old makefile (copy from makefile-deprecated), preprocessor options, USE_SNDFILE, USE_THREADS

Ver.  inadyn-mt 2.12.28 - Sept 2009
    Changes:
       - corrected release notes/changes log error

Ver.  inadyn-mt 2.12.26 - Sept 2009
    Changes:
       - fixed possible string truncation in cross_platform_cwd
       - Windows version: fixed possible invalid ptr in dyn_dns_update_ip (no invalid ptr)
       - added FreeBSD binary in bin/freebsd

Ver.  inadyn-mt 2.12.24 - July 2008
    Changes:
       - program abort flag check fixed
       - GNU GPL related issues addressed
       - calloc safe_mem wrap

Ver.  inadyn-mt 2.12.22 - July 2008
    Changes:
       - Windows log file pointer check
       - added sitelutions.com dynamic dns server
       - simplified Windows service installation default registry parameters
       - memory alloc error abort wrapper potential stack overflow because of error log output memory alloc, changed to printf string literal output
       - added to program root directory, gpl.txt, GNU GPL license text file

Ver.  inadyn-mt 2.12.20 - June 2008
    Changes:
       - default configuration backward compatible with inadyn
       - usage help restored

Ver.  inadyn-mt 2.12.18 - June 2008
    Changes:
       - Windows version latent ras/main thread synchronization details completed
       - forced update period adjusted accordingly in event of USR1

Ver.  inadyn-mt 2.12.16 - June 2008
    Changes:
       - fixed obscure Windows RAS thread orphaning potential (iterations condition true) in main program loop
       - obscure Windows RAS thread, and main loop race condition fixed
       - main loop iterations condition rendered so increment, and related exit, on success only, as in original inadyn

Ver.  inadyn-mt 2.12.06 - May 2008
    Changes:
       - Windows service shutdown on client initiated exit
       - RAS thread initialization to separate function
       - Windows ip update retries exited on network down
       - added ip update trigger, via SIGUSR1
       - Windows Unicode ip cache file dir

Ver.  inadyn-mt 2.12.04 - May 2008
    Changes:
       - removed old MSVC project files, replaced with fixed new inadyn-mt version project files

Ver.  inadyn-mt 2.12.02 - May 2008
    Changes:
       - executable, and related output changed from inadyn to inadyn-mt
       - updated inadyn-mt man files' original inadyn homepage to http://www.inatech.eu/inadyn/
       - changed default config file from /etc/inadyn.conf to /etc/inadyn-mt/inadyn-mt.conf

Ver.  inadyn-mt 2.12.01 - May 2008
    Changes:
       - safer memory, with program abort on allocation error
       - couple unchecked pointers, checked
       - language strings file default override parameter, --lang_file
       - fixed program version parameter output

Ver.  inadyn-mt 2.11.98 - March, April 2008
    Changes:
       - added network communication --retries parameter, and --retry_interval parameter
       - centralized dns update routine relative to main loop, and RAS events trapping
       - linux, unix DEBUG startup output conditional compile added
       - Windows QUIET debug startup output conditional compile added

Ver.  inadyn-mt 2.11.96 - March 2008
    Changes:
       - cwd/root path search overshoot fixed
       - default Unix locale/lang file fixed
       - some minor refactoring

Ver.  inadyn-mt 2.11.94 - Feb 2008
    Changes:
       - wrong version number reported fixed.
       - minor control flow logic error fixed.

Ver.  inadyn-mt 2.11.93 - Feb 2008
    Changes:
       - bad program root directory fault fixed.

Ver.  inadyn-mt 2.11.92 - Feb 2008
    Changes:
       - linux lang file search seg fault fixed.
       - lang strings hash table key computation fixed.
       - lang, path routines factored to modules.

Ver.  inadyn-mt 2.11.89 - Feb 2008
    New features:
       - tighter memory management, buffer checking.
       - Win Service language strings.

Ver.  inadyn-mt 2.11.88 - Feb 2008
    New features:
       - indexed language strings.

Ver.  inadyn-mt 2.11.87 - Feb 2008
    New features:
       - language strings files support.

Ver.  inadyn-mt 2.11.80 - Jan 2008
    New features:
       - Unicode.

Ver.  inadyn-mt 2.01.02 - Dec 2007
    New features:
       - registry string value for separate service server log file.

Ver.  inadyn-mt 2.01.00 - Nov/Dec 2007
    New features:
       - options file commands/parameters inserted "in place" in command line.
       - built in Windows service management.
       - Windows RAS events (modem connection) trapping.
       - debug level command option.

Ver.  1.96 - 09 September 2005
    New features:
       - zoneedit.com supported.
       - no-ip.com supported.
       - support for generic DNS services that support HTTP updates
   Fixes:
       - immediate exit in case of --iterations=1 (not after a sleep period)
       - added missing option for specifying the path in the DNS server

Ver.  1.95 - 20 July 2005
    New features:
       - UNIX signals supported - inadyn will stop gracefully in case of  ALRM, HUP, INT, ...
       - new dynamic dns service supported - www.zoneedit.com - Not tested!
       - makefile adjusted for Solaris - compilable under Solaris.
       - support for generic DYNDNS service that supports update via HTTP with basic authentication
          - not  yet fully complete. Not known where might be applicable.

Ver. 1.90 - 24 February 2005
    New features/enhancements:
       - new option '--change_persona uid:gid' - inadyn can switch the user after launch. Typical feature for daemons.
       - addition to '--ip_server_name' feature,  now it has another parameter: the URL to read from the given server name.
       -  reduced  some error messages
       - manual pages updated. (thanks to Shaul Karl)
    Bugfixes:
       - typo fixed (--ip_server_name option)

Ver. 1.86 - 30 January 2005
    Updated UNIX man pages for inadyn. Even a page for inadyn.conf! (thanks to Shaul Karl)
    Enhancement: - Inadyn doesn't print anything (e.g. ver. number) anymore when goes to background.
    Enhancement: - new config file parser. Accepts ESCAPE character: '\'.
    Bugfix: - Corrected check of the return code from socket() call.

Ver. 1.85 - 10 January 2005
    Config file related enhancements:
       - a default location for the config file in case of no arguments for inadyn
       - a more **NIX like format for the config file. Thanks to Jerome Benoit.

    Small bugfix:
       - in case when 'iterations' option is specified as being '1', inadyn exits immediately after first update, not after the sleep period as before.

Ver. 1.81 - 23 November 2004
    No new features. Just a better integration with Linux OS:
Reviewed usage of syslog and fork to background in 'daemon mode', thanks to Shaul Karl.

Ver. 1.80  - 16 October 2004
    New feature:
        --syslog: output to syslog for Linux (should work for all **nix systems)
    New feature:
        run in background for Linux (should work for all **nix systems)

    Minor compile warnings removed.

Ver. 1.70  - 5 July 2004
    Bugfix:
        custom dns from dyndns option was not accepted by the cmd line parser. "Copy-paste" error :-( !

    New option: (not tested. It was a debug option now made accessible via cmd line. It should work)
        --iterations. Now one can run inadyn with only one iteration.

Ver. 1.60  - 5 June 2004
    On users' request the inadyn can read the options from file. Ver. 1.5 - 1 May 2004
- Support for dynamic DNS service offered by freedns.afraid.org
- support for http proxy
- GPL Copyright notice added.

Ver. 1.4 - 1 March 2004
- Support for custom DNS and static DNS services offered by dyndns.org.
- support for forced IP update (so the account will not expire even though the IP never changes)

Ver. 1.35 - 04 february, 2004
- Bugfixes: - It supports AGAIN the multiple aliases for the same IP address
- Under Windows the OS signal handler is installed only once no matter if IP update errors occur

Ver. 1.34 - 6 Novemeber 2003
- first port *NIX (Linux)
- Linux version running as console app
- bugfixes

Ver. 1.2 - June 2003
- port to embedded system pSOS. Runs on the Remote management card.
Note:
No DNS support under pSOS -> input params are the IP addresses of the servers used (DynDNS, CGI)

Ver. 1.0 - 20 May 2003 - first stable version.
main features ready:

- DYNDNS client

- free
- works fine behind a NAT router
- runs fine as a service
- has a nice log file
- it is MINE ;)

Future plans:

- port to some other DNS services.