sss_userdel.c revision 7ffaa2afb9e03a6f0b9c602c0f03b2074ea33eac
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski/*
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski SSSD
c06dd8856a03b72f6b3f69e874f8700f10cb8522Christian Maeder
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder sss_userdel
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
c06dd8856a03b72f6b3f69e874f8700f10cb8522Christian Maeder Copyright (C) Jakub Hrozek <jhrozek@redhat.com> 2009
ae17d457c2d00d47d65e8cd510c3fd21b9516ccbTill Mossakowski
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski This program is free software; you can redistribute it and/or modify
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder it under the terms of the GNU General Public License as published by
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder the Free Software Foundation; either version 3 of the License, or
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder (at your option) any later version.
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
679d3f541f7a9ede4079e045f7758873bb901872Till Mossakowski This program is distributed in the hope that it will be useful,
679d3f541f7a9ede4079e045f7758873bb901872Till Mossakowski but WITHOUT ANY WARRANTY; without even the implied warranty of
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder GNU General Public License for more details.
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder You should have received a copy of the GNU General Public License
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski along with this program. If not, see <http://www.gnu.org/licenses/>.
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski*/
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski#include <stdio.h>
82d681fe6950e2a35f28fdefb874d060632faccaTill Mossakowski#include <stdlib.h>
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski#include <talloc.h>
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski#include <popt.h>
e3c9174a782e90f965a0b080c22861c3ef5af12dTill Mossakowski#include <sys/types.h>
70e2af8d4bf21bcdfb53e9a0414e27173b577a1eTill Mossakowski#include <sys/wait.h>
70e2af8d4bf21bcdfb53e9a0414e27173b577a1eTill Mossakowski
2b4130336e941b7d01c78a6da55449a4c6eca609Till Mossakowski#include "db/sysdb.h"
2b4130336e941b7d01c78a6da55449a4c6eca609Till Mossakowski#include "util/util.h"
2b4130336e941b7d01c78a6da55449a4c6eca609Till Mossakowski#include "util/find_uid.h"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#include "tools/tools_util.h"
82d681fe6950e2a35f28fdefb874d060632faccaTill Mossakowski#include "tools/sss_sync_ops.h"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#ifndef KILL_CMD
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#define KILL_CMD "killall"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#endif
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#ifndef KILL_CMD_USER_FLAG
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#define KILL_CMD_USER_FLAG "-u"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#endif
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#ifndef KILL_CMD_SIGNAL_FLAG
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#define KILL_CMD_SIGNAL_FLAG "-s"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#endif
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#ifndef KILL_CMD_SIGNAL
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#define KILL_CMD_SIGNAL "SIGKILL"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#endif
c529224e0ec191fbaa87261f05c34f89c17b3f3aTill Mossakowski
c529224e0ec191fbaa87261f05c34f89c17b3f3aTill Mossakowskistatic int is_logged_in(TALLOC_CTX *mem_ctx, uid_t uid)
02b3d9f81150bedd0916c2ffc637a14668e34097Till Mossakowski{
02b3d9f81150bedd0916c2ffc637a14668e34097Till Mossakowski int ret;
c529224e0ec191fbaa87261f05c34f89c17b3f3aTill Mossakowski hash_key_t key;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder hash_value_t value;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder hash_table_t *uid_table;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = get_uid_table(mem_ctx, &uid_table);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret == ENOSYS) return ret;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder DEBUG(1, ("Cannot initialize hash table.\n"));
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder return ret;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder key.type = HASH_KEY_ULONG;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder key.ul = (unsigned long) uid;
bfa9e03532243ceb487f0384d0f6a447f1ce7670Till Mossakowski
bfa9e03532243ceb487f0384d0f6a447f1ce7670Till Mossakowski ret = hash_lookup(uid_table, &key, &value);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder talloc_zfree(uid_table);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder return ret == HASH_SUCCESS ? EOK : ENOENT;
e3c9174a782e90f965a0b080c22861c3ef5af12dTill Mossakowski}
bfa9e03532243ceb487f0384d0f6a447f1ce7670Till Mossakowski
8fe1a8e240ccd5f3682a936ef2fa4c22fee973bcTill Mossakowskistatic int kick_user(struct tools_ctx *tctx)
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder{
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski int ret;
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski int status;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski pid_t pid, child_pid;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski tctx->octx->lock = 1;
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski start_transaction(tctx);
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski if (tctx->error != EOK) {
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski return tctx->error;
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski }
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski ret = usermod(tctx, tctx->ev, tctx->sysdb, tctx->handle, tctx->octx);
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski if (ret != EOK) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder talloc_zfree(tctx->handle);
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder return ret;
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski }
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder end_transaction(tctx);
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder if (tctx->error != EOK) {
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski return tctx->error;
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski }
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder errno = 0;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder pid = fork();
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder if (pid == 0) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder /* child */
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski execlp(KILL_CMD, KILL_CMD,
1bb1684c83317dfd1692ab53415027b67d8f2faeTill Mossakowski KILL_CMD_USER_FLAG, tctx->octx->name,
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder KILL_CMD_SIGNAL_FLAG, KILL_CMD_SIGNAL,
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder (char *) NULL);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder exit(errno);
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder } else {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder /* parent */
587fb54160b66128cf17e4c9bca7494a7f2c3c4aChristian Maeder if (pid == -1) {
587fb54160b66128cf17e4c9bca7494a7f2c3c4aChristian Maeder DEBUG(1, ("fork failed [%d]: %s\n"));
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder return errno;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder while((child_pid = waitpid(pid, &status, 0)) > 0) {
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder if (child_pid == -1) {
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder DEBUG(1, ("waitpid failed\n"));
e9249d3ecd51a2b6a966a58669953e58d703adc6Till Mossakowski return errno;
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder }
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder if (WIFEXITED(status)) {
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder break;
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder }
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder }
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder }
0c2a90cbfb63865ff485c3fbe20a14589a5914beTill Mossakowski
c616e681da8c052b62e14247fea522da099ac0e4Christian Maeder return EOK;
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder}
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maederint main(int argc, const char **argv)
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski{
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski int ret = EXIT_SUCCESS;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder struct tools_ctx *tctx = NULL;
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder const char *pc_username = NULL;
de6c4edf5694b8bad67ecec910c492eaf1129dc8Christian Maeder
de6c4edf5694b8bad67ecec910c492eaf1129dc8Christian Maeder int pc_debug = 0;
de6c4edf5694b8bad67ecec910c492eaf1129dc8Christian Maeder int pc_remove = 0;
de6c4edf5694b8bad67ecec910c492eaf1129dc8Christian Maeder int pc_force = 0;
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder int pc_kick = 0;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski poptContext pc = NULL;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski struct poptOption long_options[] = {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski POPT_AUTOHELP
31c49f2fa23d4ac089f35145d80a224deb6ea7e4Till Mossakowski { "debug", '\0', POPT_ARG_INT | POPT_ARGFLAG_DOC_HIDDEN, &pc_debug,
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder 0, _("The debug level to run with"), NULL },
6a57a555c8ef0a79aa5d20e1d721400dbffa564aMaciek Makowski { "remove", 'r', POPT_ARG_NONE, NULL, 'r',
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder _("Remove home directory and mail spool"), NULL },
6a57a555c8ef0a79aa5d20e1d721400dbffa564aMaciek Makowski { "no-remove", 'R', POPT_ARG_NONE, NULL, 'R',
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder _("Do not remove home directory and mail spool"), NULL },
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder { "force", 'f', POPT_ARG_NONE, NULL, 'f',
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder _("Force removal of files not owned by the user"), NULL },
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder { "kick", 'k', POPT_ARG_NONE, NULL, 'k',
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder _("Kill users' processes before removing him"), NULL },
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder POPT_TABLEEND
3476beb5baf84bef7cc7d627b130de9d48700399Christian Maeder };
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski debug_prg_name = argv[0];
a89e661aad28f1b39f4fc9f9f9a4d46074234123Christian Maeder
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski ret = set_locale();
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if (ret != EOK) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski DEBUG(1, ("set_locale failed (%d): %s\n", ret, strerror(ret)));
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski ERROR("Error setting the locale\n");
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski ret = EXIT_FAILURE;
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski goto fini;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder /* parse parameters */
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder pc = poptGetContext(NULL, argc, argv, long_options, 0);
d290f2ee3d1a4d60c77c5dd06979453f3fa34fafJorina Freya Gerken poptSetOtherOptionHelp(pc, "USERNAME");
d290f2ee3d1a4d60c77c5dd06979453f3fa34fafJorina Freya Gerken while ((ret = poptGetNextOpt(pc)) > 0) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder switch (ret) {
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder case 'r':
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder pc_remove = DO_REMOVE_HOME;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder break;
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder case 'R':
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder pc_remove = DO_NOT_REMOVE_HOME;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder break;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder case 'f':
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski pc_force = DO_FORCE_REMOVAL;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder break;
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder case 'k':
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder pc_kick = 1;
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski break;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
52aad0502f0ddd332a28ae3fcd3327fa66d002f7Till Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder debug_level = pc_debug;
788dd403da4203e895e15892ef7fa48129617d30Till Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != -1) {
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder usage(pc, poptStrerror(ret));
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = EXIT_FAILURE;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto fini;
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder }
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken pc_username = poptGetArg(pc);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (pc_username == NULL) {
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder usage(pc, _("Specify user to delete\n"));
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = EXIT_FAILURE;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto fini;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski CHECK_ROOT(ret, debug_prg_name);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski ret = init_sss_tools(&tctx);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder DEBUG(1, ("init_sss_tools failed (%d): %s\n", ret, strerror(ret)));
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret == ENOENT) {
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski ERROR("Error initializing the tools - no local domain\n");
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder } else {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder ERROR("Error initializing the tools\n");
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
6a57a555c8ef0a79aa5d20e1d721400dbffa564aMaciek Makowski ret = EXIT_FAILURE;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto fini;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder /* if the domain was not given as part of FQDN, default to local domain */
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski ret = parse_name_domain(tctx, pc_username);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder ERROR("Invalid domain specified in FQDN\n");
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = EXIT_FAILURE;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto fini;
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder }
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken /*
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder * Fills in defaults for ops_ctx user did not specify.
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder */
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = userdel_defaults(tctx, tctx->confdb, tctx->octx, pc_remove);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ERROR("Cannot set default values\n");
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = EXIT_FAILURE;
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski goto fini;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = sysdb_getpwnam_sync(tctx,
d08907a7832988612fbc0682b216e150d1e738d2Christian Maeder tctx->ev,
d08907a7832988612fbc0682b216e150d1e738d2Christian Maeder tctx->sysdb,
d08907a7832988612fbc0682b216e150d1e738d2Christian Maeder tctx->octx->name,
d08907a7832988612fbc0682b216e150d1e738d2Christian Maeder tctx->local,
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder tctx->octx);
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder if (ret != EOK) {
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski /* Error message will be printed in the switch */
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski goto done;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski }
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski if ((tctx->octx->uid < tctx->local->id_min) ||
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski (tctx->local->id_max && tctx->octx->uid > tctx->local->id_max)) {
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder ERROR("User %s is outside the defined ID range for domain\n",
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken tctx->octx->name);
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken ret = EXIT_FAILURE;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski goto fini;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski }
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski if (pc_kick) {
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski ret = kick_user(tctx);
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski if (ret != EOK) {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder tctx->error = ret;
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski /* cancel transaction */
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski talloc_zfree(tctx->handle);
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder goto done;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski }
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken start_transaction(tctx);
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken if (tctx->error != EOK) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto done;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder /* userdel */
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = userdel(tctx, tctx->sysdb, tctx->octx);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder goto done;
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder }
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken end_transaction(tctx);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder /* Set SELinux login context - must be done after transaction is done
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder * b/c libselinux calls getpwnam */
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = del_seuser(tctx->octx->name);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret != EOK) {
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski ERROR("Cannot reset SELinux login context\n");
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder ret = EXIT_FAILURE;
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski goto fini;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (!pc_kick) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ret = is_logged_in(tctx, tctx->octx->uid);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder switch(ret) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder case ENOENT:
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder break;
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski case EOK:
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski ERROR("WARNING: The user (uid %lu) was still logged in when "
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski "deleted.\n", (unsigned long) tctx->octx->uid);
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski break;
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski case ENOSYS:
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ERROR("Cannot determine if the user was logged in on this "
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder "platform");
9d34a8049237647d0188ee2ec88db2dc45f1f848Till Mossakowski break;
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder default:
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder ERROR("Error while checking if the user was logged in\n");
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder break;
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken }
7f4c380d6b38e229de365db3c84be767515a3386Jorina Freya Gerken }
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder ret = run_userdel_cmd(tctx);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder if (ret != EOK) {
c0380b947eef252db81ee562246bb732555427f4Till Mossakowski ERROR("The post-delete command failed: %s\n", strerror(ret));
3476beb5baf84bef7cc7d627b130de9d48700399Christian Maeder goto fini;
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski }
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski if (tctx->octx->remove_homedir) {
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski ret = remove_homedir(tctx,
f534c0116096e25659ceaa57de030c497ce9345aTill Mossakowski tctx->octx->home,
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder tctx->octx->maildir,
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski tctx->octx->name,
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski tctx->octx->uid,
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski pc_force);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder if (ret == EPERM) {
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski ERROR("Not removing home dir - not owned by user\n");
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski } else if (ret != EOK) {
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski ERROR("Cannot remove homedir: %s\n", strerror(ret));
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder ret = EXIT_FAILURE;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder goto fini;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maederdone:
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder if (ret) {
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder DEBUG(1, ("sysdb operation failed (%d)[%s]\n", ret, strerror(ret)));
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder switch (ret) {
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder case ENOENT:
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder ERROR("No such user in local domain. "
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder "Removing users only allowed in local domain.\n");
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder break;
6a57a555c8ef0a79aa5d20e1d721400dbffa564aMaciek Makowski
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski default:
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski ERROR("Internal error. Could not remove user.\n");
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski break;
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski }
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder ret = EXIT_FAILURE;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder goto fini;
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski }
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski ret = EXIT_SUCCESS;
6be12b57d589b1ee2d41d8c26502a68013fdf9adTill Mossakowski
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowskifini:
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski talloc_free(tctx);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder poptFreeContext(pc);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder exit(ret);
6be12b57d589b1ee2d41d8c26502a68013fdf9adTill Mossakowski}
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski
c1168130136b44bcfa8946dbda76be553aa7344bTill Mossakowski