Bug #2696
Bad file descriptor handling in _silent_system function
| Status: | CLOSED | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 100% | |
| Category: | nethserver-lib | |||
| Target version: | v6.5-final | |||
| Security class: | Resolution: | |||
| Affected version: | v6.5-rc1 | NEEDINFO: | No | 
Description
Symptom
Ejabberd creates a crash dump every time the Dashboard page is loaded.
Step to reproduce
Reload the Dashboard page, check a new crash file (erl_crash_<time>.dump) is created under /var/log/ejabberd directory.
Analysis
The Dashboard checks service running status on each load using /usr/libexec/nethserver/read-service-status script.
This  script relies on NethServer::Service library which implements a call to the underling system (init or upstart).
The _silent_system handle this check trying to avoid output on stderr and stdout, but current implementation seems to have problems with init scripts spawning multiple children.
Very simple proposed patch (tested):
diff --git a/lib/perl/NethServer/Service.pm b/lib/perl/NethServer/Service.pm
index 6571d43..1e645e7 100644
--- a/lib/perl/NethServer/Service.pm
+++ b/lib/perl/NethServer/Service.pm
@@ -397,14 +397,7 @@ sub _get_command
 #
 sub _silent_system
 {
-    if(fork()) {
-       wait();
-       return $?;
-    } else {
-       open(STDOUT, '/dev/null');
-       open(STDERR, '/dev/null');
-       exec(@_);
-    }
+    return system("@_ &>/dev/null")
 }
 #
  Associated revisions
Service.pm (_silent_system): fixed IO redirections in child process. Refs #2696
History
#1
     Updated by Giacomo Sanchietti over 7 years ago
    Updated by Giacomo Sanchietti over 7 years ago
    - Subject changed from Bad file descriptor handling _silent_system function to Bad file descriptor handling in _silent_system function
#2
     Updated by Davide Principi over 7 years ago
    Updated by Davide Principi over 7 years ago
    - Status changed from NEW to TRIAGED
- % Done changed from 0 to 20
#3
     Updated by Davide Principi over 7 years ago
    Updated by Davide Principi over 7 years ago
    - Status changed from TRIAGED to ON_DEV
- Assignee set to Davide Principi
- % Done changed from 20 to 30
#4
     Updated by Davide Principi over 7 years ago
    Updated by Davide Principi over 7 years ago
    - Status changed from ON_DEV to MODIFIED
- % Done changed from 30 to 60
MODIFIED
#5
     Updated by Davide Principi over 7 years ago
    Updated by Davide Principi over 7 years ago
    - Status changed from MODIFIED to ON_QA
- Assignee deleted (Davide Principi)
- % Done changed from 60 to 70
In nethserver-testing:
nethserver-lib-2.0.1-1.0gitac5ebd6c.ns6.noarch.rpm
#6
     Updated by Giacomo Sanchietti over 7 years ago
    Updated by Giacomo Sanchietti over 7 years ago
    - Assignee set to Giacomo Sanchietti
#7
     Updated by Giacomo Sanchietti over 7 years ago
    Updated by Giacomo Sanchietti over 7 years ago
    - Status changed from ON_QA to VERIFIED
- Assignee deleted (Giacomo Sanchietti)
- % Done changed from 70 to 90
Ejabberd no more creates crash dump.
All service status are reported correctly.
#8
     Updated by Davide Principi over 7 years ago
    Updated by Davide Principi over 7 years ago
    - Status changed from VERIFIED to CLOSED
- % Done changed from 90 to 100
In nethserver-updates:
nethserver-lib-2.0.2-1.ns6.noarch.rpm