69 #ifdef STRCASECMP_IN_STRINGS_H
93 #define STR vstring_str
99 if (server_acl_mynetworks) {
101 if (server_acl_mynetworks_host)
104 server_acl_mynetworks =
108 server_acl_mynetworks_host =
117 char *saved_acl =
mystrdup(extern_acl);
119 char *bp = saved_acl;
122 #define STREQ(x,y) (strcasecmp((x), (y)) == 0)
123 #define STRNE(x,y) (strcasecmp((x), (y)) != 0)
131 if (strchr(acl,
':') != 0) {
132 if (strchr(origin,
':') != 0) {
133 msg_warn(
"table %s: lookup result \"%s\" is not allowed"
134 " -- ignoring remainder of access list",
145 argv_add(intern_acl, acl, (
char *) 0);
161 const char *myname =
"server_acl_eval";
166 const char *dict_val;
169 for (cpp = intern_acl->
argv; (acl = *cpp) != 0; cpp++) {
171 msg_info(
"source=%s address=%s acl=%s",
172 origin, client_addr, acl);
182 msg_info(
"using backwards-compatible default setting "
184 "request from client \"%s\"",
188 if (server_acl_mynetworks->error != 0) {
189 msg_warn(
"%s: %s: mynetworks lookup error -- ignoring the "
190 "remainder of this access list", origin, acl);
193 }
else if (strchr(acl,
':') != 0) {
195 msg_panic(
"%s: unexpected dictionary: %s", myname, acl);
196 if ((dict_val =
dict_get(dict, client_addr)) != 0) {
209 }
else if (dict->
error != 0) {
210 msg_warn(
"%s: %s: table lookup error -- ignoring the remainder "
211 "of this access list", origin, acl);
217 msg_warn(
"%s: unknown command: %s -- ignoring the remainder "
218 "of this access list", origin, acl);
223 msg_info(
"source=%s address=%s - no match",
224 origin, client_addr);
241 char *var_server_acl =
"";
243 #define UPDATE_VAR(s,v) do { if (*(s)) myfree(s); (s) = mystrdup(v); } while (0)
250 int have_tty = isatty(0);
262 #define VAR_SERVER_ACL "server_acl"
275 }
else if ((value =
mystrtok(&bufp,
" =")) == 0) {
279 }
else if (
STREQ(cmd, VAR_SERVER_ACL)) {
280 UPDATE_VAR(var_server_acl, value);
281 }
else if (
STREQ(cmd,
"address")) {
#define SERVER_ACL_ACT_ERROR
#define MATCH_FLAG_RETURN
int match_parent_style(const char *name)
#define addr_match_list_match(l, a)
char * mystrdup(const char *str)
void dict_register(const char *dict_name, DICT *dict_info)
int vstring_get_nonl(VSTRING *vp, VSTREAM *fp)
ARGV * argv_free(ARGV *argvp)
NORETURN msg_panic(const char *fmt,...)
int main(int argc, char **argv)
#define SERVER_ACL_NAME_PERMIT
void server_acl_pre_jail_init(const char *mynetworks, const char *origin)
void argv_add(ARGV *argvp,...)
char * mystrtokq(char **src, const char *sep, const char *parens)
DICT * dict_open(const char *, int, int)
#define DICT_FLAG_UTF8_REQUEST
char * mystrtok(char **src, const char *sep)
ARGV * argv_alloc(ssize_t len)
#define DICT_FLAG_FOLD_FIX
const char * mynetworks(void)
#define SERVER_ACL_ACT_PERMIT
SERVER_ACL * server_acl_parse(const char *extern_acl, const char *origin)
int server_acl_eval(const char *client_addr, SERVER_ACL *intern_acl, const char *origin)
const char * mynetworks_host(void)
int warn_compat_break_mynetworks_style
#define dict_get(dp, key)
#define SERVER_ACL_NAME_DUNNO
#define SERVER_ACL_NAME_REJECT
const char * str_name_code(const NAME_CODE *table, int code)
VSTREAM * vstream_printf(const char *fmt,...)
#define SERVER_ACL_NAME_ERROR
#define DEF_PAR_DOM_MATCH
DICT * dict_handle(const char *dict_name)
void msg_warn(const char *fmt,...)
#define addr_match_list_free
VSTRING * vstring_alloc(ssize_t len)
#define SERVER_ACL_ACT_DUNNO
#define ARGV_FAKE_BEGIN(fake_argv, arg)
int vstream_fflush(VSTREAM *stream)
#define VAR_MYNETWORKS_STYLE
VSTRING * vstring_free(VSTRING *vp)
#define addr_match_list_init(o, f, p)
#define SERVER_ACL_ACT_REJECT
#define SERVER_ACL_NAME_WL_MYNETWORKS
char * var_mynetworks_style
void argv_terminate(ARGV *argvp)
void msg_info(const char *fmt,...)