Hi Sami, Andreas,

On Mon, Jul 06, 2015 at 09:29:44AM +0200, Andreas Henriksson wrote:
> Robie Basak, could you please try if Samis patch resolves the issue
> you where experiencing? See attachement.

Thank you for working on this.

I get an error with this patch: "logger: close failed: Bad file
descriptor" and a subsequent non-zero exit status which then causes the
postinst to fail. Looking at the code, I think the reason is that
ctl->fd ends up with a file descriptor that failed to connect and thus
has been closed, and then logger_close() tries to close it again.

I fixed up the patch by expicitly returning an fd of -1 on logger_open()
failure (as well as setting ctl->noact to 1) so that ctl->fd ends up
being -1, and then checking for -1 in logger_close().

This now works. I reproduced the original failure and have observed that
it is solved with my amended patch. piuparts succeeds past the stage
that logger was causing it to fail before when I use my locally built
deb of the patched util-linux source.

Please review my amendments and apply.

Thanks,

Robie
--- a/misc-utils/logger.c
+++ b/misc-utils/logger.c
@@ -242,9 +242,10 @@ static int unix_socket(struct logger_ctl
 		if (ctl->unix_socket_errors)
 			err(EXIT_FAILURE, _("socket %s"), path);
 		else
-			/* See --socket-errors manual page entry for
-			 * explanation of this strange exit.  */
-			exit(EXIT_SUCCESS);
+			/* openlog(3) compatibility, socket errors are
+			 * not reported, but ignored silently */
+			ctl->noact = 1;
+			return -1;
 	}
 	return fd;
 }
@@ -685,7 +686,7 @@ static void logger_stdin(struct logger_c
 
 static void logger_close(const struct logger_ctl *ctl)
 {
-	if (close(ctl->fd) != 0)
+	if (ctl->fd != -1 && close(ctl->fd) != 0)
 		err(EXIT_FAILURE, _("close failed"));
 	free(ctl->hdr);
 }

Attachment: signature.asc
Description: Digital signature

Reply via email to