Would you want to try (and comment on) the attached patch?
Greetings
Marc
diff --git a/AdduserLogging.pm b/AdduserLogging.pm
index dd39d26..0ecb959 100644
--- a/AdduserLogging.pm
+++ b/AdduserLogging.pm
@@ -50,6 +50,8 @@ my $stderrmsglevel="error";
my $stdoutmsglevel="error";
my $logmsglevel="info";;
my $loggerparms="";
+my $has_sys_admin;
+my $logger_id_option;
my $logtrace=$ENV{"ADDUSER_LOGTRACE"};
sub gtx {
@@ -109,15 +111,36 @@ sub logmsglevel {
}
};
+sub check_sys_admin {
+ # this checks for SYS_ADMIN privilege, see #1074567
+ return $has_sys_admin if defined $has_sys_admin;
+ open my $fh, '<', '/proc/self/status' or die "Can't open
/proc/self/status: $!";
+
+ while (my $line = <$fh>) {
+ if ($line =~ /^CapEff:\s+[0-9a-fA-F]{10}([0-9a-fA-F]+)/) {
+ my $cap_eff = hex($1);
+ # Check if the CAP_SYS_ADMIN bit (21st bit) is set
+ $has_sys_admin = $cap_eff & (1 << 21);
+ last;
+ }
+ }
+ close $fh;
+ return $has_sys_admin;
+}
+
sub log_to_syslog {
# use a pipe or system to logger, which is in bsdutils and thus essential
# use --id=adduser[pid]
# make logger parameters configurable (--udp, --journald, for example)
my ($prio, $data) = @_;
my $facility = 'user';
- # $$ would be $PID of we had English.pm
+ if( ! defined $logger_id_option ) {
+ # $$ would be $PID of we had English.pm
+ $logger_id_option="--id=". $$;
+ $logger_id_option="" if ! check_sys_admin;
+ }
my @command= ("logger",
- "--id=". $$,
+ $logger_id_option,
"--tag=". progname(),
"--priority=". $facility.".".$prio,
$loggerparms, "--",