sudosrv.c revision 65976ea5e9767bfaced81dfb97dc87d59f50b57e
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"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "responder/sudo/sudosrv_private.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina#include "providers/data_provider.h"
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinastruct sbus_method monitor_sudo_methods[] = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina { MON_CLI_METHOD_PING, monitor_common_pong },
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina { MON_CLI_METHOD_RES_INIT, monitor_common_res_init },
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina { MON_CLI_METHOD_ROTATE, responder_logrotate },
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina { NULL, NULL }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina};
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinastruct sbus_interface monitor_sudo_interface = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina MONITOR_INTERFACE,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina MONITOR_PATH,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SBUS_DEFAULT_VTABLE,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina monitor_sudo_methods,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina NULL
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina};
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinastatic struct sbus_method sudo_dp_methods[] = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina { NULL, NULL }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina};
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březinastruct sbus_interface sudo_dp_interface = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DP_INTERFACE,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DP_PATH,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SBUS_DEFAULT_VTABLE,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_dp_methods,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina 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) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_TRACE_FUNC, ("Reconnected to the Data Provider.\n"));
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Identify ourselves to the data provider */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ret = dp_common_send_id(be_conn->conn,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DATA_PROVIDER_VERSION,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina "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 */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, ("Could not reconnect to %s provider.\n",
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina 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{
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_ctx = talloc_zero(mem_ctx, struct sudo_ctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (!sudo_ctx) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, ("fatal error initializing sudo_ctx\n"));
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return ENOMEM;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_cmds = get_sudo_cmds();
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ret = sss_process_init(sudo_ctx, ev, cdb,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_cmds,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSS_SUDO_SOCKET_NAME, NULL,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina CONFDB_SUDO_CONF_ENTRY,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSS_SUDO_SBUS_SERVICE_NAME,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSS_SUDO_SBUS_SERVICE_VERSION,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina &monitor_sudo_interface,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina "SUDO",
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina &sudo_dp_interface,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina &sudo_ctx->rctx);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina if (ret != EOK) {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return ret;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina }
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina sudo_ctx->rctx->pvt_ctx = sudo_ctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
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,
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ("Failed to set up automatic reconnection\n"));
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return ret;
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
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina /* Get responder options */
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina /* Get cache_timeout option */
3bea01f01d76e1e95a8239c0d3f67073992136a1Jan Zeleny ret = confdb_get_int(sudo_ctx->rctx->cdb,
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina CONFDB_SUDO_CONF_ENTRY, CONFDB_SUDO_CACHE_TIMEOUT,
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina CONFDB_DEFAULT_SUDO_CACHE_TIMEOUT,
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina &sudo_ctx->cache_timeout);
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina if (ret != EOK) {
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina DEBUG(SSSDBG_FATAL_FAILURE, ("Error reading from confdb (%d) [%s]\n",
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina ret, strerror(ret)));
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina return ret;
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina }
41ef946f3f74a46b9e26118116e4811e259b30efPavel 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);
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina if (ret != EOK) {
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina DEBUG(SSSDBG_FATAL_FAILURE, ("Error reading from confdb (%d) [%s]\n",
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina ret, strerror(ret)));
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina return ret;
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina }
c9aab1c04c399ca2d1abef74f6df22ced34983dcPavel Březina
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina /* Initialize in-memory cache */
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina ret = sudosrv_cache_init(sudo_ctx, 10, &sudo_ctx->cache);
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina if (ret != EOK) {
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina DEBUG(SSSDBG_FATAL_FAILURE,
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina ("Could not create hash table: [%s]", strerror(ret)));
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina return ret;
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina }
41ef946f3f74a46b9e26118116e4811e259b30efPavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_TRACE_FUNC, ("SUDO Initialization complete\n"));
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina return EOK;
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;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct main_context *main_ctx;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina int ret;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina struct poptOption long_options[] = {
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina POPT_AUTOHELP
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina SSSD_MAIN_OPTS
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina POPT_TABLEEND
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina };
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* Set debug level to invalid value so we can deside if -d 0 was used. */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina debug_level = SSSDBG_INVALID;
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
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
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina CONVERT_AND_SET_DEBUG_LEVEL(debug_level);
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina /* set up things like debug, signals, daemonization, etc... */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina debug_log_file = "sssd_sudo";
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina ret = server_setup("sssd[sudo]", 0, CONFDB_SUDO_CONF_ENTRY, &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 */
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina DEBUG(SSSDBG_OP_FAILURE, ("Could not set up to exit "
2827b0d03f7b6bafa504d22a5d7ca39cbda048b3Pavel Březina "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}