diff --git a/firewall/edit_rule.cgi b/firewall/edit_rule.cgi
index b65945e6e..233e9238d 100755
--- a/firewall/edit_rule.cgi
+++ b/firewall/edit_rule.cgi
@@ -228,127 +228,117 @@ print &ui_table_row($text{'edit_tcpflags'},
&tcpflag_input("tcpflags1", $rule->{'tcp-flags'}->[2])).
"");
-print "
| $text{'edit_tcpoption'} | \n";
-print "",&print_mode("tcpoption", $rule->{'tcp-option'}),"\n";
-printf " |
\n",
- $rule->{'tcp-option'}->[1];
+# TCP options
+print &ui_table_row($text{'edit_tcpoption'},
+ &print_mode("tcpoption", $rule->{'tcp-option'})." ".
+ &ui_textbox("tcpoption", $rule->{'tcp-option'}->[1], 6));
-print "
|
\n";
+print &ui_table_hr();
-print " | $text{'edit_icmptype'} | \n";
-print "",&print_mode("icmptype", $rule->{'icmp-type'}),"\n";
-print &icmptype_input("icmptype", $rule->{'icmp-type'}->[1])," |
\n";
+# ICMP packet type
+print &ui_table_row($text{'edit_icmptype'},
+ &print_mode("icmptype", $rule->{'icmp-type'})." ".
+ &icmptype_input("icmptype", $rule->{'icmp-type'}->[1]));
-print " | $text{'edit_mac'} | \n";
-print "",&print_mode("macsource", $rule->{'mac-source'}),"\n";
-printf " |
\n",
- $rule->{'mac-source'}->[1];
+# MAC address
+print &ui_table_row($text{'edit_mac'},
+ &print_mode("macsource", $rule->{'mac-source'})." ".
+ &ui_textbox("macsource", $rule->{'mac-source'}->[1], 18));
-print "
|
\n";
+print &ui_table_hr();
-print " | $text{'edit_limit'} | \n";
-print "",&print_mode("limit", $rule->{'limit'},
- $text{'edit_below'}, $text{'edit_above'}, 1),"\n";
+# Packet flow limit
($n, $u) = $rule->{'limit'}->[1] =~ /^(\d+)\/(\S+)$/ ? ($1, $2) : ();
-print "\n";
-print "/ |
\n";
+print &ui_table_row($text{'edit_limit'},
+ &print_mode("limit", $rule->{'limit'},
+ $text{'edit_below'}, $text{'edit_above'}, 1)." ".
+ &ui_textbox("limit0", $n, 6)." / ".
+ &ui_select("limit1", $u, ['second', 'minute', 'hour', 'day']));
-print " | $text{'edit_limitburst'} | \n";
-print "",&print_mode("limitburst", $rule->{'limit-burst'},
- $text{'edit_below'}, $text{'edit_above'}, 1),"\n";
-printf " |
\n",
- $rule->{'limit-burst'}->[1];
+# Packet burst rate
+print &ui_table_row($text{'edit_limitburst'},
+ &print_mode("limitburst", $rule->{'limit-burst'},
+ $text{'edit_below'}, $text{'edit_above'}, 1)." ".
+ &ui_textbox("limitburst", $rule->{'limit-burst'}->[1], 6));
if ($rule->{'chain'} eq 'OUTPUT') {
- print "
|
\n";
+ print &ui_table_hr();
- print " | $text{'edit_uidowner'} | \n";
- print "",&print_mode("uidowner", $rule->{'uid-owner'}),"\n";
- printf " %s |
\n",
- $rule->{'uid-owner'}->[1], &user_chooser_button("uidowner");
+ # Sending UID
+ print &ui_table_row($text{'edit_uidowner'},
+ &print_mode("uidowner", $rule->{'uid-owner'})." ".
+ &ui_user_textbox("uidowner", $rule->{'uid-owner'}->[1]));
- print " | $text{'edit_gidowner'} | \n";
- print "",&print_mode("gidowner", $rule->{'gid-owner'}),"\n";
- printf " %s |
\n",
- $rule->{'gid-owner'}->[1], &group_chooser_button("gidowner");
+ # Sending GID
+ print &ui_table_row($text{'edit_gidowner'},
+ &print_mode("gidowner", $rule->{'gid-owner'})." ".
+ &ui_group_textbox("gidowner", $rule->{'gid-owner'}->[1]));
- print " | $text{'edit_pidowner'} | \n";
- print "",&print_mode("pidowner", $rule->{'pid-owner'}),"\n";
- printf " |
\n",
- $rule->{'pid-owner'}->[1];
+ # Sending process ID
+ print &ui_table_row($text{'edit_pidowner'},
+ &print_mode("pidowner", $rule->{'pid-owner'})." ".
+ &ui_textbox("pidowner", $rule->{'pid-owner'}->[1], 6));
- print " | $text{'edit_sidowner'} | \n";
- print "",&print_mode("sidowner", $rule->{'sid-owner'}),"\n";
- printf " |
\n",
- $rule->{'sid-owner'}->[1];
+ # Sending process group
+ print &ui_table_row($text{'edit_sidowner'},
+ &print_mode("sidowner", $rule->{'sid-owner'})." ".
+ &ui_textbox("sidowner", $rule->{'sid-owner'}->[1], 6));
}
-print "
|
\n";
+print &ui_table_hr();
# Connection states
-print " | $text{'edit_state'} | \n";
-print "| ",
- &print_mode("state", $rule->{'state'})," | \n";
-print " |
|
\n";
+print &ui_table_row($text{'edit_state'},
+ "| ".
+ &print_mode("state", $rule->{'state'})." | \n".
+ " ".
+ &ui_select("state", [ split(/,/, $rule->{'state'}->[1]) ],
+ [ map { [ $_, $text{"edit_state_".lc($_)} ] }
+ ('NEW', 'ESTABLISHED', 'RELATED', 'INVALID', 'UNTRACKED') ]).
+ " |
");
# Type of service
-print " | $text{'edit_tos'} | \n";
-print "",&print_mode("tos", $rule->{'tos'}),"\n";
-print &tos_input("tos", $rule->{'tos'}->[1])," |
\n";
+print &ui_table_row($text{'edit_tos'},
+ &print_mode("tos", $rule->{'tos'})." ".
+ &tos_input("tos", $rule->{'tos'}->[1]));
-print "
|
\n";
+print &ui_table_hr();
# Input physical device
-print " | $text{'edit_physdevin'} | \n";
-print "",&print_mode("physdevin", $rule->{'physdev-in'}),"\n";
-print &interface_choice("physdevin", $rule->{'physdev-in'}->[1]);
-print " |
\n";
+print &ui_table_row($text{'edit_physdevin'},
+ &print_mode("physdevin", $rule->{'physdev-in'})." ".
+ &interface_choice("physdevin", $rule->{'physdev-in'}->[1]));
# Output physical device
-print " | $text{'edit_physdevout'} | \n";
-print "",&print_mode("physdevout", $rule->{'physdev-out'}),"\n";
-print &interface_choice("physdevout", $rule->{'physdev-out'}->[1]);
-print " |
\n";
+print &ui_table_row($text{'edit_physdevout'},
+ &print_mode("physdevout", $rule->{'physdev-out'})." ".
+ &interface_choice("physdevout", $rule->{'physdev-out'}->[1]));
# Physdev match modes
-print " | $text{'edit_physdevisin'} | \n";
-print "",&print_mode("physdevisin", $rule->{'physdev-is-in'},
- $text{'yes'}, $text{'no'})," |
\n";
-print " | $text{'edit_physdevisout'} | \n";
-print "",&print_mode("physdevisout", $rule->{'physdev-is-out'},
- $text{'yes'}, $text{'no'})," |
\n";
-print " | $text{'edit_physdevisbridged'} | \n";
-print "",&print_mode("physdevisbridged", $rule->{'physdev-is-bridged'},
- $text{'yes'}, $text{'no'})," |
\n";
+print &ui_table_row($text{'edit_physdevisin'},
+ &print_mode("physdevisin", $rule->{'physdev-is-in'},
+ $text{'yes'}, $text{'no'}));
+print &ui_table_row($text{'edit_physdevisout'},
+ &print_mode("physdevisout", $rule->{'physdev-is-out'},
+ $text{'yes'}, $text{'no'}));
+print &ui_table_row($text{'edit_physdevisbridged'},
+ &print_mode("physdevisbridged", $rule->{'physdev-is-bridged'},
+ $text{'yes'}, $text{'no'}));
-print "
|
\n";
+print &ui_table_hr();
# Show unknown modules
@mods = grep { !/^(tcp|udp|icmp|multiport|mac|limit|owner|state|tos|comment|physdev)$/ } map { $_->[1] } @{$rule->{'m'}};
-print " | $text{'edit_mods'} | \n";
-printf " |
\n",
- join(" ", @mods);
+print &ui_table_row($text{'edit_mods'},
+ &ui_textbox("mods", join(" ", @mods), 60));
# Show unknown parameters
$rule->{'args'} =~ s/^\s+//;
$rule->{'args'} =~ s/\s+$//;
-print " | $text{'edit_args'} | \n";
-printf " |
\n",
- $rule->{'args'};
+print &ui_table_row($text{'edit_args'},
+ &ui_textbox("args", $rule->{'args'}, 60));
-print "\n";
+print &ui_table_end();
if ($in{'new'}) {
print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
diff --git a/ldap-useradmin/ldap-useradmin-lib.pl b/ldap-useradmin/ldap-useradmin-lib.pl
index 3f16176eb..39e9a5a6b 100755
--- a/ldap-useradmin/ldap-useradmin-lib.pl
+++ b/ldap-useradmin/ldap-useradmin-lib.pl
@@ -136,15 +136,21 @@ local ($pass, $salt) = @_;
if ($config{'md5'} == 5) {
# SHA encryption
local $qp = quotemeta($pass);
- local $out = `$config{'slappasswd'} -h '{sha}' -s $qp 2>/dev/null`;
- $out =~ s/\s+$//;
+ local $out = &backquote_command("$config{'slappasswd'} -h '{sha}' -s $qp 2>/dev/null");
+ if ($out && !$?) {
+ $out =~ s/\s+$//;
+ $out =~ s/^\{sha\}//i;
+ return $out;
+ }
+ # Fall back to built-in code
+ $out = &useradmin::encrypt_sha1($pass);
$out =~ s/^\{sha\}//i;
return $out;
}
if ($config{'md5'} == 4) {
# LDAP SSHA encryption
local $qp = quotemeta($pass);
- local $out = `$config{'slappasswd'} -h '{ssha}' -s $qp 2>/dev/null`;
+ local $out = &backquote_command("$config{'slappasswd'} -h '{ssha}' -s $qp 2>/dev/null");
$out =~ s/\s+$//;
$out =~ s/^\{ssha\}//i;
return $out;
@@ -152,7 +158,7 @@ if ($config{'md5'} == 4) {
if ($config{'md5'} == 3) {
# LDAP MD5 encryption
local $qp = quotemeta($pass);
- local $out = `$config{'slappasswd'} -h '{md5}' -s $qp 2>/dev/null`;
+ local $out = &backquote_command("$config{'slappasswd'} -h '{md5}' -s $qp 2>/dev/null");
$out =~ s/\s+$//;
$out =~ s/^\{md5\}//i;
return $out;
diff --git a/mailboxes/boxes-lib.pl b/mailboxes/boxes-lib.pl
index 78dcba828..833bfab95 100755
--- a/mailboxes/boxes-lib.pl
+++ b/mailboxes/boxes-lib.pl
@@ -361,6 +361,16 @@ foreach my $ext (".dir", ".pag", ".db") {
return 0;
}
+# delete_dbm_index(user|file)
+# Deletes all DBM indexes for a user or file
+sub delete_dbm_index
+{
+local $ifile = &user_index_file($_[0]);
+foreach my $ext (".dir", ".pag", ".db") {
+ &unlink_file($ifile.$ext);
+ }
+}
+
# empty_mail(user|file)
# Truncate a mail file to nothing
sub empty_mail