| 326 | } |
| 327 | |
| 328 | bool DebGenerator::generateControlTar(std::string const& md5Filename) const |
| 329 | { |
| 330 | std::string filename_control_tar = |
| 331 | this->WorkDir + "/control.tar" + this->CompressionSuffix; |
| 332 | |
| 333 | cmGeneratedFileStream fileStream_control_tar; |
| 334 | fileStream_control_tar.Open(filename_control_tar, false, true); |
| 335 | if (!fileStream_control_tar) { |
| 336 | cmCPackLogger(cmCPackLog::LOG_ERROR, |
| 337 | "Error opening the file \"" |
| 338 | << filename_control_tar << "\" for writing" << std::endl); |
| 339 | return false; |
| 340 | } |
| 341 | cmArchiveWrite control_tar(fileStream_control_tar, this->TarCompressionType, |
| 342 | this->DebianArchiveType, this->CompressionLevel); |
| 343 | if (!control_tar.Open()) { |
| 344 | cmCPackLogger(cmCPackLog::LOG_ERROR, |
| 345 | "Error opening the archive \"" |
| 346 | << filename_control_tar |
| 347 | << "\", ERROR = " << control_tar.GetError() << std::endl); |
| 348 | return false; |
| 349 | } |
| 350 | |
| 351 | // sets permissions and uid/gid for the files |
| 352 | control_tar.SetUIDAndGID(0u, 0u); |
| 353 | control_tar.SetUNAMEAndGNAME("root", "root"); |
| 354 | |
| 355 | /* permissions are set according to |
| 356 | https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners |
| 357 | and |
| 358 | https://lintian.debian.org/tags/control-file-has-bad-permissions.html |
| 359 | */ |
| 360 | mode_t const permission644 = 0644; |
| 361 | mode_t const permissionExecute = 0111; |
| 362 | mode_t const permission755 = permission644 | permissionExecute; |
| 363 | |
| 364 | // for md5sum and control (that we have generated here), we use 644 |
| 365 | // (RW-R--R--) |
| 366 | // so that deb lintian doesn't warn about it |
| 367 | control_tar.SetPermissions(permission644); |
| 368 | |
| 369 | // adds control and md5sums |
| 370 | if (!control_tar.Add(md5Filename, this->WorkDir.length(), ".") || |
| 371 | !control_tar.Add(this->WorkDir + "/control", this->WorkDir.length(), |
| 372 | ".")) { |
| 373 | cmCPackLogger(cmCPackLog::LOG_ERROR, |
| 374 | "Error adding file to tar:\n" |
| 375 | "#top level directory: " |
| 376 | << this->WorkDir |
| 377 | << "\n" |
| 378 | "#file: \"control\" or \"md5sums\"\n" |
| 379 | "#error:" |
| 380 | << control_tar.GetError() << std::endl); |
| 381 | return false; |
| 382 | } |
| 383 | |
| 384 | // adds generated shlibs file |
| 385 | if (this->GenShLibs) { |
no test coverage detected