]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
coredumpctl: fix handling of files written to fd
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 26 Sep 2016 22:10:04 +0000 (00:10 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 28 Sep 2016 21:49:01 +0000 (23:49 +0200)
Added in 9fe13294a9 (by me :[```), and later obfuscated in d0c8806d4ab, if an
uncompressed external file or an internally stored coredump was supposed to be
written to a file descriptor, nothing would be written.

src/coredump/coredumpctl.c

index 67bf502e738373ccde72ab9c2c37fd31af330742..05a097076bf75c44d7f3e41ddbc7be24e760217a 100644 (file)
@@ -593,16 +593,16 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) {
         else if (r == 0)
                 retrieve(data, len, "COREDUMP_FILENAME", &filename);
 
-        if (filename && access(filename, R_OK) < 0)
-                return log_error_errno(errno, "File \"%s\" is not readable: %m", filename);
+        if (filename) {
+                if (access(filename, R_OK) < 0)
+                        return log_error_errno(errno, "File \"%s\" is not readable: %m", filename);
 
-        if (filename && !endswith(filename, ".xz") && !endswith(filename, ".lz4")) {
-                if (path) {
+                if (path && !endswith(filename, ".xz") && !endswith(filename, ".lz4")) {
                         *path = filename;
                         filename = NULL;
-                }
 
-                return 0;
+                        return 0;
+                }
         }
 
         if (fd < 0) {
@@ -659,13 +659,13 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) {
                 data += 9;
                 len -= 9;
 
-                sz = write(fdt, data, len);
+                sz = write(fd, data, len);
                 if (sz < 0) {
-                        r = log_error_errno(errno, "Failed to write temporary file: %m");
+                        r = log_error_errno(errno, "Failed to write output: %m");
                         goto error;
                 }
                 if (sz != (ssize_t) len) {
-                        log_error("Short write to temporary file.");
+                        log_error("Short write to output.");
                         r = -EIO;
                         goto error;
                 }