Handle hostnames with upper-case letters
[webmin.git] / webmin / change_session.cgi
1 #!/usr/local/bin/perl
2 # change_session.cgi
3 # Enable or disable session authentication
4
5 require './webmin-lib.pl';
6 &ReadParse();
7 &error_setup($text{'session_err'});
8
9 &lock_file($ENV{'MINISERV_CONFIG'});
10 &get_miniserv_config(\%miniserv);
11 $miniserv{'passdelay'} = $in{'passdelay'};
12
13 # Save blocked hosts
14 if ($in{'blockhost_on'}) {
15         $in{'blockhost_time'} =~ /^\d+$/ && $in{'blockhost_time'} > 0 ||
16                 &error($text{'session_eblockhost_time'});
17         $in{'blockhost_failures'} =~ /^\d+$/ && $in{'blockhost_failures'} > 0 ||
18                 &error($text{'session_eblockhost_failures'});
19         $miniserv{'blockhost_time'} = $in{'blockhost_time'};
20         $miniserv{'blockhost_failures'} = $in{'blockhost_failures'};
21         }
22 else {
23         $miniserv{'blockhost_time'} = $miniserv{'blockhost_failures'} = undef;
24         }
25
26 # Save blocked users
27 if ($in{'blockuser_on'}) {
28         $in{'blockuser_time'} =~ /^\d+$/ && $in{'blockuser_time'} > 0 ||
29                 &error($text{'session_eblockuser_time'});
30         $in{'blockuser_failures'} =~ /^\d+$/ && $in{'blockuser_failures'} > 0 ||
31                 &error($text{'session_eblockuser_failures'});
32         $miniserv{'blockuser_time'} = $in{'blockuser_time'};
33         $miniserv{'blockuser_failures'} = $in{'blockuser_failures'};
34         }
35 else {
36         $miniserv{'blockuser_time'} = $miniserv{'blockuser_failures'} = undef;
37         }
38 $miniserv{'blocklock'} = $in{'blocklock'};
39
40 $miniserv{'syslog'} = $in{'syslog'};
41 if ($in{'session'} && $ENV{'HTTP_COOKIE'} !~ /sessiontest=1/i) {
42         &error($text{'session_ecookie'});
43         }
44 $miniserv{'session'} = $in{'session'};
45 if ($in{'logouttime_on'}) {
46         $in{'logouttime'} =~ /^\d+$/ && $in{'logouttime'} > 0 ||
47                 &error($text{'session_elogouttime'});
48         }
49 $miniserv{'logouttime'} = $in{'logouttime_on'} ? $in{'logouttime'} : undef;
50 if ($in{'localauth'}) {
51         $lsof = &has_command("lsof");
52         &error($text{'session_elsof'}) if (!$lsof);
53         $miniserv{'localauth'} = $lsof;
54         }
55 else {
56         delete($miniserv{'localauth'});
57         }
58 $miniserv{'no_pam'} = $in{'no_pam'};
59 if ($in{'passwd_file'}) {
60         $in{'passwd_file'} =~ /\|$/ || -r $in{'passwd_file'} ||
61                 &error($text{'session_epasswd_file'});
62         $in{'passwd_uindex'} =~ /^\d+$/ ||
63                 &error($text{'session_epasswd_uindex'});
64         $in{'passwd_pindex'} =~ /^\d+$/ ||
65                 &error($text{'session_epasswd_pindex'});
66         $miniserv{'passwd_file'} = $in{'passwd_file'};
67         $miniserv{'passwd_uindex'} = $in{'passwd_uindex'};
68         $miniserv{'passwd_pindex'} = $in{'passwd_pindex'};
69         }
70 else {
71         delete($miniserv{'passwd_file'});
72         delete($miniserv{'passwd_uindex'});
73         delete($miniserv{'passwd_pindex'});
74         }
75 $miniserv{'pam_conv'} = $in{'pam_conv'};
76 if ($in{'cmd_def'}) {
77         delete($gconfig{'passwd_cmd'});
78         }
79 else {
80         $in{'cmd'} =~ /\S/ && &has_command($in{'cmd'}) ||
81                 &error($text{'session_ecmd'});
82         $gconfig{'passwd_cmd'} = $in{'cmd'};
83         }
84 if ($in{'extauth'}) {
85         $in{'extauth'} =~ /^(\S+)/ && -x $1 ||
86                 &error($text{'session_eextauth'});
87         $miniserv{'extauth'} = $in{'extauth'};
88         }
89 else {
90         delete($miniserv{'extauth'});
91         }
92 if (defined($in{'passwd_mode'})) {
93         $miniserv{'passwd_mode'} = $in{'passwd_mode'};
94         }
95 $miniserv{'utmp'} = $in{'utmp'};
96 &put_miniserv_config(\%miniserv);
97 &unlock_file($ENV{'MINISERV_CONFIG'});
98
99 &lock_file("$config_directory/config");
100 #$gconfig{'locking'} = $in{'locking'};
101 $gconfig{'noremember'} = !$in{'remember'};
102 $gconfig{'realname'} = $in{'realname'};
103 if ($in{'passwd_file'}) {
104         $gconfig{'passwd_file'} = $in{'passwd_file'};
105         $gconfig{'passwd_uindex'} = $in{'passwd_uindex'};
106         $gconfig{'passwd_pindex'} = $in{'passwd_pindex'};
107         }
108 else {
109         delete($gconfig{'passwd_file'});
110         delete($gconfig{'passwd_uindex'});
111         delete($gconfig{'passwd_pindex'});
112         }
113 if ($in{'banner_def'}) {
114         delete($gconfig{'loginbanner'});
115         }
116 else {
117         -r $in{'banner'} || &error($text{'session_ebanner'});
118         $gconfig{'loginbanner'} = $in{'banner'};
119         }
120 if ($in{'md5pass'}) {
121         # MD5 enabled .. but is it supported by this system?
122         &foreign_require("acl", "acl-lib.pl");
123         $need = &acl::check_md5();
124         $need && &error(&text('session_emd5mod', "<tt>$need</tt>"));
125         }
126 $gconfig{'md5pass'} = $in{'md5pass'};
127 &write_file("$config_directory/config", \%gconfig);
128 &unlock_file("$config_directory/config");
129
130 &show_restart_page();
131 &webmin_log("session", undef, undef, \%in);
132