1 /* $OpenBSD: limit.c,v 1.7 2021/06/14 17:58:15 eric Exp $ */ 2 3 /* 4 * Copyright (c) 2013 Eric Faurot <eric@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #include <string.h> 20 21 #include "smtpd.h" 22 23 void 24 limit_mta_set_defaults(struct mta_limits *limits) 25 { 26 limits->maxconn_per_host = 10; 27 limits->maxconn_per_route = 5; 28 limits->maxconn_per_source = 100; 29 limits->maxconn_per_connector = 20; 30 limits->maxconn_per_relay = 100; 31 limits->maxconn_per_domain = 100; 32 33 limits->conndelay_host = 0; 34 limits->conndelay_route = 5; 35 limits->conndelay_source = 0; 36 limits->conndelay_connector = 0; 37 limits->conndelay_relay = 2; 38 limits->conndelay_domain = 0; 39 40 limits->discdelay_route = 3; 41 42 limits->max_mail_per_session = 100; 43 limits->sessdelay_transaction = 0; 44 limits->sessdelay_keepalive = 10; 45 46 limits->max_failures_per_session = 25; 47 48 limits->family = AF_UNSPEC; 49 50 limits->task_hiwat = 50; 51 limits->task_lowat = 30; 52 limits->task_release = 10; 53 } 54 55 int 56 limit_mta_set(struct mta_limits *limits, const char *key, int64_t value) 57 { 58 if (!strcmp(key, "max-conn-per-host")) 59 limits->maxconn_per_host = value; 60 else if (!strcmp(key, "max-conn-per-route")) 61 limits->maxconn_per_route = value; 62 else if (!strcmp(key, "max-conn-per-source")) 63 limits->maxconn_per_source = value; 64 else if (!strcmp(key, "max-conn-per-connector")) 65 limits->maxconn_per_connector = value; 66 else if (!strcmp(key, "max-conn-per-relay")) 67 limits->maxconn_per_relay = value; 68 else if (!strcmp(key, "max-conn-per-domain")) 69 limits->maxconn_per_domain = value; 70 71 else if (!strcmp(key, "conn-delay-host")) 72 limits->conndelay_host = value; 73 else if (!strcmp(key, "conn-delay-route")) 74 limits->conndelay_route = value; 75 else if (!strcmp(key, "conn-delay-source")) 76 limits->conndelay_source = value; 77 else if (!strcmp(key, "conn-delay-connector")) 78 limits->conndelay_connector = value; 79 else if (!strcmp(key, "conn-delay-relay")) 80 limits->conndelay_relay = value; 81 else if (!strcmp(key, "conn-delay-domain")) 82 limits->conndelay_domain = value; 83 84 else if (!strcmp(key, "reconn-delay-route")) 85 limits->discdelay_route = value; 86 87 else if (!strcmp(key, "session-mail-max")) 88 limits->max_mail_per_session = value; 89 else if (!strcmp(key, "session-transaction-delay")) 90 limits->sessdelay_transaction = value; 91 else if (!strcmp(key, "session-keepalive")) 92 limits->sessdelay_keepalive = value; 93 94 else if (!strcmp(key, "max-failures-per-session")) 95 limits->max_failures_per_session = value; 96 97 else if (!strcmp(key, "task-hiwat")) 98 limits->task_hiwat = value; 99 else if (!strcmp(key, "task-lowat")) 100 limits->task_lowat = value; 101 else if (!strcmp(key, "task-release")) 102 limits->task_release = value; 103 104 else 105 return (0); 106 107 return (1); 108 } 109