Add to person object class by default
authorJamie Cameron <jcameron@webmin.com>
Sat, 1 Mar 2008 23:39:58 +0000 (23:39 +0000)
committerJamie Cameron <jcameron@webmin.com>
Sat, 1 Mar 2008 23:39:58 +0000 (23:39 +0000)
18 files changed:
ldap-useradmin/CHANGELOG
ldap-useradmin/config
ldap-useradmin/config-*-linux
ldap-useradmin/config-coherent-linux
ldap-useradmin/config-debian-linux
ldap-useradmin/config-debian-linux-3.1
ldap-useradmin/config-debian-linux-4.0-*
ldap-useradmin/config-debian-squirrelmail-linux
ldap-useradmin/config-macos
ldap-useradmin/config-mandrake-linux
ldap-useradmin/config-redhat-linux
ldap-useradmin/config-sol-linux
ldap-useradmin/config-suse-linux
ldap-useradmin/config-trustix-linux
ldap-useradmin/config-united-linux
ldap-useradmin/config.info
ldap-useradmin/ldap-useradmin-lib.pl
ldap-useradmin/save_user.cgi

index 08b7d38..3c02722 100644 (file)
@@ -55,3 +55,5 @@ All Samba attributes are removed when Samba access is disabled for a user.
 Added access control options to prevent use of the same UID or GID.
 ---- Changes since 1.390 ----
 Added locking to prevent concurrent writes to the LDAP database, to prevent UID collisions.
+---- Changes since 1.400 ----
+By default, all new Unix users are given the person object class too, as this seems to be needed in most new LDAP schemas.
index ce7016d..2b4551c 100644 (file)
@@ -16,3 +16,4 @@ imap_folderalt=1
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 31b65cc..2b45aae 100644 (file)
@@ -16,3 +16,4 @@ imap_folderalt=1
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 2933e70..6d877ee 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index e6c7930..ef7558a 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index c4c1199..0fc69e5 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 1598897..73c9745 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 other_class=inetOrgPerson
+person=1
index 47fcce4..3eb06df 100644 (file)
@@ -21,3 +21,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 26bb748..812b56d 100644 (file)
@@ -16,3 +16,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 2933e70..6d877ee 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 2933e70..6d877ee 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 2933e70..6d877ee 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 9a9cc26..e90cd33 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 9a9cc26..e90cd33 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index 9a9cc26..e90cd33 100644 (file)
@@ -15,3 +15,4 @@ secmode=0
 samba_gclass=sambaGroup
 alias_same=0
 given_class=inetOrgPerson
