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