📄 ldb_controls.c
字号:
p = &(control_strings[i][12]); ret = sscanf(p, "%d:%d", &crit, &type); if ((ret != 2) || (crit < 0) || (crit > 1) || (type < 0) || (type > 1)) { ret = sscanf(p, "%d", &crit); if ((ret != 1) || (crit < 0) || (crit > 1)) { error_string = talloc_asprintf(mem_ctx, "invalid extended_dn control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b)[:type(i)]\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean\n"); error_string = talloc_asprintf_append(error_string, " i = integer\n"); error_string = talloc_asprintf_append(error_string, " valid values are: 0 - hexadecimal representation\n"); error_string = talloc_asprintf_append(error_string, " 1 - normal string representation"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } control = NULL; } else { control = talloc(ctrl, struct ldb_extended_dn_control); control->type = type; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_EXTENDED_DN_OID; ctrl[i]->critical = crit; ctrl[i]->data = talloc_steal(ctrl[i], control); continue; } if (strncmp(control_strings[i], "sd_flags:", 9) == 0) { struct ldb_sd_flags_control *control; const char *p; int crit, ret; unsigned secinfo_flags; p = &(control_strings[i][9]); ret = sscanf(p, "%d:%u", &crit, &secinfo_flags); if ((ret != 2) || (crit < 0) || (crit > 1) || (secinfo_flags < 0) || (secinfo_flags > 0xF)) { error_string = talloc_asprintf(mem_ctx, "invalid sd_flags control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b):secinfo_flags(n)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean, n = number"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_SD_FLAGS_OID; ctrl[i]->critical = crit; control = talloc(ctrl[i], struct ldb_sd_flags_control); control->secinfo_flags = secinfo_flags; ctrl[i]->data = control; continue; } if (strncmp(control_strings[i], "search_options:", 15) == 0) { struct ldb_search_options_control *control; const char *p; int crit, ret; unsigned search_options; p = &(control_strings[i][15]); ret = sscanf(p, "%d:%u", &crit, &search_options); if ((ret != 2) || (crit < 0) || (crit > 1) || (search_options < 0) || (search_options > 0xF)) { error_string = talloc_asprintf(mem_ctx, "invalid search_options control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b):search_options(n)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean, n = number"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_SEARCH_OPTIONS_OID; ctrl[i]->critical = crit; control = talloc(ctrl[i], struct ldb_search_options_control); control->search_options = search_options; ctrl[i]->data = control; continue; } if (strncmp(control_strings[i], "domain_scope:", 13) == 0) { const char *p; int crit, ret; p = &(control_strings[i][13]); ret = sscanf(p, "%d", &crit); if ((ret != 1) || (crit < 0) || (crit > 1)) { error_string = talloc_asprintf(mem_ctx, "invalid domain_scope control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_DOMAIN_SCOPE_OID; ctrl[i]->critical = crit; ctrl[i]->data = NULL; continue; } if (strncmp(control_strings[i], "paged_results:", 14) == 0) { struct ldb_paged_control *control; const char *p; int crit, size, ret; p = &(control_strings[i][14]); ret = sscanf(p, "%d:%d", &crit, &size); if ((ret != 2) || (crit < 0) || (crit > 1) || (size < 0)) { error_string = talloc_asprintf(mem_ctx, "invalid paged_results control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b):size(n)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean, n = number"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_PAGED_RESULTS_OID; ctrl[i]->critical = crit; control = talloc(ctrl[i], struct ldb_paged_control); control->size = size; control->cookie = NULL; control->cookie_len = 0; ctrl[i]->data = control; continue; } if (strncmp(control_strings[i], "server_sort:", 12) == 0) { struct ldb_server_sort_control **control; const char *p; char attr[256]; char rule[128]; int crit, rev, ret; attr[0] = '\0'; rule[0] = '\0'; p = &(control_strings[i][12]); ret = sscanf(p, "%d:%d:%255[^:]:%127[^:]", &crit, &rev, attr, rule); if ((ret < 3) || (crit < 0) || (crit > 1) || (rev < 0 ) || (rev > 1) ||attr[0] == '\0') { error_string = talloc_asprintf(mem_ctx, "invalid server_sort control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b):rev(b):attr(s)[:rule(s)]\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean, s = string"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_SERVER_SORT_OID; ctrl[i]->critical = crit; control = talloc_array(ctrl[i], struct ldb_server_sort_control *, 2); control[0] = talloc(control, struct ldb_server_sort_control); control[0]->attributeName = talloc_strdup(control, attr); if (rule[0]) control[0]->orderingRule = talloc_strdup(control, rule); else control[0]->orderingRule = NULL; control[0]->reverse = rev; control[1] = NULL; ctrl[i]->data = control; continue; } if (strncmp(control_strings[i], "notification:", 13) == 0) { const char *p; int crit, ret; p = &(control_strings[i][13]); ret = sscanf(p, "%d", &crit); if ((ret != 1) || (crit < 0) || (crit > 1)) { error_string = talloc_asprintf(mem_ctx, "invalid notification control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_NOTIFICATION_OID; ctrl[i]->critical = crit; ctrl[i]->data = NULL; continue; } if (strncmp(control_strings[i], "show_deleted:", 13) == 0) { const char *p; int crit, ret; p = &(control_strings[i][13]); ret = sscanf(p, "%d", &crit); if ((ret != 1) || (crit < 0) || (crit > 1)) { error_string = talloc_asprintf(mem_ctx, "invalid show_deleted control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_SHOW_DELETED_OID; ctrl[i]->critical = crit; ctrl[i]->data = NULL; continue; } if (strncmp(control_strings[i], "permissive_modify:", 18) == 0) { const char *p; int crit, ret; p = &(control_strings[i][18]); ret = sscanf(p, "%d", &crit); if ((ret != 1) || (crit < 0) || (crit > 1)) { error_string = talloc_asprintf(mem_ctx, "invalid permissive_modify control syntax\n"); error_string = talloc_asprintf_append(error_string, " syntax: crit(b)\n"); error_string = talloc_asprintf_append(error_string, " note: b = boolean"); ldb_set_errstring(ldb, error_string); talloc_free(error_string); return NULL; } ctrl[i] = talloc(ctrl, struct ldb_control); if (!ctrl[i]) { ldb_oom(ldb); return NULL; } ctrl[i]->oid = LDB_CONTROL_PERMISSIVE_MODIFY_OID; ctrl[i]->critical = crit; ctrl[i]->data = NULL; continue; } /* no controls matched, throw an error */ ldb_asprintf_errstring(ldb, "Invalid control name: '%s'", control_strings[i]); return NULL; } ctrl[i] = NULL; return ctrl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -