config-request.c revision 2ed05ea827dc49e715a4859a2ca485dc1934f1a3
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Copyright (c) 2005-2016 Dovecot authors, see the included COPYING file */
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *const *modules;
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void config_export_size(string_t *str, uoff_t size)
fa9e4066f08beec538e775443c5be79dd423fcabahrens static const char suffixes[] = { 'B', 'k', 'M', 'G', 'T' };
fa9e4066f08beec538e775443c5be79dd423fcabahrens unsigned int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (size == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 1; i < N_ELEMENTS(suffixes) && (size % 1024) == 0; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens str_printfa(str, "%llu %c", (unsigned long long)size, suffix);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void config_export_time(string_t *str, unsigned int stamp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (stamp == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void config_export_time_msecs(string_t *str, unsigned int stamp_msecs)
fa9e4066f08beec538e775443c5be79dd423fcabahrensbool config_export_type(string_t *str, const void *value,
fa9e4066f08beec538e775443c5be79dd423fcabahrens const unsigned int *val = value, *dval = default_value;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((dump_default || null_strcmp(sval, dval) != 0) &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((dump_default || null_strcmp(*val, dval) != 0) &&
fa9e4066f08beec538e775443c5be79dd423fcabahrenssetting_export_section_name(string_t *str, const struct setting_define *def,
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *const *name;
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* not unique, use the index */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* no name, this one isn't unique. use the index. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens void *const *children, *const *change_children = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *str;
fa9e4066f08beec538e775443c5be79dd423fcabahrens change_value = CONST_PTR_OFFSET(change_set, def->offset);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (ctx->flags & CONFIG_DUMP_FLAG_HIDE_LIST_DEFAULTS) == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else if (*((const char *)change_value) == 0 &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* this is mainly for service {} blocks. if value
fa9e4066f08beec538e775443c5be79dd423fcabahrens hasn't changed, it's the default. even if
fa9e4066f08beec538e775443c5be79dd423fcabahrens info->defaults has a different value. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* value is set explicitly, but we don't know the
fa9e4066f08beec538e775443c5be79dd423fcabahrens default here. assume it's not the default. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens const ARRAY_TYPE(void_array) *change_val = change_value;
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; i < count; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens setting_export_section_name(ctx->value, def, children[i], i);
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *const *strings;
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* already added all of these */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* for doveconf -n to see this KEY_LIST */
fa9e4066f08beec538e775443c5be79dd423fcabahrens ctx->callback(key, "", CONFIG_KEY_LIST, ctx->context);
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; i < count; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens setting_export_section_name(ctx->prefix, def, children[i], i);
fa9e4066f08beec538e775443c5be79dd423fcabahrensconfig_export_init(const char *const *modules, enum config_dump_scope scope,
fa9e4066f08beec538e775443c5be79dd423fcabahrens pool = pool_alloconly_create(MEMPOOL_GROWING"config export", 1024*64);
fa9e4066f08beec538e775443c5be79dd423fcabahrens ctx->modules = modules == NULL ? NULL : p_strarray_dup(pool, modules);
fa9e4066f08beec538e775443c5be79dd423fcabahrens hash_table_create(&ctx->keys, ctx->pool, 0, str_hash, strcmp);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid config_export_by_filter(struct config_export_context *ctx,
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *error;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (config_filter_parsers_get(config_filter, ctx->pool,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid config_export_parsers(struct config_export_context *ctx,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid config_export_get_output(struct config_export_context *ctx,
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void config_export_free(struct config_export_context *ctx)
fa9e4066f08beec538e775443c5be79dd423fcabahrensint config_export_finish(struct config_export_context **_ctx)
fa9e4066f08beec538e775443c5be79dd423fcabahrens const char *error;
fa9e4066f08beec538e775443c5be79dd423fcabahrens unsigned int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (!config_module_want_parser(config_module_parsers,
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((ctx->flags & CONFIG_DUMP_FLAG_CHECK_SETTINGS) != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (!settings_parser_check(parser->parser, ctx->pool,