summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@redhat.com>2013-05-23 19:40:27 -0400
committerNalin Dahyabhai <nalin@redhat.com>2013-05-23 19:46:59 -0400
commitfd975c77fda8dc2485eede3c15aee3fc3d236a9f (patch)
tree50393edced9b28c9cdfd1f11f74791993a95c4f4
parentdd71353dad22dcb07d1c9e90c7c634aa78ec0f77 (diff)
downloadslapi-nis-fd975c77fda8dc2485eede3c15aee3fc3d236a9f.tar.gz
slapi-nis-fd975c77fda8dc2485eede3c15aee3fc3d236a9f.tar.xz
slapi-nis-fd975c77fda8dc2485eede3c15aee3fc3d236a9f.zip
Add %sort() and %dribble_merge()
Add %sort(), which binary-sorts a single list of values, and %dribble_merge(), which takes a quoted length, a separator, and some expressions and produces a list of lists of values using the separator, where no list is larger than the length.
-rw-r--r--doc/format-specifiers.txt9
-rw-r--r--src/format.c287
-rwxr-xr-xtests/test35-schema-dribble/after.sh2
-rw-r--r--tests/test35-schema-dribble/after.txt22
-rwxr-xr-xtests/test35-schema-dribble/before.sh2
-rw-r--r--tests/test35-schema-dribble/before.txt20
-rwxr-xr-xtests/test35-schema-dribble/change.sh11
-rw-r--r--tests/test35-schema-dribble/change.txt2
-rw-r--r--tests/test35-schema-dribble/description.txt1
-rw-r--r--tests/test35-schema-dribble/dse.ldif14
-rw-r--r--tests/test35-schema-dribble/plugin-process-all.txt1
-rw-r--r--tests/test35-schema-dribble/userRoot.ldif1531
12 files changed, 1901 insertions, 1 deletions
diff --git a/doc/format-specifiers.txt b/doc/format-specifiers.txt
index 7dca9db..8919d7a 100644
--- a/doc/format-specifiers.txt
+++ b/doc/format-specifiers.txt
@@ -621,3 +621,12 @@ And here's how an example expression evaluates for ''cn=group'':
%default("%{member}","jim") -> (uid=bob,uid=pete)
%default("%{membername}","bob") -> (jim)
%default("%{nosuchvalue}","bob") -> (bob)
+
+=== sort ===
+
+ sort(''EXPRESSION'')
+
+Evaluates ''EXPRESSION'', returning its values if any are produced, sorted by
+binary value. This is more useful for ensuring consistency than prettiness,
+as the sorting is not case-aware and doesn't recognize numbers.
+
diff --git a/src/format.c b/src/format.c
index aaa7f57..9ee2444 100644
--- a/src/format.c
+++ b/src/format.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008,2010,2011,2012 Red Hat, Inc.
+ * Copyright 2008,2010,2011,2012,2013 Red Hat, Inc.
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -2752,6 +2752,135 @@ format_default(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
return ret;
}
+/* Evaluate the one list, and sort it. */
+static int
+format_compare_bv(const void *p1, const void *p2)
+{
+ const struct berval * const *v1 = p1, * const *v2 = p2;
+ const struct berval *bv1 = *v1, *bv2 = *v2;
+ int initial, c;
+
+ if (bv1->bv_len == bv2->bv_len) {
+ return memcmp(bv1->bv_val, bv2->bv_val, bv1->bv_len);
+ } else {
+ initial = MIN(bv1->bv_len, bv2->bv_len);
+ c = memcmp(bv1->bv_val, bv2->bv_val, initial);
+ if (c != 0) {
+ return c;
+ }
+ if (bv1->bv_val < bv2->bv_val) {
+ return -1;
+ }
+ if (bv1->bv_val > bv2->bv_val) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static int
+format_sort(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e,
+ const char *group, const char *set,
+ const char *args, const char *disallowed,
+ char *outbuf, int outbuf_len,
+ struct format_choice **outbuf_choices,
+ char ***rel_attrs, char ***ref_attrs,
+ struct format_inref_attr ***inref_attrs,
+ struct format_ref_attr_list ***ref_attr_list,
+ struct format_ref_attr_list ***inref_attr_list)
+{
+ int ret, argc, i;
+ unsigned int *lengths;
+ char **argv, **values;
+ struct berval bv, **choices;
+
+ ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "sort: error parsing arguments\n");
+ return -EINVAL;
+ }
+ if (argc < 1) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "sort: one argument is required\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+ if (argc > 1) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "sort: only one argument is allowed\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+ if (outbuf_choices == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "sort: returns a list, but a list "
+ "would not be appropriate\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+
+ /* Evaluate this argument. */
+ choices = NULL;
+ values = format_get_data_set(state, pb, e, group, set,
+ argv[0], disallowed,
+ rel_attrs, ref_attrs, inref_attrs,
+ ref_attr_list, inref_attr_list,
+ &lengths);
+ if (values != NULL) {
+ /* Walk the list of values. */
+ for (i = 0; values[i] != NULL; i++) {
+ /* Add it to the list. */
+ bv.bv_val = values[i];
+ bv.bv_len = lengths[i];
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "sort: input %d = \"%.*s\"\n",
+ i + 1, (int) bv.bv_len, bv.bv_val);
+ format_add_bv_list(&choices, &bv);
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "sort: expanded \"%s\" to produce "
+ "%d values for \"%s\"\n", argv[0], i,
+ slapi_entry_get_dn(e));
+ format_free_data_set(values, lengths);
+ } else {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "sort: expanding \"%s\" produced "
+ "no values for \"%s\"\n", argv[0],
+ slapi_entry_get_dn(e));
+ i = 0;
+ }
+
+ if (choices != NULL) {
+ qsort(choices, i, sizeof(choices[0]), format_compare_bv);
+ for (i = 0; choices[i] != NULL; i++) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "sort: returning \"%.*s\" as a "
+ "value for \"%s\"\n",
+ (int) choices[i]->bv_len,
+ choices[i]->bv_val,
+ slapi_entry_get_dn(e));
+ continue;
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "sort: returning %d values for \"%s\"\n", i,
+ slapi_entry_get_dn(e));
+ format_add_choice(outbuf_choices, outbuf, &choices);
+ ret = 0;
+ } else {
+ ret = -ENOENT;
+ }
+
+ format_free_parsed_args(argv);
+
+ return ret;
+}
+
/* Evaluate all of the arguments, and concatentate all of the lists of results
* to produce one long list. */
static int
@@ -3243,6 +3372,160 @@ format_internal_sequence_number(struct plugin_state *state,
return ret;
}
+/* Condense the list as much as possible, but possibly still produce multiple
+ * values. */
+static int
+format_dribble_merge(struct plugin_state *state, Slapi_PBlock *pb,
+ Slapi_Entry *e,
+ const char *group, const char *set,
+ const char *args, const char *disallowed,
+ char *outbuf, int outbuf_len,
+ struct format_choice **outbuf_choices,
+ char ***rel_attrs,
+ char ***ref_attrs,
+ struct format_inref_attr ***inref_attrs,
+ struct format_ref_attr_list ***ref_attr_list,
+ struct format_ref_attr_list ***inref_attr_list)
+{
+ int ret, i, j, argc, slen, count, buf_used = 0;
+ unsigned int *lengths, max;
+ char **argv, **values;
+ const char *sep;
+ char *buf = NULL;
+ struct berval **choices, bv;
+
+ ret = format_parse_args(state, args, &argc, &argv);
+ if (ret != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "dribble_merge: error parsing arguments\n");
+ return -EINVAL;
+ }
+ if (argc < 2) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "dribble_merge: requires at least "
+ "two arguments\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+ max = atoi(argv[0]);
+ if (max < 1) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "dribble_merge: small maximum group size\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+ sep = argv[1];
+ slen = strlen(sep);
+ choices = NULL;
+ if (outbuf_choices == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "dribble_merge: returns a list, but a list "
+ "would not be appropriate\n");
+ format_free_parsed_args(argv);
+ return -EINVAL;
+ }
+ for (i = 2, ret = 0, count = 0; i < argc; i++) {
+ /* Expand this argument. */
+ slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id,
+ "dribble_merge: expanding ->%s<-\n", argv[i]);
+ values = format_get_data_set(state, pb, e, group, set,
+ argv[i], disallowed,
+ rel_attrs, ref_attrs, inref_attrs,
+ ref_attr_list, inref_attr_list,
+ &lengths);
+ if (values == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "dribble_merge: no values for "
+ "->%s<-\n", argv[i]);
+ continue;
+ }
+ for (j = 0; values[j] != NULL; j++) {
+ /* Check if this is the first subset, or if there's
+ * space for this value in a subset that we're
+ * currently working on filling. */
+ if ((buf == NULL) ||
+ (buf_used + lengths[j] + slen > max)) {
+ if (buf_used > 0) {
+ /* Add the old subset. */
+ bv.bv_val = buf;
+ bv.bv_len = buf_used;
+ format_add_bv_list(&choices, &bv);
+ }
+ /* Allocate space for the next subset. */
+ buf = malloc(max);
+ buf_used = 0;
+ count = 0;
+ if (buf == NULL) {
+ format_free_bv_list(choices);
+ format_free_data_set(values, lengths);
+ format_free_parsed_args(argv);
+ return -ENOMEM;
+ }
+ }
+ /* If the value's just too big, return an error. */
+ if (lengths[j] > max) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "dribble_merge: value \"%.*s\""
+ " was too big for ->%s<\n",
+ lengths[j], values[j],
+ argv[i]);
+ format_free_bv_list(choices);
+ format_free_data_set(values, lengths);
+ format_free_parsed_args(argv);
+ free(buf);
+ return -ENOBUFS;
+ } else {
+ /* Log this value. */
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "dribble_merge: got %d-byte "
+ "value for ->%s<\n",
+ lengths[j], argv[i]);
+ }
+ /* If this isn't the first result, fill in the
+ * separator. Then fill in the value. */
+ if (count > 0) {
+ memcpy(buf + buf_used, sep, slen);
+ buf_used += slen;
+ }
+ memcpy(buf + buf_used, values[j], lengths[j]);
+ buf_used += lengths[j];
+ count++;
+ }
+ format_free_data_set(values, lengths);
+ }
+ /* Grab any leftovers. */
+ if (buf_used > 0) {
+ bv.bv_val = buf;
+ bv.bv_len = buf_used;
+ format_add_bv_list(&choices, &bv);
+ }
+ format_free_parsed_args(argv);
+ if (choices != NULL) {
+ for (i = 0; choices[i] != NULL; i++) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "dribble_merge: returning \"%.*s\" "
+ "as a value for \"%s\"\n",
+ (int) choices[i]->bv_len,
+ choices[i]->bv_val,
+ slapi_entry_get_dn(e));
+ continue;
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "dribble_merge: returning %d values for "
+ "\"%s\"\n", i, slapi_entry_get_dn(e));
+ format_add_choice(outbuf_choices, outbuf, &choices);
+ ret = 0;
+ } else {
+ ret = -ENOENT;
+ }
+ return ret;
+}
+
/* Choose a formatting function by name. */
static void *
format_lookup_fn(const char *fnname)
@@ -3287,6 +3570,8 @@ format_lookup_fn(const char *fnname)
{"link", format_link},
{"unique", format_unique},
{"internal_sequence_number", format_internal_sequence_number},
+ {"dribble_merge", format_dribble_merge},
+ {"sort", format_sort},
};
for (i = 0; i < sizeof(fns) / sizeof(fns[0]); i++) {
if ((fns[i].name != NULL) &&
diff --git a/tests/test35-schema-dribble/after.sh b/tests/test35-schema-dribble/after.sh
new file mode 100755
index 0000000..92bc3e2
--- /dev/null
+++ b/tests/test35-schema-dribble/after.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+search -b cn=compat,cn=accounts,dc=example,dc=com dn memberUids | $LDIFSORT
diff --git a/tests/test35-schema-dribble/after.txt b/tests/test35-schema-dribble/after.txt
new file mode 100644
index 0000000..8cedd47
--- /dev/null
+++ b/tests/test35-schema-dribble/after.txt
@@ -0,0 +1,22 @@
+dn: cn=compat,cn=accounts,dc=example,dc=com
+
+dn: cn=g1,ou=group,cn=compat,cn=accounts,dc=example,dc=com
+memberUids: tuser15,tuser16,tuser17,tuser18,tuser19,tuser90,tuser91,tuser92,tu
+ ser93,tuser94,tuser95,tuser96,tuser97,tuser98,tuser99
+
+dn: cn=g2,ou=group,cn=compat,cn=accounts,dc=example,dc=com
+memberUids: tuser10,tuser11,tuser12,tuser13,tuser14,tuser15,tuser16,tuser17,tu
+ ser18,tuser19,tuser20,tuser21,tuser22,tuser23,tuser24,tuser25
+memberUids: tuser26,tuser27,tuser28,tuser29,tuser30,tuser31,tuser32,tuser33,tu
+ ser34,tuser35,tuser36,tuser37,tuser38,tuser39,tuser40,tuser41
+memberUids: tuser42,tuser43,tuser44,tuser45,tuser46,tuser47,tuser48,tuser49,tu
+ ser50,tuser51,tuser52,tuser53,tuser54,tuser55,tuser56,tuser57
+memberUids: tuser58,tuser59,tuser60,tuser61,tuser62,tuser63,tuser64,tuser65,tu
+ ser66,tuser67,tuser68,tuser69,tuser70,tuser71,tuser72,tuser73
+memberUids: tuser74,tuser75,tuser76,tuser77,tuser78,tuser79,tuser80,tuser81,tu
+ ser82,tuser83,tuser84,tuser85,tuser86,tuser87,tuser88,tuser89
+memberUids: tuser90,tuser91,tuser92,tuser93,tuser94,tuser95,tuser96,tuser97,tu
+ ser98,tuser99
+
+dn: ou=group,cn=compat,cn=accounts,dc=example,dc=com
+
diff --git a/tests/test35-schema-dribble/before.sh b/tests/test35-schema-dribble/before.sh
new file mode 100755
index 0000000..92bc3e2
--- /dev/null
+++ b/tests/test35-schema-dribble/before.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+search -b cn=compat,cn=accounts,dc=example,dc=com dn memberUids | $LDIFSORT
diff --git a/tests/test35-schema-dribble/before.txt b/tests/test35-schema-dribble/before.txt
new file mode 100644
index 0000000..e6e95ae
--- /dev/null
+++ b/tests/test35-schema-dribble/before.txt
@@ -0,0 +1,20 @@
+dn: cn=compat,cn=accounts,dc=example,dc=com
+
+dn: cn=g1,ou=group,cn=compat,cn=accounts,dc=example,dc=com
+memberUids: tuser15,tuser16,tuser17,tuser18,tuser19,tuser90,tuser91,tuser92,tu
+ ser93,tuser94,tuser95,tuser96,tuser97,tuser98,tuser99
+
+dn: cn=g2,ou=group,cn=compat,cn=accounts,dc=example,dc=com
+memberUids: tuser10,tuser11,tuser12,tuser13,tuser14,tuser20,tuser21,tuser22,tu
+ ser23,tuser24,tuser25,tuser26,tuser27,tuser28,tuser29,tuser30
+memberUids: tuser31,tuser32,tuser33,tuser34,tuser35,tuser36,tuser37,tuser38,tu
+ ser39,tuser40,tuser41,tuser42,tuser43,tuser44,tuser45,tuser46
+memberUids: tuser47,tuser48,tuser49,tuser50,tuser51,tuser52,tuser53,tuser54,tu
+ ser55,tuser56,tuser57,tuser58,tuser59,tuser60,tuser61,tuser62
+memberUids: tuser63,tuser64,tuser65,tuser66,tuser67,tuser68,tuser69,tuser70,tu
+ ser71,tuser72,tuser73,tuser74,tuser75,tuser76,tuser77,tuser78
+memberUids: tuser79,tuser80,tuser81,tuser82,tuser83,tuser84,tuser85,tuser86,tu
+ ser87,tuser88,tuser89
+
+dn: ou=group,cn=compat,cn=accounts,dc=example,dc=com
+
diff --git a/tests/test35-schema-dribble/change.sh b/tests/test35-schema-dribble/change.sh
new file mode 100755
index 0000000..ee6859f
--- /dev/null
+++ b/tests/test35-schema-dribble/change.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+modify << EOF
+dn: cn=g2,cn=groups,cn=accounts,dc=example,dc=com
+changetype: modify
+add: member
+member: cn=g1,cn=groups,cn=accounts,dc=example,dc=com
+-
+
+EOF
+# give memberOf a few seconds to catch up
+sleep 10
diff --git a/tests/test35-schema-dribble/change.txt b/tests/test35-schema-dribble/change.txt
new file mode 100644
index 0000000..f8ae3a0
--- /dev/null
+++ b/tests/test35-schema-dribble/change.txt
@@ -0,0 +1,2 @@
+modifying entry "cn=g2,cn=groups,cn=accounts,dc=example,dc=com"
+
diff --git a/tests/test35-schema-dribble/description.txt b/tests/test35-schema-dribble/description.txt
new file mode 100644
index 0000000..cf34895
--- /dev/null
+++ b/tests/test35-schema-dribble/description.txt
@@ -0,0 +1 @@
+dribble_merge basic function test
diff --git a/tests/test35-schema-dribble/dse.ldif b/tests/test35-schema-dribble/dse.ldif
new file mode 100644
index 0000000..965bd7e
--- /dev/null
+++ b/tests/test35-schema-dribble/dse.ldif
@@ -0,0 +1,14 @@
+dn: cn=compat-group,cn=Schema Compatibility,cn=plugins,cn=config
+objectClass: top
+objectClass: extensibleObject
+cn: compat-group
+schema-compat-container-group: cn=compat,cn=accounts,dc=example,dc=com
+schema-compat-container-rdn: ou=group
+schema-compat-check-access: yes
+schema-compat-search-base: cn=groups,cn=Accounts,dc=example,dc=com
+schema-compat-search-filter: (objectClass=posixGroup)
+schema-compat-entry-rdn: cn=%{cn}
+schema-compat-entry-attribute: objectclass=extensibleObject
+schema-compat-entry-attribute: memberUids=%dribble_merge("128",",","%sort(\"%deref_r(\\\"member\\\",\\\"uid\\\")\")")
+schema-compat-entry-attribute: gidNumber=%{gidNumber}
+
diff --git a/tests/test35-schema-dribble/plugin-process-all.txt b/tests/test35-schema-dribble/plugin-process-all.txt
new file mode 100644
index 0000000..fc7b80d
--- /dev/null
+++ b/tests/test35-schema-dribble/plugin-process-all.txt
@@ -0,0 +1 @@
+verifying that we get called
diff --git a/tests/test35-schema-dribble/userRoot.ldif b/tests/test35-schema-dribble/userRoot.ldif
new file mode 100644
index 0000000..c56ee16
--- /dev/null
+++ b/tests/test35-schema-dribble/userRoot.ldif
@@ -0,0 +1,1531 @@
+# users, accounts, example.com
+dn: cn=users,cn=accounts,dc=example,dc=com
+objectClass: top
+objectClass: nsContainer
+cn: users
+
+# groups, accounts, example.com
+dn: cn=groups,cn=accounts,dc=example,dc=com
+objectClass: top
+objectClass: nsContainer
+cn: groups
+
+# managed-groups, accounts, example.com
+dn: cn=managed-groups,cn=accounts,dc=example,dc=com
+objectClass: top
+objectClass: nsContainer
+cn: groups
+
+# tuser1, users, accounts, example.com
+dn: uid=tuser1,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser1
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1003
+gecos: tuser1
+sn: User
+homeDirectory: /home/tuser1
+cn: Tim User
+uidNumber: 1101
+
+# tuser2, users, accounts, example.com
+dn: uid=tuser2,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser2
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser2
+sn: User
+homeDirectory: /home/tuser2
+cn: Timmy User
+uidNumber: 1102
+
+# tuser3, users, accounts, example.com
+dn: uid=tuser3,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser3
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser3
+sn: User
+homeDirectory: /home/tuser3
+cn: Timothy User
+uidNumber: 1103
+
+dn: uid=tuser4,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser4
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser4
+sn: User
+homeDirectory: /home/tuser4
+cn: Timothy User
+uidNumber: 1104
+
+dn: uid=tuser5,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser5
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser5
+sn: User
+homeDirectory: /home/tuser5
+cn: Timothy User
+uidNumber: 1105
+
+dn: uid=tuser6,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser6
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser6
+sn: User
+homeDirectory: /home/tuser6
+cn: Timothy User
+uidNumber: 1106
+
+dn: uid=tuser7,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser7
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser7
+sn: User
+homeDirectory: /home/tuser7
+cn: Timothy User
+uidNumber: 1107
+
+dn: uid=tuser8,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser8
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser8
+sn: User
+homeDirectory: /home/tuser8
+cn: Timothy User
+uidNumber: 1108
+
+dn: uid=tuser9,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser9
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser9
+sn: User
+homeDirectory: /home/tuser9
+cn: Timothy User
+uidNumber: 1109
+
+dn: uid=tuser10,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser10
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser10
+sn: User
+homeDirectory: /home/tuser10
+cn: Timothy User
+uidNumber: 11010
+
+dn: uid=tuser11,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser11
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser11
+sn: User
+homeDirectory: /home/tuser11
+cn: Timothy User
+uidNumber: 11011
+
+dn: uid=tuser12,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser12
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser12
+sn: User
+homeDirectory: /home/tuser12
+cn: Timothy User
+uidNumber: 11012
+
+dn: uid=tuser13,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser13
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser13
+sn: User
+homeDirectory: /home/tuser13
+cn: Timothy User
+uidNumber: 11013
+
+dn: uid=tuser14,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser14
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser14
+sn: User
+homeDirectory: /home/tuser14
+cn: Timothy User
+uidNumber: 11014
+
+dn: uid=tuser15,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser15
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser15
+sn: User
+homeDirectory: /home/tuser15
+cn: Timothy User
+uidNumber: 11015
+
+dn: uid=tuser16,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser16
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser16
+sn: User
+homeDirectory: /home/tuser16
+cn: Timothy User
+uidNumber: 11016
+
+dn: uid=tuser17,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser17
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser17
+sn: User
+homeDirectory: /home/tuser17
+cn: Timothy User
+uidNumber: 11017
+
+dn: uid=tuser18,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser18
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser18
+sn: User
+homeDirectory: /home/tuser18
+cn: Timothy User
+uidNumber: 11018
+
+dn: uid=tuser19,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser19
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser19
+sn: User
+homeDirectory: /home/tuser19
+cn: Timothy User
+uidNumber: 11019
+
+dn: uid=tuser20,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser20
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser20
+sn: User
+homeDirectory: /home/tuser20
+cn: Timothy User
+uidNumber: 11020
+
+dn: uid=tuser21,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser21
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser21
+sn: User
+homeDirectory: /home/tuser21
+cn: Timothy User
+uidNumber: 11021
+
+dn: uid=tuser22,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser22
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser22
+sn: User
+homeDirectory: /home/tuser22
+cn: Timothy User
+uidNumber: 11022
+
+dn: uid=tuser23,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser23
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser23
+sn: User
+homeDirectory: /home/tuser23
+cn: Timothy User
+uidNumber: 11023
+
+dn: uid=tuser24,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser24
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser24
+sn: User
+homeDirectory: /home/tuser24
+cn: Timothy User
+uidNumber: 11024
+
+dn: uid=tuser25,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser25
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser25
+sn: User
+homeDirectory: /home/tuser25
+cn: Timothy User
+uidNumber: 11025
+
+dn: uid=tuser26,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser26
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser26
+sn: User
+homeDirectory: /home/tuser26
+cn: Timothy User
+uidNumber: 11026
+
+dn: uid=tuser27,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser27
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser27
+sn: User
+homeDirectory: /home/tuser27
+cn: Timothy User
+uidNumber: 11027
+
+dn: uid=tuser28,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser28
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser28
+sn: User
+homeDirectory: /home/tuser28
+cn: Timothy User
+uidNumber: 11028
+
+dn: uid=tuser29,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser29
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser29
+sn: User
+homeDirectory: /home/tuser29
+cn: Timothy User
+uidNumber: 11029
+
+dn: uid=tuser30,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser30
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser30
+sn: User
+homeDirectory: /home/tuser30
+cn: Timothy User
+uidNumber: 11030
+
+dn: uid=tuser31,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser31
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser31
+sn: User
+homeDirectory: /home/tuser31
+cn: Timothy User
+uidNumber: 11031
+
+dn: uid=tuser32,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser32
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser32
+sn: User
+homeDirectory: /home/tuser32
+cn: Timothy User
+uidNumber: 11032
+
+dn: uid=tuser33,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser33
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser33
+sn: User
+homeDirectory: /home/tuser33
+cn: Timothy User
+uidNumber: 11033
+
+dn: uid=tuser34,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser34
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser34
+sn: User
+homeDirectory: /home/tuser34
+cn: Timothy User
+uidNumber: 11034
+
+dn: uid=tuser35,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser35
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser35
+sn: User
+homeDirectory: /home/tuser35
+cn: Timothy User
+uidNumber: 11035
+
+dn: uid=tuser36,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser36
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser36
+sn: User
+homeDirectory: /home/tuser36
+cn: Timothy User
+uidNumber: 11036
+
+dn: uid=tuser37,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser37
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser37
+sn: User
+homeDirectory: /home/tuser37
+cn: Timothy User
+uidNumber: 11037
+
+dn: uid=tuser38,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser38
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser38
+sn: User
+homeDirectory: /home/tuser38
+cn: Timothy User
+uidNumber: 11038
+
+dn: uid=tuser39,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser39
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser39
+sn: User
+homeDirectory: /home/tuser39
+cn: Timothy User
+uidNumber: 11039
+
+dn: uid=tuser40,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser40
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser40
+sn: User
+homeDirectory: /home/tuser40
+cn: Timothy User
+uidNumber: 11040
+
+dn: uid=tuser41,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser41
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser41
+sn: User
+homeDirectory: /home/tuser41
+cn: Timothy User
+uidNumber: 11041
+
+dn: uid=tuser42,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser42
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser42
+sn: User
+homeDirectory: /home/tuser42
+cn: Timothy User
+uidNumber: 11042
+
+dn: uid=tuser43,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser43
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser43
+sn: User
+homeDirectory: /home/tuser43
+cn: Timothy User
+uidNumber: 11043
+
+dn: uid=tuser44,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser44
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser44
+sn: User
+homeDirectory: /home/tuser44
+cn: Timothy User
+uidNumber: 11044
+
+dn: uid=tuser45,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser45
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser45
+sn: User
+homeDirectory: /home/tuser45
+cn: Timothy User
+uidNumber: 11045
+
+dn: uid=tuser46,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser46
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser46
+sn: User
+homeDirectory: /home/tuser46
+cn: Timothy User
+uidNumber: 11046
+
+dn: uid=tuser47,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser47
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser47
+sn: User
+homeDirectory: /home/tuser47
+cn: Timothy User
+uidNumber: 11047
+
+dn: uid=tuser48,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser48
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser48
+sn: User
+homeDirectory: /home/tuser48
+cn: Timothy User
+uidNumber: 11048
+
+dn: uid=tuser49,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser49
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser49
+sn: User
+homeDirectory: /home/tuser49
+cn: Timothy User
+uidNumber: 11049
+
+dn: uid=tuser50,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser50
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser50
+sn: User
+homeDirectory: /home/tuser50
+cn: Timothy User
+uidNumber: 11050
+
+dn: uid=tuser51,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser51
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser51
+sn: User
+homeDirectory: /home/tuser51
+cn: Timothy User
+uidNumber: 11051
+
+dn: uid=tuser52,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser52
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser52
+sn: User
+homeDirectory: /home/tuser52
+cn: Timothy User
+uidNumber: 11052
+
+dn: uid=tuser53,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser53
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser53
+sn: User
+homeDirectory: /home/tuser53
+cn: Timothy User
+uidNumber: 11053
+
+dn: uid=tuser54,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser54
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser54
+sn: User
+homeDirectory: /home/tuser54
+cn: Timothy User
+uidNumber: 11054
+
+dn: uid=tuser55,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser55
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser55
+sn: User
+homeDirectory: /home/tuser55
+cn: Timothy User
+uidNumber: 11055
+
+dn: uid=tuser56,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser56
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser56
+sn: User
+homeDirectory: /home/tuser56
+cn: Timothy User
+uidNumber: 11056
+
+dn: uid=tuser57,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser57
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser57
+sn: User
+homeDirectory: /home/tuser57
+cn: Timothy User
+uidNumber: 11057
+
+dn: uid=tuser58,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser58
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser58
+sn: User
+homeDirectory: /home/tuser58
+cn: Timothy User
+uidNumber: 11058
+
+dn: uid=tuser59,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser59
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser59
+sn: User
+homeDirectory: /home/tuser59
+cn: Timothy User
+uidNumber: 11059
+
+dn: uid=tuser60,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser60
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser60
+sn: User
+homeDirectory: /home/tuser60
+cn: Timothy User
+uidNumber: 11060
+
+dn: uid=tuser61,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser61
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser61
+sn: User
+homeDirectory: /home/tuser61
+cn: Timothy User
+uidNumber: 11061
+
+dn: uid=tuser62,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser62
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser62
+sn: User
+homeDirectory: /home/tuser62
+cn: Timothy User
+uidNumber: 11062
+
+dn: uid=tuser63,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser63
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser63
+sn: User
+homeDirectory: /home/tuser63
+cn: Timothy User
+uidNumber: 11063
+
+dn: uid=tuser64,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser64
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser64
+sn: User
+homeDirectory: /home/tuser64
+cn: Timothy User
+uidNumber: 11064
+
+dn: uid=tuser65,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser65
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser65
+sn: User
+homeDirectory: /home/tuser65
+cn: Timothy User
+uidNumber: 11065
+
+dn: uid=tuser66,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser66
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser66
+sn: User
+homeDirectory: /home/tuser66
+cn: Timothy User
+uidNumber: 11066
+
+dn: uid=tuser67,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser67
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser67
+sn: User
+homeDirectory: /home/tuser67
+cn: Timothy User
+uidNumber: 11067
+
+dn: uid=tuser68,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser68
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser68
+sn: User
+homeDirectory: /home/tuser68
+cn: Timothy User
+uidNumber: 11068
+
+dn: uid=tuser69,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser69
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser69
+sn: User
+homeDirectory: /home/tuser69
+cn: Timothy User
+uidNumber: 11069
+
+dn: uid=tuser70,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser70
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser70
+sn: User
+homeDirectory: /home/tuser70
+cn: Timothy User
+uidNumber: 11070
+
+dn: uid=tuser71,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser71
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser71
+sn: User
+homeDirectory: /home/tuser71
+cn: Timothy User
+uidNumber: 11071
+
+dn: uid=tuser72,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser72
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser72
+sn: User
+homeDirectory: /home/tuser72
+cn: Timothy User
+uidNumber: 11072
+
+dn: uid=tuser73,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser73
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser73
+sn: User
+homeDirectory: /home/tuser73
+cn: Timothy User
+uidNumber: 11073
+
+dn: uid=tuser74,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser74
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser74
+sn: User
+homeDirectory: /home/tuser74
+cn: Timothy User
+uidNumber: 11074
+
+dn: uid=tuser75,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser75
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser75
+sn: User
+homeDirectory: /home/tuser75
+cn: Timothy User
+uidNumber: 11075
+
+dn: uid=tuser76,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser76
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser76
+sn: User
+homeDirectory: /home/tuser76
+cn: Timothy User
+uidNumber: 11076
+
+dn: uid=tuser77,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser77
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser77
+sn: User
+homeDirectory: /home/tuser77
+cn: Timothy User
+uidNumber: 11077
+
+dn: uid=tuser78,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser78
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser78
+sn: User
+homeDirectory: /home/tuser78
+cn: Timothy User
+uidNumber: 11078
+
+dn: uid=tuser79,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser79
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser79
+sn: User
+homeDirectory: /home/tuser79
+cn: Timothy User
+uidNumber: 11079
+
+dn: uid=tuser80,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser80
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser80
+sn: User
+homeDirectory: /home/tuser80
+cn: Timothy User
+uidNumber: 11080
+
+dn: uid=tuser81,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser81
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser81
+sn: User
+homeDirectory: /home/tuser81
+cn: Timothy User
+uidNumber: 11081
+
+dn: uid=tuser82,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser82
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser82
+sn: User
+homeDirectory: /home/tuser82
+cn: Timothy User
+uidNumber: 11082
+
+dn: uid=tuser83,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser83
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser83
+sn: User
+homeDirectory: /home/tuser83
+cn: Timothy User
+uidNumber: 11083
+
+dn: uid=tuser84,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser84
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser84
+sn: User
+homeDirectory: /home/tuser84
+cn: Timothy User
+uidNumber: 11084
+
+dn: uid=tuser85,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser85
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser85
+sn: User
+homeDirectory: /home/tuser85
+cn: Timothy User
+uidNumber: 11085
+
+dn: uid=tuser86,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser86
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser86
+sn: User
+homeDirectory: /home/tuser86
+cn: Timothy User
+uidNumber: 11086
+
+dn: uid=tuser87,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser87
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser87
+sn: User
+homeDirectory: /home/tuser87
+cn: Timothy User
+uidNumber: 11087
+
+dn: uid=tuser88,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser88
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser88
+sn: User
+homeDirectory: /home/tuser88
+cn: Timothy User
+uidNumber: 11088
+
+dn: uid=tuser89,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser89
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser89
+sn: User
+homeDirectory: /home/tuser89
+cn: Timothy User
+uidNumber: 11089
+
+dn: uid=tuser90,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser90
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser90
+sn: User
+homeDirectory: /home/tuser90
+cn: Timothy User
+uidNumber: 11090
+
+dn: uid=tuser91,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser91
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser91
+sn: User
+homeDirectory: /home/tuser91
+cn: Timothy User
+uidNumber: 11091
+
+dn: uid=tuser92,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser92
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser92
+sn: User
+homeDirectory: /home/tuser92
+cn: Timothy User
+uidNumber: 11092
+
+dn: uid=tuser93,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser93
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser93
+sn: User
+homeDirectory: /home/tuser93
+cn: Timothy User
+uidNumber: 11093
+
+dn: uid=tuser94,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser94
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser94
+sn: User
+homeDirectory: /home/tuser94
+cn: Timothy User
+uidNumber: 11094
+
+dn: uid=tuser95,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser95
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser95
+sn: User
+homeDirectory: /home/tuser95
+cn: Timothy User
+uidNumber: 11095
+
+dn: uid=tuser96,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser96
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser96
+sn: User
+homeDirectory: /home/tuser96
+cn: Timothy User
+uidNumber: 11096
+
+dn: uid=tuser97,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser97
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser97
+sn: User
+homeDirectory: /home/tuser97
+cn: Timothy User
+uidNumber: 11097
+
+dn: uid=tuser98,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser98
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser98
+sn: User
+homeDirectory: /home/tuser98
+cn: Timothy User
+uidNumber: 11098
+
+dn: uid=tuser99,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser99
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser99
+sn: User
+homeDirectory: /home/tuser99
+cn: Timothy User
+uidNumber: 11099
+
+dn: uid=tuser100,cn=users,cn=accounts,dc=example,dc=com
+uid: tuser100
+objectClass: top
+objectClass: person
+objectClass: posixAccount
+objectClass: inetUser
+loginShell: /bin/sh
+gidNumber: 1004
+gecos: tuser100
+sn: User
+homeDirectory: /home/tuser100
+cn: Timothy User
+uidNumber: 110100
+
+# g1, groups, accounts, example.com
+dn: cn=g1,cn=groups,cn=accounts,dc=example,dc=com
+objectClass: top
+objectClass: groupofnames
+objectClass: posixGroup
+objectClass: inetUser
+gidNumber: 1001
+cn: g1
+description: g1
+member: uid=tuser15,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser16,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser17,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser18,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser19,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser90,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser91,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser92,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser93,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser94,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser95,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser96,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser97,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser98,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser99,cn=users,cn=accounts,dc=example,dc=com
+
+# g2, groups, accounts, example.com
+dn: cn=g2,cn=groups,cn=accounts,dc=example,dc=com
+objectClass: top
+objectClass: groupofnames
+objectClass: posixGroup
+objectClass: inetUser
+gidNumber: 2002
+cn: g2
+description: g2
+member: uid=tuser10,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser11,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser12,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser13,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser14,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser20,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser21,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser22,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser23,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser24,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser25,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser26,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser27,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser28,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser29,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser30,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser31,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser32,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser33,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser34,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser35,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser36,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser37,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser38,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser39,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser40,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser41,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser42,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser43,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser44,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser45,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser46,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser47,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser48,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser49,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser50,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser51,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser52,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser53,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser54,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser55,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser56,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser57,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser58,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser59,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser60,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser61,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser62,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser63,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser64,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser65,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser66,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser67,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser68,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser69,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser70,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser71,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser72,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser73,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser74,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser75,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser76,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser77,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser78,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser79,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser80,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser81,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser82,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser83,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser84,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser85,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser86,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser87,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser88,cn=users,cn=accounts,dc=example,dc=com
+member: uid=tuser89,cn=users,cn=accounts,dc=example,dc=com
+