From: Aki Tuomi Date: Fri, 26 Feb 2016 07:33:25 +0000 (+0200) Subject: doveadm-cmd: Add CMD_PARAM_IP X-Git-Tag: 2.2.22.rc1~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=79ec87ea6861e2dd447f69ab44a7cc4e4fce3fdd;p=thirdparty%2Fdovecot%2Fcore.git doveadm-cmd: Add CMD_PARAM_IP --- diff --git a/src/doveadm/client-connection-http.c b/src/doveadm/client-connection-http.c index e16ad71403..e5dff733f2 100644 --- a/src/doveadm/client-connection-http.c +++ b/src/doveadm/client-connection-http.c @@ -257,6 +257,11 @@ static int doveadm_http_server_json_parse_next(struct client_connection_http *co 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 @@ doveadm_http_server_send_api(struct client_connection_http *conn) 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"); diff --git a/src/doveadm/doveadm-cmd.c b/src/doveadm/doveadm-cmd.c index 507cf4653e..61674dbee6 100644 --- a/src/doveadm/doveadm-cmd.c +++ b/src/doveadm/doveadm-cmd.c @@ -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 @@ bool doveadm_cmd_param_str(int argc, const struct doveadm_cmd_param* params, con 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 @@ static void doveadm_fill_param(struct doveadm_cmd_param *param, 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; diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index c49e901a78..8382145036 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -13,6 +13,7 @@ typedef void doveadm_command_t(int argc, char *argv[]); 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 @@ struct doveadm_cmd_param { 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 @@ int doveadm_cmd_run_ver2(const struct doveadm_cmd_ver2 *cmd, 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);