Mercurial > dovecot > core-2.2
changeset 19862:b52e1ad3b4f5
doveadm-cmd: Add CMD_PARAM_IP
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Fri, 26 Feb 2016 09:33:25 +0200 |
parents | 5e24a8a65b3b |
children | 516e7c50d32f |
files | src/doveadm/client-connection-http.c src/doveadm/doveadm-cmd.c src/doveadm/doveadm-cmd.h |
diffstat | 3 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/client-connection-http.c Thu Feb 25 12:30:45 2016 +0200 +++ b/src/doveadm/client-connection-http.c Fri Feb 26 09:33:25 2016 +0200 @@ -257,6 +257,11 @@ conn->method_err = 400; } break; + case CMD_PARAM_IP: + if (net_addr2ip(*value, &conn->cmd_param->value.v_ip) != 0) { + conn->method_err = 400; + } + break; case CMD_PARAM_STR: conn->cmd_param->value.v_string = p_strdup(conn->client.pool, *value); break; default: @@ -538,6 +543,7 @@ case CMD_PARAM_ARRAY: o_stream_nsend_str(conn->client.output, "array"); break; + case CMD_PARAM_IP: case CMD_PARAM_ISTREAM: case CMD_PARAM_STR: o_stream_nsend_str(conn->client.output, "string");
--- a/src/doveadm/doveadm-cmd.c Thu Feb 25 12:30:45 2016 +0200 +++ b/src/doveadm/doveadm-cmd.c Fri Feb 26 09:33:25 2016 +0200 @@ -4,6 +4,7 @@ #include "array.h" #include "istream.h" #include "str.h" +#include "net.h" #include "doveadm-cmd.h" #include "doveadm.h" @@ -231,6 +232,18 @@ return FALSE; } +bool doveadm_cmd_param_ip(int argc, const struct doveadm_cmd_param* params, const char *name, struct ip* value) +{ + const struct doveadm_cmd_param* param; + if ((param = doveadm_cmd_param_get(argc, params, name))==NULL) return FALSE; + + if (param->type == CMD_PARAM_IP) { + memcpy(value, ¶m->value.v_ip, sizeof(struct ip_addr)); + return TRUE; + } + return FALSE; +} + bool doveadm_cmd_param_array(int argc, const struct doveadm_cmd_param* params, const char *name, ARRAY_TYPE(const_string)** value) { const struct doveadm_cmd_param* param; @@ -350,6 +363,11 @@ param->value_set = FALSE; } break; + case CMD_PARAM_IP: + if (net_addr2ip(value, ¶m->value.v_ip) != 0) { + param->value_set = FALSE; + } + break; case CMD_PARAM_STR: param->value.v_string = p_strdup(pool, value); break;
--- a/src/doveadm/doveadm-cmd.h Thu Feb 25 12:30:45 2016 +0200 +++ b/src/doveadm/doveadm-cmd.h Fri Feb 26 09:33:25 2016 +0200 @@ -13,6 +13,7 @@ typedef enum { CMD_PARAM_BOOL = 0, /* value will contain 1 (not pointer) */ CMD_PARAM_INT64, /* ditto but contains number (not pointer) */ + CMD_PARAM_IP, /* value contains struct ip_addr */ CMD_PARAM_STR, /* value contains const char* */ CMD_PARAM_ARRAY, /* value contains const char*[] */ CMD_PARAM_ISTREAM /* value contains struct istream* */ @@ -39,6 +40,7 @@ int64_t v_int64; const char* v_string; ARRAY_TYPE(const_string) v_array; + struct ip_addr v_ip; struct istream* v_istream; } value; doveadm_cmd_param_flag_t flags; @@ -117,6 +119,7 @@ bool doveadm_cmd_param_bool(int argc, const struct doveadm_cmd_param* params, const char *name, bool* value); bool doveadm_cmd_param_int64(int argc, const struct doveadm_cmd_param* params, const char *name, int64_t* value); bool doveadm_cmd_param_str(int argc, const struct doveadm_cmd_param* params, const char *name, const char** value); +bool doveadm_cmd_param_ip(int argc, const struct doveadm_cmd_param* params, const char *name, struct ip_addr *ip); bool doveadm_cmd_param_array(int argc, const struct doveadm_cmd_param* params, const char *name, ARRAY_TYPE(const_string)** value); bool doveadm_cmd_param_istream(int argc, const struct doveadm_cmd_param* params, const char *name, struct istream** value);