Forbid adding users who have a group's name
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Sat, 31 Jan 2009 03:11:38 +0000 (22:11 -0500)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Sat, 31 Jan 2009 03:45:09 +0000 (22:45 -0500)
src/addclub.c
src/addmember.c
src/ldap.c
src/ldap.h

index 0c14c43..f8d8016 100644 (file)
@@ -63,6 +63,8 @@ int addclub() {
 
     if (ceo_user_exists(userid))
         deny("user %s already exists in LDAP", userid);
+    if (ceo_group_exists(userid))
+        deny("group %s already exists in LDAP", userid);
 
     if ((id = ceo_new_uid(club_min_id, club_max_id)) <= 0)
         fatal("no available uids in range [%d, %d]", club_min_id, club_max_id);
index c2586ab..7decb9a 100644 (file)
@@ -72,6 +72,8 @@ int addmember() {
 
     if (ceo_user_exists(userid))
         deny("user %s already exists in LDAP", userid);
+    if (ceo_group_exists(userid))
+        deny("group %s already exists in LDAP", userid);
 
     if ((id = ceo_new_uid(member_min_id, member_max_id)) <= 0)
         fatal("no available uids in range [%d, %d]", member_min_id, member_max_id);
index 55334e8..07bc144 100644 (file)
@@ -310,6 +310,28 @@ int ceo_user_exists(char *uid) {
     return count > 0;
 }
 
+int ceo_group_exists(char *cn) {
+    char *attrs[] = { LDAP_NO_ATTRS, NULL };
+    LDAPMessage *msg = NULL;
+    char filter[128];
+    int count;
+
+    if (!cn)
+        fatal("null cd");
+
+    snprintf(filter, sizeof(filter), "cn=%s", cn);
+
+    if (ldap_search_s(ld, groups_base, LDAP_SCOPE_SUBTREE, filter, attrs, 0, &msg) != LDAP_SUCCESS) {
+        ldap_err("group_exists");
+        return -1;
+    }
+
+    count = ldap_count_entries(ld, msg);
+    ldap_msgfree(msg);
+
+    return count > 0;
+}
+
 static int ldap_sasl_interact(LDAP *ld, unsigned flags, void *defaults, void *in) {
     sasl_interact_t *interact = in;
 
index 717d4bd..b29b68b 100644 (file)
@@ -9,3 +9,4 @@ void ceo_ldap_init();
 void ceo_ldap_cleanup();
 
 int ceo_user_exists(char *);
+int ceo_group_exists(char *);