Currently the Pgpool-II startup user is "root" user.
Because of the security reason, startup Pgpool-II
using non-root user is recommended.
For this reason, I modified "pgpool.service" file to start
Pgpool using "postres" user, and allow "postrges" user to
run "if_up/down_cmd" and "arping_cmd" with sudo without a password.
The default setting of "if_up/down_cmd" and "arping_cmd" is changed:
if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
If if_up/down_cmd or arping_cmd starts with "/",
the setting specified in "if_cmd_path" or "arping_path" will be ignored.
This patch also changes all of the config files permission to 600.
will use to switch the virtual IP on the system.
Set only the path of the directory containing the binary,
such as <literal>"/sbin"</literal> or such directory.
+ If <xref linkend="guc-if-up-cmd"> or <xref linkend="guc-if-down-cmd"> starts with "/",
+ this parameter will be ignored.
-->
<productname>Pgpool-II</productname>ใไปฎๆณIPใๅใๆฟใใใใใซไฝฟ็จใใใณใใณใใธใฎใในใๆๅฎใใพใใ
- <literal>"/bin"</literal>ใฎใใใซใในใ ใใๆๅฎใใพใใ
+ <literal>"/sbin"</literal>ใฎใใใซใในใ ใใๆๅฎใใพใใ
+ <varname>if_up_cmd</varname>ใ<varname>if_down_cmd</varname>ใซๆๅฎใใใณใใณใใ"/"ใงๅงใพใๅ ดๅใ
+ ใใซใในใจใฟใชใ<varname>if_cmd_path</varname>ใฎ่จญๅฎใ็ก่ฆใใพใใ
</para>
<para>
<!--
<!--
Specifies the command to bring up the virtual IP.
Set the command and parameters such as
- <command>"ip addr add $_IP_$/24 dev eth0 label eth0:0"</command>
+ <literal>"ip addr add $_IP_$/24 dev eth0 label eth0:0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow Pgpool-II startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0"</literal>.
<literal>$_IP_$</literal> will get replaced by the IP address
specified in the <xref linkend="guc-delegate-IP">.
-->
ไปฎๆณIPใ่ตทๅใใใใใซๅฎ่กใใใณใใณใใๆๅฎใใพใใ
<command>"ip addr add $_IP_$/24 dev eth0 label eth0:0"</command>ใฎใใใซใณใใณใใจใใฉใกใผใฟใๆๅฎใใพใใ
+ ใใใณใใณใใๅฎ่กใใใซใฏ<literal>root</literal>ๆจฉ้ใๅฟ
่ฆใจใชใใพใใฎใงใไธ่ฌใฆใผใถใๅฎ่กใงใใใใใซ
+ <command>ip</command>ใณใใณใใซ<command>setuid</command>ใ่จญๅฎใใใใ
+ <productname>Pgpool-II</productname>่ตทๅใฆใผใถ(ใใใฉใซใใงใฏ<literal>postgres</literal>)ใใในใฏใผใใชใใซ<command>sudo</command>ใๅฎ่กใงใใใใใซ่จญๅฎใใ
+ <command>sudo</command>ใไปใใใณใใณใใ<literal>"/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0"</literal>ใฎใใใซๆๅฎใใพใใ
<literal>$_IP_$</literal>ใฏ<xref linkend="guc-delegate-IP">ใงๆๅฎใใใIPใขใใฌในใซ็ฝฎๆใใใพใใ
</para>
<para>
Specifies the command to bring down the virtual IP.
Set the command and parameters such as
<literal>"ip addr del $_IP_$/24 dev eth0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow Pgpool-II startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0"</literal>.
+ <literal>$_IP_$</literal> will get replaced by the IP address
+ specified in the <xref linkend="guc-delegate-IP">.
-->
ไปฎๆณIPใๅๆญขใใใใใซๅฎ่กใใใณใใณใใๆๅฎใใพใใ
<literal>"ip addr del $_IP_$/24 dev eth0"</literal>ใฎใใใซใณใใณใใจใใฉใกใผใฟใๆๅฎใใพใใ
+ ใใใณใใณใใๅฎ่กใใใซใฏrootๆจฉ้ใๅฟ
่ฆใจใชใใพใใฎใงใไธ่ฌใฆใผใถใๅฎ่กใงใใใใใซ
+ <command>ip</command>ใณใใณใใซ<command>setuid</command>ใ่จญๅฎใใใใ
+ <productname>Pgpool-II</productname>่ตทๅใฆใผใถ(ใใใฉใซใใงใฏ<literal>postgres</literal>)ใใในใฏใผใใชใใซ<command>sudo</command>ใๅฎ่กใงใใใใใซ่จญๅฎใใ
+ <command>sudo</command>ใไปใใใณใใณใใ<literal>"/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0"</literal>ใฎใใใซๆๅฎใใพใใ
+ <literal>$_IP_$</literal>ใฏ<xref linkend="guc-delegate-IP">ใงๆๅฎใใใIPใขใใฌในใซ็ฝฎๆใใใพใใ
</para>
<para>
<!--
will use to send the ARP requests after the virtual IP switch.
Set only the path of the directory containing the binary,
such as <literal>"/usr/sbin"</literal> or such directory.
+ If <xref linkend="guc-arping-cmd"> starts with "/",
+ this parameter will be ignored.
-->
IPใขใใฌในๅใๆฟใๅพใซ<productname>Pgpool-II</productname>ใARPใชใฏใจในใใ้ไฟกใใใณใใณใใธใฎใในๆๅฎใใพใใ
- <literal>"/usr/sbin"</literal>ใฎใใใซใในใ ใใๆๅฎใใพใใ
+ <literal>"/usr/sbin"</literal>ใฎใใใซใในใ ใใๆๅฎใใพใใ
+ <varname>arping_cmd</varname>ใซๆๅฎใใใณใใณใใ"/"ใงๅงใพใๅ ดๅใ
+ ใใซใในใจใฟใชใ<varname>arping_path</varname>ใฎ่จญๅฎใ็ก่ฆใใพใใ
</para>
<para>
<!--
Specifies the command to use for sending the ARP requests
after the virtual IP switch.
Set the command and parameters such as
- <literal>"arping -U $_IP_$ -w 1"</literal>.
+ <literal>"arping -U $_IP_$ -w 1 -I eth0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow Pgpool-II startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0"</literal>.
<literal>$_IP_$</literal> will get replaced by
the IP address specified in the <varname>delegate_IP</varname>.
-->
IPใขใใฌในๅใๆฟใๅพใซARPใชใฏใจในใใ้ไฟกใใใณใใณใใงใใ
- <literal>"arping -U $_IP_$ -w 1"</literal>ใฎใใใซใณใใณใใจใใฉใกใผใฟใๆๅฎใใพใใ
- <literal>$_IP_$</literal>ใฏ<varname>delegate_IP</varname>ใงๆๅฎใใใIPใขใใฌในใซ็ฝฎๆใใใพใใ
+ <literal>"arping -U $_IP_$ -w 1 -I eth0"</literal>ใฎใใใซใณใใณใใจใใฉใกใผใฟใๆๅฎใใพใใ
+ ใใใณใใณใใๅฎ่กใใใซใฏrootๆจฉ้ใๅฟ
่ฆใจใชใใพใใฎใงใไธ่ฌใฆใผใถใๅฎ่กใงใใใใใซ
+ <command>arping</command>ใณใใณใใซ<literal>setuid</literal>ใ่จญๅฎใใใใ
+ <productname>Pgpool-II</productname>่ตทๅใฆใผใถ(ใใใฉใซใใงใฏ<literal>postgres</literal>ใฆใผใถ)ใใในใฏใผใใชใใซ<command>sudo</command>ใๅฎ่กใงใใใใใซ่จญๅฎใใ
+ <command>sudo</command>ใไปใใใณใใณใใ<literal>"/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0"</literal>ใฎใใใซ่จญๅฎใใพใใ
+ <literal>$_IP_$</literal>ใฏ<xref linkend="guc-delegate-IP">ใงๆๅฎใใใIPใขใใฌในใซ็ฝฎๆใใใพใใ
</para>
<para>
<!--
will use to switch the virtual IP on the system.
Set only the path of the directory containing the binary,
such as <literal>"/sbin"</literal> or such directory.
+ If <xref linkend="guc-if-up-cmd"> or <xref linkend="guc-if-down-cmd"> starts with "/",
+ this parameter will be ignored.
</para>
<para>
This parameter can only be set at server start.
<para>
Specifies the command to bring up the virtual IP.
Set the command and parameters such as
- <command>"ip addr add $_IP_$/24 dev eth0 label eth0:0"</command>
+ <literal>"ip addr add $_IP_$/24 dev eth0 label eth0:0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow <productname>Pgpool-II</productname> startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0"</literal>.
<literal>$_IP_$</literal> will get replaced by the IP address
specified in the <xref linkend="guc-delegate-IP">.
</para>
Specifies the command to bring down the virtual IP.
Set the command and parameters such as
<literal>"ip addr del $_IP_$/24 dev eth0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow <productname>Pgpool-II</productname> startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0"</literal>.
+ <literal>$_IP_$</literal> will get replaced by the IP address
+ specified in the <xref linkend="guc-delegate-IP">.
</para>
<para>
This parameter can only be set at server start.
will use to send the ARP requests after the virtual IP switch.
Set only the path of the directory containing the binary,
such as <literal>"/usr/sbin"</literal> or such directory.
+ If <xref linkend="guc-arping-cmd"> starts with "/",
+ this parameter will be ignored.
</para>
<para>
This parameter can only be set at server start.
Specifies the command to use for sending the ARP requests
after the virtual IP switch.
Set the command and parameters such as
- <literal>"arping -U $_IP_$ -w 1"</literal>.
+ <literal>"arping -U $_IP_$ -w 1 -I eth0"</literal>.
+ Since root privilege is required to execute this command,
+ use <command>setuid</command> on <command>ip</command> command or
+ allow <productname>Pgpool-II</productname> startup user (<literal>postgres</literal> user by default)
+ to run <command>sudo</command> command without a password, and specify it such as
+ <literal>"/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0"</literal>.
<literal>$_IP_$</literal> will get replaced by
the IP address specified in the <varname>delegate_IP</varname>.
</para>
CONFIG_VAR_TYPE_STRING, false, 0
},
&g_pool_config.if_up_cmd,
- "ip addr add $_IP_$/24 dev eth0 label eth0:0",
+ "/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0",
NULL, NULL, NULL, NULL
},
CONFIG_VAR_TYPE_STRING, false, 0
},
&g_pool_config.if_down_cmd,
- "ip addr del $_IP_$/24 dev eth0",
+ "/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0",
NULL, NULL, NULL, NULL
},
CONFIG_VAR_TYPE_STRING, false, 0
},
&g_pool_config.arping_cmd,
- "arping -U $_IP_$ -w 1",
+ "/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0",
NULL, NULL, NULL, NULL
},
mv %{buildroot}%{_sysconfdir}/%{short_name}/pcp.conf.sample %{buildroot}%{_sysconfdir}/%{short_name}/pcp.conf
mv %{buildroot}%{_sysconfdir}/%{short_name}/pgpool.conf.sample %{buildroot}%{_sysconfdir}/%{short_name}/pgpool.conf
mv %{buildroot}%{_sysconfdir}/%{short_name}/pool_hba.conf.sample %{buildroot}%{_sysconfdir}/%{short_name}/pool_hba.conf
+touch %{buildroot}%{_sysconfdir}/%{short_name}/pool_passwd
%if %{systemd_enabled}
install -d %{buildroot}%{_unitdir}
mkdir -p %{buildroot}%{_tmpfilesdir}
cat > %{buildroot}%{_tmpfilesdir}/%{name}.conf <<EOF
-d %{_varrundir} 0755 root root -
+d %{_varrundir} 0755 postgres postgres -
EOF
%else
install -d %{buildroot}%{_initrddir}
%clean
rm -rf %{buildroot}
+%pre
+groupadd -g 26 -o -r postgres >/dev/null 2>&1 || :
+useradd -M -g postgres -o -r -d /var/lib/pgsql -s /bin/bash \
+ -c "PostgreSQL Server" -u 26 postgres >/dev/null 2>&1 || :
+
%post
/sbin/ldconfig
+echo 'postgres ALL=NOPASSWD: /sbin/ip' | sudo EDITOR='tee -a' visudo
+echo 'postgres ALL=NOPASSWD: /usr/sbin/arping' | sudo EDITOR='tee -a' visudo
%if %{systemd_enabled}
%systemd_post pgpool.service
%{_mandir}/man1/*.1.gz
%{_datadir}/%{short_name}/insert_lock.sql
%{_datadir}/%{short_name}/pgpool.pam
+%{_libdir}/libpcp.so.*
+%if %{systemd_enabled}
+%ghost %{_varrundir}
+%{_tmpfilesdir}/%{name}.conf
+%{_unitdir}/pgpool.service
+%else
+%{_initrddir}/pgpool
+%endif
+%defattr(600,postgres,postgres,-)
%{_sysconfdir}/%{short_name}/pgpool.conf.sample-master-slave
%{_sysconfdir}/%{short_name}/pgpool.conf.sample-replication
%{_sysconfdir}/%{short_name}/pgpool.conf.sample-stream
%{_sysconfdir}/%{short_name}/pgpool.conf.sample-logical
+%defattr(755,postgres,postgres,-)
%{_sysconfdir}/%{short_name}/failover.sh.sample
%{_sysconfdir}/%{short_name}/follow_master.sh.sample
%{_sysconfdir}/%{short_name}/pgpool_remote_start.sample
%{_sysconfdir}/%{short_name}/recovery_1st_stage.sample
%{_sysconfdir}/%{short_name}/recovery_2nd_stage.sample
-%{_libdir}/libpcp.so.*
-%if %{systemd_enabled}
-%ghost %{_varrundir}
-%{_tmpfilesdir}/%{name}.conf
-%{_unitdir}/pgpool.service
-%else
-%{_initrddir}/pgpool
-%endif
-%attr(764,root,root) %config(noreplace) %{_sysconfdir}/%{short_name}/*.conf
+%attr(600,postgres,postgres) %config(noreplace) %{_sysconfdir}/%{short_name}/*.conf
+%attr(600,postgres,postgres) %config(noreplace) %{_sysconfdir}/%{short_name}/pool_passwd
%config(noreplace) %{_sysconfdir}/sysconfig/pgpool
%files devel
[Service]
+User=postgres
+Group=postgres
+
EnvironmentFile=-/etc/sysconfig/pgpool
ExecStart=/usr/bin/pgpool -f /etc/pgpool-II/pgpool.conf $OPTS
# If this is empty, virtual IP never bring up.
# (change requires restart)
if_cmd_path = '/sbin'
- # path to the directory where if_up/down_cmd exists
+ # path to the directory where if_up/down_cmd exists
+ # If if_up/down_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
+if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
# startup delegate IP command
# (change requires restart)
-if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
+if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
# shutdown delegate IP command
# (change requires restart)
arping_path = '/usr/sbin'
# arping command path
+ # If arping_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
+arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
# arping command
# (change requires restart)
delegate_IP = ''
# delegate IP address
- # If this is empty, virtual IP never bring up.
+ # If this is empty, virtual IP never bring up.
# (change requires restart)
if_cmd_path = '/sbin'
- # path to the directory where if_up/down_cmd exists
+ # path to the directory where if_up/down_cmd exists
+ # If if_up/down_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
+if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
# startup delegate IP command
# (change requires restart)
-if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
+if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
# shutdown delegate IP command
# (change requires restart)
arping_path = '/usr/sbin'
# arping command path
+ # If arping_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
+arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
# arping command
# (change requires restart)
delegate_IP = ''
# delegate IP address
- # If this is empty, virtual IP never bring up.
+ # If this is empty, virtual IP never bring up.
# (change requires restart)
if_cmd_path = '/sbin'
- # path to the directory where if_up/down_cmd exists
+ # path to the directory where if_up/down_cmd exists
+ # If if_up/down_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
+if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
# startup delegate IP command
# (change requires restart)
-if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
+if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
# shutdown delegate IP command
# (change requires restart)
arping_path = '/usr/sbin'
# arping command path
+ # If arping_cmd starts with "/", arping_path will be ignored.
# (change requires restart)
-arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
+arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
# arping command
# (change requires restart)
delegate_IP = ''
# delegate IP address
- # If this is empty, virtual IP never bring up.
+ # If this is empty, virtual IP never bring up.
# (change requires restart)
if_cmd_path = '/sbin'
- # path to the directory where if_up/down_cmd exists
+ # path to the directory where if_up/down_cmd exists
+ # If if_up/down_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
+if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
# startup delegate IP command
# (change requires restart)
-if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
+if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
# shutdown delegate IP command
# (change requires restart)
arping_path = '/usr/sbin'
# arping command path
+ # If arping_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
+arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
# arping command
# (change requires restart)
delegate_IP = ''
# delegate IP address
- # If this is empty, virtual IP never bring up.
+ # If this is empty, virtual IP never bring up.
# (change requires restart)
if_cmd_path = '/sbin'
- # path to the directory where if_up/down_cmd exists
+ # path to the directory where if_up/down_cmd exists
+ # If if_up/down_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
+if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'
# startup delegate IP command
# (change requires restart)
-if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
+if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'
# shutdown delegate IP command
# (change requires restart)
arping_path = '/usr/sbin'
# arping command path
+ # If arping_cmd starts with "/", if_cmd_path will be ignored.
# (change requires restart)
-arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
+arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'
# arping command
# (change requires restart)
command = wd_get_cmd(pool_config->if_up_cmd);
if (command)
{
- snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);
+
+ if (command[0] == '/')
+ snprintf(path, sizeof(path), "%s", command);
+ else
+ snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);
+
rtn = exec_if_cmd(path, pool_config->if_up_cmd);
pfree(command);
}
command = wd_get_cmd(pool_config->arping_cmd);
if (command)
{
- snprintf(path, sizeof(path), "%s/%s", pool_config->arping_path, command);
+ if (command[0] == '/')
+ snprintf(path, sizeof(path), "%s", command);
+ else
+ snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);
+
rtn = exec_if_cmd(path, pool_config->arping_cmd);
pfree(command);
}
command = wd_get_cmd(pool_config->if_down_cmd);
if (command)
{
- snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);
+ if (command[0] == '/')
+ snprintf(path, sizeof(path), "%s", command);
+ else
+ snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);
+
rtn = exec_if_cmd(path, pool_config->if_down_cmd);
pfree(command);
}
/* check setuid bit of ifup command */
command = wd_get_cmd(pool_config->if_up_cmd);
+ if (command[0] == '/')
+ return;
+
if (command)
{
snprintf(path, sizeof(path), "%s/%s", pool_config->if_cmd_path, command);