262 {
263
264 if (-1 ==
mkdir(ca_tmp_dir.c_str(), S_IRWXU) && errno != EEXIST) {
265 err.
Emsg(
"TempCA",
"Unable to create CA temp directory", ca_tmp_dir.c_str(), strerror(errno));
266 }
267
268 std::stringstream ss;
269 ss << ca_tmp_dir << "/ca_file.XXXXXX.pem";
270 std::vector<char> ca_fname;
271 ca_fname.resize(ss.str().size() + 1);
272 memcpy(ca_fname.data(), ss.str().c_str(), ss.str().size());
273
274 int ca_fd = mkstemps(ca_fname.data(), 4);
275 if (ca_fd < 0) {
276 err.
Emsg(
"TempCA",
"Failed to create temp file:", strerror(errno));
277 return std::unique_ptr<TempCAGuard>();
278 }
279
280 std::stringstream ss2;
281 ss2 << ca_tmp_dir << "/crl_file.XXXXXX.pem";
282 std::vector<char> crl_fname;
283 crl_fname.resize(ss2.str().size() + 1);
284 memcpy(crl_fname.data(), ss2.str().c_str(), ss2.str().size());
285
286 int crl_fd = mkstemps(crl_fname.data(), 4);
287 if (crl_fd < 0) {
288 err.
Emsg(
"TempCA",
"Failed to create temp file:", strerror(errno));
289 return std::unique_ptr<TempCAGuard>();
290 }
291 return std::unique_ptr<TempCAGuard>(
new TempCAGuard(ca_fd, crl_fd, ca_tmp_dir, ca_fname.data(), crl_fname.data()));
292}
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
TempCAGuard(const TempCAGuard &)=delete