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, "--",

Reply via email to