Softpanorama

May the source be with you, but remember the KISS principle ;-)
Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

DNS Troubleshooting

News Recommended Links Recommended Papers Online Tools Solaris DNS Tutorial, part 1/3
MX Records Checking for for Users of Web Hosting Solaris DNS Server Installation and Administration Solaris DNS Client (resolver) DNS Tips Etc

There two rules in managing DNS server:

Before restarting the server of sending -HUP signal to reread configuration files you need to check for two common errors

  1. Check for trailing dots error: Current domain name is automatically appended to the entries in the master data file .This might be correct for a entry like www to be read as www.yourdomain.com but it will be incorrect if www.yourdomain.com entry is read as www.yourdomain.com.yourdomain.com .So to avoid appending domain name a trailing dot is put on such  names .
  2. Check Serial No & Refresh time : Serial no must be incremented after a change is made to zone file of  a master server . The serial no. is checked by the secondary DNS server. If serial nmber of the master is less or eqla to the serial number n the slave no transfered are prefprmed. 
  3. Never ever generated the reverse file by hand. Only idiots do this.

After getting -HUP signal the named daemon will try to read named.conf file and if comes across any error it will abort and come out without starting named. You can try to start the named in debug mode and look the output in the debug file - default is named.run. There are different debug level which can be used depending upon the nature of problem. It is always better to double check the configuration files for syntax etc. to avoid  problems later on.  

nslookup is very important troubleshooting tool & following are some of the most common problems :

docs.sun.com System Administration Guide Naming and Directory Services (DNS, NIS, and LDAP)

This chapter described some common DNS problems and how to solve them.

Clients Can Find Machine by Name but Server Cannot ( DNS clients can find machines by either IP address or by host name, but the server can only find machines by their IP addresses) This is most likely caused by omitting DNS from the hosts line of the server's nsswitch.conf file. For example, a bad hosts line might look like this: hosts: files When using DNS you must include dns in the hosts record of every machine's nsswitch.conf file.

For example:

hosts: dns files

Changes Do Not Take Effect or Are Erratic (You add or delete machines or servers but your changes are not recognized or do not take effect. Or in some instances the changes are recognized and at other times they are not yet in effect).  There are three typical causes for this bahaviour.

  1. The most likely cause is that you forgot to increment the SOA serial number on the master server after you made your change. Since there is no new SOA number, your slave servers do not update their data to match that of the master so they are working with the old, unchanged data files.
  2. Another possible cause is that the SOA serial number in one or more of the master data files was set to a value lower than the corresponding serial number on your slave servers. This could happen, for example, if you deleted a file on the master and then recreated it from scratch using an input file of some sort.
  3. A third possible cause is that you forgot to send a HUP signal to the master server after making changes to the primary's data files.

First, check the SOA serial numbers in the data file that you changed and the corresponding file on the slave server.

DNS Client Cannot Lookup “Short” Names

Reverse Domain Data Not Correctly Transferred to slave

Server Failed and Zone Expired Problems

When a slave server cannot obtain updates from its master, it logs a master unreachable message. If the problem is not corrected, the slave expires the zone and stops answering requests from clients. When that happens, users start seeing server failed messages.

Symptoms

Note that if the problem is with a slave server, some users could still be successfully obtaining DNS information from the master and thus operating without experiencing any difficulty.

Possible causes

The two most likely causes for these problems are network failure and a wrong IP address for the master in the slave's boot file.

Diagnosis and solution


Top Visited
Switchboard
Latest
Past week
Past month

NEWS CONTENTS

Old News ;-)

DNS TroubleShooting

  1. Trailing dots : Current domain name is automatically appended to the entries in the master data file .This might be correct for a entry like www to be read as www.yourdomain.com but it will be incorrect if www.yourdomain.com entry is read as www.yourdomain.com.yourdomain.com .So to avoid appending domain name a trailing dot is put on such names .
  2. Serial No & Refresh time : Serial no must be incremented after a change is made to zone file of a master server . The serial no. is checked by the secondary dns server After refresh time is over and transfer of zone files takes place if serial no is incremented. Refresh time depends on the frequency of changes made to dns servers data and is in seconds.
  3. CNAME A CNAME record is not allowed to coexist with any other data record. The DNS server finds the cname entry & it ignores other entries .In the example below NS entries are ignored .
    dnsserver IN NS ns1
    IN NS ns2
    IN CNAME dnsmain
    dnsmain IN A 10.20.30.40
    correct representation would be :
    dnsserver IN NS ns1
    IN NS ns2
    IN A 10.20.30.40
    dnsmain IN A 10.20.30.40

