--- /dev/null
+I have accounts on a number of systems where the sysadmin doesn't
+maintain a comprehensive `/etc/hosts` file. In order to work around
+this, I wanted to have a per-user `~/.hosts` to extend the system file
+with my own aliases. Then I could use my short nicknames for network
+activity without spelling out the whole domain name (the `domain`
+setting in `/etc/resolv.conf` is often not close enough for the
+nicknames to work using [[DNS]]).
+
+A common technique for translating host names into IP addresses is to
+use either `getaddrinfo(3)` or the obsolete `gethostbyname(3)`. As
+mentioned in `hostname(7)`, you can set the `HOSTALIASES` environment
+variable to point to an alias file, and you've got per-user aliases!
+
+Well, mostly…
+
+`HOSTALIASES` will work if your program (`ping`, `ssh`, etc.)
+satisfies two conditions:
+
+1. It has to actually use one of the two functions listed above to
+ resolve the host name. I haven't run across anything that doesn't,
+ but you never know.
+2. It cannot be setuid to another user. If it is, [libc sanitizes the
+ environment][sanitize], so your `HOSTALIASES` setting is lost. See
+ `sysdeps/generic/unsecvars.h` for a list of all environment
+ variables that glibc removes for setuid programs.
+
+`ping` is setuid `root` (because it needs to listen for ICMP packets),
+so `HOSTALIASES` will not work with `ping` unless you're already
+`root` before you call `ping`.
+
+Here's an example:
+
+ $ echo 'g www.google.com' >> ~/.hosts
+ $ export HOSTALIASES=~/.hosts
+ $ firefox g
+
+Adjust your `~/.bashrc` appropriately, and you can forget about
+`/etc/hosts` entirely :).
+
+[sanitize]: http://en.wikipedia.org/wiki/Environment_variable#Security