#include "config.h" #ifdef HAVE_STRING_H #include #endif /* HAVE_STRING_H */ #include "common.h" #include "Config.h" #include "servicetype.h" /* ----------------------------------------------------------------- * define function CONFIG_DEFINT : argument is 'int' CONFIG_DEFBOOL: argument is 'int' (implied TRUE or FALSE) CONFIG_DEFSTR : argument is 'char *' CONFIG_DEFPORTINFO : argument is port information ( "hostname:portinfo with ...", argument of accept/connect ) CONFIG_DEFACL : argument is host/network information ( argument of allow/deny ) * ----------------------------------------------------------------- */ #define CONFIG_DEFINT(func) int config_##func(Config *obj, int *data) \ {\ obj->func = *data; \ return TRUE; \ } #define CONFIG_DEFBOOL(func) int config_##func(Config *obj, int *data) \ {\ obj->func = *data; \ return TRUE; \ } #define CONFIG_DEFSTR(func) int config_##func(Config *obj, char *data) \ {\ STRCPY(obj->func, data); \ return TRUE; \ } #define CONFIG_DEFPORTINFO(func) int config_##func(Config *obj, char *data) \ {\ Portinfo *pi = new Portinfo(); \ pi->set(data); \ obj->func.add(pi); \ return TRUE; \ } #define CONFIG_DEFACL(func) int config_##func(Config *obj, char *data) \ {\ obj->acl.set(data, ACL_##func); \ return TRUE; \ } /* ================================================================= */ CONFIG_DEFINT(log_level); CONFIG_DEFINT(read_timeout); CONFIG_DEFINT(max_connection); CONFIG_DEFINT(deny_wait); CONFIG_DEFINT(spare_servers); CONFIG_DEFBOOL(do_fork); CONFIG_DEFSTR(access_log); CONFIG_DEFSTR(error_log); CONFIG_DEFSTR(CA_cert_file); CONFIG_DEFSTR(CA_cert_path); CONFIG_DEFSTR(client_cert_file); CONFIG_DEFACL(allow); CONFIG_DEFACL(deny); CONFIG_DEFPORTINFO(accept_port); CONFIG_DEFPORTINFO(connect_port); /* ================================================================= */ #include "token.h" #ifdef __GCC__ #define INLINE inline #else #define INLINE static #endif #define DEFAULT_BITS 512 #define DEFAULT_DAYS 365 INLINE int getObjectInt(char **p, char *name, int *d) { getTokenInt(p, d); skipSpace(p); return TRUE; } INLINE void skipCamma(char **p) { (*p)++; skipSpace(p); } /* CA_make "name", days, bits */ int config_CA_make(Config *obj, char *data) { char name[256]; int days = DEFAULT_DAYS; int bits = DEFAULT_BITS; int ret; ret = getTokenStrUntil(&data, name, 256, ','); skipSpace(&data); if (*data == ',') { skipCamma(&data); if (!getObjectInt(&data, "days", &days)) return FALSE; if (!days) days = DEFAULT_DAYS; if (*data == ',') { skipCamma(&data); if (!getObjectInt(&data, "bits", &bits)) return FALSE; if (!bits) bits = DEFAULT_BITS; } } obj->makeCert(name, (time_t)days, bits); return TRUE; } struct servicetype_t { char *name; int type; } serviceTypeList[] = { "NONE", SERVICETYPE_NONE, "SSL telnet", SERVICETYPE_SSLTELNET, "SSLtelnet", SERVICETYPE_SSLTELNET, "SSL telnet or telnet", SERVICETYPE_SSLTELNET_OR_TELNET, "SSLtelnet or telnet", SERVICETYPE_SSLTELNET_OR_TELNET, 0, 0, }; int config_service_type(Config *obj, char *data) { servicetype_t *p = serviceTypeList; while (p->name) { if (!strcasecmp(p->name, data)) { obj->service_type = p->type; return TRUE; } p++; } return FALSE; }