On Dec 9, 2009, at 11:38 AM, Stanislav Kolar wrote: Hello, I have to write an installer plug-in that asks for some initial information during the installation process and saves them as a xml file into /usr/local/my_dir directory. The problem is that in the method "shouldExitPane" I don't have an appropriate rights to modify anything in the directory /usr/local... Is there a solution of my problem ?
In an install that requires Admin privileges, Installer panes run as the logged in user, so you have to write your info someplace that THAT user can access.
The only good choice is /tmp in some known filename, and then have a preflight or postflight write the info into /usr/local. (You can't use mktemp to generate a temp file securely, because your preflight and postflight need to know the name of the temp file.)
This presents a security risk. (For instance, some badguy knows you will be writing into /tmp/MySecretFile, so they create a symlink at that location, and point it to /kernel.)
So the correct answer is to attempt to open the file with modes to cause it to fail if it already exists. Here's what I do in perl (please test it before you ship it!)
use Fcntl; sysopen(TEMPFILEHANDLE, $tempfilename, O_WRONLY | O_CREAT | O_EXCL) or die "Can't open $tempfilename!";
which translates to, "open this file for write only, create it, and fail if it already exists."
Yes, you could attempt to handle errors more gracefully, but test test test!
|