svn commit: samba r26489 - in
branches/SAMBA_4_0_RELEASE/source/dsdb/samdb/ldb_modules: .
abartlet at samba.org
abartlet at samba.org
Mon Dec 17 06:02:55 GMT 2007
Author: abartlet
Date: 2007-12-17 06:02:54 +0000 (Mon, 17 Dec 2007)
New Revision: 26489
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26489
Log:
Merge fixed ranged results module to release branch.
This is the last blocker for the release that I know of.
Andrew Bartlett
Modified:
branches/SAMBA_4_0_RELEASE/source/dsdb/samdb/ldb_modules/ranged_results.c
Changeset:
Modified: branches/SAMBA_4_0_RELEASE/source/dsdb/samdb/ldb_modules/ranged_results.c
===================================================================
--- branches/SAMBA_4_0_RELEASE/source/dsdb/samdb/ldb_modules/ranged_results.c 2007-12-17 05:56:42 UTC (rev 26488)
+++ branches/SAMBA_4_0_RELEASE/source/dsdb/samdb/ldb_modules/ranged_results.c 2007-12-17 06:02:54 UTC (rev 26489)
@@ -60,9 +60,10 @@
if (strncasecmp(p, ";range=", strlen(";range=")) != 0) {
continue;
}
- if (sscanf(p, ";range=%u-*", &start) == 1) {
+ if (sscanf(p, ";range=%u-%u", &start, &end) == 2) {
+ } else if (sscanf(p, ";range=%u-*", &start) == 1) {
end = (unsigned int)-1;
- } else if (sscanf(p, ";range=%u-%u", &start, &end) != 2) {
+ } else {
continue;
}
new_attr = talloc_strndup(orig_req,
@@ -82,39 +83,44 @@
ldb_asprintf_errstring(ldb, "range request error: start must not be greater than end");
return LDB_ERR_UNWILLING_TO_PERFORM;
}
- if (end >= el->num_values) {
+ if (end >= (el->num_values - 1)) {
/* Need to leave the requested attribute in
* there (so add an empty one to match) */
end_str = "*";
- end = el->num_values;
- ret = ldb_msg_add_empty(ares->message, orig_req->op.search.attrs[i],
- 0, NULL);
- if (ret != LDB_SUCCESS) {
- return ret;
- }
+ end = el->num_values - 1;
} else {
end_str = talloc_asprintf(el, "%u", end);
+ if (!end_str) {
+ ldb_oom(ldb);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
}
- orig_values = el->values;
- orig_num_values = el->num_values;
-
- if ((start + end < start) || (start + end < end)) {
- ldb_asprintf_errstring(ldb, "range request error: start or end would overflow!");
- return LDB_ERR_UNWILLING_TO_PERFORM;
+ /* If start is greater then where we noe find the end to be */
+ if (start > end) {
+ el->num_values = 0;
+ el->values = NULL;
+ } else {
+ orig_values = el->values;
+ orig_num_values = el->num_values;
+
+ if ((start + end < start) || (start + end < end)) {
+ ldb_asprintf_errstring(ldb, "range request error: start or end would overflow!");
+ return LDB_ERR_UNWILLING_TO_PERFORM;
+ }
+
+ el->num_values = 0;
+
+ el->values = talloc_array(el, struct ldb_val, (end - start) + 1);
+ if (!el->values) {
+ ldb_oom(ldb);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+ for (j=start; j <= end; j++) {
+ el->values[el->num_values] = orig_values[j];
+ el->num_values++;
+ }
}
-
- el->values = talloc_array(el, struct ldb_val, end - start);
- el->num_values = 0;
-
- if (!el->values) {
- ldb_oom(ldb);
- return LDB_ERR_OPERATIONS_ERROR;
- }
- for (j=start; j < end; j++) {
- el->values[el->num_values] = orig_values[j];
- el->num_values++;
- }
- el->name = talloc_asprintf(el, "%s;Range=%u-%s", el->name, start, end_str);
+ el->name = talloc_asprintf(el, "%s;range=%u-%s", el->name, start, end_str);
if (!el->name) {
ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR;
More information about the samba-cvs
mailing list