int REM_pad_list(char ***list, int *count) { _hold_signals(1); _send_ident(PAD_LIST); _get_list(list, count); _hold_signals(0); return 0; }
int REM_pad_list_items(char ***list, int *count) { char result; _hold_signals(1); _send_ident(PAD_LIST_ITEMS); _get_char(&result); if (result == OK) _get_list(list, count); _hold_signals(0); return result; }
int REM_pad_get_item(const char *item, char ***list, int *count) { char result; _hold_signals(1); _send_ident(PAD_GET_ITEM); _send_text(item); _get_char(&result); if (result == OK) _get_list(list, count); _hold_signals(0); return result; }
void _set_config_value(SMFSettings_T **settings, char *section, char *key, char *val) { char **sl = NULL; char **p = NULL; char *s = NULL; char *tmp = NULL; int i; if (val==NULL || strlen(val) == 0) return; /** global section **/ if (strcmp(section,"global")==0) { /** [global]debug **/ if (strcmp(key,"debug")==0) { (*settings)->debug = _get_boolean(val); configure_debug((*settings)->debug); /** [global]queue_dir **/ } else if (strcmp(key,"queue_dir")==0) { if ((*settings)->queue_dir!=NULL) free((*settings)->queue_dir); (*settings)->queue_dir = strdup(val); /** [global]modules **/ } else if (strcmp(key, "modules")==0) { if (smf_list_size((*settings)->modules) > 0) { if (smf_list_free((*settings)->modules)!=0) TRACE(TRACE_ERR,"failed to free modules list"); else if (smf_list_new(&((*settings)->modules),_mod_list_destroy)!=0) TRACE(TRACE_ERR,"failed to create modules list"); } sl = _get_list(val); p = sl; while(*p != NULL) { s = smf_core_strstrip(*p); smf_settings_add_module((*settings),s); free(s); p++; } free(sl); /** [global]engine **/ } else if (strcmp(key,"engine")==0) { if ((*settings)->engine!=NULL) free((*settings)->engine); (*settings)->engine = strdup(val); /** [global]module_fail **/ } else if (strcmp(key,"module_fail")==0) { i = _get_integer(val); /** check allowed values... */ if (i==1 || i==2 || i==3) (*settings)->module_fail = i; /** [global]nexthop **/ } else if (strcmp(key,"nexthop")==0) { if ((*settings)->nexthop!=NULL) free((*settings)->nexthop); (*settings)->nexthop = strdup(val); /** [global]backend **/ } else if (strcmp(key,"backend")==0) { if ((*settings)->backend!=NULL) free((*settings)->backend); if ((strcmp(val,"sql")==0)||(strcmp(val,"ldap")==0)) (*settings)->backend = strdup(val); /** [global]backend_connection **/ } else if (strcmp(key,"backend_connection")==0) { if ((*settings)->backend_connection!=NULL) free((*settings)->backend_connection); if ((strcmp(val,"balance")==0)||(strcmp(val,"failover")==0)) (*settings)->backend_connection = strdup(val); /** [global]add_header **/ } else if (strcmp(key,"add_header")==0) { (*settings)->add_header = _get_boolean(val); /** [global]max_size **/ } else if (strcmp(key,"max_size")==0) { (*settings)->max_size = _get_integer(val); /** [global]tls_enable **/ } else if (strcmp(key,"tls_enable")==0) { i = _get_integer(val); /** check allowed values... */ if (i==0 || i==1 || i==2) (*settings)->tls = i; /** [global]lib_dir **/ } else if (strcmp(key,"lib_dir")==0) { if ((*settings)->lib_dir!=NULL) free((*settings)->lib_dir); (*settings)->lib_dir = strdup(val); /** [global]pid_file **/ } else if (strcmp(key,"pid_file")==0) { if ((*settings)->pid_file!=NULL) free((*settings)->pid_file); (*settings)->pid_file = strdup(val); /** [global]bind_ip **/ } else if (strcmp(key,"bind_ip")==0) { if ((*settings)->bind_ip!=NULL) free((*settings)->bind_ip); (*settings)->bind_ip = strdup(val); /** [global]bind_port **/ } else if (strcmp(key,"bind_port")==0) { (*settings)->bind_port = _get_integer(val); /** [global]listen_backlog **/ } else if (strcmp(key,"listen_backlog")==0) { (*settings)->listen_backlog = _get_integer(val); /** [global]foreground **/ } else if (strcmp(key,"foreground")==0) { int fg = _get_boolean(val); (*settings)->foreground = fg; configure_trace_destination(fg ? TRACE_DEST_STDERR : TRACE_DEST_SYSLOG); /** [global]user **/ } else if (strcmp(key,"user")==0) { if ((*settings)->user!=NULL) free((*settings)->user); (*settings)->user = strdup(val); /** [global]group **/ } else if (strcmp(key,"group")==0) { if ((*settings)->group!=NULL) free((*settings)->group); (*settings)->group = strdup(val); /** [global]max_childs **/ } else if (strcmp(key,"max_childs")==0) { (*settings)->max_childs = _get_integer(val); /** [global]spare_childs **/ } else if (strcmp(key,"spare_childs")==0) { (*settings)->spare_childs = _get_integer(val); /** [global]lookup_persistent **/ } else if (strcmp(key,"lookup_persistent")==0) { (*settings)->lookup_persistent = _get_boolean(val); } else if (strcmp(key,"syslog_facility")==0) { smf_settings_set_syslog_facility((*settings), val); } /** sql section **/ } else if (strcmp(section,"sql")==0) { /** [sql]driver **/ if (strcmp(key,"driver")==0) { if ((*settings)->sql_driver != NULL) free((*settings)->sql_driver); if ((strcmp(val,"mysql")==0)||(strcmp(val,"pgsql")==0)||(strcmp(val,"sqlite")==0)) (*settings)->sql_driver = strdup(val); /** [sql]name **/ } else if (strcmp(key, "name")==0) { if ((*settings)->sql_name != NULL) free((*settings)->sql_name); (*settings)->sql_name = strdup(val); /** [sql]host **/ } else if (strcmp(key, "host")==0) { if (smf_list_size((*settings)->sql_host) > 0) { if (smf_list_free((*settings)->sql_host)!=0) TRACE(TRACE_ERR,"failed to free host list"); else if (smf_list_new(&((*settings)->sql_host),smf_internal_string_list_destroy)!=0) TRACE(TRACE_ERR,"failed to create host list"); } sl = _get_list(val); p = sl; while(*p != NULL) { s = smf_core_strstrip(*p); smf_list_append((*settings)->sql_host, s); p++; } free(sl); /** [sql]user **/ } else if (strcmp(key, "user")==0) { if ((*settings)->sql_user != NULL) free((*settings)->sql_user); (*settings)->sql_user = strdup(val); /** [sql]pass **/ } else if (strcmp(key, "pass")==0) { if ((*settings)->sql_pass != NULL) free((*settings)->sql_pass); (*settings)->sql_pass = strdup(val); /** [sql]user_query **/ } else if (strcmp(key, "user_query")==0) { if ((*settings)->sql_user_query != NULL) free((*settings)->sql_user_query); (*settings)->sql_user_query = strdup(val); /** [sql]encoding **/ } else if (strcmp(key, "encoding")==0) { if ((*settings)->sql_encoding != NULL) free((*settings)->sql_encoding); (*settings)->sql_encoding = strdup(val); /** [sql]max_connections **/ } else if (strcmp(key,"max_connections")==0) { (*settings)->sql_max_connections = _get_integer(val); /** [sql]port **/ } else if (strcmp(key,"port")==0) { (*settings)->sql_port = _get_integer(val); } /** ldap section **/ } else if (strcmp(section,"ldap")==0) { /** [ldap]uri **/ if (strcmp(key, "uri")==0) { if ((*settings)->ldap_uri != NULL) free((*settings)->ldap_uri); (*settings)->ldap_uri = strdup(val); /** [ldap]host **/ } else if (strcmp(key, "host")==0) { if (smf_list_size((*settings)->ldap_host) > 0) { if (smf_list_free((*settings)->ldap_host)!=0) TRACE(TRACE_ERR,"failed to free host list"); else if (smf_list_new(&((*settings)->ldap_host),smf_internal_string_list_destroy)!=0) TRACE(TRACE_ERR,"failed to create host list"); } sl = _get_list(val); p = sl; while(*p != NULL) { s = smf_core_strstrip(*p); smf_list_append((*settings)->ldap_host, s); p++; } free(sl); /** [ldap]port **/ } else if (strcmp(key,"port")==0) { (*settings)->ldap_port = _get_integer(val); /** [ldap]binddn **/ } else if (strcmp(key, "binddn")==0) { if ((*settings)->ldap_binddn != NULL) free((*settings)->ldap_binddn); (*settings)->ldap_binddn = strdup(val); /** [ldap]bindpw **/ } else if (strcmp(key, "bindpw")==0) { if ((*settings)->ldap_bindpw != NULL) free((*settings)->ldap_bindpw); (*settings)->ldap_bindpw = strdup(val); /** [ldap]base **/ } else if (strcmp(key, "base")==0) { if ((*settings)->ldap_base != NULL) free((*settings)->ldap_base); (*settings)->ldap_base = strdup(val); /** [ldap]user_query **/ } else if (strcmp(key, "user_query")==0) { if ((*settings)->ldap_user_query != NULL) free((*settings)->ldap_user_query); (*settings)->ldap_user_query = strdup(val); /** [ldap]scope **/ } else if (strcmp(key, "scope")==0) { if ((*settings)->ldap_scope != NULL) free((*settings)->ldap_scope); (*settings)->ldap_scope = strdup(val); /** [ldap]referrals **/ } else if (strcmp(key,"referrals")==0) { (*settings)->ldap_referrals = _get_boolean(val); } /** smtpd section **/ } else if (strcmp(section,"smtpd")==0) { /** [smtpd]nexthop_fail_msg **/ if (strcmp(key, "nexthop_fail_msg")==0) { if ((*settings)->nexthop_fail_msg != NULL) free((*settings)->nexthop_fail_msg); (*settings)->nexthop_fail_msg = strdup(val); /** [smtpd]nexthop_fail_code **/ } else if (strcmp(key, "nexthop_fail_code")==0) { (*settings)->nexthop_fail_code = _get_integer(val); } else if (strcmp(key, "smtpd_timeout")==0) { (*settings)->smtpd_timeout = _get_integer(val); /** smtp code **/ } else { i = _get_integer(key); if (i >= 250 && i < 600) { smf_dict_set((*settings)->smtp_codes,key,val); } } /** custom sections */ } else { asprintf(&tmp,"%s:%s",section,key); smf_dict_set((*settings)->groups,tmp,val); } }