2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina/*
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina Authors:
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina Pavel Březina <pbrezina@redhat.com>
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina Copyright (C) 2011 Red Hat
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina This program is free software; you can redistribute it and/or modify
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina it under the terms of the GNU General Public License as published by
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina the Free Software Foundation; either version 3 of the License, or
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina (at your option) any later version.
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina This program is distributed in the hope that it will be useful,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina GNU General Public License for more details.
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina You should have received a copy of the GNU General Public License
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina*/
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include <popt.h>
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "util/util.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "confdb/confdb.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "monitor/monitor_interfaces.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "responder/common/responder.h"
e880949305cee3aca79441fe6113a9d79e7c98f2Jakub Hrozek#include "responder/common/responder_sbus.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "responder/sudo/sudosrv_private.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "providers/data_provider.h"
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac#include "responder/common/negcache.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
769347ad4d35d43488eb98f980143495b0db415dStef Walterstruct mon_cli_iface monitor_sudo_methods = {
769347ad4d35d43488eb98f980143495b0db415dStef Walter { &mon_cli_iface_meta, 0 },
769347ad4d35d43488eb98f980143495b0db415dStef Walter .resInit = monitor_common_res_init,
769347ad4d35d43488eb98f980143495b0db415dStef Walter .goOffline = NULL,
769347ad4d35d43488eb98f980143495b0db415dStef Walter .resetOffline = NULL,
769347ad4d35d43488eb98f980143495b0db415dStef Walter .rotateLogs = responder_logrotate,
769347ad4d35d43488eb98f980143495b0db415dStef Walter .clearMemcache = NULL,
769347ad4d35d43488eb98f980143495b0db415dStef Walter .clearEnumCache = NULL,
b76419cf8830440b46c20a15585562343c7b1924Jakub Hrozek .sysbusReconnect = NULL,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina};
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinastatic void sudo_dp_reconnect_init(struct sbus_connection *conn,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int status,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina void *pvt)
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina{
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct be_conn *be_conn = talloc_get_type(pvt, struct be_conn);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int ret;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Did we reconnect successfully? */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (status == SBUS_RECONNECT_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "Reconnected to the Data Provider.\n");
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Identify ourselves to the data provider */
83a79d93035c2d75a1941f3b54426119174044a0Pavel Březina ret = rdp_register_client(be_conn, "SUDO");
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* all fine */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret == EOK) {
65976ea5e9767bfaced81dfb97dc87d59f50b57eSimo Sorce handle_requests_after_reconnect(be_conn->rctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Failed to reconnect */
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "Could not reconnect to %s provider.\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov be_conn->domain->name);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina}
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinaint sudo_process_init(TALLOC_CTX *mem_ctx,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct tevent_context *ev,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct confdb_ctx *cdb)
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina{
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina struct resp_ctx *rctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct sss_cmd_table *sudo_cmds;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct sudo_ctx *sudo_ctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct be_conn *iter;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int ret;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int max_retries;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_cmds = get_sudo_cmds();
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina ret = sss_process_init(mem_ctx, ev, cdb,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_cmds,
8bccd95e275fae760a991da394235e4e70e57bbdMichal Zidek SSS_SUDO_SOCKET_NAME, -1, NULL, -1,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina CONFDB_SUDO_CONF_ENTRY,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSS_SUDO_SBUS_SERVICE_NAME,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSS_SUDO_SBUS_SERVICE_VERSION,
07e941c1bbdc752142bbd3b838c540bc7ecd0ed7Stef Walter &monitor_sudo_methods,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina "SUDO",
04e870d99e72aa3160bdb6ab05d986fb4005c3edPavel Březina NULL,
4f3a9d837a55b49448eca3c713c85a406207e523Simo Sorce sss_connection_setup,
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina &rctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n");
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina return ret;
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina }
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina sudo_ctx = talloc_zero(rctx, struct sudo_ctx);
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina if (!sudo_ctx) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "fatal error initializing sudo_ctx\n");
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina ret = ENOMEM;
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březina goto fail;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina sudo_ctx->rctx = rctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_ctx->rctx->pvt_ctx = sudo_ctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
e3bb7b3fda4697fa9c6f80107cd01dd04a20c85fPetr Cech sss_ncache_prepopulate(sudo_ctx->rctx->ncache, sudo_ctx->rctx->cdb, rctx);
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac if (ret != EOK) {
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac DEBUG(SSSDBG_FATAL_FAILURE,
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac "failed to set ncache for sudo's filter_users\n");
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac goto fail;
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac }
2a25713afc6beefb11a799903a43f695c5d7a4f9Adam Tkac
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Enable automatic reconnection to the Data Provider */
3bea01f01d76e1e95a8239c0d3f67073992136a1Jan Zeleny ret = confdb_get_int(sudo_ctx->rctx->cdb,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina CONFDB_SUDO_CONF_ENTRY,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina CONFDB_SERVICE_RECON_RETRIES,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina 3, &max_retries);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Failed to set up automatic reconnection\n");
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březina goto fail;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina for (iter = sudo_ctx->rctx->be_conns; iter; iter = iter->next) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sbus_reconnect_init(iter->conn, max_retries,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_dp_reconnect_init, iter);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina /* Get sudo_timed option */
3bea01f01d76e1e95a8239c0d3f67073992136a1Jan Zeleny ret = confdb_get_bool(sudo_ctx->rctx->cdb,
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina CONFDB_SUDO_CONF_ENTRY, CONFDB_SUDO_TIMED,
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina CONFDB_DEFAULT_SUDO_TIMED,
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina &sudo_ctx->timed);
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina if (ret != EOK) {
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "Error reading from confdb (%d) [%s]\n",
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina ret, strerror(ret));
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina goto fail;
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina }
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina /* Get sudo_inverse_order option */
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina ret = confdb_get_bool(sudo_ctx->rctx->cdb,
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina CONFDB_SUDO_CONF_ENTRY, CONFDB_SUDO_INVERSE_ORDER,
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina CONFDB_DEFAULT_SUDO_INVERSE_ORDER,
52e3ee5c5ff2c5a4341041826a803ad42d2b2de7Pavel Březina &sudo_ctx->inverse_order);
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina if (ret != EOK) {
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "Error reading from confdb (%d) [%s]\n",
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina ret, strerror(ret));
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina goto fail;
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina }
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina /* Get sudo_inverse_order option */
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina ret = confdb_get_int(sudo_ctx->rctx->cdb,
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina CONFDB_SUDO_CONF_ENTRY, CONFDB_SUDO_THRESHOLD,
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina CONFDB_DEFAULT_SUDO_THRESHOLD,
a5f300adf19ec9c3087c62bd93a5175db799687aPavel Březina &sudo_ctx->threshold);
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina if (ret != EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "Error reading from confdb (%d) [%s]\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ret, strerror(ret));
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březina goto fail;
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina }
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina
0528fdec17d0031996e919fcd852459e86592c35Jakub Hrozek ret = schedule_get_domains_task(rctx, rctx->ev, rctx, NULL);
909a86af4eb99f5d311d7136cab78dca535ae304Sumit Bose if (ret != EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "schedule_get_domains_tasks failed.\n");
909a86af4eb99f5d311d7136cab78dca535ae304Sumit Bose goto fail;
909a86af4eb99f5d311d7136cab78dca535ae304Sumit Bose }
909a86af4eb99f5d311d7136cab78dca535ae304Sumit Bose
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "SUDO Initialization complete\n");
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return EOK;
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březina
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březinafail:
7c9fe57ad82747a32721ca0a08c5569282f3e0c4Pavel Březina talloc_free(rctx);
6f8ae17869f4f8a1496e3f171ae6b5c11af1845cPavel Březina return ret;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina}
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinaint main(int argc, const char *argv[])
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina{
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int opt;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina poptContext pc;
cb75b275d15beedd1fdecc1f8ced657fba282218Lukas Slebodnik char *opt_logger = NULL;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct main_context *main_ctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int ret;
ac40d2f2b2b2fc35c95389f5e28febd580bd2b7aJakub Hrozek uid_t uid;
ac40d2f2b2b2fc35c95389f5e28febd580bd2b7aJakub Hrozek gid_t gid;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct poptOption long_options[] = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina POPT_AUTOHELP
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSSD_MAIN_OPTS
cb75b275d15beedd1fdecc1f8ced657fba282218Lukas Slebodnik SSSD_LOGGER_OPTS
ac40d2f2b2b2fc35c95389f5e28febd580bd2b7aJakub Hrozek SSSD_SERVER_OPTS(uid, gid)
f37e795cd16310759dc9741c1ab1323b287a9101Fabiano Fidêncio SSSD_RESPONDER_OPTS
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina POPT_TABLEEND
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina };
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
677a31351c80453d9ce006481364399a96312052René Genz /* Set debug level to invalid value so we can decide if -d 0 was used. */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina debug_level = SSSDBG_INVALID;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
458f5245dd5130d12666cce6faf8ef1ec7f80169Pavel Reichl umask(DFL_RSP_UMASK);
458f5245dd5130d12666cce6faf8ef1ec7f80169Pavel Reichl
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina pc = poptGetContext(argv[0], argc, argv, long_options, 0);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina while((opt = poptGetNextOpt(pc)) != -1) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina switch(opt) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina default:
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina fprintf(stderr, "\nInvalid option %s: %s\n\n",
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina poptBadOption(pc, 0), poptStrerror(opt));
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina poptPrintUsage(pc, stderr, 0);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return 1;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina poptFreeContext(pc);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
9e2c64c6d4f5560e27207193efea6536a566865eMichal Zidek DEBUG_INIT(debug_level);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
677a31351c80453d9ce006481364399a96312052René Genz /* set up things like debug, signals, daemonization, etc. */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina debug_log_file = "sssd_sudo";
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
cb75b275d15beedd1fdecc1f8ced657fba282218Lukas Slebodnik sss_set_logger(opt_logger);
cb75b275d15beedd1fdecc1f8ced657fba282218Lukas Slebodnik
3f9e2c24dbc14b2eafbe4f5a5ee16fe9af3c3f75Jakub Hrozek ret = server_setup("sssd[sudo]", 0, uid, gid, CONFDB_SUDO_CONF_ENTRY,
ac40d2f2b2b2fc35c95389f5e28febd580bd2b7aJakub Hrozek &main_ctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return 2;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ret = die_if_parent_died();
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* This is not fatal, don't return */
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Could not set up to exit "
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "when parent process does\n");
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ret = sudo_process_init(main_ctx,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina main_ctx->event_ctx,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina main_ctx->confdb_ctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return 3;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* loop on main */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina server_loop(main_ctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return 0;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina}