From: Daan De Meyer Date: Thu, 27 Feb 2025 09:03:29 +0000 (+0100) Subject: keyutil: Use fopen_tmpfile_linkable() X-Git-Tag: v258-rc1~1231^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8877019fbd86841597d88254672e79ba2bc2687;p=thirdparty%2Fsystemd.git keyutil: Use fopen_tmpfile_linkable() --- diff --git a/src/keyutil/keyutil.c b/src/keyutil/keyutil.c index 9df85902f70..c58ac84e5b5 100644 --- a/src/keyutil/keyutil.c +++ b/src/keyutil/keyutil.c @@ -13,6 +13,7 @@ #include "openssl-util.h" #include "parse-argument.h" #include "pretty-print.h" +#include "tmpfile-util.h" #include "verbs.h" static char *arg_private_key = NULL; @@ -352,14 +353,20 @@ static int verb_pkcs7(int argc, char *argv[], void *userdata) { ASN1_STRING_set0(signer_info->enc_digest, TAKE_PTR(pkcs1), pkcs1_len); - _cleanup_fclose_ FILE *output = fopen(arg_output, "we"); - if (!output) - return log_error_errno(errno, "Could not open PKCS#7 output file %s: %m", arg_output); + _cleanup_fclose_ FILE *output = NULL; + _cleanup_free_ char *tmp = NULL; + r = fopen_tmpfile_linkable(arg_output, O_WRONLY|O_CLOEXEC, &tmp, &output); + if (r < 0) + return log_error_errno(r, "Failed to open temporary file: %m"); if (!i2d_PKCS7_fp(output, pkcs7)) return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write PKCS#7 file: %s", ERR_error_string(ERR_get_error(), NULL)); + r = flink_tmpfile(output, tmp, arg_output, LINK_TMPFILE_REPLACE|LINK_TMPFILE_SYNC); + if (r < 0) + return log_error_errno(r, "Failed to link temporary file to %s: %m", arg_output); + return 0; }