#!/usr/local/bin/perl # edit_host.cgi # Display a form for editing or creating an allowed host require './postgresql-lib.pl'; &ReadParse(); $v = &get_postgresql_version(); if ($in{'new'}) { $type = $in{'new'}; &ui_print_header(undef, $text{"host_create"}, ""); $host = { 'type' => $type, 'netmask' => '0.0.0.0', 'auth' => 'trust', 'db' => 'all' }; } else { @all = &get_hba_config($v); $host = $all[$in{'idx'}]; $type = $host->{'type'}; &ui_print_header(undef, $text{"host_edit"}, ""); } # Start of form block print &ui_form_start("save_host.cgi", "post"); print &ui_hidden("idx", $in{'idx'}); print &ui_hidden("new", $in{'new'}); print &ui_table_start($text{'host_header'}, "width=100%", 2); # Allowed IP address, network or connection type $mode = $type eq 'local' ? 3 : $host->{'cidr'} ne '' ? 4 : $host->{'netmask'} eq '0.0.0.0' ? 0 : $host->{'netmask'} eq '255.255.255.255' ? 1 : 2; print &ui_table_row($text{'host_address'}, &ui_radio_table("addr_mode", $mode, [ [ 3, $text{'host_local'} ], [ 0, $text{'host_any'} ], [ 1, $text{'host_single'}, &ui_textbox("host", $mode == 1 ? $host->{'address'} : '', 20) ], [ 2, $text{'host_network'}, &ui_textbox("network", $mode == 2 ? $host->{'address'} : '', 20). " ".$text{'host_netmask'}." ". &ui_textbox("netmask", $mode == 2 ? $host->{'netmask'} : '', 20) ], [ 4, $text{'host_network'}, &ui_textbox("network2", $mode == 4 ? $host->{'address'} : '', 20). " ".$text{'host_cidr'}." ". &ui_textbox("cidr", $mode == 4 ? $host->{'cidr'} : '', 5) ], ])); # Force SSL connection? if ($type eq "hostssl" || $v >= 7.3) { print &ui_table_row($text{'host_ssl'}, &ui_yesno_radio("ssl", $type eq "hostssl")); } # Allowed databases local $found = !$host->{'db'} || $host->{'db'} eq 'all' || $host->{'db'} eq 'sameuser' || $host->{'db'} eq 'samegroup'; @dbopts = ( [ "all", "<$text{'host_all'}>" ], [ "sameuser", "<$text{'host_same'}>" ] ); if ($v >= 7.3) { push(@dbopts, [ "samegroup", "<$text{'host_gsame'}>" ]); } foreach $d (&list_databases()) { push(@dbopts, $d); $found++ if ($host->{'db'} eq $d); } push(@dbopts, [ '', $text{'host_other'} ]); print &ui_table_row($text{'host_db'}, &ui_select("db", $found ? $host->{'db'} : '', \@dbopts)." ". &ui_textbox("dbother", $found ? "" : join(" ", split(/,/, $host->{'db'})), 40)); # Allowed users if ($v >= 7.3) { print &ui_table_row($text{'host_user'}, &ui_opt_textbox("user", $host->{'user'} eq 'all' ? '' : join(" ", split(/,/, $host->{'user'})), 40, $text{'host_uall'}, $text{'host_usel'})); } # Authentication type foreach $a ('password', 'crypt', ($v >= 7.2 ? ( 'md5' ) : ( )), 'trust', 'reject', 'ident', 'krb4', 'krb5', ($v >= 7.3 ? ( 'pam' ) : ( )) ) { $arg = $host->{'auth'} eq $a ? $host->{'arg'} : undef; $extra = undef; if ($a eq 'password') { # Password file $extra = &ui_checkbox("passwordarg", 1, $text{'host_passwordarg'}, $arg)." ". &ui_textbox("password", $arg, 40); } elsif ($a eq 'ident') { # Ident server $extra = &ui_checkbox("identarg", 1, $text{'host_identarg'}, $arg)." ". &ui_textbox("ident", $arg, 20); } elsif ($a eq 'pam') { # PAM service $extra = &ui_checkbox("pamarg", 1, $text{'host_pamarg'}, $arg)." ". &ui_textbox("pam", $arg, 20); } push(@auths, [ $a, $text{"host_$a"}, $extra ]); } print &ui_table_row($text{'host_auth'}, &ui_radio_table("auth", $host->{'auth'}, \@auths)); # End of the form print &ui_table_end(); if ($in{'new'}) { print &ui_form_end([ [ undef, $text{'create'} ] ]); } else { print &ui_form_end([ [ undef, $text{'save'} ], [ 'delete', $text{'delete'} ] ]); } &ui_print_footer("list_hosts.cgi", $text{'host_return'});