Files
webmin/acl/makedn.cgi
Ilia Ross 5e4b937410 Fix SQL and LDAP backend permission checks
This patch fixes permission checks on the remaining SQL and LDAP backend endpoints.

Jamie, your original fix 3d0a9aeea8 onnly updated `save_sql.cgi`, but three related files still were accepting the unrelated password-edit permission.
2026-10-13 14:17:55 +02:00

69 lines
1.8 KiB
Perl
Executable File

#!/usr/local/bin/perl
# Create the LDAP base DN
use strict;
use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
require './acl-lib.pl'; ## no critic
our (%in, %text, %config, %access);
$access{'sql'} || &error($text{'sql_ecannot'});
&ReadParse();
&error_setup($text{'makedn_err'});
my %miniserv;
&get_miniserv_config(\%miniserv);
my $dbh = &connect_userdb($in{'userdb'});
ref($dbh) || &error($dbh);
&ui_print_unbuffered_header(undef, $text{'makedn_title'}, "");
# Work out object class for the DN
my ($proto, $user, $pass, $host, $prefix, $argstr) =
&split_userdb_string($in{'userdb'});
my $schema = $dbh->schema();
my @allocs = map { $_->{'name'} }
grep { $_->{'structural'} }
$schema->all_objectclasses();
my @ocs = ( );
foreach my $poc ("top", "domain") {
if (&indexof($poc, @allocs) >= 0) {
push(@ocs, $poc);
}
}
@ocs || &error(&text('makedn_eoc'));
# Create the DN
print &text('makedn_exec', "<tt>$prefix</tt>"),"<br>\n";
my @attrs = ( "objectClass", \@ocs );
if (&indexof("domain", @ocs) >= 0 && $prefix =~ /^([^=]+)=([^, ]+)/) {
# Domain class needs dc
push(@attrs, $1, $2);
}
my $rv = $dbh->add($prefix, attr => \@attrs);
if (!$rv || $rv->code) {
print &text('makedn_failed',
$rv ? $rv->error : "Unknown error"),"<p>\n";
}
else {
print &text('makedn_done'),"<p>\n";
}
&disconnect_userdb($in{'userdb'}, $dbh);
# Check again if OK
my $err = &validate_userdb($in{'userdb'}, 0);
if ($err) {
print "<b>",&text('makedn_still', $err),"</b><p>\n";
}
else {
&lock_file($ENV{'MINISERV_CONFIG'});
$miniserv{'userdb'} = $in{'userdb'};
$miniserv{'userdb_addto'} = $in{'addto'};
&put_miniserv_config(\%miniserv);
&unlock_file($ENV{'MINISERV_CONFIG'});
&reload_miniserv();
}
&ui_print_footer("", $text{'index_return'});