Handle hostnames with upper-case letters
[webmin.git] / apache / auth-lib.pl
1 # auth-lib.pl
2 # Functions for editing text and dbm user files
3
4 # list_authusers(file)
5 # Returns an array of user names from the given file
6 sub list_authusers
7 {
8 local($_, @rv);
9 &open_readfile(HTPASSWD, $_[0]);
10 while(<HTPASSWD>) {
11         if (/^(\S+):(\S*)/) { push(@rv, $1); }
12         }
13 close(HTPASSWD);
14 return @rv;
15 }
16
17 # get_authuser(file, name)
18 sub get_authuser
19 {
20 local($_, $rv);
21 &open_readfile(HTPASSWD, $_[0]);
22 while(<HTPASSWD>) {
23         if (/^(\S+):(\S*)/ && $1 eq $_[1]) {
24                 $rv = { 'user' => $1 , 'pass' => $2 };
25                 }
26         }
27 close(HTPASSWD);
28 return $rv;
29 }
30
31 # save_authuser(file, olduser, &details)
32 sub save_authuser
33 {
34 local($_, @htpasswd);
35 &open_readfile(HTPASSWD, $_[0]);
36 @htpasswd = <HTPASSWD>;
37 close(HTPASSWD);
38 &open_tempfile(HTPASSWD, ">$_[0]");
39 foreach (@htpasswd) {
40         if (/^(\S+):(\S*)/ && $1 eq $_[1]) {
41                 &print_tempfile(HTPASSWD, $_[2]->{'user'},":",$_[2]->{'pass'},"\n");
42                 }
43         else {
44                 &print_tempfile(HTPASSWD, $_);
45                 }
46         }
47 &close_tempfile(HTPASSWD);
48 }
49
50 # create_authuser(file, &details)
51 # Add a new user to a file
52 sub create_authuser
53 {
54 &open_tempfile(HTPASSWD, ">> $_[0]");
55 &print_tempfile(HTPASSWD, $_[1]->{'user'},":",$_[1]->{'pass'},"\n");
56 &close_tempfile(HTPASSWD);
57 }
58
59 # delete_authuser(file, user)
60 # Delete some user from a file
61 sub delete_authuser
62 {
63 local($_, @htpasswd);
64 &open_readfile(HTPASSWD, $_[0]);
65 @htpasswd = <HTPASSWD>;
66 close(HTPASSWD);
67 &open_tempfile(HTPASSWD, "> $_[0]");
68 foreach (@htpasswd) {
69         if (!/^(\S+):(\S*)/ || $1 ne $_[1]) {
70                 &print_tempfile(HTPASSWD, $_);
71                 }
72         }
73 &close_tempfile(HTPASSWD);
74 }
75
76 ###########################################################################
77 # Group Functions
78 ###########################################################################
79
80 # list_authgroups(file)
81 # Returns an array of associative arrays containing information about
82 # groups from some text file
83 sub list_authgroups
84 {
85 local($_, @rv);
86 &open_readfile(HTGROUP, $_[0]);
87 while(<HTGROUP>) {
88         if (/^(\S+):\s*(.*)/) {
89                 local($gr, @mems);
90                 $gr = $1; @mems = split(/\s+/, $2);
91                 push(@rv, { 'group' => $gr, 'members' => \@mems });
92                 }
93         }
94 close(HTGROUP);
95 return @rv;
96 }
97
98 # get_authgroup(file, group)
99 sub get_authgroup
100 {
101 local(@tmp, $t);
102 @tmp = &list_authgroups($_[0]);
103 foreach $t (@tmp) {
104         if ($t->{'group'} eq $_[1]) { return $t; }
105         }
106 return undef;
107 }
108
109 # create_authgroup(file, &details)
110 sub create_authgroup
111 {
112 &open_tempfile(HTGROUP, ">> $_[0]");
113 &print_tempfile(HTGROUP, $_[1]->{'group'},": ",join(' ', @{$_[1]->{'members'}}),"\n");
114 &close_tempfile(HTGROUP);
115 }
116
117 # save_authgroup(file, oldgroup, &details)
118 sub save_authgroup
119 {
120 &open_readfile(HTGROUP, $_[0]);
121 @htgroup = <HTGROUP>;
122 close(HTGROUP);
123 &open_tempfile(HTGROUP, "> $_[0]");
124 foreach (@htgroup) {
125         if (/^(\S+):\s*(.*)/ && $1 eq $_[1]) {
126                 &print_tempfile(HTGROUP, $_[2]->{'group'},": ",
127                               join(' ', @{$_[2]->{'members'}}),"\n");
128                 }
129         else {
130                 &print_tempfile(HTGROUP, $_);
131                 }
132         }
133 &close_tempfile(HTGROUP);
134 }
135
136 # delete_authgroup(file, group)
137 sub delete_authgroup
138 {
139 &open_readfile(HTGROUP, $_[0]);
140 @htgroup = <HTGROUP>;
141 close(HTGROUP);
142 &open_tempfile(HTGROUP, "> $_[0]");
143 foreach (@htgroup) {
144         if (!/^(\S+):\s*(.*)/ || $1 ne $_[1]) {
145                 &print_tempfile(HTGROUP, $_);
146                 }
147         }
148 &close_tempfile(HTGROUP);
149 }
150
151 1;
152