diff -urN ./source3/include/smbldap.h ../samba-3.4.3-new/source3/include/smbldap.h --- ./source3/include/smbldap.h 2009-10-29 16:47:16.000000000 +0900 +++ ../samba-3.4.3-new/source3/include/smbldap.h 2010-07-22 20:22:13.409551744 +0900 @@ -46,6 +46,8 @@ #define LDAP_OBJ_POSIXACCOUNT "posixAccount" #define LDAP_OBJ_POSIXGROUP "posixGroup" #define LDAP_OBJ_OU "organizationalUnit" +#define LDAP_OBJ_NAMEDOBJECT "namedObject" /* structual objectclass (for SUSE)*/ +#define LDAP_OBJ_GROUPOFNAMES "groupOfNames" /* structual objectclass */ /* some generic attributes that get reused a lot */ diff -urN ./source3/utils/net_sam.c ../samba-3.4.3-new/source3/utils/net_sam.c --- ./source3/utils/net_sam.c 2009-10-29 16:47:16.000000000 +0900 +++ ../samba-3.4.3-new/source3/utils/net_sam.c 2010-07-23 08:35:37.864077361 +0900 @@ -1424,6 +1424,7 @@ gid_t domadmins_gid = -1; struct samu *samuser; struct passwd *pwd; + const char *rfc2307bis_str = NULL; /* for lp_parm_string return value */ if (c->display_usage) { d_printf("Usage:\n" @@ -1478,6 +1479,9 @@ d_printf("Checking for Domain Users group.\n"); + rfc2307bis_str = lp_parm_const_string(-1,"ldapsam","editposix_rfc2307bis",NULL); /* get option */ + d_printf("ldapsam:editposix_rfc2307bis = %s\n",rfc2307bis_str); + sid_compose(&gsid, get_global_sam_sid(), DOMAIN_GROUP_RID_USERS); if (!pdb_getgrsid(&gmap, gsid)) { @@ -1510,6 +1514,14 @@ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP); smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP); + + if (rfc2307bis_str && strequal(rfc2307bis_str, "namedObject")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_NAMEDOBJECT); + } else if (strequal(rfc2307bis_str, "groupOfNames")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPOFNAMES); + smbldap_set_mod(&mods, LDAP_MOD_ADD, "member", dn); + } + smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr); @@ -1565,6 +1577,14 @@ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP); smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP); + + if (rfc2307bis_str && strequal(rfc2307bis_str, "namedObject")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_NAMEDOBJECT); + } else if (strequal(rfc2307bis_str, "groupOfNames")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPOFNAMES); + smbldap_set_mod(&mods, LDAP_MOD_ADD, "member", dn); + } + smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr); @@ -1787,6 +1807,14 @@ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP); smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP); + + if (rfc2307bis_str && strequal(rfc2307bis_str, "namedObject")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_NAMEDOBJECT); + } else if (strequal(rfc2307bis_str, "groupOfNames")) { + smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPOFNAMES); + smbldap_set_mod(&mods, LDAP_MOD_ADD, "member", dn); + } + smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname); smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr);