strace to the rescue, or, program uses mysterious config defaults

Strace is a powerful tool that lets you debug other programs, and find where config files are found.

Programs have bugs.  They’re written for one platform and ported to another.  In any case sometimes things don’t work as they should.

I manage this website using the rather nice FTP client lftp.  It can automatically “mirror” a local directory on my lappytop onto the web server. This means I don’t manage the server directly, I only push files up, so if something happens I can switch to another server with very little hassle.

Today I noticed I couldn’t store the password to the FTP account. The documented command bookmark edit brought up an editor, but it didn’t have my saved bookmark!  On my system it’s misconfigured.  Bookmarks work, as I can do open jta to connect to this site.

To find out where lftp is storing bookmarks, I used the wonderful tool strace.  It lets you run a subcommand, and monitor exactly what is going on from a system perspective.  It logs system calls.

In this case, I knew I wanted to scan for the open() system call, when the program opens up the bookmark file.  Here’s the command I used to get lftp to cough up the information:

$ strace -o z -e trace=open lftp -c ‘open jta’
Password:
cd: Login failed: 530 Login incorrect. 

The above command ran lftp, read the bookmark file, and tried to connect (open) to the JTA (“John Tells All”) FTP bookmark.  I exited out because I just wanted to see the strace log to find the bookmark file.

I guessed the bookmark file would have the letters ‘ook’ in it:

$ egrep ook z
open(“/home/johnm/.local/share/lftp/bookmarks”, O_RDONLY) = 4

The above trace shows that the application is storing bookmarks in ~/.local/share/lftp/bookmarks  The open() command returned a number which means the file was found and opened correctly.

Success!  I can now edit this file and add my own bookmarks, including passwords.