From b09c97ca3f7f5d91252f527369d8400c8abbc4f5 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Thu, 20 Aug 2026 07:21:07 +0800 Subject: Use spool instead of queue file. --- deploy.cgi.sh | 24 ++++++++++++++++++------ lex.cgi | 30 ++++++++++++++++++------------ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/deploy.cgi.sh b/deploy.cgi.sh index 4ccd5de..03ba02b 100644 --- a/deploy.cgi.sh +++ b/deploy.cgi.sh @@ -30,21 +30,33 @@ fi # directory tree mkdir -p "/var/www/var" -chmod 755 "/var/www/var" chown root:daemon "/var/www/var" +chmod 755 "/var/www/var" mkdir -p "/var/www/var/lex" -chmod 710 "/var/www/var/lex" chown www:tool "/var/www/var/lex" +chmod 710 "/var/www/var/lex" + +mkdir -p "/var/www/var/lex/locks" +chown www:www "/var/www/var/lex/locks" +chmod 750 "/var/www/var/lex/locks" + +mkdir -p "/var/www/var/lex/spool" +chown www:tool "/var/www/var/lex/spool" +chmod 710 "/var/www/var/lex/spool" + +mkdir -p "/var/www/var/lex/spool/tmp" +chown www:www "/var/www/var/lex/spool/tmp" +chmod 750 "/var/www/var/lex/spool/tmp" + +mkdir -p "/var/www/var/lex/spool/new" +chown www:tool "/var/www/var/lex/spool/new" +chmod 2770 "/var/www/var/lex/spool/new" mkdir -p "/var/www/var/log" chmod 1770 "/var/www/var/log" chown www:tool "/var/www/var/log" -mkdir -p "/var/www/var/lex/locks" -chmod 750 "/var/www/var/lex/locks" -chown www:www "/var/www/var/lex/locks" - # pubring.gpg cp -f "$SRCDIR/pubring.gpg" "/var/www/var/lex/pubring.gpg" chmod 440 "/var/www/var/lex/pubring.gpg" diff --git a/lex.cgi b/lex.cgi index da17fc5..255ab34 100755 --- a/lex.cgi +++ b/lex.cgi @@ -9,7 +9,7 @@ use File::Find; use File::Path qw(make_path); use OpenBSD::Pledge; use OpenBSD::Unveil; -use Time::HiRes qw(time); +use Time::HiRes qw(gettimeofday time); my $start_time = time(); @@ -39,6 +39,7 @@ BEGIN { my $log_dir = "/var/log"; my $base_dir = "/var/lex"; +my $spool_dir = "/var/lex/spool"; my $keyring_file = "$base_dir/pubring.gpg"; unveil("/dev/null", "rw") or die "unveil /dev/null failed: $!"; @@ -257,24 +258,29 @@ unless (length($plain_text) > 0) { respond_ok(); } +my ($sec, $usec) = gettimeofday(); +my $spool_filename = sprintf("spool_%d%06d_%d.job", $sec, $usec, $$); +my $tmp_spool_file = "$spool_dir/tmp/$spool_filename.tmp"; +my $spool_file = "$spool_dir/new/$spool_filename"; + # Set umask so group gets read/write (0666 & ~0007 = 0660) my $old_umask = umask(007); -my $queue_file = "$base_dir/queue.txt"; -my $is_new = ! -e $queue_file; - -my $qfh; -unless (open($qfh, '>>:utf8', $queue_file)) { - log_msg("ERROR: Failed to append to $queue_file: $!"); +my $sfh; +unless (open($sfh, '>:utf8', $tmp_spool_file)) { + umask($old_umask); + log_msg("ERROR: Failed to create $tmp_spool_file: $!"); respond_ok(); } -if ($is_new) { - my $tool_gid = getgrnam('tool'); - chown -1, $tool_gid, $queue_file; +print $sfh $plain_text . "\n"; +close($sfh); + +unless (rename($tmp_spool_file, $spool_file)) { + umask($old_umask); + log_msg("ERROR: Failed to create $spool_file: $!"); + respond_ok(); } -print $qfh $plain_text . "\n"; -close($qfh); umask($old_umask); my $elapsed_ms = sprintf("%.2fms", (time() - $start_time) * 1000); -- cgit v1.2.3