In pam_systemd.so and pam_systemd_home.so, we open a bus connection on
session close, which is called after fork. Closing the connection is
harmless, and should not warn about that.
This suppresses the following log message:
===
(sd-pam)[127]: PAM Attempted to close sd-bus after fork, this should not happen.
===
#include <stdlib.h>
#include "alloc-util.h"
+#include "bus-internal.h"
#include "errno-util.h"
#include "format-util.h"
#include "macro.h"
* internally anyway. That said, we still generate a warning message, since this really shouldn't
* happen. */
- if (error_status & PAM_DATA_SILENT)
- pam_syslog(handle, LOG_DEBUG, "Attempted to close sd-bus after fork, this should not happen.");
+ if (!data)
+ return;
+
+ PamBusData *d = data;
+ if (FLAGS_SET(error_status, PAM_DATA_SILENT) &&
+ d->bus && bus_origin_changed(d->bus))
+ pam_syslog(handle, LOG_DEBUG, "Attempted to close sd-bus after fork whose connection is opened before the fork, this should not happen.");
pam_bus_data_free(data);
}