summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2016-04-08 17:40:01 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-07-07 10:27:11 +0200
commitbd524624bab2ea89f17fc84bc873ea0eb6ca7d20 (patch)
tree016cb999c830e88d7837b1918561c691c1a41410
parent526d4d5e5a916cf30a043836cba14eab529cb7b1 (diff)
downloadsssd-bd524624bab2ea89f17fc84bc873ea0eb6ca7d20.tar.gz
sssd-bd524624bab2ea89f17fc84bc873ea0eb6ca7d20.tar.xz
sssd-bd524624bab2ea89f17fc84bc873ea0eb6ca7d20.zip
TOOLS: Make the local domain operate on FQDNs
Normally we convert the names from short to internal format on input. For the local domain tools, we can consider the sss_sync_ops an input interface, to avoid having to convert the name in each tool and interface separately. Reviewed-by: Sumit Bose <sbose@redhat.com>
-rw-r--r--src/tools/sss_sync_ops.c87
-rw-r--r--src/tools/sss_sync_ops.h2
2 files changed, 75 insertions, 14 deletions
diff --git a/src/tools/sss_sync_ops.c b/src/tools/sss_sync_ops.c
index 5468929b6..7f2e3ea85 100644
--- a/src/tools/sss_sync_ops.c
+++ b/src/tools/sss_sync_ops.c
@@ -279,8 +279,15 @@ int usermod(TALLOC_CTX *mem_ctx,
struct ldb_dn *member_dn = NULL;
int ret;
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->name,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
if (data->addgroups || data->rmgroups) {
- member_dn = sysdb_user_dn(mem_ctx, data->domain, data->name);
+ member_dn = sysdb_user_dn(mem_ctx, data->domain, data->sysdb_fqname);
if (!member_dn) {
return ENOMEM;
}
@@ -299,7 +306,7 @@ int usermod(TALLOC_CTX *mem_ctx,
}
if (attrs->num != 0) {
- ret = sysdb_set_user_attr(data->domain, data->name,
+ ret = sysdb_set_user_attr(data->domain, data->sysdb_fqname,
attrs, SYSDB_MOD_REP);
if (ret) {
return ret;
@@ -358,8 +365,15 @@ int groupmod(TALLOC_CTX *mem_ctx,
struct ldb_dn *member_dn = NULL;
int ret;
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->name,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
if (data->addgroups || data->rmgroups) {
- member_dn = sysdb_group_dn(mem_ctx, data->domain, data->name);
+ member_dn = sysdb_group_dn(mem_ctx, data->domain, data->sysdb_fqname);
if (!member_dn) {
return ENOMEM;
}
@@ -375,7 +389,7 @@ int groupmod(TALLOC_CTX *mem_ctx,
return ret;
}
- ret = sysdb_set_group_attr(data->domain, data->name,
+ ret = sysdb_set_group_attr(data->domain, data->sysdb_fqname,
attrs, SYSDB_MOD_REP);
if (ret) {
return ret;
@@ -570,7 +584,15 @@ int useradd(TALLOC_CTX *mem_ctx,
{
int ret;
- ret = sysdb_add_user(data->domain, data->name, data->uid, data->gid,
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->name,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = sysdb_add_user(data->domain, data->sysdb_fqname, data->uid, data->gid,
data->gecos, data->home, data->shell,
NULL, NULL, 0, 0);
if (ret) {
@@ -580,7 +602,7 @@ int useradd(TALLOC_CTX *mem_ctx,
if (data->addgroups) {
struct ldb_dn *member_dn;
- member_dn = sysdb_user_dn(mem_ctx, data->domain, data->name);
+ member_dn = sysdb_user_dn(mem_ctx, data->domain, data->sysdb_fqname);
if (!member_dn) {
ret = ENOMEM;
goto done;
@@ -609,7 +631,14 @@ int userdel(TALLOC_CTX *mem_ctx,
struct ldb_dn *user_dn;
int ret;
- user_dn = sysdb_user_dn(mem_ctx, data->domain, data->name);
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->name,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
+ user_dn = sysdb_user_dn(mem_ctx, data->domain, data->sysdb_fqname);
if (!user_dn) {
DEBUG(SSSDBG_CRIT_FAILURE, "Could not construct a user DN\n");
return ENOMEM;
@@ -634,7 +663,14 @@ int groupadd(struct ops_ctx *data)
{
int ret;
- ret = sysdb_add_group(data->domain, data->name, data->gid, NULL, 0, 0);
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->sysdb_fqname,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sysdb_add_group(data->domain, data->sysdb_fqname, data->gid, NULL, 0, 0);
if (ret == EOK) {
flush_nscd_cache(NSCD_DB_GROUP);
}
@@ -651,7 +687,14 @@ int groupdel(TALLOC_CTX *mem_ctx,
struct ldb_dn *group_dn;
int ret;
- group_dn = sysdb_group_dn(mem_ctx, data->domain, data->name);
+ data->sysdb_fqname = sss_create_internal_fqname(data,
+ data->name,
+ data->domain->name);
+ if (data->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
+ group_dn = sysdb_group_dn(mem_ctx, data->domain, data->sysdb_fqname);
if (group_dn == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE, "Could not construct a group DN\n");
return ENOMEM;
@@ -679,7 +722,13 @@ int sysdb_getpwnam_sync(TALLOC_CTX *mem_ctx,
const char *str;
int ret;
- ret = sysdb_getpwnam(mem_ctx, out->domain, name, &res);
+ out->sysdb_fqname = sss_create_internal_fqname(out, name,
+ out->domain->name);
+ if (out->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sysdb_getpwnam(mem_ctx, out->domain, out->sysdb_fqname, &res);
if (ret) {
return ret;
}
@@ -696,8 +745,8 @@ int sysdb_getpwnam_sync(TALLOC_CTX *mem_ctx,
out->gid = ldb_msg_find_attr_as_uint64(res->msgs[0], SYSDB_GIDNUM, 0);
str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_NAME, NULL);
- out->name = talloc_strdup(out, str);
- if (out->name == NULL) {
+ ret = sss_parse_internal_fqname(out, str, &out->name, NULL);
+ if (ret != EOK) {
return ENOMEM;
}
@@ -752,7 +801,13 @@ int sysdb_getgrnam_sync(TALLOC_CTX *mem_ctx,
const char *str;
int ret;
- ret = sysdb_getgrnam(mem_ctx, out->domain, name, &res);
+ out->sysdb_fqname = sss_create_internal_fqname(out, name,
+ out->domain->name);
+ if (out->sysdb_fqname == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sysdb_getgrnam(mem_ctx, out->domain, out->sysdb_fqname, &res);
if (ret) {
return ret;
}
@@ -766,7 +821,11 @@ int sysdb_getgrnam_sync(TALLOC_CTX *mem_ctx,
/* fill ops_ctx */
out->gid = ldb_msg_find_attr_as_uint64(res->msgs[0], SYSDB_GIDNUM, 0);
str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_NAME, NULL);
- out->name = talloc_strdup(out, str);
+ ret = sss_parse_internal_fqname(out, str, &out->name, NULL);
+ if (ret != EOK) {
+ return ENOMEM;
+ }
+
if (out->name == NULL) {
return ENOMEM;
}
diff --git a/src/tools/sss_sync_ops.h b/src/tools/sss_sync_ops.h
index 3aaf7a9f3..ac83bec07 100644
--- a/src/tools/sss_sync_ops.h
+++ b/src/tools/sss_sync_ops.h
@@ -57,6 +57,8 @@ struct ops_ctx {
char *addattr;
char *setattr;
char *delattr;
+
+ char *sysdb_fqname;
};
/* default values for add operations */