#!/usr/local/bin/perl # Show user and login options require './dovecot-lib.pl'; &ui_print_header(undef, $text{'login_title'}, ""); $conf = &get_config(); print &ui_form_start("save_login.cgi", "post"); print &ui_table_start($text{'login_header'}, "width=100%", 4); # SASL authentication realms $realms = &find_value("auth_realms", $conf); print &ui_table_row($text{'login_realms'}, &ui_opt_textbox("realms", $realms, 40, $text{'login_none'}), 3); # Default authentication realm $realm = &find_value("auth_default_realm", $conf); print &ui_table_row($text{'login_realm'}, &ui_opt_textbox("realm", $realm, 10, $text{'default'})); # Authentication mechanisms (MD5, etc..) if (&find("auth_mechanisms", $conf, 2)) { # Version 0.99 and 2.0 format @mechs = split(/\s+/, &find_value("auth_mechanisms", $conf)); } else { # version 1.0 format @mechs = split(/\s+/, &find_value("mechanisms", $conf, undef, "auth", "default")); } print &ui_table_row($text{'login_mechs'}, &ui_select("mechs", \@mechs, [ map { [ $_, $text{'login_'.$_} ] } @supported_auths ], 4, 1, 1)); print &ui_table_hr(); # User database, for mapping usernames to UIDs and homes if (&find("auth_userdb", $conf, 2)) { # Version 0.99 format $userdb = &find_value("auth_userdb", $conf); } elsif ($usec = &find_section("userdb", $conf, undef, "auth", "default")) { # Version 1.0.alpha format $userdb = $usec->{'value'}; $args = &find_value("args", $conf, undef, "userdb", $usec->{'value'}); $userdb .= " $args" if ($args); } elsif (&find_value("driver", $conf, 2, "userdb")) { # Version 2.0 format $userdb = &find_value("driver", $conf, undef, "userdb"); $args = &find_value("args", $conf, undef, "userdb"); $userdb .= " ".$args if ($args); } else { # Version 1.0 format $userdb = &find_value("userdb", $conf, undef, "auth", "default"); } if ($userdb eq "passwd") { $usermode = "passwd"; } elsif ($userdb =~ /^passwd-file\s+(.*)/) { $usermode = "passwd-file"; $passwdfile = $1; } elsif ($userdb =~ /^static\s+uid=(\d+)\s+gid=(\d+)\s+home=(.*)/) { $usermode = "static"; $uid = $1; $gid = $2; $home = $3; } elsif ($userdb eq "vpopmail") { $usermode = "vpopmail"; } elsif ($userdb =~ /^ldap\s+(.*)/) { $usermode = "ldap"; $ldap = $1; } elsif ($userdb =~ /^pgsql\s+(.*)/) { $usermode = "pgsql"; $pgsql = $1; } elsif ($userdb =~ /^sql\s+(.*)/) { $usermode = "sql"; $sql = $1; } else { $other = $userdb; } print &ui_table_row($text{'login_userdb'}, &ui_radio("usermode", $usermode, [ [ "passwd", $text{'login_passwd'}."
" ], [ "passwd-file", &text('login_passwdfile', &ui_textbox("passwdfile", $passwdfile, 30))."
" ], [ "static", &text('login_static', &ui_textbox("uid", $uid, 6), &ui_textbox("gid", $gid, 6), &ui_textbox("home", $home, 20))."
" ], [ "vpopmail", $text{'login_vpopmail'}."
" ], [ "ldap", &text('login_ldap', &ui_textbox("ldap", $ldap, 30))."
" ], [ "pgsql", &text('login_pgsql', &ui_textbox("pgsql", $pgsql, 30))."
" ], [ "sql", &text('login_sql', &ui_textbox("sql", $sql, 30))."
" ], [ "", &text('login_other', &ui_textbox("other", $other, 30))."
" ], ]), 3); # Password authentication system if (&find("auth_passdb", $conf, 2)) { # Version 0.99 format $passdb = &find_value("auth_passdb", $conf); } elsif ($psec = &find_section("passdb", $conf, undef, "auth", "default")) { # Version 1.0.alpha format $passdb = $psec->{'value'}; $args = &find_value("args", $conf, undef, "passdb", $psec->{'value'}); $passdb .= " $args" if ($args); $alpha_opts = 1; } elsif (&find_value("driver", $conf, 2, "passdb")) { # Version 2.0 format $passdb = &find_value("driver", $conf, undef, "passdb"); $args = &find_value("args", $conf, undef, "passdb"); $passdb .= " ".$args if ($args); } else { # Version 1.0 format $passdb = &find_value("passdb", $conf, undef, "auth", "default"); } if ($passdb eq "passwd") { $passmode = "passwd"; } elsif ($passdb eq "shadow") { $passmode = "shadow"; } elsif ($passdb eq "pam") { $passmode = "dpam"; } elsif ($passdb =~ /^pam(\s+\-session)?(\s+cache_key=(\S+))?\s+(\S*)$/) { $passmode = "pam"; $ppam = $4; $psession = $1 ? 1 : 0; $pckey = $3; } elsif ($passdb =~ /^passwd-file\s+(.*)/) { $passmode = "passwd-file"; $ppasswdfile = $1; } elsif ($passdb eq "vpopmail") { $passmode = "vpopmail"; } elsif ($passdb =~ /^ldap\s+(.*)/) { $passmode = "ldap"; $pldap = $1; } elsif ($passdb =~ /^pgsql\s+(.*)/) { $passmode = "pgsql"; $ppgsql = $1; } elsif ($passdb =~ /^sql\s+(.*)/) { $passmode = "sql"; $psql = $1; } elsif ($passdb =~ /^bsdauth(\s+cache_key=(\S+))?$/) { $passmode = "bsdauth"; $pbckey = $2; } elsif ($passdb =~ /^checkpassword\s+(.*)$/) { $passmode = "checkpassword"; $checkpassword = $1; } else { $pother = $passdb; } print &ui_table_row($text{'login_passdb'}, &ui_radio("passmode", $passmode, [ [ "passwd", $text{'login_passwd2'}."
" ], [ "shadow", $text{'login_shadow'}."
" ], [ "dpam", &text('login_dpam')."
" ], $alpha_opts ? ( [ "pam", &text('login_pam2', &ui_textbox("ppam", $ppam, 10), &ui_checkbox("ppam_session", 1, $text{'login_session'}, $psession), &ui_opt_textbox("ppam_ckey", $pckey, 10, $text{'login_none'}))."
" ] ) : ( [ "pam", &text('login_pam', &ui_textbox("ppam", $ppam, 10))."
" ] ), [ "passwd-file", &text('login_passwdfile', &ui_textbox("ppasswdfile", $ppasswdfile, 30))."
" ], [ "vpopmail", $text{'login_vpopmail'}."
" ], [ "ldap", &text('login_ldap', &ui_textbox("pldap", $pldap, 30))."
" ], [ "pgsql", &text('login_pgsql', &ui_textbox("ppgsql", $ppgsql, 30))."
" ], [ "sql", &text('login_sql', &ui_textbox("psql", $psql, 30))."
" ], $alpha_opts ? ( [ "bsdauth", &text('login_bsdauth', &ui_opt_textbox("bsdauth_ckey", $pbckey, 10, $text{'login_none'}))."
" ], [ "checkpassword", &text('login_checkpassword', &ui_textbox("checkpassword", $checkpassword, 40))."
" ], ) : ( ), [ "", &text('login_other', &ui_textbox("pother", $pother, 30))."
" ], ]), 3); print &ui_table_hr(); $fuid = &find_value("first_valid_uid", $conf); print &ui_table_row($text{'login_fuid'}, &ui_opt_textbox("fuid", $fuid, 6, &getdef("first_valid_uid"))); $luid = &find_value("last_valid_uid", $conf); @mmap = ( [ 0, $text{'login_none'} ] ); print &ui_table_row($text{'login_luid'}, &ui_opt_textbox("luid", $luid, 6, &getdef("last_valid_uid", \@mmap))); $fgid = &find_value("first_valid_gid", $conf); print &ui_table_row($text{'login_fgid'}, &ui_opt_textbox("fgid", $fgid, 6, &getdef("first_valid_gid"))); $lgid = &find_value("last_valid_gid", $conf); print &ui_table_row($text{'login_lgid'}, &ui_opt_textbox("lgid", $lgid, 6, &getdef("last_valid_gid", \@mmap))); $extra = &find_value("mail_extra_groups", $conf); print &ui_table_row($text{'login_extra'}, &ui_opt_textbox("extra", $extra, 50, $text{'login_none'})."\n". &group_chooser_button("extra", 1), 3); $chroot = &find_value("mail_chroot", $conf); print &ui_table_row($text{'login_chroot'}, &ui_opt_textbox("chroot", $chroot, 40, $text{'login_none'})."\n". &file_chooser_button("chroot", 1), 3); # Number of login processes if (&find("login_max_processes_count", $conf, 2)) { print &ui_table_hr(); $procs = &find_value("login_max_processes_count", $conf); print &ui_table_row($text{'login_procs'}, &ui_opt_textbox("procs", $procs, 6, &getdef("login_max_processes_count")), 3); } if (&find("login_processes_count", $conf, 2)) { $count = &find_value("login_processes_count", $conf); print &ui_table_row($text{'login_count'}, &ui_opt_textbox("count", $count, 6, &getdef("login_processes_count")), 3); } print &ui_table_end(); print &ui_form_end([ [ "save", $text{'save'} ] ]); &ui_print_footer("", $text{'index_return'});