]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-cmd: Add CMD_PARAM_IP
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 26 Feb 2016 07:33:25 +0000 (09:33 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 26 Feb 2016 12:15:21 +0000 (14:15 +0200)
src/doveadm/client-connection-http.c
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm-cmd.h

index e16ad71403c14b89d9dab0ce62bf3a5e40061894..e5dff733f2e5dce6b874959f984329c0d1d45d19 100644 (file)
@@ -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");
index 507cf4653eb7ad7372a245c41fc80d97c6805d8e..61674dbee672f3abcc564706cb35f3ca4a5ca2d8 100644 (file)
@@ -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, &param->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, &param->value.v_ip) != 0) {
+                       param->value_set = FALSE;
+               }
+               break;
        case CMD_PARAM_STR:
                param->value.v_string = p_strdup(pool, value);
                break;
index c49e901a7848f41faab60b3249c8b3e9fd5c28db..8382145036330aad128b588819d0f6a4efd2822e 100644 (file)
@@ -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);