Just a few things. Wiki page? Excellent idea. If I ever get this working I'll try to throw it together over a weekend. There are a few more issues, the samba schema is missing a few more attributes, and seems like it needs an overhaul anyway. I'm wondering if its planed to be updated in version 2.0. Anyway, those items seem inconsequential enough, just limit a bit of functionality. Anyway, the biggest problem is that this is what my issue appears to be. Once an object is created with a given set of objectClasses, it can only be referenced by those object classes. For example, I created an inetOrgPerson, which also includes organizationPerson, person, and top objectClasses. If I run ldapsearch looking for anyone of those objectClasses, I can find that entry. Later I can add another objectClass to the entry, say posixAccount, but ldapsearch returns nothing for that entry when search for the "objectClass=posixAccount" attribute. However, if I create an object that has all five objectClasses, then searching for any of them will return a result.

This is why I wasn't able to log in as any of the accounts I created, or any of my original accounts that I modified to have Samba attributes. Whatever mechanism Apach DS uses for it's search mechanism seems to not recognize objectClasses added after object creation. Take this modify ldif file:

dn: uid=user,ou=People,dc=example,dc=com
changetype: modify
add: objectClass
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
-
add: gidnumber
gidnumber: 513
-
add: homedirectory
homedirectory: /home/user
-
add: sambaSID
sambaSID: S-1-5-21-LOOOONG-NUUUUUUMBER-61011
-
add: uidnumber
uidnumber: 30010


When adding these attributes to an existing user object:
ldapsearch -h ldapserver -p 389 -b "ou=Peopledc=example,dc=com" "objectClass=posixAccount"

Does not return the object.  However, if I create a new object with:

dn: uid=user,ou=People,dc=example,dc=com
changetype: add
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
gidnumber: 513
homedirectory: /home/user
sambaSID: S-1-5-21-LOOOONG-NUUUUUUMER-61011
uidnumber: 30010
cn: user
sn: user
uid: user

The freshly created account is returned. I've tried this with other objectClasses and the same seems to hold true, an LDAP searchRequest will not retun any objects when the filter specifies an objectClass added to the object after creation. I'm going to open a bug on it, but hope this is an isolated incident. Anyway, I'll post more info on it if I can figure anything out on my own.

-Jeff


<snip/>

It wasn't until I fired up Wireshark that I saw my real problem. By the way, Wireshark is one of the single best utilities for diagnosing network communication problems, my hats off to those guys.
+1 !
Anyway, I was watching the packet flow between Samba and LDAP, and after a bit of this activity, I saw that Samba was in fact asking for my uid from the LDAP server. Samba uses two filters to ask for a user account, it filters users by "uid=user" and "objectclass=sambaSamAccount". Applying those two filters, it did not find "uid=user".
(&(uid=xxx)(objectClass=sambaSamAccout)) ?

So used ldapsearch to do run my own search. When I search for "uid=user", it came back without issue,
Does the entry contains objectClass=sambaSamAccout ?

but adding the "objectClass=sambaSamAccount" filter it returned nothing. I double checked directory studio, and sure enough, uid=user has the "objectClass=sambaSamAccount" attribute. So I searched for any objects that had the "objectClass=sambaSamAccount" inside my user group. I found that both "uid=root" and "uid=nobody" had this attribute and were returned by the search. So I thought, what happens when I try to access Samba using the root account? I opened up Explorer, used the root account and password I set up during smbldap-populate, and BLAM. Access to the share. I checked the Apache DS logs later and found references to another missing and ignored attribute, "sambaMaxPwdAge", but now I believe that the missing attributes were simply just red herrings.
Just one important thing to understand :
- adding a new attribute to an objectclass will *not* modify the existing entries by adding some values into those entries. You have to update all of them accordingly to the modified schema. That means you have to do a LDAP modify which adds the newly added AT with a value to all the entries.

It's like if you have added a new column in an existing table in a data base, the existing rows will not magically set some value in this column.


So I'm left with two questions, why can't Apache DS add the new attribute but LAM can (both use the same admin dn)?
I think Stefan replied. Bug in Studio. Refresh the connection works.

And the big one, the $64,000 question, why does Apache DS return 2 uid's when search for "objectClass=sambaSamAccount", but doesn't return my user accounts, when the "objectClass=sambaSamAccount" attribute is present in all of them?
One more question : did you restart the server after all those modifications ?

Also what would be cool is to activate the logs on the server and do a session where you try to log with root and your user. We can analyse the log if you send them to us (botch the password before !). You can even send them to me if you don't want any confidential info to be shared on the web.

Be aware that logs can be *very* verbose (debug mode).

At the end, when it'll work, I think we would have to create some wiki page explaining all this painful process...

--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com



Reply via email to