[sugj-tech:7367] Re: [FYI]OpenSUSE 11.2では net sam provisionが動作しない

gwmaster ribbon @ ns.ribbon.or.jp
2010年 7月 26日 (月) 11:28:21 JST


On Fri, Jul 23, 2010 at 11:44:12PM +0900, gwmaster wrote:
> On Thu, Jul 22, 2010 at 06:30:17PM +0900, gwmaster wrote:
> 
> > ldapsam:editposix_rfc2307bis か
> 
> を採用したパッチを作ってみました。groupOfNamesのほうはまだ動きません。
> memberの定義に失敗してます。ここはDNじゃなければだめ。

dn を指定するようにしてみました。これでうまくいきました。

--------------------------------------------------------------------------------
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);


sugj-tech メーリングリストの案内