284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina/*
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina Authors:
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina Pavel Březina <pbrezina@redhat.com>
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina Copyright (C) 2015 Red Hat
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina This program is free software; you can redistribute it and/or modify
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina it under the terms of the GNU General Public License as published by
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina the Free Software Foundation; either version 3 of the License, or
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina (at your option) any later version.
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina This program is distributed in the hope that it will be useful,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina GNU General Public License for more details.
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina You should have received a copy of the GNU General Public License
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina*/
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#ifndef _SSS_TOOLS_H_
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#define _SSS_TOOLS_H_
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#include <talloc.h>
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#include <popt.h>
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#include "confdb/confdb.h"
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březinastruct sss_tool_ctx {
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina struct confdb_ctx *confdb;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
a0b824ac01c6b58fe6055d48aa6e29e94219646dJakub Hrozek errno_t init_err;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina char *default_domain;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina struct sss_domain_info *domains;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina};
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
a0b824ac01c6b58fe6055d48aa6e29e94219646dJakub Hrozekerrno_t sss_tool_init(TALLOC_CTX *mem_ctx,
a0b824ac01c6b58fe6055d48aa6e29e94219646dJakub Hrozek int *argc, const char **argv,
a0b824ac01c6b58fe6055d48aa6e29e94219646dJakub Hrozek struct sss_tool_ctx **_tool_ctx);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březinastruct sss_cmdline;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinatypedef errno_t
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina(*sss_route_fn)(struct sss_cmdline *cmdline,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina struct sss_tool_ctx *tool_ctx,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina void *pvt);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_COMMAND_FLAGS(cmd, msg, err, fn, flags) \
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek {cmd, _(msg), err, fn, flags}
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_COMMAND(cmd, msg, err, fn) \
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek {cmd, _(msg), err, fn, 0}
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_COMMAND_NOMSG(cmd, err, fn) {cmd, NULL, err, fn, 0}
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_DELIMITER(message) {"", _(message), 0, NULL, 0}
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_LAST {NULL, NULL, 0, NULL, 0}
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek#define SSS_TOOL_FLAG_SKIP_CMD_INIT 0x01
cf3ba77997dfbd076a1f30fdbb33c7973766ac03Pavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březinastruct sss_route_cmd {
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina const char *command;
cf3ba77997dfbd076a1f30fdbb33c7973766ac03Pavel Březina const char *description;
a0b824ac01c6b58fe6055d48aa6e29e94219646dJakub Hrozek errno_t handles_init_err;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina sss_route_fn fn;
cbee11e912bb391ba254b0bac8c1159c1f634533Michal Židek int flags;
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina};
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinavoid sss_tool_usage(const char *tool_name,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct sss_route_cmd *commands);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinaerrno_t sss_tool_route(int argc, const char **argv,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct sss_tool_ctx *tool_ctx,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct sss_route_cmd *commands,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina void *pvt);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinatypedef errno_t (*sss_popt_fn)(poptContext pc, char option, void *pvt);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březinaenum sss_tool_opt {
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina SSS_TOOL_OPT_REQUIRED,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina SSS_TOOL_OPT_OPTIONAL
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina};
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinaerrno_t sss_tool_popt_ex(struct sss_cmdline *cmdline,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct poptOption *options,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina enum sss_tool_opt require_option,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina sss_popt_fn popt_fn,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina void *popt_fn_pvt,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina const char *fopt_name,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina const char *fopt_help,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina const char **_fopt,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina bool *_opt_set);
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinaerrno_t sss_tool_popt(struct sss_cmdline *cmdline,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct poptOption *options,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina enum sss_tool_opt require_option,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina sss_popt_fn popt_fn,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina void *popt_fn_pvt);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březinaint sss_tool_main(int argc, const char **argv,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina struct sss_route_cmd *commands,
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina void *pvt);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březinaerrno_t sss_tool_parse_name(TALLOC_CTX *mem_ctx,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct sss_tool_ctx *tool_ctx,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina const char *input,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina const char **_username,
e98ccef2609811186711b79d8ef5d0a4450ab6e0Pavel Březina struct sss_domain_info **_domain);
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina
284937e6b5b0c9d7a1d3382d0d2820d1168842fbPavel Březina#endif /* SRC_TOOLS_COMMON_SSS_TOOLS_H_ */