nslookup is very important troubleshooting tool & following are some of the most common problems :

  1. No Response from Server but ping works: If nslookup gives this response even for the local host name then it is possible that DNS server itself is not running .Check the named process and restart it in debug mode for clues about the problems .
  2. No record available :This indicates that the default records types are not available in the target dns server. A better way would be to look for all type of records by mentioning "set type=any" in nslookup.
  3. No information : nslookup did tried to find a host of the specified name but the name server did not have any information about that in its data files . Check spellings & trailing dots in data files of DNS server.
  4. Unspecified error :This is mainly caused when number of NS records exceeds the capacity of datagram packet so don't put too many NS records for a domain.
  5. Query Refused : This can be caused due to security relatd options in configuration file .Make sure the network of nslookup host is mentioned in allow-transfer statement and also the address 127.0.0.1 if nslookup is being run on name server.

Recommended Links

Softpanorama hot topic of the month

Softpanorama Recommended

Top articles

Sites

DNS Sleuth

Domain Name System (DNS) Configuration, Management and Troubleshooting

Troubleshooting DNS servers

Troubleshooting DNS

dig

Dig has two main uses in troubleshooting DNS. The first is to see if a domain name is having problems. That is, whether or not the domain is on hold or if the authoritative name servers are not answering for the given domain. To see this in action, simply type dig domainname and interpret the results. For example:

[tethys]:[5:18pm]:[/etc/mail] > dig howdydoody.com

; <<>> DiG 8.3 <<>> howdydoody.com
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;;      howdydoody.com, type = A, class = IN
 
;; ANSWER SECTION:
howdydoody.com.         5M IN A         216.74.139.88
 
;; AUTHORITY SECTION:
howdydoody.com.         6H IN NS        ns.ge.com.
howdydoody.com.         6H IN NS        ns2.ge.com.
howdydoody.com.         6H IN NS        mason.ge.com.
 
;; ADDITIONAL SECTION:
ns.ge.com.              6H IN A         192.35.39.24
ns2.ge.com.             6H IN A         192.35.39.25
mason.ge.com.           6H IN A         205.173.93.34
 
;; Total query time: 368 msec
;; FROM: tethys.ringofsaturn.com to SERVER: default -- 127.0.0.1
;; WHEN: Mon Oct  1 17:19:55 2001
;; MSG SIZE  sent: 32  rcvd: 154
 
[tethys]:[5:19pm]:[/etc/mail] >

This domain has a status of NOERROR, which means that the domain is not on hold and that the authoritative name servers answered correctly. Below is a table showing the different types of statuses that you could receive.

Status Meaning
NOERROR A NOERROR indicates that the domain does exist according to the root name servers and that the authoritative name servers are answering queries correctly for that domain.
SERVFAIL SERVFAIL means that the domain does exist and the root name servers have information on this domain, but that the authoritative name servers are not answering queries for this domain.
NXDOMAIN NXDOMAIN can means that the root name servers are not providing any authoritative name servers for this domain. This can be because the domain does not exist or that the domain is on-hold. Make sure that you use whois when you see an NXDOMAIN.

dig is also useful for finding all of the resource records for a given domain. To do this, you must know the name or IP of one of the authoritative name servers. Here is an example.

[tethys]:[5:28pm]:[/etc/mail] > dig @209.39.6.4 training.verio.net axfr

; <<>> DiG 8.3 <<>> @209.39.6.4 training.verio.net axfr
; (1 server found)
$ORIGIN training.verio.net.
@                       6H IN SOA       ns rnejdl.verio.net. (
                                        2001091101      ; serial
                                        3H              ; refresh
                                        1H              ; retry
                                        1W              ; expiry
                                        6H )            ; minimum

                        6H IN NS        ns
                        6H IN NS        ns2
                        6H IN NS        ns1.verio.net.
                        6H IN A         209.39.6.4
                        6H IN MX        10 onyx
                        6H IN MX        20 backupmx1.veriomail.com.
                        6H IN MX        20 backupmx2.veriomail.com.
dhcp-253                6H IN A         209.39.6.253
...

This pulls a copy of the entire zone file for the domain and outputs it to your screen. The above example, due to its large size, has been truncated. This is very useful when you want to see why a certain host will not resolve while the domain itself does work properly. Using this command, you can see if there was a typo in a hostname or the adminstrator forgot a trailing dot when entering the resource record.

Dig Exercises

For these exercises, you will either need to open a command prompt to shell.training.verio.net or open the Online DIG Tool on the training site. Once you have that open, do the following exercises.

  1. Do a dig on forever.com.
    What is the status of this domain?
    How many name servers does this domain have and what are they?

  2. Do a dig on blahblah123.com.
    What is the status of this domain?
    Is this domain registered? Use whois to find out.
  3. How would you do a dig for reverse DNS? Do a dig for 6.39.209.in-addr.arpa to find out.
    What does the 6.39.209.in-addr.arpa mean?

