updated the 3.0 branch from the head branch - ready for alpha18
[samba.git] / source3 / libads / ldap_user.c
index 13e68eb82e02b8a2c7fc7ad90b0caa5c81ff5676..b6e3d189c514e0146182558d496d9e922f44b9d4 100644 (file)
@@ -43,7 +43,9 @@ ADS_STATUS ads_add_user_acct(ADS_STRUCT *ads, const char *user,
        TALLOC_CTX *ctx;
        ADS_MODLIST mods;
        ADS_STATUS status;
-       char *upn, *new_dn, *name, *controlstr;
+       const char *upn, *new_dn, *name, *controlstr;
+       const char *objectClass[] = {"top", "person", "organizationalPerson",
+                                    "user", NULL};
 
        if (fullname && *fullname) name = fullname;
        else name = user;
@@ -63,14 +65,46 @@ ADS_STATUS ads_add_user_acct(ADS_STRUCT *ads, const char *user,
        if (!(mods = ads_init_mods(ctx)))
                goto done;
 
-       ads_mod_add(ctx, &mods, "cn", name);
-       ads_mod_add_var(ctx, &mods, LDAP_MOD_ADD, "objectClass", "top",
-                       "person", "organizationalPerson", "user", NULL);
-       ads_mod_add(ctx, &mods, "userPrincipalName", upn);
-       ads_mod_add(ctx, &mods, "name", name);
-       ads_mod_add(ctx, &mods, "displayName", name);
-       ads_mod_add(ctx, &mods, "sAMAccountName", user);
-       ads_mod_add(ctx, &mods, "userAccountControl", controlstr);
+       ads_mod_str(ctx, &mods, "cn", name);
+       ads_mod_strlist(ctx, &mods, "objectClass", objectClass);
+       ads_mod_str(ctx, &mods, "userPrincipalName", upn);
+       ads_mod_str(ctx, &mods, "name", name);
+       ads_mod_str(ctx, &mods, "displayName", name);
+       ads_mod_str(ctx, &mods, "sAMAccountName", user);
+       ads_mod_str(ctx, &mods, "userAccountControl", controlstr);
+       status = ads_gen_add(ads, new_dn, mods);
+
+ done:
+       talloc_destroy(ctx);
+       return status;
+}
+
+ADS_STATUS ads_add_group_acct(ADS_STRUCT *ads, const char *group, 
+                             const char *comment)
+{
+       TALLOC_CTX *ctx;
+       ADS_MODLIST mods;
+       ADS_STATUS status;
+       char *new_dn;
+       const char *objectClass[] = {"top", "group", NULL};
+
+       if (!(ctx = talloc_init_named("ads_add_group_acct")))
+               return ADS_ERROR(LDAP_NO_MEMORY);
+
+       status = ADS_ERROR(LDAP_NO_MEMORY);
+
+       if (!(new_dn = talloc_asprintf(ctx, "cn=%s,cn=Users,%s", group, 
+                                      ads->bind_path)))
+               goto done;
+       if (!(mods = ads_init_mods(ctx)))
+               goto done;
+
+       ads_mod_str(ctx, &mods, "cn", group);
+       ads_mod_strlist(ctx, &mods, "objectClass",objectClass);
+       ads_mod_str(ctx, &mods, "name", group);
+       if (comment)
+               ads_mod_str(ctx, &mods, "description", comment);
+       ads_mod_str(ctx, &mods, "sAMAccountName", group);
        status = ads_gen_add(ads, new_dn, mods);
 
  done: