static bool get_group_map_from_gid(gid_t gid, GROUP_MAP *map)
{
int ret;
- char *expr;
struct ldb_result *res=NULL;
- expr = talloc_asprintf(ldb, "(&(gidNumber=%u)(objectClass=groupMap))",
- (unsigned)gid);
- if (expr == NULL) goto failed;
-
- ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, NULL, expr);
- talloc_steal(expr, res);
+ ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "(&(gidNumber=%u)(objectClass=groupMap))", (unsigned)gid);
if (ret != LDB_SUCCESS || res->count != 1) goto failed;
if (!msg_to_group_map(res->msgs[0], map)) goto failed;
- talloc_free(expr);
return True;
failed:
- talloc_free(expr);
return False;
}
static bool get_group_map_from_ntname(const char *name, GROUP_MAP *map)
{
int ret;
- char *expr;
struct ldb_result *res=NULL;
- expr = talloc_asprintf(ldb, "(&(ntName=%s)(objectClass=groupMap))", name);
- if (expr == NULL) goto failed;
-
- ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, NULL, expr);
- talloc_steal(expr, res);
+ ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "(&(ntName=%s)(objectClass=groupMap))", name);
if (ret != LDB_SUCCESS || res->count != 1) goto failed;
if (!msg_to_group_map(res->msgs[0], map)) goto failed;
- talloc_free(expr);
return True;
failed:
- talloc_free(expr);
return False;
}
size_t *p_num_entries, bool unix_only)
{
int i, ret;
- char *expr;
fstring name;
struct ldb_result *res = NULL;
struct ldb_dn *basedn=NULL;
tmp_ctx = talloc_new(ldb);
if (tmp_ctx == NULL) goto failed;
- if (sid_name_use == SID_NAME_UNKNOWN) {
- expr = talloc_asprintf(tmp_ctx, "(&(objectClass=groupMap))");
- } else {
- expr = talloc_asprintf(tmp_ctx, "(&(sidNameUse=%u)(objectClass=groupMap))",
- sid_name_use);
- }
- if (expr == NULL) goto failed;
-
/* we do a subtree search on the domain */
if (domsid != NULL) {
sid_to_fstring(name, domsid);
if (basedn == NULL) goto failed;
}
- ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL, expr);
+ if (sid_name_use == SID_NAME_UNKNOWN) {
+ ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL,
+ "(&(objectClass=groupMap))");
+ } else {
+ ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL,
+ "(&(sidNameUse=%u)(objectClass=groupMap))",
+ sid_name_use);
+ }
+
talloc_steal(tmp_ctx, res);
if (ret != LDB_SUCCESS) goto failed;
NULL
};
DOM_SID alias;
- char *expr;
int ret, i;
struct ldb_result *res=NULL;
fstring string_sid;
return NT_STATUS_INVALID_PARAMETER;
}
- expr = talloc_asprintf(ldb, "(&(member=%s)(objectClass=groupMap))",
- string_sid);
- if (expr == NULL) goto failed;
-
- ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, attrs, expr);
- talloc_steal(expr, res);
+ ret = ldb_search(ldb, ldb, &res, NULL, LDB_SCOPE_SUBTREE, attrs, "(&(member=%s)(objectClass=groupMap))", string_sid);
if (ret != LDB_SUCCESS) {
goto failed;
}
}
}
- talloc_free(expr);
return NT_STATUS_OK;
failed:
- talloc_free(expr);
return status;
}
note that ldb_search() will automatically replace a NULL 'base' value with the
defaultNamingContext from the rootDSE if available.
*/
-int ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
+static int _ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
struct ldb_result **_res,
const struct ldb_dn *base,
enum ldb_scope scope,
takes a memory context where results are allocated
*/
-int ldb_search_exp_fmt(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, struct ldb_result **result,
+int ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, struct ldb_result **result,
struct ldb_dn *base, enum ldb_scope scope, const char * const *attrs,
const char *exp_fmt, ...)
{
return LDB_ERR_OPERATIONS_ERROR;
}
- ret = ldb_search(ldb, ldb, &res, base, scope, attrs, expression);
+ ret = _ldb_search(ldb, ldb, &res, base, scope, attrs, expression);
if (ret == LDB_SUCCESS) {
talloc_steal(mem_ctx, res);
int main(int argc, const char **argv)
{
struct ldb_context *ldb;
- const char *expression = "(dn=*)";
struct ldb_result *resultMsg;
int i;
confusing to start with. See RFC2254.
*/
if (LDB_SUCCESS != ldb_search(ldb, ldb, &resultMsg, NULL, LDB_SCOPE_DEFAULT,
- NULL, expression) ) {
+ NULL, "(dn=*)") ) {
printf("Problem in search\n");
exit(-1);
}
\note use talloc_free() to free the ldb_result returned
*/
int ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
- struct ldb_result **_res,
- const struct ldb_dn *base,
- enum ldb_scope scope,
- const char * const *attrs,
- const char *expression);
-
-/*
- * a useful search function where you can easily define the expression and
- * that takes a memory context where results are allocated
-*/
-
-int ldb_search_exp_fmt(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
struct ldb_result **result, struct ldb_dn *base,
enum ldb_scope scope, const char * const *attrs,
const char *exp_fmt, ...);
return LDB_ERR_OPERATIONS_ERROR;
}
- ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE, NULL, attrs, &res);
+ ret = ldb_search(module->ldb, module->ldb, &res, dn, LDB_SCOPE_BASE, attrs, NULL);
talloc_free(dn);
if (ret != LDB_SUCCESS) {
return ret;
NSS_STATUS _nss_ldb_getgrnam_r(const char *name, struct group *result_buf, char *buffer, size_t buflen, int *errnop)
{
int ret;
- char *filter;
TALLOC_CTX *ctx;
struct ldb_result *gr_res;
struct ldb_result *mem_res;
return NSS_STATUS_UNAVAIL;
}
- /* build the filter for this uid */
- filter = talloc_asprintf(ctx, _LDB_NSS_GRNAM_FILTER, name);
- if (filter == NULL) {
- /* this is a fatal error */
- *errnop = errno = ENOMEM;
- ret = NSS_STATUS_UNAVAIL;
- goto done;
- }
-
/* search the entry */
ret = ldb_search(_ldb_nss_ctx->ldb, _ldb_nss_ctx->ldb, &gr_res,
_ldb_nss_ctx->base,
LDB_SCOPE_SUBTREE,
_ldb_nss_gr_attrs,
- filter);
+ _LDB_NSS_GRNAM_FILTER, name);
if (ret != LDB_SUCCESS) {
/* this is a fatal error */
*errnop = errno = ENOENT;
NSS_STATUS _nss_ldb_getgrgid_r(gid_t gid, struct group *result_buf, char *buffer, size_t buflen, int *errnop)
{
int ret;
- char *filter;
TALLOC_CTX *ctx;
struct ldb_result *gr_res;
struct ldb_result *mem_res;
return NSS_STATUS_UNAVAIL;
}
- /* build the filter for this uid */
- filter = talloc_asprintf(ctx, _LDB_NSS_GRGID_FILTER, gid);
- if (filter == NULL) {
- /* this is a fatal error */
- *errnop = errno = ENOMEM;
- ret = NSS_STATUS_UNAVAIL;
- goto done;
- }
-
/* search the entry */
ret = ldb_search(_ldb_nss_ctx->ldb, _ldb_nss_ctx->ldb, &gr_res,
_ldb_nss_ctx->base,
LDB_SCOPE_SUBTREE,
_ldb_nss_gr_attrs,
- filter);
+ _LDB_NSS_GRGID_FILTER, gid);
if (ret != LDB_SUCCESS) {
/* this is a fatal error */
*errnop = errno = ENOENT;
NSS_STATUS _nss_ldb_initgroups_dyn(const char *user, gid_t group, long int *start, long int *size, gid_t **groups, long int limit, int *errnop)
{
int ret;
- char *filter;
const char * attrs[] = { "uidNumber", "gidNumber", NULL };
struct ldb_result *uid_res;
struct ldb_result *mem_res;
return NSS_STATUS_UNAVAIL;
}
- /* build the filter for this name */
- filter = talloc_asprintf(mem_res, _LDB_NSS_PWNAM_FILTER, user);
- if (filter == NULL) {
- /* this is a fatal error */
- *errnop = errno = ENOENT;
- ret = NSS_STATUS_UNAVAIL;
- goto done;
- }
-
/* search the entry */
ret = ldb_search(_ldb_nss_ctx->ldb, _ldb_nss_ctx->ldb, &uid_res,
_ldb_nss_ctx->base,
LDB_SCOPE_SUBTREE,
attrs,
- filter);
+ _LDB_NSS_PWNAM_FILTER, user);
if (ret != LDB_SUCCESS) {
/* this is a fatal error */
*errnop = errno = ENOENT;
NSS_STATUS _nss_ldb_getpwuid_r(uid_t uid, struct passwd *result_buf, char *buffer, size_t buflen, int *errnop)
{
int ret;
- char *filter;
struct ldb_result *res;
if (uid == 0) { /* we don't serve root uid by policy */
return ret;
}
- /* build the filter for this uid */
- filter = talloc_asprintf(_ldb_nss_ctx, _LDB_NSS_PWUID_FILTER, uid);
- if (filter == NULL) {
- /* this is a fatal error */
- *errnop = errno = ENOMEM;
- ret = NSS_STATUS_UNAVAIL;
- goto done;
- }
-
/* search the entry */
ret = ldb_search(_ldb_nss_ctx->ldb, _ldb_nss_ctx->ldb, &res,
_ldb_nss_ctx->base,
LDB_SCOPE_SUBTREE,
_ldb_nss_pw_attrs,
- filter
- );
+ _LDB_NSS_PWUID_FILTER, uid);
if (ret != LDB_SUCCESS) {
/* this is a fatal error */
*errnop = errno = ENOENT;
res->msgs[0]);
done:
- talloc_free(filter);
talloc_free(res);
return ret;
}
NSS_STATUS _nss_ldb_getpwnam_r(const char *name, struct passwd *result_buf, char *buffer, size_t buflen, int *errnop)
{
int ret;
- char *filter;
struct ldb_result *res;
ret = _ldb_nss_init();
return ret;
}
- /* build the filter for this name */
- filter = talloc_asprintf(_ldb_nss_ctx, _LDB_NSS_PWNAM_FILTER, name);
- if (filter == NULL) {
- /* this is a fatal error */
- *errnop = errno = ENOENT;
- ret = NSS_STATUS_UNAVAIL;
- goto done;
- }
-
/* search the entry */
ret = ldb_search(_ldb_nss_ctx->ldb, _ldb_nss_ctx->ldb, &res,
_ldb_nss_ctx->base,
LDB_SCOPE_SUBTREE,
_ldb_nss_pw_attrs,
- filter);
+ _LDB_NSS_PWNAM_FILTER, name);
if (ret != LDB_SUCCESS) {
/* this is a fatal error */
*errnop = errno = ENOENT;
res->msgs[0]);
done:
- talloc_free(filter);
talloc_free(res);
return ret;
}
struct ldb_result *res;
const char *name = ldb_msg_find_attr_as_string(search_from->msgs[i],
"lDAPDisplayname", NULL);
- char *filter = talloc_asprintf(mem_ctx, "(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))",
- name, name);
ret = ldb_search(ldb, ldb, &res, schemadn, LDB_SCOPE_SUBTREE,
- oc_attrs, filter);
- talloc_free(filter);
+ oc_attrs, "(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))",
+ name, name);
if (ret != LDB_SUCCESS) {
printf("Search failed: %s\n", ldb_errstring(ldb));
return ret;
}
}
- ret = ldb_search(ldb, ldb, &result, basedn, options->scope, attrs, expression);
+ ret = ldb_search(ldb, ldb, &result, basedn, options->scope, attrs, "%s", expression);
if (ret != LDB_SUCCESS) {
printf("search failed - %s\n", ldb_errstring(ldb));
exit(1);
for (i=0;i<nsearches;i++) {
int uid = (i * 700 + 17) % (nrecords * 2);
- char *expr;
struct ldb_result *res = NULL;
int ret;
- expr = talloc_asprintf(ldb, "(uid=TEST%d)", uid);
- ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL, expr);
+ ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL, "(uid=TEST%d)", uid);
if (ret != LDB_SUCCESS || (uid < nrecords && res->count != 1)) {
- printf("Failed to find %s - %s\n", expr, ldb_errstring(ldb));
+ printf("Failed to find TEST%d - %s\n", uid, ldb_errstring(ldb));
exit(1);
}
if (uid >= nrecords && res->count > 0) {
- printf("Found %s !? - %d\n", expr, ret);
+ printf("Found TEST%d !? - %d\n", uid, ret);
exit(1);
}