nslookup

The cornerstone of DNS troubleshooting is by far the nslookup command. This tool allows you to lookup any type of DNS record from any server for any domain. The most basic usage is to use the command line, non-interactive version. For example, to lookup the IP for www.verio.com, do the following:

[tethys]:[5:29pm]:[/etc/mail] > nslookup www.verio.com
Server:  localhost.ringofsaturn.com
Address:  127.0.0.1
 
Non-authoritative answer:
Name:    www.verio.com
Address:  204.0.52.20
 
[tethys]:[6:01pm]:[/etc/mail] >

You can also specific the query type on the command line. For example, supposed you wanted to the what the mail servers are for msn.com:

[tethys]:[6:01pm]:[/etc/mail] > nslookup -q=mx msn.com
Server:  localhost.ringofsaturn.com
Address:  127.0.0.1
 
Non-authoritative answer:
msn.com preference = 20, mail exchanger = smtp-gw-4.msn.com
 
Authoritative answers can be found from:
msn.com nameserver = DNS1.CP.MSFT.NET
msn.com nameserver = DNS1.TK.MSFT.NET
msn.com nameserver = DNS3.UK.MSFT.NET
msn.com nameserver = DNS3.JP.MSFT.NET
msn.com nameserver = DNS1.DC.MSFT.NET
msn.com nameserver = DNS1.SJ.MSFT.NET
smtp-gw-4.msn.com       internet address = 207.46.181.13
DNS1.CP.MSFT.NET        internet address = 207.46.138.20
DNS1.TK.MSFT.NET        internet address = 207.46.232.37
DNS3.UK.MSFT.NET        internet address = 213.199.144.151
DNS3.JP.MSFT.NET        internet address = 207.46.72.123
DNS1.DC.MSFT.NET        internet address = 207.68.128.151
DNS1.SJ.MSFT.NET        internet address = 207.46.97.11
[tethys]:[6:02pm]:[/etc/mail] >

According to the output, msn.com has only one SMTP server, which is smtp-gw-4.msn.com.

Interactive mode nslookup allows you to do all of the queries you can do on the command line and more. To get into interactive mode, simply type nslookup and hit enter.

Once in this mode, you can simply type in a hostname to lookup the IP for that host, or type in an IP to lookup to the hostname for that IP. For example:

[tethys]:[6:07pm]:[/etc/mail] > nslookup
Default Server:  localhost.ringofsaturn.com
Address:  127.0.0.1
 
> www.amazon.com
Server:  localhost.ringofsaturn.com
Address:  127.0.0.1
 
Non-authoritative answer:
Name:    www.amazon.com
Address:  207.171.181.16
 
> 207.171.181.16
Server:  localhost.ringofsaturn.com
Address:  127.0.0.1
 
Name:    www.amazon.com
Address:  207.171.181.16
 
>

More interesting things you can do include changing the query type and using the debug feature. In this next example, I will check the MX records for a domain and will use the debug feature to see the query as it is happening.

[tethys]:[6:10pm]:[/etc/mail] > nslookup
Default Server:  localhost.ringofsaturn.com
Address:  127.0.0.1

> set type=mx
> set debug
> shoutcast.com
Server:  localhost.ringofsaturn.com
Address:  127.0.0.1

;; res_nmkquery(QUERY, shoutcast.com, IN, MX)
------------
Got answer:
    HEADER:
        opcode = QUERY, id = 40638, rcode = NOERROR
        header flags:  response, auth. answer, want recursion, recursion avail.
        questions = 1,  answers = 1,  authority records = 2,  additional = 3

    QUESTIONS:
        shoutcast.com, type = MX, class = IN
    ANSWERS:
    ->  shoutcast.com
        preference = 10, mail exchanger = mail.winamp.com
        ttl = 3600 (1H)
    AUTHORITY RECORDS:
    ->  shoutcast.com
        nameserver = dns-01.spinner.net
        ttl = 3600 (1H)
    ->  shoutcast.com
        nameserver = dns-02.spinner.net
        ttl = 3600 (1H)
    ADDITIONAL RECORDS:
    ->  mail.winamp.com
        internet address = 64.236.148.85
        ttl = 3600 (1H)
    ->  dns-01.spinner.net
        internet address = 152.163.159.239
        ttl = 3600 (1H)
    ->  dns-02.spinner.net
        internet address = 205.188.157.239
        ttl = 3600 (1H)
 
------------
shoutcast.com
        preference = 10, mail exchanger = mail.winamp.com
        ttl = 3600 (1H)
shoutcast.com
        nameserver = dns-01.spinner.net
        ttl = 3600 (1H)
shoutcast.com
        nameserver = dns-02.spinner.net
        ttl = 3600 (1H)
mail.winamp.com
        internet address = 64.236.148.85
        ttl = 3600 (1H)
dns-01.spinner.net
        internet address = 152.163.159.239
        ttl = 3600 (1H)
dns-02.spinner.net
        internet address = 205.188.157.239
        ttl = 3600 (1H)
>

The first line started the interactive nslookup session. The next line defines what name server we're using presently, which in this case is localhost, which has an IP address of 127.0.0.1, the loopback IP. Next, we set the query type to be MX, or Mail Exchanger, to see the mail servers. We then enable debug, which will show us the details of what name server was contacted and such. Finally, we input shoutcast.com for the domain and press enter. We are then presented with detailed information on the MX records and the addresses and TTL's (Time to Live) for each smtp host.

To see a full list of the interactive commands, simply type the ? at an interactive nslookup prompt and press enter.

> ?
$Id: nslookup.help,v 8.5 2000/03/30 23:25:35 vixie Exp $

Commands:       (identifiers are shown in uppercase, [] means optional)
NAME            - print info about the host/domain NAME using default server
NAME1 NAME2     - as above, but use NAME2 as server
help or ?       - print info on common commands; see nslookup(1) for details
set OPTION      - set an option
    all         - print options, current server and host
    [no]debug   - print debugging information
    [no]d2      - print exhaustive debugging information
    [no]defname - append domain name to each query
    [no]recurse - ask for recursive answer to query
    [no]vc      - always use a virtual circuit
    domain=NAME - set default domain name to NAME
    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
    root=NAME   - set root server to NAME
    retry=X     - set number of retries to X
    timeout=X   - set initial time-out interval to X seconds
    querytype=X - set query type, e.g., A,ANY,CNAME,HINFO,MX,PX,NS,PTR,SOA,TXT,WKS,SRV,NAPTR
    port=X      - set port number to send query on
    type=X      - synonym for querytype
    class=X     - set query class to one of IN (Internet), CHAOS, HESIOD or ANY
server NAME     - set default server to NAME, using current default server
lserver NAME    - set default server to NAME, using initial server
finger [USER]   - finger the optional USER at the current default host
root            - set current default server to the root
ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)
    -a          -  list canonical names and aliases
    -h          -  list HINFO (CPU type and operating system)
    -s          -  list well-known services
    -d          -  list all records
    -t TYPE     -  list records of the given type (e.g., A,CNAME,MX, etc.)
exit            - exit the program, ^D also exits
>

One interesting query listed here is the ls -d option, which allows you to list all records for a domain, if the name server supports this type of query. For example

> ls -d training.verio.net
[localhost.ringofsaturn.com]
*** Can't list domain training.verio.net: Unspecified error
>

The reason that this one did not work is because the name server queried was localhost, which is not authoritative for the domain. However, if I switch to the proper name server and run the command again, I will see the following:

> server 209.39.6.4
Default Server:  www.training.verio.net
Address:  209.39.6.4

> ls -d training.verio.net
[www.training.verio.net]
$ORIGIN training.verio.net.
@                       6H IN SOA       ns rnejdl.verio.net. (
                                        2001091101      ; serial
                                        3H              ; refresh
                                        1H              ; retry
                                        1W              ; expiry
                                        6H )            ; minimum

                        6H IN NS        ns
                        6H IN NS        ns2
                        6H IN NS        ns1.verio.net.
                        6H IN A         209.39.6.4
                        6H IN MX        10 onyx
                        6H IN MX        20 backupmx1.veriomail.com.
                        6H IN MX        20 backupmx2.veriomail.com.
...

As you can see here, the output of this command is almost identical to that of the dig axfrcommand because they both use the same DNS functionality to produce the results. Either command works to do this so it is simply a matter of personal preference on which you use.

nslookup Exercises

For these exercises, you will either need to open a command prompt to shell.training.verio.net or open the Online NSLOOKUP Tool on the training site. Once you have that open, do the following exercises.

  1. Lookup the IP of a hostname.
  2. Lookup the name servers for a domain.
  3. Lookup the mail servers for a domain.
  4. Lookup the name given to an IP address.
  5. Lookup the all records for a domain.

Take the Quiz

If you have read through this document and taken the time to go through the exercises, then you should have no problems passing the quiz that helps you see how much you have learned.

Take the Whois, Dig, and Nslookup Quiz.



Etc

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least


Copyright © 1996-2016 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: September, 12, 2017