Monday, December 31, 2007
Welcome to 2008!
Welcome to 2008 everyone! One of my resolutions is MaraDNS 2.0, which will not allow the same IP to be both authoritative and recursive, and that will have a completely rewritten recursive resolver.
- Sam
Tuesday, December 25, 2007
My Christmas gift
I haven't uploaded it to Sourceforge yet, but it can be downloaded at the official web site.
I will support 1.2 until the end of 2010. Unlike 1.0, there will not be a "security fixes only" period of support. Both security and other critical bugs will be fixed for three more years. 1.0 is now only available as an indirect link from the download page and is only supported for critical security fixes.
I hope to answer the support email piling up in the next few days. The holidays are pretty hectic, however, so I can't guarantee anything.
- Sam
Merry Christmas everyone
- Sam
Tuesday, December 18, 2007
Quick MaraDNS support update
Thank you, everyone, for your patience, and for your interest in MaraDNS and my other geek projects.
- Sam
Monday, December 17, 2007
MaraDNS snapshot update
No longer.
When the upstream DNS server doesn't respond, instead of just dropping the packet on the floor, Deadwood 2 now tries harder to give the client something they can use.
First, Deadwood tries contacting a DNS server again. Should the DNS server not reply again, then Deadwood starts trying extreme measures. Maybe there is an expired copy of the record in question in the cache; if so, we give that record to the end user. If not, then, as a last resort, we give the client a SERVER FAIL response so they know something is up.
All of this can be adjusted by dwood2rc parameters, which are documented.
It can be downloaded, as always, here.
- Sam
Friday, December 14, 2007
MaraDNS 1.2.12.09 release; snapshot update
I have also uploaded an updated snapshot for the development version of MaraDNS, available here
Wednesday, December 12, 2007
MaraDNS snapshot update
- Sam
Monday, December 10, 2007
MaraDNS snapshot update; Sarton's MaraDNS release
In addition, Sarton has made his own 1.3 release of MaraDNS, which is available here.
- Sam
Friday, December 7, 2007
Snapshot update: Deadwood-2 now has a working cache
Deadwood-2 is now a fully functional caching non-recursive DNS server. There's a lot of work still to be done, but we now have caching. Look at the code (and the TODO) in today's snapshot of MaraDNS.
In addition, Jean-Jacques Sarton has contributed a couple of bug fixes to some of the SQA tests.
The snapshot can be downloaded here.
- Sam
Monday, December 3, 2007
New MaraDNS snapshot; ObHack update
It can be downloaded here
I have also updated ObHack, adding two new features: You can now choose how inddors or outdoors the randomly generated map is, and you can choose to have an inital weapon (this is mainly for balancing mini deathmatch maps).
Monday, November 26, 2007
MaraDNS 1.3.10 and 1.3.07.07 released
- Sam
Friday, November 23, 2007
Adding support for reading and writing the cache to disk
The string object has a very simple format in the file: A 32-bit big-endian length value, which must be a positive signed number (negative signed numbers mean the string has a length of 0), followed by the binary string. The timestamp is a representation of the 64-bit timestamp used by Deadwood, whose epoch is when the episode "Gambit" of the Blake's 7 television programme was first broadcast. Each second has 256 "ticks".
I have also fixed a bug in the hash used by the cache (it took me a couple of hours of fiddling around with Deadwood to find and get rid of it).
I'm also playing around with Doom Builder, an open-source Windows-only (Why doesn't Linux have a decent Pascal compiler?) program for editing maps. It's very easy to learn and use; I'm using it to make changes to a 9-map megawad generated by Oblige (for Heretic) in to one suitable for single player, deathmatch, and coop play.
I'm having a lot of fun with it; I just wish I had some buddies down here in Mexico to deathmatch with.
- Sam
Monday, November 19, 2007
Deadwood-2 hash core finished; ObHack update
The one feature I want to add to the core hash first, however, is the ability to write the cache to a file, and read the cache from a file.
The updated snapshot can be downloaded here
I also have an update to ObHack, fixing some critical bugs, and adding one "feature":
- Critical fix: Door statues are now less likely to make it impossible to finish a level w/o the "noclip" (OK, "kitty") cheat code.
- Critical fix: Being unable to find a door fab no longer causes ObHack to crash and burn (we just try with a different level)
- Critical fix: Now there's a high recursion depth limit when retrying to plan a level; this way, the program does not freeze in an infinite loop if it's impossible to find a plan that meets the requirements.
- Critical fix: An assert when making small deathmatch maps sometimes failed. Fixed; assert removed.
- Feature added: Heretic "full game" megawads now make E6M1-3, with E6M3 not having an exit (neither in single player nor deathmatch)
Friday, November 16, 2007
MaraDNS, ObHack, and font updates
My MaraDNS update has one change to the mainline code: l.root-servers.net IP has been updated. I am also working on the hash-generation code again for the "Deadwood-2" code, which will become a simple non-recursive caching DNS server. This is available here.
ObHack, my hacks to the excellent OBLIGE Doom random map generator, has a very minor update: Single player maps now have deathmatch starts. I added this feature since the small levels are small enough to be playable as 1-on-1 deathmatch maps with Heretic, and as 3-way or 4-way Doom/Doom2 deathmatch maps (all of those Doom fabs give players more little hidey holes). Also, Heretic (but only Heretic, alas) single player maps now have a couple of coop starts. In addition, I now have a Linux tarball, in addition to the Windows zipfile and a source tarball.
ObHack 002a (I'm not giving this a new number since the maps are identical to 002 maps, with only deathmatch and coop starts added) is available as a Windows zipfile here, as a Linux binary tarball here, and as a source code tarball here. An example megawad for Heretic is available here
I have made a minor update to my "Sandals" font, an attempt to make a readable screen font. This font can be downloaded here. I also have a version of this font that includes the bitmap version of a famous font made by a major software company here (I'm using an American server owned by an American since, while American law clearly states you can't copyright the bitmap version of a font, European laws are not clear on this matter).
- Sam
Thursday, November 15, 2007
ObHack update
- There was a bug that would sometimes stop megawads of small episodes being created. Fixed.
- It was possible to have only one exit (either the secret exit or an exit going to the non-secret level) on a small map. Fixed; any map that should has a secret exit will now always have both a normal and secret exit
- In Heretic, at "Smite-Meister" (Heretic's name for "Ultra-Violence") diffculty, it is sometimes nay to impossible to get through the legion of golems and gargoyles to get at the cross bow. Workaround: There is now, at this difficulty level, always the gauntlets and the Chaos device at the beginning of the level; this makes it easier for the player to rush to the crossbow without unbalancing things too much
- Random numbers generated tweaked to make completely different maps than yesterday's ObHack release
Wednesday, November 14, 2007
My hacks to Oblige (a new Doom random map generator)
Just this Monday, I disocovered a new (for 2007) Doom random map generator called OBLIGE (alternate link). I feel this map generator is a good deal more advanced than SLIGE and SLUMP. Unlike SLIGE/SLUMP, it supports:
- Real outdoor areas
- Balconies
- More detailed rooms
- No "null" quests: If you go somewhere and fight monsters, you will get some prize for your bother (such as a good weapon or a power-up)
- Heretic and Hexen support, in addition to real FreeDoom and Plutonia/Evilution support
- Real deathmatch and coop support
- A GUI interface
Unlike SLIGE, which codes everything in C, OBLIGE uses a scripting language called Lua for the map building core. The code is larger than SLIGE--my Windows zipfile of SLUMP, complete with node-builder is only 100k in size; OBLIGE is about six times larger. It's also slower; I can make a 32-level small megawad in SLUMP/SLIGE (complete with the nodes being built with BSP) in about a second; a megawad with the same size takes between 30 seconds and a minute to make in OBLIGE.
The nice thing about the Lua core is that it is far easier to customize the map generator. Indeed, I have done exactly that, and have made the following updates to OBLIGE:
- Smaller levels, especially when making deathmatch maps and when selecting a "small" level size.
- Allowing smaller levels caused some bugs to pop up, which I have addressed.
- It is now possible to finish an episode in Doom 1 or Heretic; E#M8 is now a normal level with a normal exit (no boss arenas though)
- Heretic fixes: No more doors that you can't open; you can now go to the secret level
- Build fix: If a level is unable to place a staircase, instead of crashing and burning, the generator will discard the level and try again.
Some MaraDNS support issues: An automatically generated Debian bug saying it's hard to automate getting a new version of MaraDNS; one of the root servers has changed. Now that I've had fun making my ObHack fork of OBLIGE, I will work on these this afternoon.
Monday, November 12, 2007
MaraDNS snapshot update: Another bug fixed
- Jan Hrdonka reported another bug which I had to find and fix (details below)
- I was working on a new version of my tiny live CD distribution of Linux (Firefox had to be updated, etc.)
- I spent some time with my girlfriend this weekend
The reason for the bug is this: The CSV2 parser doesn't actually add the SOA record to memory until after all of the NS records, since the SOA record needs the NS records. The code adds the SOA records before adding the first non-NS entry. I forgot to add the SOA record after reading all of the zone in the case of having a zone with no records except SOA and NS records. I have added code to do this.
Since this is not a critical fix (there's a workaround for 1.2 users), this bug will not be fixed in MaraDNS 1.2
Friday, November 9, 2007
Deadwood and 64-bit systems; a highly scalable load balancer
Most of the code can be pretty easily scaled up; use a 64-bit int instead of a 32-bit int for various constants. The random number generator, Radio Gatun, has both a 64-bit and 32-bit version.
The one bit of code that can't easily scale up quickly is the code that generates the 31-bit primes. I use a simple trial division that doesn't scale up. This code will have to be rewritten to use something fancier; Chris Caldwell has a lot of really good pages about how to quickly find a big prime. Using this method, along with this should be able to find a number that is almost certainly a 63-bit (18-digit) prime without being too much slower than finding a 31-bit prime.
It is possible to make a DNS load balancer that can handle far more than 3,500 queries a second. The bottleneck with Deadwood-1 is how I use TCP/IP (or, should I say, UDP/IP). The trick is to have both the load balancer and the upstream DNS servers have public and private IPs. The load balancer would get its query on a public IP, and send it over a private IP to the upstream DNS server. There will be a firewall in front of the load balancer that rejects all packets with private IPs coming in from outside.
For each upstream load balancer, there can be about 64000 connections at the same time. Given 10 upstream load balancers, thats 640000 connections a second. That's, with a seven second timeout, over 90000 DNS queries a second.
However, I'm not going to develop this code. Instead, I'm going to work on the caching DNS server. My plate is already full.
- Sam
Thursday, November 8, 2007
Deadwood-1 updated; MaraDNS snapshot update
These changes are documented in a HANDLING.HIGH.LOAD document.
I have also made some revisions to the design of the hash in Deadwood-2, and have started writing code to store and retrieve entries from an array based on the hash value of dw_str objects.
- Sam
Wednesday, November 7, 2007
Deadwood-1 bugfix
I have also made a package with just Deadwood-1 called "Deadwood-1.00"; this package will be updated when (and if) I find and correct other bugs in Deadwood-1.
Both can be downloaded here
- Sam
Tuesday, November 6, 2007
Deadwood-2 started ; Qmail may soon become public domain
The has compression algorithm is a simple XOR with the data to hash, followed by a 32-bit multiply and a circular rotate (since mod 2^32 multiplies have problems with repeating patterns in the lower bits); the last data we XOR against is the length of the message. To make things reasonably secure, I am making the 32-bit number one multiplies by be a relatively secret 31-bit prime number; I have written a small program that finds a random 31-bit prime number, and makes a header file that determines Deadwood's default multiplication constant for making a hash out of a string. The script that creates the MaraDNS tarball automatically runs this program to change the random number.
In addition, the code will allow the user to reset this number to some other number, and the documentation will encourage the user to do so (telling them how to use RandomPrime to see a random 31-bit prime number).
The file can be downloaded here
I have some very good news: It looks like DJB is going to make Qmail public domain. I hope DJB soon does the same thing for DjbDNS; my main issue with DjbDNS, besides the hyperbolic claims like "DjbDNS has no security holes" (it does), is its license. I will retract my rant against DjbDNS when and if the DjbDNS code becomes public domain.
Thanks a lot for the birthday present, DJB! :)
- Sam
Monday, November 5, 2007
MaraDNS snapshot update
- I did not close the socket for binding to a local IP if bind() or accept() failed
- I did not close the dwood1rc file handle after parsing the dwood1rc file
- I did not close the random seed file after getting entropy from this file
Note that none of these problems caused a leak; in all three cases, it was simply a case of a resource (a file or socket) being opened once and then never closed.
I will update the coding style to make sure these kinds of problems don't pop up again.
- Sam
Sunday, November 4, 2007
Deadwood-1 is now finsihed
Deadwood-1: An IPv6-capable cross-platform TCP and UDP DNS load balancer.
The target for this was the end of October, and it was finished around the beginning of November.
Deadwood-2: A DNS forwarding cache. Target date: Before the end of 2007.
Deadwood-3: A full DNS recursive resolver. Target date: Mid-2008
And, in more detail, my plans for Deadwood-2:
Deadwood-2 will be a forwarding cache. This means that deadwood-2 will look for an answer in the cache, and, if there isn't an answer in the cache, it will contact a recursive DNS server and cache the reply it gets. The cache will have the following features:
- A custodian that deletes an unused cache entry if the cache is full. (MaraDNS' current cache has this)
- The ability to get an expired record from the cache if it is not possible to contact any upstream recursive servers.
- The ability to write the cache to disk, and read the cache from disk.
Thursday, November 1, 2007
Deadwood now works in Windows
At this point, I had a working testing setup. I finally was able to debug the code, and found out that the reason TCP wasn't working in Windows is because you have to send() instead of write() on a TCP socket.
Once I fixed the code, I updated the documentation and coding style document to document the macros I use to make the same socket code work both in Windows and *NIX, so other people writing socket code will also write cross-platform socket code.
Anyway, the updated Deadwood source code that works in Windows can be downloaded here.
- Sam
Wednesday, October 31, 2007
MaraDNS Halloween snapshot
Windows sockets are somewhat different from *NIX sockets; I have been reading the Winsock Programmer's FAQ and have downloaded Visual Studio C++ express with all of the MSDN documentation, which will hopefully give me the Windows version of things like "man 2 select".
Some of the *NIX code looks different since I'm making Deadwood portable. There is not a fcntl() visible in the main code; instead I have a macro, make_socket_nonblock() which does the right thing in both *NIX and Windows. There are some other changes: Sockets are not ints, but SOCKETs in Windows; you don't close() a socket, but closesocket() it. An error for sockets is INVALID_SOCKET. There's no inet_aton(), much less inet_pton(), so I just wrote a wrapper for inet_addr() that acts like inet_pton(). The socket code now looks like a strange mixture of Windows and *NIX socket code, with #defines in DwSocket.h making the Windows code look like *NIX code, and making the *NIX code look like Windows code.
My current project is to fix the TCP code in Windows.
As an aside, XP service pack 2 only has one loopback IP address, but Microsoft has a hotfix that fixes this issue; I needed to do this so I can test MaraDNS when offline.
You know, it's a mystery to me why IPV6, out of its 340282366920938463463374607431768211456 possible IPs, only allocates one for loopback. I mean, they could have allocated 16 IPV6 IPs for loopback; I'm sure 340282366920938463463374607431768211440 IPs is enough for non-loopback use.
Anyway, the latest snapshot can be downloaded here.
- Sam
Monday, October 29, 2007
MaraDNS snapshot update: Deadwood now has TCP support
What DwTcp does is quite simple: It listens on a user-settable port (53, or DNS, by default). When a client connects to it, DwTcp connects to the upstream TCP server on a user-settable port (again, 53 by default) and any data the client sends over TCP is sent, unchanged, to the upstream server, and any data upstream sends over TCP is sent, unchanged, back to the client.
DwTcp is currently not DNS-specific. It could be used as a HTTP or even SMTP load balancer. The main problem with DwTcp is, when used as a load balancer, is that the servers behind DwTcp will not be able to determine the IP connections come from--they will see the DwTcp server's IP, and DwTcp does not log connections.
My plan is to integrate the TCP code back in to DwMain, making DwMain both a TCP and UDP DNS load balancer. I have written the DwTcp code in a manner that should not make this too difficult to do.
I also plan on making the TCP code do some useful DNS-specific things. One useful feature, for example, would be to look at the incoming TCP packet. If the request is not an AXFR or IXFR request, send the question over UDP and, if the UDP reply is not truncated, convert the UDP reply back in to a TCP reply. If the packet is truncated, try again over TCP.
However, other things are more important. I am currently working on Winsock support and getting the code to run as a native Windows binary with MinGW32. Both the UDP and TCP code compile in Windows, but the socket() call fails in the TCP code. Since I didn't have Winsock documentation at home, I couldn't resolve the issue.
After finishing that, I want to add ip-based ACL support which will allow the load balancers to restrict the range of IP addresses that can connect to the load balancer.
Thursday, October 25, 2007
MaraDNS snapshot update
export FLAGS='-Os -DIPV6'
make
The IPV6 support adds, in DeLi Linux 0.7.2, 356 bytes to the code when disabled, and 708 bytes to the code when enabled. The binary is now 14,448 bytes in size when compiled in DeLi 0.7.2 with the '-Os' flag, IPv6 disabled, and the binary stripped. With IPv6 enabled, the binary is 14,800 bytes in size. Of course, keep in mind that uClibc is also bigger when it has IPv6 support.
In addition, it would seem that, somewhere in the 1.2 development cycle, I broke the echoing of the RD ("Recursion Desired") bit in the DNS header. This has been restored. Also, looking at that code, I realized it wasn't thread-safe, so I made the code thread safe. Also, it would seme that not only do some brain-dead embedded DNS programs check the RD bit in the DNS header, they also check the RA ("Recursion Available") bit (neither bit should be looked at whem getting a DNS reply, but oh well). So, I've hacked things so MaraDNS replies with a packet with the RA bit off if sending an authoritative reply, and the RA on if sending a recrusive reply. Not 100% ananally RFC-compliant, but should fix the problems seen with braindead DNS programs.
And yes, the RD and RA fixes have been backported to the 1.2 branch, and should be a part of the next 1.2 release (mid-December, barring a critical security problem).
The MaraDNS snapshot can be downloaded here
Monday, October 22, 2007
MaraDNS snapshot update
This time, I am using a new stream cipher/cryptographic hash algorithm called "Radio Gatun". Radio Gatun is a new and novel cryptographic primitive: It's a cryptographic hash that can take an input of any length, and generates, from that input, a hash of any desired length. It's also (if not officially) a stream cipher that can take a key of any desired length.
Radio Gatun is a derivative of a late 1990s stream cipher/hash construction called PANAMA. PANAMA's cryptographic hash creation was broken, but it's (as far as we know) still as secure stream cipher. Radio Gatun is not as fast as PANAMA, but appears (so far) to be both a secure cryptographic hash and a secure stream cipher primitive.
Radio Gatun, in theory, can use words of any length from one bit to 64 bits. In practice, test vectors only exist for the 32-bit and the 64-bit versions of Radio Gatun. The Deadwood code is using the 32-bit version of Radio Gatun, but this can be fairly easily changed to use the 64-bit (or, if one wants, the 16-bit or even 8-bit) version by changing two defines in DwRadioGatun.h, and rewriting the dwr_rng() function.
Radio Gatun is a good deal more compact than AES; the entire library fits in under 2k (2048 bytes) when compiled with -Os; compare this with the 12k or so the AES-derived library uses.
I have also created a basic SQA test, and fixed some bugs. There was a minor bug in the FSM definition that made it so dwood1rc parameters could not have numbers in them, making ipv4_bind_addresses not work; this has been fixed. Another bug is that I did not use the socket bound on port 53 to forward the remote reply back to the local user; this made Dig unhappy, since Dig checks the port number of the reply.
In addition, I have added "DwMain -f dwood1rc" style argument parsing.
Oh, oh, there's some under the hood changes. DwMain.c is now a very small file; DwSocket.c has all of the functions that use socket-specific code (and no functions that don't use socket code) and DwSys.c has the rest of the functions. This way, adding DNS-over-TCP, ipv6, and WinSock support only requires changing the DwSocket.c file.
The DwMain binary, when compiled in DeLi Linux 0.7.2 with the -Os flag and stripped, is currently 14,092 bytes in size.
Friday, October 19, 2007
MaraDNS 1.3.07.06 and 1.3.09 release
I also have made a tiny version of the Radio Gatún hash function available under the same license terms as MaraDNS (BSD w/o advertising clause), which is available here.
- Sam
Thursday, October 18, 2007
MaraDNS update; Ubuntu rant
If you look in the directory deadwood-1 off of the Snapshot's directory, you will observe a number of files. This is a working (if very basic) DNS load balancer. Basically, use "make" to compile the code, and then edit the dwood1rc file to configure the load balancer. The dwood1rc file uses the same general format as a mararc file, but only supports the following three parameters:
- bind_address This is the IP address we bind to
- chroot_dir This is the directory the program will run from
- upstream_servers["."] this is a list of DNS servers that the load balancer will try to contact
The load balancer can only handle 32 pending replies from the upstream server before it will no longer process incoming replies. When the server is overload, it currently silently drops packets.
No attempt is made to randomize the query ID nor the source port of the query when forwarding the query.
Only ipv4 is supported; there is no ipv6 support. Only DNS-over-UDP is support; DNS-over-TCP is not supported.
I plan on, before moving on to implement caching, to add support for randomized query IDs and source ports, to add user-configurable maximum wait time and maximum allowed number of pending queries, to have the server send "server fail" DNS messages if the load balancer is overloaded, and supporting DNS-over-TCP.
In the meantime, people may want to look at the Deadwood code and give me suggestions on how I can improve this code. As always, the snapshot can be downloaded here
It would seem that Ubuntu does not come with a firewall by default. Ugh. I'm really disappointed that, not only does Ubuntu install a bunch of services that bind to ports, but they don't bother to install a firewall to protect the system. This is really insecure. What I have done is go in to /etc/rc2.d and turn off all of the services that bind to ports. I have also downloaded an article on installing a firewall in Ubuntu, and am working on getting a firewall going.
In the 1990s, RedHat had a lot of security problems. They finally woke up and RedHat and Fedora now come with a firewall when you install the OS. Ubuntu needs to learn from RedHat's lesson.
Wednesday, October 17, 2007
MaraDNS snapshot update
Tuesday, October 16, 2007
Note: MaraDNS 1.3.07 will not include RPMs
Instead, I will have a script update the .spec file with every release of MaraDNS, and rpm users can build their own .rpm files thusly:
- Copy the file build/maradns-version.spec to the directory /usr/src/redhat/SPECS.
- Copy the maradns-version.tar.bz2 file to /usr/src/redhat/SOURCES
- Become root and enter the /usr/src/redhat/SPECS
- As root, do this command: rpmbuild -ba maradns-version.spec.
- You should now have .rpm files in /usr/src/redhat/SRPMS/ and /usr/src/redhat/RPMS/i386 (or whatever)
Monday, October 15, 2007
MaraDNS snapshot update
- askmara can now send packets over ipv6 if MaraDNS is compiled as an authoritative-only DNS server (Thanks, Mr. Sarton)
- A script now automatically updates the .rpm spec file
- I have made a lot of progress with the code that will become the new recursive code. We will hopefully have a working load-balancing DNS server with the new recursive code by Friday.
Friday, October 12, 2007
MaraDNS snapshot update: ipv6 works again
- I broke ipv6 in the last snapshot release when I changed MaraDNS to compile with no warnings when compiled as an authoritative-only server. Fortunatly, my regressions very quickly caught this bug, and I made the one-line fix to get ipv6 to work again.
- Mr. Sarton has added ipv6 support to the askmara-tcp tool (He's actually added a lot of ipv6 support, which I'm slowly making part of the post 1.3.07 code as I get time to evaluate his patches).
- I have added some tests to make sure we can use DNS-over-TCP to send packets over 512 bytes in length (not a big real-world issue, since MaraDNS has full RFC2181 DNS truncation support)
- Some slight updates to the documentation included with the deadwood code
I hope to have time Sunday to update Deadwood some more, and release another snapshot Monday.
- Sam
Thursday, October 11, 2007
MaraDNS support email works again
I won't have an update to the MaraDNS code today; I have been too busy with real life to work on MaraDNS for the last couple of days. I may have a minor update for Friday; we'll see.
I should have time Sunday to work on MaraDNS again.
- Sam
Tuesday, October 9, 2007
MaraDNS snapshot update
- I created a finite state machine tokenizer that can convert a FSM definition in to easy-to-parse tokens.
- I greated a FSM definition that can parse mararc files.
- I created a parser to parse the tokenized mararc FSM definition.
- I wrote a wrapper for the FSM parser to parse mararc files and store the parameters in memory for access by other parts of the Deadwood project.
- I added some capabilities to the DwString library so it is able to do all of the above.
- I wrote a coding style document for the Deadwood code.
- I have added an #ifdef that should resolve the problem with running MaraDNS on cygwin
- I have removed the one warning visible when MaraDNS is compiled as an authoritative-only client (with ipv6 support to boot)
I am aware that MaraDNS support email is currently not working. I have let the relevant people know, and things will hopefully be resolved in a few days.
Friday, October 5, 2007
Groundbreaking of Deadwood project
- Make a basic "load balancing" DNS server that takes incoming DNS requests, sends the request on to one or more "upstream" DNS servers, and give the reply from the upstream server back to the client.
- Make a basic caching DNS server, that will need the upstream server do all the heavy lifting of making the recursive query, but that will remember queries so the upstream server doesn't have to do as much work
- A full-featured recursive server, like what MaraDNS now has
It is part of the lastest MaraDNS snapshot available here, in a directory with the title deadwood-1
While I have wanted to do this for years now, I'm glad I waited because people have done a lot of testing with MaraDNS and found some minor security problems. I now know what coding mistakes to avoid to not even have those minimal kinds of security problems.
Thursday, October 4, 2007
MaraDNS snapshot update
- Sam
Wednesday, October 3, 2007
Announce: C-40 interactice fiction contest
While completely compatible with the Commodore 32 games, the C-40 also has an expanded memory. This machine has some 40960 bytes of memory that game cartridges can use. Like the Commodore 32, this C-40 can play both z3 and z5 z-machine games.
We are looking forward to shipping some games that will take full advantage of the C-40s large memory for the Christmas season this year. This is where you come in: We are introducing a C-40 contest where anyone on the internet can make a z3/z5 z-machine game that fits in 40960 bytes or less. Unlike the previous Commodore 32 contest, one is not required to use Inform nor the minform library to make entries for this contest. Any system that the contest entry writer can come up with to pack as much adventure in 40960 bytes is welcome, including home-grown parsers and optimized assembly language. In addition, games are not limited to text adventures; ASCII arcade games are welcome, as long as they can be played on the C-40's 80x24 display.
We are also looking for judges to judge the games in the contest.
The rules of this contest are:
- Any kind of game that is a Z-machine version 3 or Z-machine version 5 game that fits in 40960 bytes or less is welcome.
- All games submitted to this contest must be original for the contest.
- All games must run correctly in Frotz 2.43 using an 80x24 display.
- All games must be submitted on or before Monday, December 4 2007.
- All games are to be submitted to me via email.
- Any entry submitted to the C-40 contest must be one where there is permission to redistribute the submission on my webpage and on the IF archive.
This will run in both *nix systems (including Mac OS X) and on Microsoft Windows. Windows users: You will need to create a directory named \tmp before being able to compile programs with the inform.exe program included in the zip file.
Based on the Commodore 32 entries, one should be able to fit a small 10-room adventure in the 40960 bytes allowed in the C-40 contest, or, with some clever programming, a large 25-room adventure.
Of course, one could opt to make a huge Scott-Adams style adventure with dozens of rooms. Or, for that matter, one can make a very extensive ASCII ART arcade game in 40960 bytes (but remember the 80x24 rule!).
- Sam
Tuesday, October 2, 2007
MaraDNS snapshot update
- MaraDNS compiles again (albeit with one warning) with configured to be authoritative-only ( ./configure --authonly; make )
- Tests revised to pass when running a snapshot version of MaraDNS
- New script that only runs the tests relevant for the authoritative-only compile of MaraDNS added
Monday, October 1, 2007
Maradns snapshot update
It can be downloaded here
- Sam
Friday, September 28, 2007
Brief reviews of all of the "Commodore 32" contest entries
- Amusement Park. This is easily the best of all of the entries. It has some 15 rooms and a number of different puzzles to keep you challenged. Even after finishing all of the rides, there is the additional challenge of figuring out how to get all 100 points. Some reviewers criticized the writing, but it's fine for a text adventure. Indeed, this is a story of someone remembering fondly going to an amusment park, and how those memories are slowly dying. There are no significant bugs; I thought not being able to get the last five points was a bug, but figuring out how to do it simply requires paying close attention to the game's text.
- Downtown Train. Second place. I felt this one had the best writing of all of the Commodore 32 entries. I really liked the ending and the love story in this tiny adventure. Only three rooms and one challenging puzzle.
- Turning Point. Third place. This game also has good writing, and a couple of nice puzzles. However, maybe I've played too many text adventures, but I was able to solve this fairly quickly. The game only has six locations, and not as many puzzles as Amusement Park. Besides that, it's a really fun tiny adventure.
- Endgame. Fourth place. This would have been a fun little one-room adventure, but had too many bugs for me to fully enjoy it. For example, "erase" is not correctly implemented, which confused me until I figured out to use the verb "remove". Also, as a Christian, I found the 500-point ending a little offensive.
- Zombies. This would have been a fun adventure, but has too many bugs. This adventure really needed to fuller testing and bugfix cycle.
- Paparazzi. This is why you do not use Inform 6.30 to write a tiny 32k adventure. There is a lot of bloat in 6.30 that 6.15 (the compiler all the other entries used) doesn't have; the author of this game simply did not have enough room left to make a compelling adventure.
Friday, September 21, 2007
MaraDNS 1.3.08 and MaraDNS 1.3.07.05 released
So, I have created a new development branch of MaraDNS. This is where new features, such as NAPTR and ipv6 are being added to the code. These features have not been fully tested and I can not guarantee that development releases will even compile. However, they feature new features that some people may want to use.
Today I have branched off MaraDNS 1.3.08 (the development branch) and 1.3.07.05 (the updated beta test release). The files can be downloaded from the MaraDNS download page here.
- Sam
Thursday, September 20, 2007
Interactive Fiction review: Inevitable by Kathleen M. Fischer
If the description of that one object was better written, I would have been able to solve the one puzzle without cheating. And yes, the post-SpringThing version of this game has the same problem with the item description in question.
I had to resort to using txd to decompile the game to solve this one puzzle.
Once this puzzle was solved, I was able to finish the rest of the game within 30 minutes.
The game feels rushed, particularly near the end. It starts off with giving you wonderful puzzles, and memories that give the game real flesh, but then degenerates in to a very frustrating puzzle-fest, where you have to solve about 10 puzzles without being able to visit very many new locations when solving each puzzle, and where you get no real new memories after solving these same puzzles.
A lot of the mythology of the universe of this game is completely unexplored. For example, (minor spoiler) we never get a hint about why the bad guys massacred so many people in the past; something which I felt should have been answered in the game. I also did feel the story, as I was finishing the game, was not very compelling.
On a 1 to ten scale, I give this game a five. Minus three points for poor puzzle design, and minus two points for not having the story in the conclusion of the game as compelling as the story near the beginning of the game.
MaraDNS snap update; MaraDNS 1.3.07.05 and 1.3.08 coming out tomorrow
I plan on releasing MaraDNS 1.3.08 and 1.2.12.05 tomorrow.
I have also made a snapshot for the 1.2 branch of MaraDNS, which integrates the update maraconf.sh code in this branch, and which fixes a one-byte typo in the FAQ.
The 1.3 snapshot can be downloaded here and the 1.2 snapshot can be downloaded here.
As an aisde, I have removed all unsupported older versions of MaraDNS from the maradns.org webpage; the only versions of MaraDNS available on the webpage are recent snapshot releases and the three supported releases of MaraDNS: 1.2.12.08, 1.3.07.04, and 1.0.41.
- Sam
Tuesday, September 18, 2007
MaraDNS snapshot update
- IPV6 support added to askmara and fetchzone by Jean-Jacques Sarton.
- maraconf.sh updated
It can be downloaded here
- Sam
Thursday, September 13, 2007
New MaraDNS snapshot; help for people trying to install Linux on a 1420
- There is a new mararc dictionary variable, future that will allow new parameters to be set in future versions of MaraDNS, but still have the mararc file parse in MaraDNS 1.3. For example, let us suppose a future version of MaraDNS sends NOTFY packets when a zone file is updated. Then we can have a mararc variable send_notify_to, and for people who wish to use the same configuration file in MaraDNS 1.3, future["send_notify_to"].
- I have doubled the default amount of memory allowed to be allocated, since I saw MaraDNS hit the maximum the other morning, when I was on a broken internet connection
For people trying to get their Dell Inspiron to work in Linux, Dell now has an ISO image available for installing Linux on to one of these computers.
- Sam
Wednesday, September 12, 2007
On limiting the size of an interactive fiction game
- One, which I implemented in Desert Adventure, is to have the boundary be one where the player realizes they will die if they go past the "edge" of the map. Basically, I have a "lost in desert" location where all the exits take the player back to the start location, with the message "Lost in the desert, I walk towards the oasis, the only landmark I can see." seen when they travel from this location.
- Another is to not have a boundary at all. How is this done? With a random map generator. Basically, have the computer generate interesting scenery which extends forever no matter what direction the player goes. The problem with this approach is that there is a limit to the kinds of maps random map generators can make. Basically, a random map generator can make a reasonable approximation of natural scenery, or maze-like maps. Also, a computer can't make the kinds of clever puzzles that are the hallmark of most kinds of interactive fiction.
What a random map generator can generate are "hack and slash" maps; they can work when the objective is to, for example, kill monsters and collect treasures. Random map generators can also make basic "find the key" puzzles; and possibly even "examine things to find stuff" puzzles, but nothing really more complicated than that.
I can see something like this for a role playing game, where the player has skills and hit points, and has the objective of killing monsters in order to acquire more skills and hit points, which allow them to kill even nastier monsters.
However, I am not sure whether this kind of game will appeal to many interactive fiction players. It's a different game, and we knew this as far back as 1981 (Such as Scott Adams' "If you like to kill monsters play 'MACES & MAGIC'!" comment in Savage Island).
Anyway, some food for thought for game designers.
Tuesday, September 11, 2007
You can now play Desert Adventure online
Click here to play this game
- Sam
Monday, September 10, 2007
MaraDNS snapshot update; Desert Adventure updated
I have also changed the formatting of the source files: the .c and .h files no longer have tabs, but use multiple spaces instead. This is something I should have done before releasing 1.2; it makes the source code look consistant across different editors. since this change means that it will be more difficult to use patches for older versions of MaraDNS that use tabs instead of spaces. At least I did it before 1.3.
Finally, I have added a few more SQA tests.
I have also updated my Desert Adventure game. I made one puzzle a little easier and another puzzle a little harder (But help is now available for this harder puzzle). Also, I fixed one bug and revised the compile script to remove more unused whitespace, allowing more adventure to fit in the same amount of space.
In addition, I revised ScottFree to give SavedRoom initial value of 1 and added a z-machine version of Desert Adventure (created with scott2zip, revised by myself, and compiled with an ancient version of Inform) for people who don't feel comfortable compiling ScottFree.
The update is available here (80k zip file).
Friday, September 7, 2007
Making MaraDNS even more secure
- Do not add features to a program after a design/requirement spec for the program has been written. All three MaraDNS security problems existed because I added features to the program after the basic program was done. Namely:
- I added round-robin rotation to the codebase after the basic authoritative-only DNS server was written. This added a denial of service security bug to the code.
- I changed the authoritative code to give out nicer messages when invalid DNS packets were received. This added another denial of service security bug to the code.
- I added ipv6 to MaraDNS. This was the cause of a third, and final (so far; knock on wood) denial of service security bug to MaraDNS.
It also looks like the one known denial of service security bug in djbdns was the cause of a similar feature creep; basically, the existence of TCP code in dnscache caused the bug. - I added round-robin rotation to the codebase after the basic authoritative-only DNS server was written. This added a denial of service security bug to the code.
- Code in a style that make memory leaks difficult. For example, make sure there are a limited number of strings allocated at the beginning of a function, and use a variable to store the return value. Use gotos for error trapping if programming in C, since C does not have real Java-style error trapping, nor C++'s automatic destructors.
If a block of code needs a temporary string, declare the string at the beginning of the block and don't leave the block without zapping the string. For example:
function() {
/* This is *always* the first part of a
* block that allocates
* strings. Yes, we allocate every last
* string *before*
* doing anything else */
overflow_resistant_string *s1, *s2, *s3;
if(allocate_memory(s1) == 0) {
return ERROR;
} else if(allocate_memory(s2) == 0) {
deallocate(s1);
return ERROR;
} else if(allocate_memory(s3) == 0) {
deallocate(s1);
deallocate(s2);
return ERROR;
}
int return_code = OK; /* If you're using
* GCC2 still, upgrade */
/* Now we run normal code */
/* Lots of snipped code here */
if(do_something_important == FAILS) {
return_code = ERROR;
goto leave_function;
}
/* Lots more snipped code */
if(weve_already_funished == YES) {
return_code = YIPEE;
goto leave_function;
}
/* More snipped code */
leave_function:
deallocate(s1);
deallocate(s2);
deallocate(s3);
return return_code;
} - Use buffer-overflow resistant strings. Check; this is why MaraDNS (knock on wood) hasn't had a security problem worse than denial of service.
- Use as many operating system features to sandbox the code as possible. Check; this is why MaraDNS is in a chroot() environemt running as the "nobody" user (it is also possible to have MaraDNS run as a maradns-specific user if desired)
Thursday, September 6, 2007
Desert adventure: A new tiny interactive fiction story
This is an original adventure for the Scott Adams' adventure interpreter language, and is, to the extent of my knowledge, the first original adventure for Scott's language in over 20 years.
While Inform, Adrift, and what not are more capable than Scott's language at making complicated adventures, Scott's system has the advantage of being extremely compact, being originally designed to run on a system with only 16 or 24 kilobytes (yes, kilobytes) of memory. For example, my implementation of Cloak of Darkness for Scott's system is under 3,000 bytes in size. Compare this to the Z-machine version of the same game, which is over 50,000 bytes in size.
The program to run Scott Adams' adventures is under 20k in size; the Z machine interpreter is about 80k in size, and other interpreters are even bigger.
My goal in making this adventure was to make a playable, very small adventure that people can freely include with programs like ScottFree.
In particular, I wanted the adventure to fit in under 6 2048-byte blocks (12288 bytes), which it barely does.
To play this game, play it online or download it here (80k zip file). This zipfile includes a Windows program for running Scott Adams adventures, a version of ScottFree for *NIX (including MacOS X in a terminal) updated to not have bugs when compiled in a modern version of GCC, and a z-machine version for people who don't feel comfortable compiling ScottFree.
- Sam
Update: 2007/09/10: Updated version to 1.1 and added note there is now a z-machine version of Desert Adventure. 2007/09/11: Added online version
Monday, September 3, 2007
MaraDNS snapshot update; Cloak of Darkeness
In addition, bind2csv2.py now has a man page, and the authoritative tutorial has been updated to point out the recursive resolver had dnscache-style custom name servers for subtrees of the DNS space.
Jean-Jacques Sarto has contributed a patch that allows csv2 zone files to have FQDN6 records in in csv2 zone files, for better ipv6 support. I have not integrated this patch yet; I have to make sure he licenses the patch under a MaraDNS compatible license and that the patch doesn't introduce any other bugs.
The September snapshots of MaraDNS can be downloaded here.
I have had a long-term interest in Interactive Fiction ever since the days of Adventure and Zork in the late 1970s. This weekend, being a little bored, I have ported Cloak of Darkness to the parser Scott Adams used for his late 1970s and early 1980s video games.
I had to do some hacks to pull it off; namely, I have the adventure teleport the player from one room to another instantly under certain circumstances:
- If the player tries to go out in to the street from the foyer, they enter the street. They are then instantly teleported from the street back to the foyer with the "You've only just arrived, and besides, the weather outside seems to be getting worse." message.
- If the player has hung up the cloak, and enters the bar, they are instantly teleported from a dark room to the actual bar.
Another hack is that the Cloak is not a normal pickable (carryable) item. Instead, "drop cloak" is explicitly given two actions:
- Give the player the "This isn't the best place to leave a smart cloak like that lying around!" message in any room besides the cloakroom
- Put the cloak on the hook in the cloakroom, and set the flag so the person, when in the dark room, is instantly teleported to the bar.
The game makes assumptions that Scott Adams' adventures never had, but it works pretty well. In ScottFree, I never see the teleport. It is possible, were this file used in an actual 1970s computer, that the player might see a brief flash of the room they were teleported from before being teleported.
My port is available in a zipfile, along with a version of the scott2zip converter updated to run in Perl5 and ScottFree updated to not have a bug when compiled in GCC4 (A recent version of the Linux C compiler):
cloak-scott-0.1.zip
The above zipfile can be freely uploaded to the if-archive or anywhere else (I assume Roger Firth allows people to freely distribute implementations of Cloak of Darkness).
I think this is the only new Scott Adams game in over 20 years. Considering how difficult it was to pull off, I can see why no one makes games in this format any more.
- Sam
Friday, August 31, 2007
MaraDNS snap; POSIX thoughts
Starting tomorrow, MaraDNS snapshots will be in this directory.
Looking at the POSIX specification, there's some cruft in there, notably the uucp program. UUCP was a way of transferring files between UNIX computers that was popular in the 1980s and lingered on through the 1990s. It was a way of getting email and USENET on a computer that would only be online for a short period of time. I remember around 1997, when NetCom (my first dot-com job) finally completely canceled UUCP access, since the UUCP programs we had were acting up and no one knew how to fix them.
Thursday, August 30, 2007
There's more to DNS than BIND and DjbDNS
The feeling was that a new DNS server needed to be made. So I started developing MaraDNS. It was a lot of work; DNS is a non-trivial protocol.
Six years have passed since then and a number of DNS servers have come and gone. The ones that are still being actively maintained are my own MaraDNS, NSD, and PowerDNS. [1]
However, whenever a discussion about DNS servers comes up, we get the same BIND-vs-DjbDNS flame war rehashed over and over again. The flame wars are based on the following outdated bits of information:
- BIND has privilege escalation security holes coming out every month (not true since BIND9 became viable in 2002 or 2003)
- DjbDNS has no security holes (not true: DjbDNS has an unpatched remote denial of service security hole)
- There are no free DNS servers besides BIND and DjbDNS (Not true; there are three other active open-source DNS servers)
So, people, wake up and smell the coffee. There are no less than three other DNS servers. Being actively maintained. We are no longer in a BIND-and-DjbDNS world. BIND is no longer a remote root exploit waiting to happen.
- Sam
[1] There are some other DNS servers that are no longer actively maintained or on life support: pdnsd (the last update is from a year ago) and posadis (last update three years ago). There's also MyDNS (last update almost two years ago), which is a "one trick pony" DNS server for people who want to use a database to manage DNS records.
Wednesday, August 29, 2007
MaraDNS update: All versions
Basically, someone can send a specially crafted DNS packet to the DNS server that will make an authoritative CNAME record not resolve. The workaround to disable this denial of service is to add the following line to the mararc file:
max_ar_chain = 2
The fix is to download MaraDNS 1.0.41/1.2.12.08/1.3.07.04 from the MaraDNS download page or to download MaraDNS 1.2.12.08 from the Sourceforge MaraDNS page
All distributions are strongly encouraged to update to 1.2.12.08, or to 1.0.41 if still using the 1.0 branch of MaraDNS. Please remember, 1.0 users, that non-security bugfixes in MaraDNS 1.0 will no longer be applied after December 21 of this year.
I would like to thank Michael Krieger, whose bug report helped me find and fix this problem.
Tuesday, August 28, 2007
MaraDNS snapshot update
Today, the update is a little more major. I have made a script that runs all of the SQA regressions, as a single script. I have also updated the SQA tests to be easily pass/fail tested, so that the script can figure out if a given test has succeeded. While the script takes a couple of minutes to run, this allows me to easily run the script whenever I want to make sure a given release is ready to make public.
The only other TODO I have for the 1.3 branch before christening it stable is to find and fix the bug that causes improper RR rotation. Also, if anyone who uses pkgsrc wants to contribute some patches to make MaraDNS more pkgsrc-friendly, please do so. The people who
I'll probably also make sure the documentation is OK.
I may be able to declare MaraDNS stable on September 21, 2007, if everything continues to go well.
- Sam
Friday, August 24, 2007
Linux fanboys are annoying
Ugh.
They also spread nonsense like OpenOffice being just as full-featured as Microsoft Office. It isn't. Let me give you just one example: Microsoft Office, since at least Office 2000, has an easy way for you to assign special symbols to keypress combinations. OpenOffice doesn't. This is a known bug. The reason why MS Office can have this feature and OO doesn't is because OO doesn't have the manpower to add features like this. This is because you didn't pay for the software, so their isn't enough money to pay developers to make the software as feature-full as MS Office is.
Another example: I have installed Firefox on countless Windows machines. It was clean; in particular, since I am bilingual, I like to have its built-in spellchecker switch between English and Spanish easily, depending on which language I'm writing in. All I had to do in Windows is add Spanish, and the list can be quickly used, since it only has English and Spanish. In Ubuntu, Firefox had dozens of languages in it. There was no way, in the package management system (Synaptic), to remove these languages. I finally had to go in to /usr/lib/firefox/dictionaries and remove the dictionaries by hand.
Ugh again.
Now, Linux does have advantages over Windows. The price is better. The development and *NIX environment is a very productive environment for someone who knows UNIX's arcane commands. I really like the FVWM1 window manager, which was a fast and light window manager in 1995, and is today lightning-fast. But Linux isn't ready to be a end-user desktop. Not yet.
- Sam
Thursday, August 23, 2007
MaraDNS snapshot update
My next step is to automate the SQA process so that all one has to do, on a Linux system with valgrind, is run a single script, which will run each SQA test and tell you if you have passed or failed the SQA test, and stop testing if any of the tests fail.
I also want to move the documentation for many of the SQA tests from the single top-level README file in to README files in the corresponding folders--the newer tests already have documentation in this form; the older tests do not.
I also have a patch from Joerg Sonnenberger that I will apply to the 1.3 series of MaraDNS.
After that, I will work on the "records rotate when they shouldn't" bug; in particular, I will see if I can reproduce it.
- Sam
Monday, August 20, 2007
MaraDNS snapshot update
The snapshot is available on the MaraDNS webpage.
In related news, I am also updating MOAM-CD.
I have managed to squeeze out more unused stuff; I got rid of a lot of kernel modules that won't be used on a basic web terminal, such as bluetooth drivers, non-X video drivers and a number of filesystems like reiserfs. This cleanup saved about five megs of space. I also removed some Cyrillic fonts (This CD is only for English and Western European language speakers).
For some reason, the .jar files (which is just another name for .zip) in Firefox's Chrome folder are really poorly compressed; I used advancedcomp to recompress these files, saving 2.8 megs of space there. I also removed the C development environment, saving about 10 megs of space.
Once compressed, the amount of space saved was, in total, some ten megs. Yes, I now have a usable web browsing system complete with Firefox 1.5 in only about 27 megs. Which gives me a lot more space for other stuff, and even allows the system to fit on one of those square 30 megger business card CDs.
I have also updated the variable-width font, and Firefox is updated to be current with Firefox 2.0.0.5's security fixes. The two 2.0.0.6 security updates are not critical; the one critical bugfix is caused by Microsoft Windows' broken security model, and doesn't impact Linux.
In addition, I have added the VIA chipset Unichrome driver. X's auto-probe script is smart enough that, as soon as this driver was compiled and placed in /lib/xorg/modules/drivers, it auto-probes for the chipset. I tested things on a computer that I know uses this chipset, and the driver works like a dream.
I should have a release of moam-cd-0.6 later on this week. I need to make the width of the space "character" a little wider at 14 points with the "Sandals" font, and should make the 12-point "A" a little narrower (not as important, and harder to fix; the space fix is a one-character change in the appropriate .bdf file).
Thursday, August 16, 2007
MaraDNS releases: 1.2.12.07 and 1.3.07.03
1.2.12.07 fixes a number of fairly important bugs which were fixed a while ago in 1.3:
- Bugfix: If bind_star_handling was set to 2, MaraDNS would leak memory when the existance of another RR stopped resolution using a star record.
- Bugfix: bind_star_handling, when set to 2, now appears to do the right thing.
- Bugfix: Non-critical double-free() removed.
- Bugfix: askmara no longer goes in to an infinite loop when it receives an invalid TXT record.
- Bugfix: csv2 parser now makes sure that TXT chunks are no longer than 255 characters in all cases.
1.3.07.03 has two bugfixes, five SQA tests added, and some other updates. Not noted in the changelog is that I have moved the udpsuccess() function call in to its own file. The thinking is to make the main MaraDNS.c fils smaller, to make things more tidy and to make re-compiles faster.
My next plan for MaraDNS has not changed: Find the bug that is causing inappropriate rotation of resource records. This one appears to affect 1.0, 1.2, and 1.3, so I would like to find it. If I can't find it, I will completely rewrite the relevant RR rotation code.
I hope to find this bug before 1.0 becomes security-only updates on December 21st.
It would seem that some versions of BSD use a system called pkgsrc that basically assumes you use autoconf for building your program, something MaraDNS does not do. This makes it difficult for pkgsrc packagers to package MaraDNS. I won't fix this in 1.2, but it may be something worth changing for 1.3 if the changes do not disrupt things too much.
Tuesday, August 14, 2007
MaraDNS snapshot update
I will fix the 1.3 bug later on this week, and should release 1.2.12.07 Friday.
MaraDNS snapshot download link
- Sam
Monday, August 13, 2007
New MaraDNS snapshot
I may have found another bug: It looks like there are problems with recurse_delegation in 1.3; I will have to do some 1.3 and 1.2 tests. If there is a problem in 1.2, I will hold off the 1.2 release until I find and fix the bug.
I am also starting to split off the huge MaraDNS.c file; the large udpsuccess() routine now has its own file. This way, the code should be a little easier to manage.
My short term plans for MaraDNS: Later on this week, or possibly early next week, release 1.2.12.07, which has a number of non-critical bugfixes compared to 1.2.12.06 released three months ago. I also plan on releasing 1.3.07.03 later on this week, possibly even on the same day as 1.2.12.07.
My medium term plans for MaraDNS: I plan on making the 1.3 branch stable on December 21, 2007. There is a long-term bug which has been reported to me twice: Sometimes records which should not rotate are rotated. The problem is probably either in udpsuccess() or udpany(); I will investigate this concern some more and hope to reproduce it. This code affects both 1.0 and apparently 1.2. If all else fails, I will completely rewrite the round robin rotation code for the 1.3.07 stable release of MaraDNS.
My long term plan is to write a stand-alone DNS recursor that will not use threads; there is a need for a truly open source small DNS recursor.
The snapshot can be downloaded here
Friday, August 10, 2007
Linux annonyance: /dev/hda now has large file problems
Instead, one has to get the udftools package via sudo apt-get install udftools, configure the file /etc/default/udftools to point to the CD/DVD-ROM device, and then mount the DVD as /dev/pktcdvd/0. Ugh. As an aside, there are online guides for making UDF packet-writing DVDs (DVD-RWs that you can write to as if they were a huge floppy disk) that give bad directions. Please read the directions in the file /usr/share/doc/udftools/README.Debian.gz for correctly formatting a packet DVD. I now have two coasters that used to be DVD-RW blanks because I did not follow these directions, but instead trusted inaccurate on-line directions. In particular, I didn't do the essential growisofs -Z /dev/hdc=/dev/zero step between formatting the DVD-RW and putting the UDF filesystem on the DVD-RW, since the on-line guide did not mention this step.
Also, when mounting a DVD-RW, you really want to mount it like mount -o noatime /dev/pktcdvd/0 /mnt since otherwise it will do very slow writes when all you want to do is read some files. Yes, I actually learned something useful from reading a Slashdot discussion. Naturally, Slashdot misattributed a quote to Linus, but hey at least the information in this thread is useful.
Thursday, August 9, 2007
MaraDNS snapshot update
There are two main updates: I have updated the sqa/regressions/truncation test to run both on MaraDNS 1.3 and in MaraDNS 1.2 (so I can verify that the test shows the presence of the bug in old 1.2 releases but the non-presence of the bug in 1.3). I have also made some minor touch-up to the bind2csv2.py documentation.
It is available here.
Tuesday, August 7, 2007
MaraDNS snapshot updated
The big change is behind the scenes; I have sucessfully moved the MaraDNS development environment to my new Dell laptop runinng Ubuntu. While I will still compile the Windows and CentOS binaries on my older Thinkpad, the majority of the development will now happen on the newer Dell.
I hope to have more significant updates to the 1.3 branch soon.
I also plan on releasing 1.2.12.07 in a week or two; there are a number of 1.3 bugfixes that I have already backported.
- Sam
Wednesday, August 1, 2007
Linux distribution choosing made easy
- If your computer was made in the last three years, get Ubuntu
- If your computer is between three and six years old, get Xubuntu
- If your computer is anything older, and is a 486 with 16 or megabytes of ram or better, get DeLi Linux
- If your computer is even older than that, choosing which Linux distribution to use should be the least of your worries. Computers that old are usually falling apart; it can be nay-to-impossible to get an antique like that to power on, much less install Linux on
- Sam
Monday, July 30, 2007
On Chess Variants
One of the nice things about chess variant design is that it opens up new fields of opening study to explore. In FIDE (orthodox, western) Chess, any move on the first half-dozen turns that is not an outright blunder has already been throughly studied and explored. Many opening lines are 20 or 30 moves deep. There are little, if any, interesting new frontiers to explore.I have been studying a chess variant which I "invented" back in 2004 (and published in 2006) called "Schoolbook Chess".
Chess variants, however, make it possible for someone to be a trailblazer again, exploring openings that have never been studied before.
There are a couple of things a chess variant inventor can do to help people play their chess variant. One thing they can do is make a game courier preset. This is a web service where one can easily add new chess variants. Most presets do not enforce the rules for the variant. The preset I made for Schoolbook chess, however, enforces the rules simply because I was able to easily modify another preset that is identical in all aspects except for the opening setup of the pieces.
Another thing someone can do to play chess variants is to make a Zillions of Games rules file. Zillions of Games is a proprietary program for Windows (runs well under Wine) that can play a large number of Chess variants and other abstract strategy games. My zipfile is an implementation of Schoolbook chess for Zillions of Games. However, it also has ChessV rules files for Schoolbook (not that they are needed; ChessV has had the ability to play Schoolbook since the 0.9.0 release a year ago). In addition, it has some documentation for Schoolbook, including opening analysis, annotated games, and a few mating positions.
What I was doing all weekend was updating this zipfile. First of all, ChessV has moved since I last released a Zillions zipfile. I also updated a couple of other links.
Second of all, I added four mating positions (maybe I should reword those last two words) to the zipfile. This was the lion's share of the work. I had to make sure the positions were indeed mating positions, make two screenshots for each position (we use a different black and white color scheme when printing the page), create and verify the solutions to the mating positions, and then integrate the positions in to the list of 12 mating positions we already had, double and triple checking to make sure I did not introduce any errors. This took hours.
During this process, I submitted some of these new mating positions that have not been submitted to the chess variants page before, which also took some work.
Once that was done, I had to modify the zipfile a little (removing some "no commercial use" graphics) in order to make the zipfile suitable for submission to Zillions of Games. I then submitted my submission via email.
This took all weekend to do. Far longer than I thought it would. All for a game that has only been played about two dozen times, mostly me-vs-some other chess variant inventor (the mating positions and opening analysis come mainly from computer-vs-computer or some of my computer-vs-human games). Needless to say, I don't think I will revise this game at all until 2008.
- Sam
Saturday, July 28, 2007
Blog layout updated
- Sam
Thursday, July 26, 2007
1420 update: Suspend broken
Well, it would seem that there is a key feature broken with my Inspiron 1420: Suspend is completely broken. Not just a little broken. Completely broken. Attempts to suspend the laptop do nothing more than crash the system.
I, of course, tried various ways to suspend the system:
- sudo pmi action suspend
- sudo pmi action hibernate
- sudo apt-get install uswsusp
Followed by either:
s2ram
s2disk
Another bug: Take a blank DVD-RW. Format it as a UDF filesystem in Windows Vista. Write data to the disk. Now, put it in the Linux system. Write some more files. The UDF filesystem is now perfectly fine in Linux---but Windows Vista can not read any of the data on the disk, and will not allow you to write to the disk unless you reformat the DVD-RW.
Now, this could simply being a case of Microsoft playing their old vendor lockout games, where they refuse to read UDF-formatted disks written to by the competitor's product.
Speaking of vendor lockout, I wonder how log it will take Microsoft before they punish Dell for selling non-Microsoft computers by charging more for Windows.
Wednesday, July 25, 2007
Review: Dell Inspiron 1420 with Linux
I have finally received my Dell Inspiron 1420 that comes with Ubuntu 7.04 preinstalled today. The order took about a month to process; this is a brand new model, and I was one of the first people to order it. I would have gotten a Thinkpad, but chose Dell since they are going out on a limb and are making computers with Linux preinstalled. This means that I get a computer that works out of the box with Linux-compatible hardware; there is no need to use ndiswrapper to get the wireless card to work with Linux, and no strange winmodem without a Linux driver lurking in this laptop.
This is one of the first systems; I ordered the system too early to get the free hard disk and memory upgrade. When I asked to upgrade the system, I was told I would have to cancel the order and reorder to do that. The systems have a two-week backlog and I want to get back to Mexico as soon as possible, so I decided to have just get the computer as quickly as possible.
The system booted in to Linux without problem. Since Ubuntu uses all 80 gigs of hard disk space, I tried to reinstall Ubuntu from the supplied CD in order to have more free space. Strangely enough, while Ubuntu runs fine on the system, the Ubuntu Live CD can not successfully boot. I had to download and burn the Ubuntu "alternate install" CD in order to get a Ubuntu system I could repartition from.
The good news is that the partition manager included with Ubuntu's "alternate install" CD has partition resize support. I was able to resize the partition Dell's Ubuntu install is on without having to reinstall the OS. While it was a slow process, it saved me the bother of reinstalling all of the restricted drivers and configuring the computer yet again.
As a Linux system, it is a great system. If you are a Linux hobbyist or experienced Linux user, this is a system worth having. All of the hardware works with a minimum of restricted drivers (for the winmodem and wireless network card) used. Even the SD card reader works. If you are an average Windows or Mac OS X user, however, I would not recommend this system.
Here are some issues which I have seen with this system:
- The wireless configuration GUI tool only supports the very insecure WEP encryption. Setting up WPA encryption is non-trivial. For the record, the cookbook linked to does work and I am using it to be on our secure wireless network at home.
- Firefox's inline spelling dictionary is really nice. Unfortunately, Ubuntu comes with a really long list of languages that makes it difficult for me to switch between English and Spanish; something I do quite frequently. Even after uninstalling all of the languages besides English and Spanish, Firefox still has this huge list of languages I can spell-check against, only two of which I will actually use.
I think one day Linux will become a viable desktop system for the masses. Until then, Dell is a pioneer in making Ubuntu desktops and laptops for the small niche who would rather have Linux on their computer. I just hope Microsoft does not illegally punish Dell for making this bold move.