[LON-CAPA-cvs] cvs: doc /loncapafiles axe_config_check.piml

raeburn raeburn at source.lon-capa.org
Sun Jul 19 23:41:17 EDT 2026


raeburn		Mon Jul 20 03:41:17 2026 EDT

  Modified files:              
    /doc/loncapafiles	axe_config_check.piml 
  Log:
  - In debian the path to the chromium browser is /usr/bin/chromium
  - Eliminate use of shell with a forked pipe.
  - Use untainted exec() call by forcing list processing mode.
  - Set $ENV{USER}, $ENV{HOME}, and $ENV{SHELL} to appropriate values for
    www user in forked child process.  
  
  
Index: doc/loncapafiles/axe_config_check.piml
diff -u doc/loncapafiles/axe_config_check.piml:1.3 doc/loncapafiles/axe_config_check.piml:1.4
--- doc/loncapafiles/axe_config_check.piml:1.3	Tue Jul 14 01:25:16 2026
+++ doc/loncapafiles/axe_config_check.piml	Mon Jul 20 03:41:17 2026
@@ -2,7 +2,7 @@
 	"http://lpml.sourceforge.net/DTD/piml.dtd">
 <!-- axe_config_check.piml -->
 
-<!-- $Id: axe_config_check.piml,v 1.3 2026/07/14 01:25:16 raeburn Exp $ -->
+<!-- $Id: axe_config_check.piml,v 1.4 2026/07/20 03:41:17 raeburn Exp $ -->
 
 <!--
 
@@ -36,16 +36,22 @@
 <perlscript mode="fg">
 use strict;
 use Cwd;
+use POSIX();
 
 my $addexport = 1;
 my $wwwuid = getpwnam('www');
 my $wwwgid = getgrnam('www');
+my $path_to_chromium = '/usr/bin/chromium-browser';
+if (('<DIST />' eq 'debian10') || ('<DIST />' eq 'debian11') ||
+    ('<DIST />' eq 'debian12') || ('<DIST />' eq 'debian13')) {
+    $path_to_chromium = '/usr/bin/chromium';
+}
 
 if (-e '/home/www/.bashrc') {
     if (open(my $fh,'<','/home/www/.bashrc')) {
         while (my $line = <$fh>) {
             chomp($line);
-            if ($line =~ m{^\Qexport PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium-browser"\E$}) {
+            if ($line =~ m{^\Qexport PUPPETEER_EXECUTABLE_PATH="$path_to_chromium"\E$}) {
                 $addexport = 0;
                 last;
             }
@@ -54,35 +60,51 @@
     }
     if ($addexport) {
         if (open(my $fh,'>>','/home/www/.bashrc')) {
-            print $fh 'export PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium-browser"'."\n";
+            print $fh 'export PUPPETEER_EXECUTABLE_PATH="$path_to_chromium"'."\n";
             close($fh);
         }
     }
 } else {
     if (open(my $fh,'>','/home/www/.bashrc')) {
-        print $fh 'export PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium-browser"'."\n";
+        print $fh 'export PUPPETEER_EXECUTABLE_PATH="$path_to_chromium"'."\n";
         close($fh);
         chown($wwwuid,$wwwgid,'/home/www/.bashrc');
         chmod(0644,'/home/www/.bashrc');
     }
 }
 
+if ($addexport) {
+    print 'Added: \'export PUPPETEER_EXECUTABLE_PATH="$path_to_chromium"\' to /home/www/.bashrc'."\n";
+}
+
 my $original_dir = cwd();
 
-$) = $wwwgid;
-$> = $wwwuid;
 if (chdir '/home/httpd/node.js/axe') {
-    if (open(PIPE,"npm install|")) {
-        my @lines = (<PIPE>);
-        close(PIPE);
-        chomp(@lines);
-        foreach my $line (@lines) {
-            print "$line\n";
+    my $pipe;
+    my $pid = open($pipe, '-|');
+
+    if ($pid == 0) {
+        my ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid($wwwuid);
+        $ENV{USER}  = $name;
+        $ENV{HOME}  = $dir;
+        $ENV{SHELL} = $shell;
+        POSIX::setgid($wwwgid);
+        POSIX::setuid($wwwuid);
+        # Verify that the switch was successful
+        if ($) == $wwwgid && $> == $wwwuid) {
+            my @args = ('npm','install');
+            exec { $args[0] } @args;
+        } else {
+            print "Failed to switch to www:www in forked child process.\n";
+        }
+    } else {
+        print "Output from running npm install in /home/httpd/node.js/axe: \n";
+        while (my $line = <$pipe>) {
+            print $line;
         }
+        close($pipe);
     }
 }
-$> = $<;
-$) = $(; 
 chdir $original_dir;
 
 </perlscript>




More information about the LON-CAPA-cvs mailing list