pacsrv.c revision 9e2c64c6d4f5560e27207193efea6536a566865e
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose/*
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose SSSD
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose PAC Responder
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose Copyright (C) Sumit Bose <sbose@redhat.com> 2011
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose This program is free software; you can redistribute it and/or modify
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose it under the terms of the GNU General Public License as published by
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose the Free Software Foundation; either version 3 of the License, or
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose (at your option) any later version.
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose This program is distributed in the hope that it will be useful,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose but WITHOUT ANY WARRANTY; without even the implied warranty of
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose GNU General Public License for more details.
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose You should have received a copy of the GNU General Public License
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose along with this program. If not, see <http://www.gnu.org/licenses/>.
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose*/
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <stdio.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <unistd.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <fcntl.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <sys/types.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <sys/stat.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <sys/socket.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <sys/un.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <string.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <sys/time.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include <errno.h>
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "popt.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "util/util.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "responder/pac/pacsrv.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "db/sysdb.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "confdb/confdb.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "dbus/dbus.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "sbus/sssd_dbus.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "responder/common/responder_packet.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "responder/common/responder.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "providers/data_provider.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "monitor/monitor_interfaces.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#include "sbus/sbus_client.h"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose#define SSS_PAC_PIPE_NAME "pac"
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose#define DEFAULT_PAC_FD_LIMIT 8192
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose#define DEFAULT_ALLOWED_UIDS "0"
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestruct sbus_method monitor_pac_methods[] = {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose { MON_CLI_METHOD_PING, monitor_common_pong },
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose { MON_CLI_METHOD_RES_INIT, monitor_common_res_init },
ee099cd5656b60c7384493b923ddf9af5cf5d4f5Sumit Bose { MON_CLI_METHOD_ROTATE, responder_logrotate },
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose { NULL, NULL }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose};
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestruct sbus_interface monitor_pac_interface = {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose MONITOR_INTERFACE,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose MONITOR_PATH,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose SBUS_DEFAULT_VTABLE,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose monitor_pac_methods,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose NULL
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose};
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestatic struct sbus_method pac_dp_methods[] = {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose { NULL, NULL }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose};
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestruct sbus_interface pac_dp_interface = {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DP_INTERFACE,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DP_PATH,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose SBUS_DEFAULT_VTABLE,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_dp_methods,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose NULL
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose};
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose/* TODO: check if this can be made generic for all responders */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestatic void pac_dp_reconnect_init(struct sbus_connection *conn,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose int status, void *pvt)
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose{
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct be_conn *be_conn = talloc_get_type(pvt, struct be_conn);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose int ret;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* Did we reconnect successfully? */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (status == SBUS_RECONNECT_SUCCESS) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_OP_FAILURE, ("Reconnected to the Data Provider.\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* Identify ourselves to the data provider */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = dp_common_send_id(be_conn->conn,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DATA_PROVIDER_VERSION,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose "PAC");
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* all fine */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret == EOK) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose handle_requests_after_reconnect(be_conn->rctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* Failed to reconnect */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("Could not reconnect to %s provider.\n",
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose be_conn->domain->name));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* FIXME: kill the frontend and let the monitor restart it ? */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* nss_shutdown(rctx); */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose}
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestatic void *idmap_talloc(size_t size, void *pvt)
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose{
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return talloc_size(pvt, size);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose}
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bosestatic void idmap_free(void *ptr, void *pvt)
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose{
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose talloc_free(ptr);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose}
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Boseint pac_process_init(TALLOC_CTX *mem_ctx,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct tevent_context *ev,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct confdb_ctx *cdb)
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose{
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct sss_cmd_table *pac_cmds;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct be_conn *iter;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct pac_ctx *pac_ctx;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose int ret, max_retries;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose enum idmap_error_code err;
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose int fd_limit;
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose char *uid_str;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_ctx = talloc_zero(mem_ctx, struct pac_ctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (!pac_ctx) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("fatal error initializing pac_ctx\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return ENOMEM;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_cmds = get_pac_cmds();
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = sss_process_init(pac_ctx, ev, cdb,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_cmds,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose SSS_PAC_SOCKET_NAME, NULL,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose CONFDB_PAC_CONF_ENTRY,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose PAC_SBUS_SERVICE_NAME,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose PAC_SBUS_SERVICE_VERSION,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose &monitor_pac_interface,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose "PAC", &pac_dp_interface,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose &pac_ctx->rctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret != EOK) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return ret;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_ctx->rctx->pvt_ctx = pac_ctx;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose ret = confdb_get_string(pac_ctx->rctx->cdb, pac_ctx->rctx,
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose CONFDB_PAC_CONF_ENTRY, CONFDB_SERVICE_ALLOWED_UIDS,
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose DEFAULT_ALLOWED_UIDS, &uid_str);
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose if (ret != EOK) {
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("Failed to get allowed UIDs.\n"));
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose return ret;
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose }
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose ret = csv_string_to_uid_array(pac_ctx->rctx, uid_str, true,
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose &pac_ctx->rctx->allowed_uids_count,
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose &pac_ctx->rctx->allowed_uids);
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose if (ret != EOK) {
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("Failed to set allowed UIDs.\n"));
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose return ret;
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose }
2d257ccf620ce1b611f89cec8f0a94c88c2f2881Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* Enable automatic reconnection to the Data Provider */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = confdb_get_int(pac_ctx->rctx->cdb,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose CONFDB_PAC_CONF_ENTRY,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose CONFDB_SERVICE_RECON_RETRIES,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose 3, &max_retries);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret != EOK) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("Failed to set up automatic reconnection\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return ret;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose for (iter = pac_ctx->rctx->be_conns; iter; iter = iter->next) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose sbus_reconnect_init(iter->conn, max_retries,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pac_dp_reconnect_init, iter);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose err = sss_idmap_init(idmap_talloc, pac_ctx, idmap_free,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose &pac_ctx->idmap_ctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (err != IDMAP_SUCCESS) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_FATAL_FAILURE, ("sss_idmap_init failed.\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return EFAULT;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose /* Set up file descriptor limits */
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose ret = confdb_get_int(pac_ctx->rctx->cdb,
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose CONFDB_PAC_CONF_ENTRY,
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose CONFDB_SERVICE_FD_LIMIT,
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose DEFAULT_PAC_FD_LIMIT,
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose &fd_limit);
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose if (ret != EOK) {
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose DEBUG(SSSDBG_FATAL_FAILURE,
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose ("Failed to set up file descriptor limit\n"));
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose return ret;
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose }
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose responder_set_fd_limit(fd_limit);
f1a7e4a6e4f2d453077da8b3606feebb7669ef4fSumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_TRACE_FUNC, ("PAC Initialization complete\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return EOK;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose}
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Boseint main(int argc, const char *argv[])
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose{
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose int opt;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose poptContext pc;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct main_context *main_ctx;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose int ret;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose struct poptOption long_options[] = {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose POPT_AUTOHELP
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose SSSD_MAIN_OPTS
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose POPT_TABLEEND
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose };
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* Set debug level to invalid value so we can decide if -d 0 was used. */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose debug_level = SSSDBG_INVALID;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose pc = poptGetContext(argv[0], argc, argv, long_options, 0);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose while((opt = poptGetNextOpt(pc)) != -1) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose switch(opt) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose default:
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose fprintf(stderr, "\nInvalid option %s: %s\n\n",
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose poptBadOption(pc, 0), poptStrerror(opt));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose poptPrintUsage(pc, stderr, 0);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return 1;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose poptFreeContext(pc);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
9e2c64c6d4f5560e27207193efea6536a566865eMichal Zidek DEBUG_INIT(debug_level);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* set up things like debug, signals, daemonization, etc... */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose debug_log_file = "sssd_pac";
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = server_setup("sssd[pac]", 0, CONFDB_PAC_CONF_ENTRY, &main_ctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret != EOK) return 2;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = die_if_parent_died();
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret != EOK) {
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* This is not fatal, don't return */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose DEBUG(SSSDBG_OP_FAILURE, ("Could not set up to exit when parent process does\n"));
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose }
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose ret = pac_process_init(main_ctx,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose main_ctx->event_ctx,
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose main_ctx->confdb_ctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose if (ret != EOK) return 3;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose /* loop on main */
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose server_loop(main_ctx);
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose return 0;
b9e5bd09a5ff7009537a18914dbebcf10498f592Sumit Bose}