Ryan Braun wrote: > On Tuesday 18 December 2007 10:38 pm, dandantheitman wrote: > >> On 18/12/2007, Namachivayam <npurusothaman at perisoftware.com> wrote: >> >>> Hi Dan, >>> For adding users (with Posix Attributes), changing the >>> userpassword, we are using these scripts : >>> _For creating users with Posix Attribute :_ >>> create a file for example with the content : >>> >> <snip> >> >> Hi Namachivayan, >> Thanks for your help. What I need to do is figure out a way to use >> ldapadd rather than using the ldif file as I would like automate the >> UID generation. >> > > I found this objectClass in samba somewhere, it's basically just an object > that holds a gidNumber and a uidNumber value. When my add_user script runs, > it will first find this object, grab the values, create the user, then > increment them as needed. > > objectClasses: ( UnixIdPool-oid NAME 'UnixIdPool' SUP top STRUCTURAL MUST ( cn > $ gidNumber $ uidNumber ) X-ORIGIN 'user defined' ) > > Ryan > Hi, I would like to share with regard to this, in samba.schema, Below is the objectclass I found objectclass ( 1.3.6.1.4.1.7165.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY DESC 'Pool for allocating UNIX uids/gids' MUST ( uidNumber $ gidNumber ) ) And from idealx scripts which you can download from samba.org You will see that it uses a piece of perl code to get the next uid. May be this can help,. the logic is same as what Ryan described <snip> sub get_next_id($$) { my $ldap_base_dn = shift; my $attribute = shift; my $tries = 0; my $found=0; my $next_uid_mesg; my $nextuid; if ($ldap_base_dn =~ m/$config{usersdn}/i) { # when adding a new user, we'll check if the uidNumber available is not # already used for a computer's account $ldap_base_dn=$config{suffix} } do { $next_uid_mesg = $ldap->search( base => $config{sambaUnixIdPooldn}, filter => "(objectClass=sambaUnixIdPool)", scope => "base" ); $next_uid_mesg->code && die "Error looking for next uid"; if ($next_uid_mesg->count != 1) { die "Could not find base dn, to get next $attribute"; } my $entry = $next_uid_mesg->entry(0); $nextuid = $entry->get_value($attribute); my $modify=$ldap->modify( "$config{sambaUnixIdPooldn}", changes => [ replace => [ $attribute => $nextuid + 1 ] ] ); $modify->code && die "Error: ", $modify->error; # let's check if the id found is really free (in ou=Groups or ou=Users)... my $check_uid_mesg = $ldap->search( base => $ldap_base_dn, filter => "($attribute=$nextuid)", ); $check_uid_mesg->code && die "Cannot confirm $attribute $nextuid is free"; if ($check_uid_mesg->count == 0) { $found=1; return $nextuid; } $tries++; print "Cannot confirm $attribute $nextuid is free: checking for the next one\n" } while ($found != 1); die "Could not allocate $attribute!"; } Regards Niranjan > -- > Fedora-directory-users mailing list > Fedora-directory-users at redhat.com > https://www.redhat.com/mailman/listinfo/fedora-directory-users >