$OpenBSD: patch-lib_INetSim_Log_pm,v 1.1.1.1 2020/04/06 12:40:12 jasper Exp $

Insecure dependency in chown while running with -T switch at /usr/local/libdata/perl5/site_perl/INetSim/Log.pm

Index: lib/INetSim/Log.pm
--- lib/INetSim/Log.pm.orig
+++ lib/INetSim/Log.pm
@@ -38,7 +38,9 @@ sub init {
             print STDOUT "Main logfile '$mainlogfilename' successfully created.\n";
             close MLOG;
             chmod 0660, $mainlogfilename;
-            my $gid = getgrnam("inetsim");
+            $dummy = getgrnam(INetSim::Config::getConfigParameter("Default_RunAsGroup"));
+            $dummy =~ /\A(.*)\z/; # evil untaint!
+            my $gid = $1;
             if (! defined $gid) {
                 INetSim::error_exit("Unable to get GID for group 'inetsim'");
             }
@@ -53,7 +55,7 @@ sub init {
         my ($dev, $inode, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $mainlogfilename;
         my $grpname = getgrgid $gid;
         # check for group owner 'inetsim'
-        if ($grpname ne "inetsim") {
+        if ($grpname ne INetSim::Config::getConfigParameter("Default_RunAsGroup")) {
             INetSim::error_exit("Group owner of main logfile '$mainlogfilename' is not 'inetsim' but '$grpname'");
         }
         # check for group r/w permissions
@@ -71,7 +73,9 @@ sub init {
             print STDOUT "Sub logfile '$sublogfilename' successfully created.\n";
             close MLOG;
             chmod 0660, $sublogfilename;
-            my $gid = getgrnam("inetsim");
+            $dummy = getgrnam(INetSim::Config::getConfigParameter("Default_RunAsGroup"));
+            $dummy =~ /\A(.*)\z/; # evil untaint!
+            my $gid = $1;
             if (! defined $gid) {
                 INetSim::error_exit("Unable to get GID for group 'inetsim'");
             }
@@ -86,7 +90,7 @@ sub init {
         my ($dev, $inode, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $sublogfilename;
         my $grpname = getgrgid $gid;
         # check for group owner 'inetsim'
-        if ($grpname ne "inetsim") {
+        if ($grpname ne INetSim::Config::getConfigParameter("Default_RunAsGroup")) {
             INetSim::error_exit("Group owner of sub logfile '$sublogfilename' is not 'inetsim' but '$grpname'");
         }
         # check for group r/w permissions
@@ -104,7 +108,9 @@ sub init {
             print STDOUT "Debug logfile '$debuglogfilename' successfully created.\n";
             close MLOG;
             chmod 0660, $debuglogfilename;
-            my $gid = getgrnam("inetsim");
+            $dummy = getgrnam(INetSim::Config::getConfigParameter("Default_RunAsGroup"));
+            $dummy =~ /\A(.*)\z/; # evil untaint!
+            my $gid = $1;
             if (! defined $gid) {
                 INetSim::error_exit("Unable to get GID for group 'inetsim'");
             }
@@ -119,7 +125,7 @@ sub init {
         my ($dev, $inode, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $debuglogfilename;
         my $grpname = getgrgid $gid;
         # check for group owner 'inetsim'
-        if ($grpname ne "inetsim") {
+        if ($grpname ne INetSim::Config::getConfigParameter("Default_RunAsGroup")) {
             INetSim::error_exit("Group owner of debug logfile '$debuglogfilename' is not 'inetsim' but '$grpname'");
         }
         # check for group r/w permissions