+person=1
index a2f21e5..7820386 100644 (file)
@@ -22,6 +22,7 @@ group_mod_props=LDAP properties for modified groups<br>(In <i>fieldname</i>: <i>
 group_fields=Extra LDAP group properties to allow editing of<br>(In <i>fieldname</i> <i>description</i> format),9,40,3,\t
 multi_fields=Allow multiple values for extra properties?,1,1-Yes,0-No
 noclash=Attributes for which duplicates are disallowed,0
+person=Give all Unix users the <tt>person</tt> object class?,1,1-Yes,0-No
 
 line5=Home directory options,11
 homedir_perms=Permissions on new home directories,3,From Users and Groups module
index 96ab5fd..5657e03 100644 (file)
@@ -245,11 +245,18 @@ $_[0]->{'dn'} = "uid=$_[0]->{'user'},$base";
 local @classes = ( "posixAccount", "shadowAccount",
                   split(/\s+/, $config{'other_class'}),
                   @{$_[0]->{'ldap_class'}} );
+if ($schema->objectclass("person") && $config{'person'}) {
+       push(@classes, "person");
+       }
 @classes = &unique(@classes);
 local @attrs = &user_to_dn($_[0]);
 push(@attrs, &split_props($config{'props'}, $_[0]));
 push(@attrs, @{$_[0]->{'ldap_attrs'}});
 push(@attrs, "objectClass" => \@classes);
+if (&indexoflc("person", @classes) >= 0 && !&in_props(\@attrs, "sn")) {
+       # Person needs 'sn'
+       push(@attrs, "sn", &in_props(\@attrs, "cn"));
+       }
 local $rv = $ldap->add($_[0]->{'dn'}, attr => \@attrs);
 if ($rv->code) {
        &error(&text('usave_eadd', $rv->error));
@@ -1205,5 +1212,18 @@ $string =~ s/
 return $string;
 }
 
+# in_props(&props, name)
+# Looks up the value of a named property in a list
+sub in_props
+{
+local ($props, $name) = @_;
+for(my $i=0; $i<@$props; $i++) {
+       if (lc($props->[$i]) eq lc($name)) {
+               return $props->[$i+1];
+               }
+       }
+return undef;
+}
+
 1;
 
index 2b9df24..4137ceb 100755 (executable)
@@ -345,6 +345,9 @@ else {
 
                # Add to the ldap database
                @classes = ( "posixAccount", "shadowAccount" );
+               if ($schema->objectclass("person") && $config{'person'}) {
+                       push(@classes, "person");
+                       }
 
                push(@classes, split(/\s+/, $config{'other_class'}));
                push(@classes, $samba_class) if ($in{'samba'});
@@ -353,16 +356,21 @@ else {
                @classes = &unique(@classes);
                $base = &get_user_base();
                $newdn = "uid=$user,$base";
-               $rv = $ldap->add($newdn, attr =>
-                        [ "cn" => $real,
-                         "uid" => \@users,
-                         "uidNumber" => $uid,
-                         "loginShell" => $shell,
-                         "homeDirectory" => $home,
-                         "gidNumber" => $gid,
-                         "userPassword" => $pass,
-                         "objectClass" => \@classes,
-                         @props ]);
+               @allprops = ( "cn" => $real,
+                              "uid" => \@users,
+                              "uidNumber" => $uid,
+                              "loginShell" => $shell,
+                              "homeDirectory" => $home,
+                              "gidNumber" => $gid,
+                              "userPassword" => $pass,
+                              "objectClass" => \@classes,
+                             @props );
+               if (&indexoflc("person", @classes) >= 0 &&
+                   !&in_props(\@allprops, "sn")) {
+                       # Person needs an 'sn' too
+                       push(@allprops, "sn", $real);
+                       }
+               $rv = $ldap->add($newdn, attr => \@allprops);
                if ($rv->code) {
                        &error(&text('usave_eadd', $rv->error));
                        }
@@ -511,26 +519,31 @@ else {
                else {
                        @cyrus_class_4 = split(' ',$cyrus_class);
                        foreach $one_cyrus_class (@cyrus_class_4) {     
-                       @classes = grep { $_ ne $one_cyrus_class } @classes;
-                       }
-
+                              @classes = grep { $_ ne $one_cyrus_class }
+                                              @classes;
+                              }
                        }
                push(@classes, "shadowAccount") if ($shadow);
                &name_fields();
                @classes = &unique(@classes);
                @rprops = grep { defined($uinfo->get_value($_)) } @rprops;
                $newdn = $in{'dn'};
-               $rv = $ldap->modify($in{'dn'}, replace =>
-                        { "cn" => $real,
-                         "uid" => \@users,
-                         "uidNumber" => $uid,
-                         "loginShell" => $shell,
-                         "homeDirectory" => $home,
-                         "gidNumber" => $gid,
-                         "userPassword" => $pass,
-                         "objectClass" => [ &unique(@classes) ],
-                         @props },
-                       'delete' => \@rprops);
+               %allprops = ( "cn" => $real,
+                             "uid" => \@users,
+                             "uidNumber" => $uid,
+                             "loginShell" => $shell,
+                             "homeDirectory" => $home,
+                             "gidNumber" => $gid,
+                             "userPassword" => $pass,
+                             "objectClass" => \@classes,
+                             @props );
+               if (&indexoflc("person", @classes) >= 0 &&
+                   !$allprops{'sn'}) {
+                       # Person needs 'sn'
+                       $allprops{'sn'} = $real;
+                       }
+               $rv = $ldap->modify($in{'dn'}, 'replace' => \%allprops,
+                                              'delete' => \@rprops);
                if ($rv->code) {
                        &error(&text('usave_emod', $rv->error));
                        }