[! use strict; use Proxmox::Form; use Proxmox::Utils; use Proxmox::Config::System; use Proxmox::ConfigServer; use Proxmox::HTMLTable; use Proxmox::HTMLDropDown; use Proxmox::License; !] [- my $system_cfg = $fdat{__system_config}; my $lic = $system_cfg->{license}; my $out = ""; if (!($lic->can_ldap())) { $out .= "

" . __("LDAP support is not enabled.") . "


"; $out .= "

" . __("Please upgrade your license to enable LDAP.") . "

"; print OUT $out; return; } my $url = $req_rec->uri; my $frm = Proxmox::Form->new (\%fdat); my $conn = Proxmox::ConfigClient::connect (); my $serverid; if ($udat{action} eq 'delete') { if ($udat{AM} eq 'w') { $conn->ldap_delete ($fdat {aa}); } else { $udat{popup_error} = Proxmox::Utils::msg ('nowr'); } } if ($frm->submit) { if ($udat{AM} eq 'w') { my $err; my $data; $data->{mode} = $fdat{ldapmode}; $data->{server1} = $fdat{server1}; $data->{server2} = $fdat{server2}; $data->{basedn} = Proxmox::Utils::trim ($fdat{basedn});; $data->{binddn} = Proxmox::Utils::trim ($fdat{binddn}); $data->{bindpw} = $fdat{bindpw}; $data->{port} = Proxmox::Utils::trim ($fdat{port}); $data->{groupbasedn} = Proxmox::Utils::trim ($fdat{groupbasedn}); $data->{mailattr} = Proxmox::Utils::trim ($fdat{mailattr}); $data->{accountattr} = Proxmox::Utils::trim ($fdat{accountattr}); $data->{filter} = Proxmox::Utils::trim ($fdat{filter}); eval { die __("invalid port number specified") . "\n" if $data->{port} !~ m/^\d{0,5}$/; if ($fdat{mode} == 2) { my $name = $fdat{name}; Proxmox::Utils::check_field (__("Profile Name"), $name, 'NOTEMPTY', 'CHAREXCL:[^\w\s]'); $name =~ s/\s/_/g; $serverid = "server_$name"; if ($system_cfg->get('ldap', $serverid)) { die __("Profile already exists - please choose another name") . "\n"; } } else { $serverid = $fdat{aa}; } }; $err = $@; if (!$err) { $system_cfg->set('ldap', $serverid, $data); $system_cfg->save(); $fdat{mode} = 1; $fdat{aa} = $serverid; my $res = $conn->ldap_status (2, $serverid)->result; if ($res->{errors}) { $err = $res->{errors}; } elsif (!$res->{mcount}) { $err = __("unable to find valid email addresses"); } } if ($err) { $udat{popup_error} = $err; $fdat{edit} = $fdat{mode}; } } else { $udat{popup_error} = Proxmox::Utils::msg ('nowr'); } } my $ldapinfo = $conn->ldap_status (1)->result; if ($fdat{edit} == 1 || ($fdat{edit} == 2 && $udat{AM} eq 'w')) { my $data; if ($fdat{edit} == 1) { $frm->add_element("section1", "hsection", undef, __("Edit LDAP profile")); $serverid = $fdat{aa}; $data = $system_cfg->get('ldap', $serverid); my $name = $serverid; $name =~ s/^server_//; $name =~ s/_/ /g; $frm->add_element("name", "rotext", $name, __("Profile Name")); } else { $data = {}; $frm->add_element("section1", "hsection", undef, __("Create new LDAP profile")); $frm->add_element("name", "text", '', __("Profile Name")); } $frm->add_element('ldapmode', "dropdown", $data->{mode} || 'ldap', __("LDAP Protocol"), [['ldap', 'LDAP'], ['ldaps', 'LDAPS']]); $frm->add_element("server1", "ip", $data->{server1} || "127.0.0.1", __("First LDAP Server")); $frm->add_element("server2", "ip", $data->{server2} || "127.0.0.1", __("Second LDAP Server")); $frm->add_element("binddn", "text", $data->{binddn} || '', __("Username")); $frm->add_element("bindpw", "password", $data->{bindpw} || '', __("Password")); $frm->add_element("aspace", "html", "
", ""); $frm->add_element("basedn", "text", $data->{basedn}, "Base DN " . __("(optional)")); $frm->add_element("port", "text", $data->{port}, "LDAP Port " . __("(optional)")); $frm->add_element("groupbasedn", "text", $data->{groupbasedn} || '', __("Base DN for Groups") . " " . __("(optional)")); $frm->add_element("mailattr", "text", $data->{mailattr} || '', __("EMail attribute name(s)") . " " . __("(optional)")); $frm->add_element("accountattr", "text", $data->{accountattr} || '', __("Account attribute name") . " " . __("(optional)")); $frm->add_element("filter", "text", $data->{filter} || '', __("LDAP filter") . " " . __("(optional)")); $frm->add_element("m3", "hidden"); $frm->add_element("aa", "hidden", $serverid); $frm->add_element("mode", "hidden", $fdat{edit}); $out .= $frm->out_form; } else { if ($fdat{edit}) { $udat{popup_error} = Proxmox::Utils::msg ('nowr'); } my $ddown = Proxmox::HTMLDropDown->new (); $ddown->add_item("menu0","$url?edit=2", __("Create new LDAP profile")); $ddown->add_item("menu1","$url?edit=1", __("Edit LDAP profile")); $ddown->add_item("menu1","$url?action=delete", __("Delete")); my @cellwidth = ( '20px', '10px', '100px', '200px', '100px', '50px', '50px', '50px'); my @header = ( '1', '20px', ' ', '1', '10px', ' ', '1', '100px', __('Profile Name'), '1', '200px', 'BaseDN', '1', '100px', __('Server'), '1', '50px', __('Accounts'), '1', '50px', __('Addresses'), '1', '50px', __('Groups'), ); my $table = Proxmox::HTMLTable->new (\@cellwidth); $table->add_headline (\@header); if ($ldapinfo) { foreach my $p (sort keys %$ldapinfo) { my $name = $p; $name =~ s/^server_//; $name =~ s/_/ /g; my $menu = $ddown->out_symbol ("menu1","","&aa=$p"); $table->set_row_link ("$url?edit=1&aa=$p"); my $base = $ldapinfo->{$p}->{basedn} || 'Default Naming Context'; $table->add_row ('', $menu, '', $name, "" . $base . "", $ldapinfo->{$p}->{server1}, $ldapinfo->{$p}->{ucount}, $ldapinfo->{$p}->{mcount}, $ldapinfo->{$p}->{gcount}); } } $out .= $ddown->out_dropdown_menu("menu0"); $out .= $ddown->out_dropdown_menu("menu1"); $out .= "

" . $ddown->out_symbol("menu0", "iarrdown") . " " . __("LDAP Profiles") . "


"; $out .= $table->out_table(); } print OUT $out; -]