[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