struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, NULL, NULL, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, NULL, NULL, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, NULL, doc, NULL, argc, argv, NULL);
+ r = cli_parse(NULL, NULL, NULL, doc, NULL, 0, argc, argv, NULL);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include "command.h"
const struct argp_option* options;
const struct command* commands;
command_parse parse;
+ int flags;
void* data;
// The selected command
// Perform some final checks when parsing has been completed
case ARGP_KEY_SUCCESS:
+ // Check for root privileges
+ if (ctx->flags & CLI_REQUIRE_ROOT) {
+ if (getuid() || getgid())
+ argp_failure(state, EXIT_FAILURE, 0, "Must be run as root");
+ }
+
if (ctx->command) {
int args = count_arguments(ctx->argc, ctx->argv);
int cli_parse(const struct argp_option* options, const struct command* commands,
const char* args_doc, const char* doc,
- command_parse parse, int argc, char** argv, void* data) {
+ command_parse parse, int flags, int argc, char** argv, void* data) {
int r;
// Setup context
.options = options,
.commands = commands,
.parse = parse,
+ .flags = flags,
.data = data,
};
typedef error_t (*command_parse)(int key, char* arg, struct argp_state* state, void* data);
+typedef enum cli_command_flags {
+ CLI_REQUIRE_ROOT = (1 << 0),
+} cli_command_flags_t;
+
struct command {
const char* verb;
int (*callback)(void* config, int argc, char* argv[]);
};
int cli_parse(const struct argp_option* options, const struct command* commands,
- const char* args_doc, const char* doc, command_parse parse, int argc, char** argv, void* data);
+ const char* args_doc, const char* doc, command_parse parse, int flags,
+ int argc, char** argv, void* data);
#endif /* PAKFIRE_CLI_COMMAND_H */
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
{ NULL },
};
- return cli_parse(NULL, commands, NULL, NULL, NULL, argc, argv, data);
+ return cli_parse(NULL, commands, NULL, NULL, NULL, 0, argc, argv, data);
}
};
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct config config = {};
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
{ NULL },
};
- return cli_parse(NULL, commands, NULL, NULL, NULL, argc, argv, data);
+ return cli_parse(NULL, commands, NULL, NULL, NULL, 0, argc, argv, data);
}
int cli_repo_client(void* data, int argc, char* argv[]) {
{ NULL },
};
- return cli_parse(NULL, commands, NULL, NULL, NULL, argc, argv, data);
+ return cli_parse(NULL, commands, NULL, NULL, NULL, 0, argc, argv, data);
}
};
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, NULL, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, NULL, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, NULL, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, NULL, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, NULL, doc, NULL, argc, argv, NULL);
+ r = cli_parse(NULL, NULL, NULL, doc, NULL, 0, argc, argv, NULL);
if (r)
goto ERROR;
struct config config = {};
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct config config = {};
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
};
// Parse the command line
- r = cli_parse(options, NULL, NULL, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, NULL, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(options, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
{ NULL },
};
- return cli_parse(NULL, commands, args_doc, NULL, NULL, argc, argv, data);
+ return cli_parse(NULL, commands, args_doc, NULL, NULL, 0, argc, argv, data);
}
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(NULL, NULL, args_doc, doc, parse, 0, argc, argv, &config);
if (r)
goto ERROR;
struct cli_config* cli_config = data;
// Parse the command line
- r = cli_parse(NULL, NULL, NULL, doc, NULL, argc, argv, NULL);
+ r = cli_parse(NULL, NULL, NULL, doc, NULL, 0, argc, argv, NULL);
if (r)
goto ERROR;
};
// Parse the command line and run any commands
- r = cli_parse(options, commands, args_doc, NULL, parse, argc, argv, &config);
+ r = cli_parse(options, commands, args_doc, NULL,
+ parse, CLI_REQUIRE_ROOT, argc, argv, &config);
ERROR:
if (ctx)
};
// Parse the command line and run any commands
- r = cli_parse(options, commands, args_doc, doc, parse, argc, argv, &config);
+ r = cli_parse(options, commands, args_doc, doc,
+ parse, 0, argc, argv, &config);
ERROR:
if (ctx)
goto ERROR;
// Parse the command line and run any commands
- r = cli_parse(options, NULL, NULL, doc, parse, argc, argv, ctx);
+ r = cli_parse(options, NULL, NULL, doc, parse,
+ CLI_REQUIRES_ROOT, argc, argv, ctx);
if (r)
goto ERROR;
};
// Parse the command line and run any commands
- r = cli_parse(options, commands, args_doc, NULL, parse, argc, argv, &config);
+ r = cli_parse(options, commands, args_doc, NULL, parse,
+ CLI_REQUIRE_ROOT, argc, argv, &config);
ERROR:
if (ctx)