diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2009-07-27 09:49:45 +0200 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2009-08-05 10:19:20 -0400 |
commit | 1f6d7dfad2956cb2f6c33104eda4fdbefe380a42 (patch) | |
tree | 3763e4fd1cfe233bbdcd342b26545577f141273e /server/tools/sss_userdel.c | |
parent | a5fe74914ab920bfaed87c046c525ee7148623f2 (diff) | |
download | sssd-1f6d7dfad2956cb2f6c33104eda4fdbefe380a42.tar.gz sssd-1f6d7dfad2956cb2f6c33104eda4fdbefe380a42.tar.bz2 sssd-1f6d7dfad2956cb2f6c33104eda4fdbefe380a42.zip |
Parse fully qualified names in tools
Allow adding users into different domains not only by specifying
ID directly but also by specifying fully qualified name. Exit when
both specifications are used in conflict.
Diffstat (limited to 'server/tools/sss_userdel.c')
-rw-r--r-- | server/tools/sss_userdel.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/server/tools/sss_userdel.c b/server/tools/sss_userdel.c index f7cb7571..be35b4fa 100644 --- a/server/tools/sss_userdel.c +++ b/server/tools/sss_userdel.c @@ -147,6 +147,7 @@ int main(int argc, const char **argv) struct tevent_req *req; struct sss_domain_info *dom; struct passwd *pwd_info; + const char *pc_username = NULL; int pc_debug = 0; poptContext pc = NULL; @@ -196,27 +197,47 @@ int main(int argc, const char **argv) debug_level = pc_debug; - data->name = poptGetArg(pc); - if (data->name == NULL) { + pc_username = poptGetArg(pc); + if (pc_username == NULL) { usage(pc, _("Specify user to delete\n")); ret = EXIT_FAILURE; goto fini; } + ret = parse_name_domain(data, pc_username); + if (ret != EOK) { + ret = EXIT_FAILURE; + goto fini; + } + /* arguments processed, go on to actual work */ pwd_info = getpwnam(data->name); if (pwd_info) { data->uid = pwd_info->pw_uid; } - ret = find_domain_for_id(ctx, data->uid, &dom); + ret = get_domain_by_id(data->ctx, data->uid, &dom); + if (ret != EOK) { + ERROR("Cannot get domain info\n"); + ret = EXIT_FAILURE; + goto fini; + } + if (data->domain && data->uid && data->domain != dom) { + ERROR("Selected domain %s conflicts with selected UID %llu\n", + data->domain->name, (unsigned long long int) data->uid); + ret = EXIT_FAILURE; + goto fini; + } + if (data->domain == NULL && dom) { + data->domain = dom; + } + + ret = get_domain_type(data->ctx, data->domain); switch (ret) { case ID_IN_LOCAL: - data->domain = dom; break; case ID_IN_LEGACY_LOCAL: - data->domain = dom; case ID_OUTSIDE: ret = userdel_legacy(data); if(ret != EOK) { @@ -233,7 +254,7 @@ int main(int argc, const char **argv) goto fini; default: - DEBUG(1, ("Unknown return code %d from find_domain_for_id\n", ret)); + DEBUG(1, ("Unknown return code %d from get_domain_type\n", ret)); ERROR("Error looking up domain\n"); ret = EXIT_FAILURE; goto fini; |