[CMake] Storing and auto-decrypting sensitive files in cmake
SAFELY and SANELY
Jack Kelly
endgame.dos at gmail.com
Sun Jun 17 12:59:58 EDT 2007
Gavin Beatty wrote:
> Hello,
>
> Apologies if this is silly/misplaced/misguided.
>
> I'd like a way to automate decrypting (via gpg) a file, installing the
> decrypted form and removing the temporary decrypted file from the
> cmake dir.
>
> I have tried:
> <code>
> MACRO(ETC_WPA_INSTALL src)
> EXEC_PROGRAM(gpg
> ARGS -o ${src} -d "${src}.encrypted"
> )
> INSTALL(FILES ${src}
> DESTINATION /etc/wpa_supplicant
> PERMISSIONS OWNER_READ OWNER_WRITE
> RENAME wpa_supplicant.conf
> )
> FILE(REMOVE ${src})
> ENDMACRO(ETC_WPA_INSTALL src)
> </code>
>
> but the INSTALL doesn't actually run until `make install` (as
> expected) whereas everything else does. So I get a decrypted file
> which is immediately removed when I run `cmake .`! How silly of me
>
> Is there a way to have the decryption as a dependency of install
> target and have the removal at the end also?
>
> How would you implement this?
Something to think about:
You want to decrypt and install the file without leaving it around in
the build dir. Why? If you're doing an install, the person installing it
should be root and therefore trustworthy (they'll have read access to
/etc/wpa_supplicant.conf, anyway). Then there's the problem of the
decryption key. If your build system can get this key, surely the user
can, too.
Killing the make process at the right moment would leave the decrypted
file lying around, as well.
Is what you think you want what you actually need?
Perhaps you should look at INSTALL(CODE "<Some CMake Code>") which
executes CMake code during installation. I'll stab in the dark here with:
FIND_PROGRAM(INSTALL_EXECUTABLE install)
IF(NOT INSTALL_EXECUTABLE)
# Die, somehow
ENDIF(NOT INSTALL_EXECUTABLE)
FIND_PROGRAM(GPG_EXECUTABLE gpg)
IF(NOT GPG_EXECUTABLE)
# Die
ENDIF(NOT GPG_EXECUTABLE)
MACRO(ETC_WPA_INSTALL FILE)
EXEC_PROGRAM(${GPG_EXECUTABLE} ARGS -o ${FILE} -d ${FILE}.encrypted)
EXEC_PROGRAM(${INSTALL_EXECUTABLE) -m 600 ${FILE}
/etc/wpa_supplicant/wpa_supplicant.conf)
FILE(REMOVE ${FILE})
ENDMACRO(ETC_WPA_INSTALL)
INSTALL(CODE "ETC_WPA_INSTALL(file)")
This isn't so great because it depends on an install program, but it
might get you thinking.
-- Jack
More information about the CMake
mailing list