[syslinux] [PATCH] in.tftpd: Allow chdir w/o root, improve I/O

Daniel Richard G. oss at teragram.com
Thu Jan 10 13:44:34 PST 2013


Hello,

I have a couple of enhancements to submit for the tftp-hpa TFTP server.

I need clients to be able to request files without a full path, but at the 
same time, I can't use --secure because (1) the file directory consists of 
symlinks pointing outside that are broken by a chroot, and (2) I would 
prefer to invoke in.tftpd as an unprivileged user in inetd.conf.

Thus, I've implemented and documented a new --basedir option, which is 
essentially --secure minus the chroot. Also, I conditionalized the 
privilege-dropping code so that it doesn't run when there are no 
privileges to drop.

I also had a problem with poor I/O throughput, due to the server reading 
just 512 bytes at a time from a directory served through AFS. I changed 
the read() to an fread() (to take advantage of stdio buffering), and added 
a setvbuf() call after the file is fdopen()ed to set a 64kB buffer. The 
server now reads files in 64kB chunks, according to strace, and throughput 
is much improved. (Originally, I was going to modify readit()/read_ahead() 
to use multiple buffers instead of just two, but this code is intertwined 
with the server mechanics in a way that makes leaning on stdio a *lot* 
simpler.)

Lastly, there were a couple of minor nits: the "toplevel" variable being 
defined twice, and a trailing comma in the long_only_options enum.

Patch is attached, and applies to current tftp-hpa git master.


--Daniel


-- 
Daniel Richard G. || danielg at teragram.com || Software Developer
Teragram Linguistic Technologies (a division of SAS)
http://www.teragram.com/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tftp-hpa-danielg.patch
Type: text/x-diff
Size: 9015 bytes
Desc: Patch against tftp-hpa git master
URL: <http://www.zytor.com/pipermail/syslinux/attachments/20130110/a99789da/attachment.bin>


More information about the Syslinux mailing list