sysdb_ops.c revision 907a7c626db407d19d4cae85c2db7d3561120349
6643N/A along with this program. If not, see <http://www.gnu.org/licenses/>.
6643N/A#include "db/sysdb_private.h"
6643N/A#include "db/sysdb_services.h"
6643N/A#include "db/sysdb_autofs.h"
6643N/A#include "util/crypto/sss_crypto.h"
if (!v || !v->data) {
errno = 0;
if (errno) {
msg,
NULL,
NULL,
NULL);
false, NULL);
return ret;
return ret;
#define ERROR_OUT(v, r, l) do { v = r; goto l; } while(0)
bool ignore_not_found)
int ret;
switch (ret) {
case LDB_SUCCESS:
return EOK;
case LDB_ERR_NO_SUCH_OBJECT:
if (ignore_not_found) {
return EOK;
bool ignore_not_found)
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
goto done;
if (ret) {
if (ret) {
goto done;
for (i = 0; i < msgs_count; i++) {
if (ret) {
goto done;
done:
return ret;
const char *filter,
const char **attrs,
int ret;
goto done;
goto done;
goto done;
done:
return ret;
const char *search_base,
const char *filter_str,
const char *sid_str,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto done;
if (!filter) {
goto done;
&msgs);
if (ret) {
goto done;
done:
else if (ret) {
return ret;
enum sysdb_obj_type {
SYSDB_UNKNOWN = 0,
const char *name,
const char **attrs,
char *sanitized_name;
char *lc_sanitized_name;
char *filter;
int ret;
switch (type) {
case SYSDB_USER:
case SYSDB_GROUP:
return EINVAL;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto done;
goto done;
if (!filter) {
goto done;
if (ret) {
goto done;
done:
else if (ret) {
return ret;
const char *name,
const char **attrs,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto done;
if (!filter) {
goto done;
if (ret) {
goto done;
done:
else if (ret) {
return ret;
const char *sid_str,
const char **attrs,
const char *upn,
const char **attrs,
NULL };
char *filter;
int ret;
return ENOMEM;
goto done;
goto done;
&msgs);
goto done;
goto done;
done:
return ret;
const char *name,
const char **attrs,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto done;
if (!filter) {
goto done;
if (ret) {
goto done;
done:
else if (ret) {
return ret;
const char *sid_str,
const char **attrs,
const char *name,
const char **attrs,
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto done;
&msgs);
if (ret) {
goto done;
done:
else if (ret) {
return ret;
int mod_op)
int i, ret;
int lret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
if (!msg) {
goto done;
goto done;
done:
else if (ret) {
return ret;
const char *name,
int mod_op)
if (!tmp_ctx) {
return ENOMEM;
if (!dn) {
goto done;
goto done;
done:
return ret;
const char *name,
int mod_op)
if (!tmp_ctx) {
goto done;
if (!dn) {
goto done;
if (ret) {
goto done;
done:
return ret;
const char *name,
int mod_op)
if (!tmp_ctx) {
return ENOMEM;
if (!dn) {
goto done;
done:
return ret;
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!base_dn) {
return ENOMEM;
if (ret) {
return ret;
switch (ret) {
case EOK:
goto done;
goto done;
case ENOENT:
goto done;
count = 0;
if (!filter) {
goto done;
switch (ret) {
case EOK:
for (i = 0; i < count; i++) {
new_id++;
goto done;
case ENOENT:
goto done;
count = 0;
if (!msg) {
goto done;
if (ret) {
goto done;
done:
if (ret) {
return ret;
const char *name,
const char *gecos,
const char *homedir,
const char *shell)
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!msg) {
goto done;
done:
if (ret) {
return ret;
static errno_t
const char *name,
const char *orig_dn,
const char *userdn)
bool add_member = false;
if (!tmp_ctx) {
return ENOENT;
if (!msg) {
add_member = true;
add_member = false;
if (orig_members) {
orig_dn) == 0) {
add_member = true;
add_member = true;
if (add_member) {
goto done;
done:
return ret;
static errno_t
const char *orig_dn,
const char *name)
const char *userdn;
char *sanitized_name;
char *filter;
if (!tmp_ctx) {
return ENOENT;
goto done;
if (!filter) {
goto done;
goto done;
goto done;
goto done;
if (!tmpdn) {
if (!userdn) {
if (!tmpdn) {
goto done;
goto done;
for (i = 0; i < group_count; i++) {
done:
return ret;
const char *name,
const char *gecos,
const char *homedir,
const char *shell,
const char *orig_dn,
int cache_timeout,
int ret;
if (gid != 0) {
return EINVAL;
return ERANGE;
return ERANGE;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
return ret;
goto done;
if (uid != 0) {
goto done;
if (uid == 0) {
if (!id_attrs) {
goto done;
if (!attrs) {
if (!attrs) {
goto done;
if (!now) {
((cache_timeout) ?
name);
done:
return ret;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!msg) {
goto done;
done:
if (ret) {
return ret;
int cache_timeout,
int ret;
bool posix;
return ERANGE;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
return ret;
goto done;
if (gid != 0) {
goto done;
if (ret) {
goto done;
if (!attrs) {
if (!attrs) {
goto done;
posix = true;
if (ret) {
goto done;
goto done;
if (ret) {
goto done;
if (ret) {
goto done;
if (!now) {
if (ret) {
goto done;
((cache_timeout) ?
if (ret) {
goto done;
if (ret) {
goto done;
done:
return ret;
const char *name,
const char *original_dn,
const char *sid_str,
bool posix,
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!attrs) {
goto done;
if (!now) {
if (original_dn) {
if (sid_str) {
done:
return ret;
int mod_op)
const char *dn;
int ret;
if (!msg) {
if (!dn) {
fail:
if (ret) {
return ret;
int ret;
if (!msg) {
return ENOMEM;
done:
if (ret) {
return ret;
const char *name,
const char *description,
char **missing,
int cache_timeout,
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
return ret;
if (!attrs) {
if (!attrs) {
goto done;
if (!now) {
((cache_timeout) ?
if (missing) {
missing);
done:
return ret;
const char *name,
const char *pwd,
const char *gecos,
const char *homedir,
const char *shell,
const char *orig_dn,
char **remove_attrs,
int ret;
bool in_transaction = false;
if (!tmp_ctx) {
return ENOMEM;
if (!attrs) {
if (!attrs) {
goto fail;
goto fail;
in_transaction = true;
goto fail;
if (!now) {
goto fail;
goto fail;
goto done;
goto fail;
if (uid) {
if (gid) {
if (gecos) {
if (homedir) {
if (shell) {
((cache_timeout) ?
if (remove_attrs) {
done:
goto fail;
in_transaction = false;
fail:
if (in_transaction) {
if (ret) {
return ret;
const char *name,
bool new_group = false;
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
new_group = true;
if (!attrs) {
if (!attrs) {
goto done;
if (!now) {
if (new_group) {
now);
return EEXIST;
goto done;
now);
if (ret) {
goto done;
if (gid) {
if (ret) {
goto done;
if (ret) {
goto done;
((cache_timeout) ?
if (ret) {
goto done;
if (ret) {
goto done;
done:
if (ret) {
return ret;
const char *group,
const char *member,
int modify_op,
bool is_dn)
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
if (!member_dn) {
goto done;
if (!is_dn) {
if (!group_dn) {
goto done;
done:
return ret;
const char *group,
const char *member,
bool is_dn)
const char *group,
const char *member,
bool is_dn)
const char *username,
const char *password)
char *salt;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
goto fail;
if (ret) {
goto fail;
if (!attrs) {
if (ret) {
goto fail;
return EOK;
fail:
if (ret) {
return ret;
const char *filter,
const char *subtree_name,
const char **attrs,
int ret;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
const char *object_name,
const char *subtree_name,
const char **attrs,
int ret;
return EINVAL;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
if (ret) {
goto done;
goto done;
done:
return ret;
const char *object_name,
const char *subtree_name,
bool add_object = false;
int ret;
return EINVAL;
if (ret) {
if (!tmp_ctx) {
goto done;
goto done;
add_object = true;
goto done;
goto done;
goto done;
if (add_object) {
if (add_object) {
done:
if (ret) {
return ret;
const char *object_name,
const char *subtree_name)
int ret;
return EINVAL;
if (!tmp_ctx) {
return ENOMEM;
goto done;
switch (ret) {
case LDB_SUCCESS:
case LDB_ERR_NO_SUCH_OBJECT:
done:
return ret;
const char *expression,
const char *asq_attribute,
const char **attrs,
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto fail;
goto fail;
goto fail;
goto fail;
if (!res) {
goto fail;
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
else if (ret) {
return ret;
const char *sub_filter,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto fail;
if (!filter) {
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
else if (ret) {
return ret;
char *filter;
int ret;
char *sanitized_name;
if (!tmp_ctx) {
return ENOMEM;
if (name) {
const char *c_name;
goto fail;
goto fail;
if (ret) {
goto fail;
goto fail;
goto fail;
goto fail;
for (i = 0; i < msg_count; i++) {
if (!msg) {
goto fail;
goto fail;
return EOK;
fail:
return ret;
const char *sub_filter,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto fail;
if (!filter) {
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
else if (ret) {
return ret;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (name) {
if (ret) {
goto fail;
const char *c_name;
goto fail;
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
return ret;
const char *sub_filter,
const char **attrs,
char *filter;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!basedn) {
goto fail;
if (!filter) {
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
return ret;
const char *name)
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
goto done;
done:
return ret;
const char *sid_str)
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
int ret;
int failed_login_delay;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
if (failed_login_delay) {
*failed_login_attempts = 0;
goto done;
goto done;
done:
return ret;
const char *name,
const char *password,
bool just_check,
const char *userhash;
char *comphash;
int cred_expiration;
bool authentication_successful = false;
int ret;
return EINVAL;
return EINVAL;
return EINVAL;
return EINVAL;
if (!tmp_ctx) {
return ENOMEM;
if (ret) {
return ret;
goto done;
goto done;
if (cred_expiration) {
expire_date = 0;
goto done;
expire_date = 0;
goto done;
goto done;
if (ret) {
goto done;
goto done;
authentication_successful = true;
if (just_check) {
goto done;
goto done;
goto done;
authentication_successful = false;
goto done;
goto done;
if (ret) {
done:
if (ret) {
if (ret) {
if (authentication_successful) {
return ret;
const char *member,
const char *const *add_groups,
const char *const *del_groups,
bool is_dn)
bool in_transaction = false;
if(!tmp_ctx) {
return ENOMEM;
goto done;
in_transaction = true;
if (add_groups) {
for (i = 0; add_groups[i]; i++) {
if (del_groups) {
for (i = 0; del_groups[i]; i++) {
goto done;
in_transaction = false;
done:
if (in_transaction) {
return ret;
const char *member,
const char *const *add_groups,
const char *const *del_groups)
const char *member,
const char *const *add_groups,
const char *const *del_groups)
const char *name,
char **remove_attrs)
bool in_transaction = false;
int lret;
size_t i;
switch(type) {
case SYSDB_MEMBER_USER:
case SYSDB_MEMBER_GROUP:
case SYSDB_MEMBER_NETGROUP:
case SYSDB_MEMBER_SERVICE:
goto done;
goto done;
in_transaction = true;
for (i = 0; remove_attrs[i]; i++) {
goto done;
goto done;
goto done;
in_transaction = false;
done:
if (in_transaction) {
return ret;
const char *filter_tmpl,
const char *str,
const char **attrs,
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
goto done;
goto done;
done:
} else if (ret) {
return ret;
const char *sid_str,
const char **attrs,
int ret;
if (!tmp_ctx) {
return ENOMEM;
goto done;
goto done;
goto done;
done:
} else if (ret) {
return ret;
const char *uuid_str,
const char **attrs,