mirror of
https://github.com/webmin/webmin.git
synced 2025-07-21 23:40:34 +00:00
Module config options for additional object classes
This commit is contained in:
@ -73,3 +73,5 @@ Modifying a user now correctly changes the sn attribute too.
|
|||||||
Added a field for editing the description for LDAP groups.
|
Added a field for editing the description for LDAP groups.
|
||||||
---- Changes since 1.510 ----
|
---- Changes since 1.510 ----
|
||||||
The list of groups now includes descriptions, if any are set.
|
The list of groups now includes descriptions, if any are set.
|
||||||
|
---- Changes since 1.520 ----
|
||||||
|
Added Module Config options for additional LDAP filters to find users and groups, in addition to the posixAccount / posixGroup object class filters.
|
||||||
|
@ -242,7 +242,7 @@ LINE: foreach $line (split(/[\r\n]+/, $data)) {
|
|||||||
$newdn = "uid=$user{'user'},$base";
|
$newdn = "uid=$user{'user'},$base";
|
||||||
$rv = $ldap->search(base => $newdn,
|
$rv = $ldap->search(base => $newdn,
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(&(objectClass=posixAccount))');
|
filter => &user_filter());
|
||||||
($uinfo) = $rv->all_entries;
|
($uinfo) = $rv->all_entries;
|
||||||
%user = &dn_to_hash($uinfo);
|
%user = &dn_to_hash($uinfo);
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@ group_fields=Extra LDAP group properties to allow editing of<br>(In <i>fieldname
|
|||||||
multi_fields=Allow multiple values for extra properties?,1,1-Yes,0-No
|
multi_fields=Allow multiple values for extra properties?,1,1-Yes,0-No
|
||||||
noclash=Attributes for which duplicates are disallowed,0
|
noclash=Attributes for which duplicates are disallowed,0
|
||||||
person=Give all Unix users the <tt>person</tt> object class?,1,1-Yes,0-No
|
person=Give all Unix users the <tt>person</tt> object class?,1,1-Yes,0-No
|
||||||
|
user_filter=Additional LDAP filter for users,3,None,,,,Attribute=value
|
||||||
|
group_filter=Additional LDAP filter for groups,3,None,,,,Attribute=value
|
||||||
|
|
||||||
line5=Home directory options,11
|
line5=Home directory options,11
|
||||||
homedir_perms=Permissions on new home directories,3,From Users and Groups module
|
homedir_perms=Permissions on new home directories,3,From Users and Groups module
|
||||||
|
@ -12,7 +12,7 @@ if ($in{'new'}) {
|
|||||||
else {
|
else {
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(objectClass=posixGroup)');
|
filter => &group_filter());
|
||||||
($ginfo) = $rv->all_entries;
|
($ginfo) = $rv->all_entries;
|
||||||
$group = $ginfo->get_value('cn');
|
$group = $ginfo->get_value('cn');
|
||||||
$gid = $ginfo->get_value('gidNumber');
|
$gid = $ginfo->get_value('gidNumber');
|
||||||
|
@ -36,7 +36,7 @@ else {
|
|||||||
# Get values from current user
|
# Get values from current user
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(objectClass=posixAccount)');
|
filter => &user_filter());
|
||||||
($uinfo) = $rv->all_entries;
|
($uinfo) = $rv->all_entries;
|
||||||
@users = $uinfo->get_value('uid');
|
@users = $uinfo->get_value('uid');
|
||||||
$user = $users[0];
|
$user = $users[0];
|
||||||
@ -279,7 +279,7 @@ if ($config{'secmode'} != 1) {
|
|||||||
@defsecs = &split_quoted_string($mconfig{'default_secs'});
|
@defsecs = &split_quoted_string($mconfig{'default_secs'});
|
||||||
$base = &get_group_base();
|
$base = &get_group_base();
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => '(objectClass=posixGroup)');
|
filter => &group_filter());
|
||||||
%ingroups = ( );
|
%ingroups = ( );
|
||||||
foreach $g (sort { lc($a->dn()) cmp lc($b->dn()) } $rv->all_entries) {
|
foreach $g (sort { lc($a->dn()) cmp lc($b->dn()) } $rv->all_entries) {
|
||||||
$group = $g->get_value("cn");
|
$group = $g->get_value("cn");
|
||||||
|
@ -101,12 +101,12 @@ elsif ($config{'md5'} == 3 || $config{'md5'} == 4) {
|
|||||||
# Count the number of users and groups
|
# Count the number of users and groups
|
||||||
$base = &get_user_base();
|
$base = &get_user_base();
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => '(objectClass=posixAccount)',
|
filter => &user_filter(),
|
||||||
sizelimit => $mconfig{'display_max'}+1);
|
sizelimit => $mconfig{'display_max'}+1);
|
||||||
$ucount = $rv->count;
|
$ucount = $rv->count;
|
||||||
$base = &get_group_base();
|
$base = &get_group_base();
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => '(objectClass=posixGroup)',
|
filter => &group_filter(),
|
||||||
sizelimit => $mconfig{'display_max'}+1);
|
sizelimit => $mconfig{'display_max'}+1);
|
||||||
$gcount = $rv->count;
|
$gcount = $rv->count;
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ if (!defined(@list_users_cache)) {
|
|||||||
local $ldap = &ldap_connect();
|
local $ldap = &ldap_connect();
|
||||||
local $base = &get_user_base();
|
local $base = &get_user_base();
|
||||||
local $rv = $ldap->search(base => $base,
|
local $rv = $ldap->search(base => $base,
|
||||||
filter => '(objectClass=posixAccount)');
|
filter => &user_filter());
|
||||||
local $u;
|
local $u;
|
||||||
foreach $u ($rv->all_entries) {
|
foreach $u ($rv->all_entries) {
|
||||||
local %uinfo = &dn_to_hash($u);
|
local %uinfo = &dn_to_hash($u);
|
||||||
@ -292,7 +292,7 @@ if (!defined(@list_groups_cache)) {
|
|||||||
local $ldap = &ldap_connect();
|
local $ldap = &ldap_connect();
|
||||||
local $base = &get_group_base();
|
local $base = &get_group_base();
|
||||||
local $rv = $ldap->search(base => $base,
|
local $rv = $ldap->search(base => $base,
|
||||||
filter => '(objectClass=posixGroup)');
|
filter => &group_filter());
|
||||||
local $g;
|
local $g;
|
||||||
foreach $g ($rv->all_entries) {
|
foreach $g ($rv->all_entries) {
|
||||||
local %ginfo = &dn_to_hash($g);
|
local %ginfo = &dn_to_hash($g);
|
||||||
@ -1070,7 +1070,8 @@ if ($new) {
|
|||||||
# Find existing group with the same GID
|
# Find existing group with the same GID
|
||||||
local $base = &get_group_base();
|
local $base = &get_group_base();
|
||||||
local $rv = $ldap->search(base => $base,
|
local $rv = $ldap->search(base => $base,
|
||||||
filter => "(&(objectClass=posixGroup)(gidNumber=$user->{'gid'}))");
|
filter => "(&".&group_filter().
|
||||||
|
"(gidNumber=$user->{'gid'}))");
|
||||||
local ($ginfo) = $rv->all_entries;
|
local ($ginfo) = $rv->all_entries;
|
||||||
if ($ginfo && $ginfo->get_value("sambaSID")) {
|
if ($ginfo && $ginfo->get_value("sambaSID")) {
|
||||||
# We can get the SID from the actual group
|
# We can get the SID from the actual group
|
||||||
@ -1199,5 +1200,27 @@ for(my $i=0; $i<@$props; $i++) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# user_filter()
|
||||||
|
# Returns an LDAP filter expression to find users
|
||||||
|
sub user_filter
|
||||||
|
{
|
||||||
|
my $rv = "(objectClass=posixAccount)";
|
||||||
|
if ($config{'user_filter'}) {
|
||||||
|
$rv = "(&".$rv."(".$config{'user_filter'}."))";
|
||||||
|
}
|
||||||
|
return $rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
# group_filter()
|
||||||
|
# Returns an LDAP filter expression to find groups
|
||||||
|
sub group_filter
|
||||||
|
{
|
||||||
|
my $rv = "(objectClass=posixGroup)";
|
||||||
|
if ($config{'group_filter'}) {
|
||||||
|
$rv = "(&".$rv."(".$config{'group_filter'}."))";
|
||||||
|
}
|
||||||
|
return $rv;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
@ -8,12 +8,12 @@ $schema = $ldap->schema();
|
|||||||
if ($in{'user'}) {
|
if ($in{'user'}) {
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(objectClass=posixAccount)');
|
filter => &user_filter());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(objectClass=posixGroup)');
|
filter => &group_filter());
|
||||||
}
|
}
|
||||||
($what) = $rv->all_entries;
|
($what) = $rv->all_entries;
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ if (!$in{'new'}) {
|
|||||||
# Get existing group
|
# Get existing group
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(&(objectClass=posixGroup))');
|
filter => &group_filter());
|
||||||
($ginfo) = $rv->all_entries;
|
($ginfo) = $rv->all_entries;
|
||||||
$ginfo || &error($text{'gsave_egone'});
|
$ginfo || &error($text{'gsave_egone'});
|
||||||
$olddesc = $ginfo->get_value('description');
|
$olddesc = $ginfo->get_value('description');
|
||||||
|
@ -12,7 +12,7 @@ if (!$in{'new'}) {
|
|||||||
# Get existing user
|
# Get existing user
|
||||||
$rv = $ldap->search(base => $in{'dn'},
|
$rv = $ldap->search(base => $in{'dn'},
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(&(objectClass=posixAccount))');
|
filter => &user_filter());
|
||||||
($uinfo) = $rv->all_entries;
|
($uinfo) = $rv->all_entries;
|
||||||
$uinfo || &error($text{'usave_egone'});
|
$uinfo || &error($text{'usave_egone'});
|
||||||
%ouser = &dn_to_hash($uinfo);
|
%ouser = &dn_to_hash($uinfo);
|
||||||
@ -63,7 +63,7 @@ elsif ($in{'delete'}) {
|
|||||||
print "$text{'udel_groups'}<br>\n";
|
print "$text{'udel_groups'}<br>\n";
|
||||||
$base = &get_group_base();
|
$base = &get_group_base();
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => '(&(objectClass=posixGroup))');
|
filter => &group_filter());
|
||||||
foreach $g ($rv->all_entries) {
|
foreach $g ($rv->all_entries) {
|
||||||
local @mems = $g->get_value("memberUid");
|
local @mems = $g->get_value("memberUid");
|
||||||
local $idx = &indexof($user, @mems);
|
local $idx = &indexof($user, @mems);
|
||||||
@ -617,7 +617,7 @@ else {
|
|||||||
}
|
}
|
||||||
$base = &get_group_base();
|
$base = &get_group_base();
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => '(&(objectClass=posixGroup))');
|
filter => &group_filter());
|
||||||
foreach $g ($rv->all_entries) {
|
foreach $g ($rv->all_entries) {
|
||||||
local @mems = $g->get_value("memberUid");
|
local @mems = $g->get_value("memberUid");
|
||||||
local $gname = $g->get_value("cn");
|
local $gname = $g->get_value("cn");
|
||||||
@ -663,7 +663,7 @@ else {
|
|||||||
# Get the updated user object
|
# Get the updated user object
|
||||||
$rv = $ldap->search(base => $newdn,
|
$rv = $ldap->search(base => $newdn,
|
||||||
scope => 'base',
|
scope => 'base',
|
||||||
filter => '(&(objectClass=posixAccount))');
|
filter => &user_filter());
|
||||||
($uinfo) = $rv->all_entries;
|
($uinfo) = $rv->all_entries;
|
||||||
%user = &dn_to_hash($uinfo);
|
%user = &dn_to_hash($uinfo);
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ elsif ($in{'match'} == 3) {
|
|||||||
$search = "(!($in{'field'}=*$in{'what'}*))";
|
$search = "(!($in{'field'}=*$in{'what'}*))";
|
||||||
}
|
}
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => "(&(objectClass=posixGroup)$search)");
|
filter => "(&".&group_filter().$search.")");
|
||||||
if ($rv->code) {
|
if ($rv->code) {
|
||||||
&error(&text('search_err', "<tt>$search</tt>",
|
&error(&text('search_err', "<tt>$search</tt>",
|
||||||
"<tt>$base</tt>", $rv->error));
|
"<tt>$base</tt>", $rv->error));
|
||||||
|
@ -22,7 +22,7 @@ elsif ($in{'match'} == 3) {
|
|||||||
$search = "(!($in{'field'}=*$in{'what'}*))";
|
$search = "(!($in{'field'}=*$in{'what'}*))";
|
||||||
}
|
}
|
||||||
$rv = $ldap->search(base => $base,
|
$rv = $ldap->search(base => $base,
|
||||||
filter => "(&(objectClass=posixAccount)$search)");
|
filter => "(&".&user_filter().$search.")");
|
||||||
if ($rv->code) {
|
if ($rv->code) {
|
||||||
&error(&text('search_err', "<tt>$search</tt>",
|
&error(&text('search_err', "<tt>$search</tt>",
|
||||||
"<tt>$base</tt>", $rv->error));
|
"<tt>$base</tt>", $rv->error));
|
||||||
|
Reference in New Issue
Block a user