started adding simple xli validation
This commit is contained in:
@ -846,8 +846,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
|
||||
for (i = 0; i < QSE_COUNTOF(loc_xcfg_items); i++)
|
||||
{
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, loc_xcfg_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, loc_xcfg_items[i].y);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, loc_xcfg_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, loc_xcfg_items[i].y);
|
||||
if (pair && pair->val->type == QSE_XLI_STR)
|
||||
{
|
||||
cfg->xcfg[i] = qse_httpd_strntombsdup (httpd, ((qse_xli_str_t*)pair->val)->ptr, ((qse_xli_str_t*)pair->val)->len);
|
||||
@ -860,8 +860,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
}
|
||||
}
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("index"));
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.index"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("index"));
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.index"));
|
||||
if (pair && pair->val->type == QSE_XLI_STR)
|
||||
{
|
||||
qse_char_t* duptmp;
|
||||
@ -886,8 +886,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
cfg->index.count = count;
|
||||
}
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("cgi"));
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.cgi"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("cgi"));
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.cgi"));
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
/* TODO: more sanity check... this can be done with xli schema... if supported */
|
||||
@ -963,8 +963,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
}
|
||||
}
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("auth-rule"));
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.auth-rule"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("auth-rule"));
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.auth-rule"));
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
qse_xli_list_t* auth_rule_list = (qse_xli_list_t*)pair->val;
|
||||
@ -1015,8 +1015,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
}
|
||||
}
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("mime"));
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.mime"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("mime"));
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.mime"));
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
qse_xli_list_t* mimelist = (qse_xli_list_t*)pair->val;
|
||||
@ -1072,8 +1072,8 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, loc_acc_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, loc_acc_items[i].y);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, loc_acc_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, loc_acc_items[i].y);
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
qse_xli_list_t* acclist = (qse_xli_list_t*)pair->val;
|
||||
@ -1208,8 +1208,8 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q
|
||||
{
|
||||
qse_xli_pair_t* pair;
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, scfg_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, scfg_items[i].y);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, scfg_items[i].x);
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, scfg_items[i].y);
|
||||
if (pair && pair->val->type == QSE_XLI_STR)
|
||||
{
|
||||
server_xtn->scfg[i] = qse_httpd_strntombsdup (httpd, ((qse_xli_str_t*)pair->val)->ptr, ((qse_xli_str_t*)pair->val)->len);
|
||||
@ -1223,7 +1223,7 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q
|
||||
}
|
||||
|
||||
/* load host/location specific configuration */
|
||||
host_count = qse_xli_getnumpairsbyalias (httpd_xtn->xli, list, QSE_T("host"));
|
||||
host_count = qse_xli_getnumpairsbyname (httpd_xtn->xli, list, QSE_T("host"));
|
||||
if (host_count <= 0) return 0; /* nothing to load */
|
||||
|
||||
QSE_ASSERT (server_xtn->cfgtab == QSE_NULL);
|
||||
@ -1246,12 +1246,12 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q
|
||||
qse_char_t buf[32];
|
||||
|
||||
qse_sprintf (buf, QSE_COUNTOF(buf), QSE_T("host[%d]"), i);
|
||||
host = qse_xli_findpairbyalias (httpd_xtn->xli, list, buf);
|
||||
host = qse_xli_findpairbyname (httpd_xtn->xli, list, buf);
|
||||
if (!host) break;
|
||||
|
||||
if (host->val->type == QSE_XLI_LIST && host->alias)
|
||||
{
|
||||
loc_count = qse_xli_getnumpairsbyalias (httpd_xtn->xli, (qse_xli_list_t*)host->val, QSE_T("location"));
|
||||
loc_count = qse_xli_getnumpairsbyname (httpd_xtn->xli, (qse_xli_list_t*)host->val, QSE_T("location"));
|
||||
|
||||
if (((hostcfg = qse_httpd_callocmem (httpd, QSE_SIZEOF(*hostcfg))) == QSE_NULL) ||
|
||||
((hostcfg->hostname = qse_httpd_strtombsdup (httpd, (host->alias[0] == QSE_T('\0')? QSE_T("*"):host->alias))) == QSE_NULL)) goto oops;
|
||||
@ -1263,7 +1263,7 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q
|
||||
j--;
|
||||
|
||||
qse_sprintf (buf, QSE_COUNTOF(buf), QSE_T("location[%d]"), j);
|
||||
loc = qse_xli_findpairbyalias (httpd_xtn->xli, (qse_xli_list_t*)host->val, buf);
|
||||
loc = qse_xli_findpairbyname (httpd_xtn->xli, (qse_xli_list_t*)host->val, buf);
|
||||
if (!loc) break;
|
||||
|
||||
if (loc->val->type == QSE_XLI_LIST && loc->alias)
|
||||
@ -1335,7 +1335,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l
|
||||
|
||||
httpd_xtn = qse_httpd_getxtnstd (httpd);
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("bind"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("bind"));
|
||||
if (pair == QSE_NULL || pair->val->type != QSE_XLI_STR)
|
||||
{
|
||||
/* TOOD: logging */
|
||||
@ -1351,8 +1351,8 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, list, QSE_T("ssl"));
|
||||
if (!pair) pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.ssl"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, list, QSE_T("ssl"));
|
||||
if (!pair) pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default.ssl"));
|
||||
if (pair && pair->val->type == QSE_XLI_STR &&
|
||||
qse_strxcmp (((qse_xli_str_t*)pair->val)->ptr, ((qse_xli_str_t*)pair->val)->len, QSE_T("yes")) == 0) dope.flags |= QSE_HTTPD_SERVER_SECURE;
|
||||
|
||||
@ -1440,7 +1440,7 @@ static void set_limit (qse_httpd_t* httpd, const qse_char_t* name, int what)
|
||||
|
||||
httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtnstd (httpd);
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, name);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, name);
|
||||
if (pair && pair->val->type == QSE_XLI_STR)
|
||||
{
|
||||
#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
||||
@ -1479,7 +1479,7 @@ static int load_config (qse_httpd_t* httpd)
|
||||
|
||||
if (open_config_file (httpd) <= -1) goto oops;
|
||||
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("name"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("name"));
|
||||
if (pair && pair->val->type == QSE_XLI_STR)
|
||||
{
|
||||
qse_mchar_t* tmp;
|
||||
@ -1499,7 +1499,7 @@ static int load_config (qse_httpd_t* httpd)
|
||||
{
|
||||
qse_char_t buf[32];
|
||||
qse_sprintf (buf, QSE_COUNTOF(buf), QSE_T("server[%d]"), i);
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, buf);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, buf);
|
||||
if (pair == QSE_NULL) break;
|
||||
|
||||
if (pair->val->type != QSE_XLI_LIST)
|
||||
@ -1529,7 +1529,7 @@ static int load_config (qse_httpd_t* httpd)
|
||||
}
|
||||
|
||||
/* load the global default */
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, QSE_T("server-default"));
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, QSE_T("server-default"));
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
if (load_loccfg (httpd, (qse_xli_list_t*)pair->val, &httpd_xtn->dflcfg) <= -1)
|
||||
@ -1563,7 +1563,7 @@ static void reconf_server (qse_httpd_t* httpd, qse_httpd_server_t* server)
|
||||
{
|
||||
qse_char_t buf[32];
|
||||
qse_sprintf (buf, QSE_COUNTOF(buf), QSE_T("server[%d]"), server_xtn->num);
|
||||
pair = qse_xli_findpairbyalias (httpd_xtn->xli, QSE_NULL, buf);
|
||||
pair = qse_xli_findpairbyname (httpd_xtn->xli, QSE_NULL, buf);
|
||||
|
||||
if (pair && pair->val->type == QSE_XLI_LIST)
|
||||
{
|
||||
|
@ -130,6 +130,7 @@ static void print_usage (QSE_FILE* out, int argc, qse_char_t* argv[])
|
||||
qse_fprintf (out, QSE_T(" --version show version\n"));
|
||||
qse_fprintf (out, QSE_T(" -i file specify an input file\n"));
|
||||
qse_fprintf (out, QSE_T(" -o file specify an output file\n"));
|
||||
qse_fprintf (out, QSE_T(" -u disallow duplicate keys\n"));
|
||||
qse_fprintf (out, QSE_T(" -a allow a key alias\n"));
|
||||
qse_fprintf (out, QSE_T(" -f keep file inclusion info\n"));
|
||||
qse_fprintf (out, QSE_T(" -t keep comment text\n"));
|
||||
@ -159,9 +160,9 @@ static int handle_args (int argc, qse_char_t* argv[])
|
||||
static qse_opt_t opt =
|
||||
{
|
||||
#if defined(QSE_BUILD_DEBUG)
|
||||
QSE_T("hi:o:aftm:X:"),
|
||||
QSE_T("hi:o:uaftvm:X:"),
|
||||
#else
|
||||
QSE_T("hi:o:aftm:"),
|
||||
QSE_T("hi:o:uaftvm:"),
|
||||
#endif
|
||||
lng
|
||||
};
|
||||
@ -203,6 +204,10 @@ static int handle_args (int argc, qse_char_t* argv[])
|
||||
g_output_file = opt.arg;
|
||||
break;
|
||||
|
||||
case QSE_T('u'):
|
||||
g_trait |= QSE_XLI_KEYNODUP;
|
||||
break;
|
||||
|
||||
case QSE_T('a'):
|
||||
g_trait |= QSE_XLI_KEYALIAS;
|
||||
break;
|
||||
@ -215,6 +220,10 @@ static int handle_args (int argc, qse_char_t* argv[])
|
||||
g_trait |= QSE_XLI_KEEPTEXT;
|
||||
break;
|
||||
|
||||
case QSE_T('v'):
|
||||
g_trait |= QSE_XLI_VALIDATE;
|
||||
break;
|
||||
|
||||
case QSE_T('m'):
|
||||
g_memlimit = qse_strtoulong (opt.arg);
|
||||
break;
|
||||
@ -352,6 +361,12 @@ static int xli_main (int argc, qse_char_t* argv[])
|
||||
in.u.file.path = g_input_file;
|
||||
in.u.file.cmgr = g_infile_cmgr;
|
||||
|
||||
{
|
||||
qse_xli_scm_t scm;
|
||||
scm.flags = QSE_XLI_SCM_VAL_LIST | QSE_XLI_SCM_KEY_NODUP;
|
||||
qse_xli_setschema (xli, QSE_T("a.b"), &scm);
|
||||
}
|
||||
|
||||
if (qse_xli_readstd (xli, &in) <= -1)
|
||||
{
|
||||
const qse_xli_loc_t* errloc;
|
||||
@ -384,7 +399,7 @@ static int xli_main (int argc, qse_char_t* argv[])
|
||||
if (g_lookup_key)
|
||||
{
|
||||
qse_xli_pair_t* pair;
|
||||
pair = qse_xli_findpairbyalias (xli, QSE_NULL, g_lookup_key);
|
||||
pair = qse_xli_findpairbyname (xli, QSE_NULL, g_lookup_key);
|
||||
if (pair == QSE_NULL)
|
||||
{
|
||||
qse_fprintf (QSE_STDERR,
|
||||
|
Reference in New Issue
Block a user