added qse_httpd_serverstd_realm_t and qse_httpd_serverstd_auth_t
This commit is contained in:
parent
f3d6d8a0e1
commit
9e2010f85c
@ -20,3 +20,5 @@ if WCHAR
|
|||||||
qsehttpd_LDADD += $(UNICOWS_LIBS)
|
qsehttpd_LDADD += $(UNICOWS_LIBS)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = $(qsecfg_DATA)
|
||||||
|
@ -309,6 +309,7 @@ qsecfg_DATA = httpd.conf httpd-mime.conf
|
|||||||
qsehttpd_SOURCES = httpd.c
|
qsehttpd_SOURCES = httpd.c
|
||||||
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/cmn -L$(libdir)
|
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/cmn -L$(libdir)
|
||||||
qsehttpd_LDADD = -lqsexli -lqsehttp -lqsecmn $(am__append_1)
|
qsehttpd_LDADD = -lqsexli -lqsehttp -lqsecmn $(am__append_1)
|
||||||
|
EXTRA_DIST = $(qsecfg_DATA)
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
@ -447,12 +447,26 @@ static int query_server (
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_REALM:
|
case QSE_HTTPD_SERVERSTD_REALM:
|
||||||
*(const qse_mchar_t**)result = server_xtn->scfg[SCFG_REALM];
|
((qse_httpd_serverstd_realm_t*)result)->name = server_xtn->scfg[SCFG_REALM];
|
||||||
|
((qse_httpd_serverstd_realm_t*)result)->authreq = (server_xtn->scfg[SCFG_REALM] != QSE_NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_AUTH:
|
case QSE_HTTPD_SERVERSTD_AUTH:
|
||||||
*(const qse_mchar_t**)result = server_xtn->scfg[SCFG_AUTH];
|
{
|
||||||
|
qse_httpd_serverstd_auth_t* auth;
|
||||||
|
|
||||||
|
auth = (qse_httpd_serverstd_auth_t*)result;
|
||||||
|
auth->authok = 0;
|
||||||
|
|
||||||
|
if (server_xtn->scfg[SCFG_AUTH])
|
||||||
|
{
|
||||||
|
if (qse_mbsxcmp (auth->key.ptr, auth->key.len, server_xtn->scfg[SCFG_AUTH]) == 0)
|
||||||
|
{
|
||||||
|
auth->authok = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_DIRCSS:
|
case QSE_HTTPD_SERVERSTD_DIRCSS:
|
||||||
*(const qse_mchar_t**)result = server_xtn->scfg[SCFG_DIRCSS];
|
*(const qse_mchar_t**)result = server_xtn->scfg[SCFG_DIRCSS];
|
||||||
@ -829,10 +843,13 @@ static int load_server_config (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* perform more sanity check */
|
/* perform more sanity check */
|
||||||
|
/* TODO: support multiple auth entries here and above */
|
||||||
|
#if 0
|
||||||
if (qse_mbschr (server_xtn->scfg[SCFG_AUTH], QSE_MT(':')) == QSE_NULL)
|
if (qse_mbschr (server_xtn->scfg[SCFG_AUTH], QSE_MT(':')) == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_printf (QSE_T("WARNING: no colon in the auth string - [%hs]\n"), server_xtn->scfg[SCFG_AUTH]);
|
qse_printf (QSE_T("WARNING: no colon in the auth string - [%hs]\n"), server_xtn->scfg[SCFG_AUTH]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (qse_mbstonwad (server_xtn->scfg[SCFG_ROOT], &server_xtn->root_nwad) >= 0) server_xtn->root_is_nwad = 1;
|
if (qse_mbstonwad (server_xtn->scfg[SCFG_ROOT], &server_xtn->root_nwad) >= 0) server_xtn->root_is_nwad = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
9
qse/configure
vendored
9
qse/configure
vendored
@ -15922,6 +15922,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
save_LDFLAGS="$LDFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which extension is used for runtime loadable modules" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which extension is used for runtime loadable modules" >&5
|
||||||
$as_echo_n "checking which extension is used for runtime loadable modules... " >&6; }
|
$as_echo_n "checking which extension is used for runtime loadable modules... " >&6; }
|
||||||
if ${libltdl_cv_shlibext+:} false; then :
|
if ${libltdl_cv_shlibext+:} false; then :
|
||||||
@ -16997,10 +17001,14 @@ eval "LTDLOPEN=\"$libname_spec\""
|
|||||||
# Only expand once:
|
# Only expand once:
|
||||||
|
|
||||||
|
|
||||||
|
LDFLAGS="$save_LDFLAGS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
|
||||||
if test "x$with_included_ltdl" != "xyes"; then
|
if test "x$with_included_ltdl" != "xyes"; then
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
save_LDFLAGS="$LDFLAGS"
|
save_LDFLAGS="$LDFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
CFLAGS="$CFLAGS $LTDLINCL"
|
CFLAGS="$CFLAGS $LTDLINCL"
|
||||||
LDFLAGS="$LDFLAGS $LIBLTDL"
|
LDFLAGS="$LDFLAGS $LIBLTDL"
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dladvise_init in -lltdl" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dladvise_init in -lltdl" >&5
|
||||||
@ -17052,6 +17060,7 @@ fi
|
|||||||
|
|
||||||
LDFLAGS="$save_LDFLAGS"
|
LDFLAGS="$save_LDFLAGS"
|
||||||
CFLAGS="$save_CFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
|
LIBS="$save_LIBS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$ac_test_CFLAGS" != "set"
|
if test "$ac_test_CFLAGS" != "set"
|
||||||
|
@ -50,18 +50,27 @@ AC_SUBST(LIBTOOL_DEPS)
|
|||||||
dnl 'recursive' type seems to have problems in setting LT_CONFIG_H
|
dnl 'recursive' type seems to have problems in setting LT_CONFIG_H
|
||||||
dnl so i use the classic 'subproject' type here
|
dnl so i use the classic 'subproject' type here
|
||||||
LT_CONFIG_LTDL_DIR([libltdl])
|
LT_CONFIG_LTDL_DIR([libltdl])
|
||||||
|
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
save_LDFLAGS="$LDFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
LTDL_INIT
|
LTDL_INIT
|
||||||
|
LDFLAGS="$save_LDFLAGS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
|
||||||
dnl The lt_dladvise_init symbol was added with libtool-2.2
|
dnl The lt_dladvise_init symbol was added with libtool-2.2
|
||||||
if test "x$with_included_ltdl" != "xyes"; then
|
if test "x$with_included_ltdl" != "xyes"; then
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
save_LDFLAGS="$LDFLAGS"
|
save_LDFLAGS="$LDFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
CFLAGS="$CFLAGS $LTDLINCL"
|
CFLAGS="$CFLAGS $LTDLINCL"
|
||||||
LDFLAGS="$LDFLAGS $LIBLTDL"
|
LDFLAGS="$LDFLAGS $LIBLTDL"
|
||||||
AC_CHECK_LIB([ltdl], [lt_dladvise_init], [],
|
AC_CHECK_LIB([ltdl], [lt_dladvise_init], [],
|
||||||
[AC_MSG_ERROR([installed libltdl is too old. install a newer libltdl or specify --with-included-ltdl])])
|
[AC_MSG_ERROR([installed libltdl is too old. install a newer libltdl or specify --with-included-ltdl])])
|
||||||
LDFLAGS="$save_LDFLAGS"
|
LDFLAGS="$save_LDFLAGS"
|
||||||
CFLAGS="$save_CFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
|
LIBS="$save_LIBS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl overrides the default CFLAGS setting
|
dnl overrides the default CFLAGS setting
|
||||||
|
@ -56,6 +56,20 @@ struct qse_httpd_serverstd_root_t
|
|||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct qse_httpd_serverstd_realm_t qse_httpd_serverstd_realm_t;
|
||||||
|
struct qse_httpd_serverstd_realm_t
|
||||||
|
{
|
||||||
|
const qse_mchar_t* name;
|
||||||
|
int authreq;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct qse_httpd_serverstd_auth_t qse_httpd_serverstd_auth_t;
|
||||||
|
struct qse_httpd_serverstd_auth_t
|
||||||
|
{
|
||||||
|
qse_mcstr_t key;
|
||||||
|
int authok;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct qse_httpd_serverstd_cgi_t qse_httpd_serverstd_cgi_t;
|
typedef struct qse_httpd_serverstd_cgi_t qse_httpd_serverstd_cgi_t;
|
||||||
struct qse_httpd_serverstd_cgi_t
|
struct qse_httpd_serverstd_cgi_t
|
||||||
{
|
{
|
||||||
@ -75,8 +89,8 @@ enum qse_httpd_serverstd_query_code_t
|
|||||||
{
|
{
|
||||||
QSE_HTTPD_SERVERSTD_NAME, /* const qse_mchar_t* */
|
QSE_HTTPD_SERVERSTD_NAME, /* const qse_mchar_t* */
|
||||||
QSE_HTTPD_SERVERSTD_ROOT, /* qse_httpd_serverstd_root_t */
|
QSE_HTTPD_SERVERSTD_ROOT, /* qse_httpd_serverstd_root_t */
|
||||||
QSE_HTTPD_SERVERSTD_REALM, /* const qse_mchar_t* */
|
QSE_HTTPD_SERVERSTD_REALM, /* qse_httpd_serverstd_realm_t */
|
||||||
QSE_HTTPD_SERVERSTD_AUTH, /* const qse_mchar_t* */
|
QSE_HTTPD_SERVERSTD_AUTH, /* qse_httpd_serverstd_auth_t */
|
||||||
QSE_HTTPD_SERVERSTD_DIRCSS, /* const qse_mchar_t* */
|
QSE_HTTPD_SERVERSTD_DIRCSS, /* const qse_mchar_t* */
|
||||||
QSE_HTTPD_SERVERSTD_ERRCSS, /* const qse_mchar_t* */
|
QSE_HTTPD_SERVERSTD_ERRCSS, /* const qse_mchar_t* */
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
License along with QSE. If not, see <htrd://www.gnu.org/licenses/>.
|
License along with QSE. If not, see <htrd://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <qse/http/std.h>
|
#include <qse/http/stdhttpd.h>
|
||||||
#include "httpd.h"
|
#include "httpd.h"
|
||||||
#include "../cmn/mem.h"
|
#include "../cmn/mem.h"
|
||||||
#include <qse/cmn/hton.h>
|
#include <qse/cmn/hton.h>
|
||||||
@ -2240,8 +2240,8 @@ struct rsrc_tmp_t
|
|||||||
qse_mchar_t* xpath;
|
qse_mchar_t* xpath;
|
||||||
|
|
||||||
qse_httpd_serverstd_root_t root;
|
qse_httpd_serverstd_root_t root;
|
||||||
const qse_mchar_t* realm;
|
qse_httpd_serverstd_realm_t realm;
|
||||||
const qse_mchar_t* auth;
|
qse_httpd_serverstd_auth_t auth;
|
||||||
qse_httpd_serverstd_index_t index;
|
qse_httpd_serverstd_index_t index;
|
||||||
|
|
||||||
int final_match;
|
int final_match;
|
||||||
@ -2400,16 +2400,16 @@ static int make_resource (
|
|||||||
QSE_ASSERT (tmp.root.type == QSE_HTTPD_SERVERSTD_ROOT_PATH);
|
QSE_ASSERT (tmp.root.type == QSE_HTTPD_SERVERSTD_ROOT_PATH);
|
||||||
|
|
||||||
if (server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_REALM, &tmp.realm) <= -1 ||
|
if (server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_REALM, &tmp.realm) <= -1 ||
|
||||||
server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_AUTH, &tmp.auth) <= -1 ||
|
|
||||||
server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_INDEX, &tmp.index) <= -1)
|
server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_INDEX, &tmp.index) <= -1)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* default to the root directory. */
|
/* default to the root directory. */
|
||||||
if (!tmp.root.u.path) tmp.root.u.path = QSE_MT("/");
|
if (!tmp.root.u.path) tmp.root.u.path = QSE_MT("/");
|
||||||
|
|
||||||
if (tmp.realm && tmp.auth)
|
if (tmp.realm.authreq && tmp.realm.name)
|
||||||
{
|
{
|
||||||
const qse_htre_hdrval_t* authv;
|
const qse_htre_hdrval_t* authv;
|
||||||
|
|
||||||
@ -2439,12 +2439,15 @@ static int make_resource (
|
|||||||
/* decoding a base64-encoded string result in a shorter value than the input.
|
/* decoding a base64-encoded string result in a shorter value than the input.
|
||||||
* so passing the length of the input(authl) as the output buffer size is ok */
|
* so passing the length of the input(authl) as the output buffer size is ok */
|
||||||
authl2 = qse_debase64 (&authv->ptr[6], authl, server_xtn->auth.ptr, authl, QSE_NULL);
|
authl2 = qse_debase64 (&authv->ptr[6], authl, server_xtn->auth.ptr, authl, QSE_NULL);
|
||||||
if (qse_mbsxcmp (server_xtn->auth.ptr, authl2, tmp.auth) == 0) goto auth_ok;
|
|
||||||
|
tmp.auth.key.ptr = server_xtn->auth.ptr;
|
||||||
|
tmp.auth.key.len = authl2;
|
||||||
|
if (server_xtn->query (httpd, client->server, req, tmp.xpath, QSE_HTTPD_SERVERSTD_AUTH, &tmp.auth) >= 0 && tmp.auth.authok) goto auth_ok;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target->type = QSE_HTTPD_RSRC_AUTH;
|
target->type = QSE_HTTPD_RSRC_AUTH;
|
||||||
target->u.auth.realm = tmp.realm;
|
target->u.auth.realm = tmp.realm.name;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2621,7 +2624,14 @@ static int query_server (
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_REALM:
|
case QSE_HTTPD_SERVERSTD_REALM:
|
||||||
|
((qse_httpd_serverstd_realm_t*)result)->name = QSE_NULL;
|
||||||
|
((qse_httpd_serverstd_realm_t*)result)->authreq = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_AUTH:
|
case QSE_HTTPD_SERVERSTD_AUTH:
|
||||||
|
((qse_httpd_serverstd_auth_t*)result)->authok = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case QSE_HTTPD_SERVERSTD_ERRCSS:
|
case QSE_HTTPD_SERVERSTD_ERRCSS:
|
||||||
case QSE_HTTPD_SERVERSTD_DIRCSS:
|
case QSE_HTTPD_SERVERSTD_DIRCSS:
|
||||||
*(const qse_mchar_t**)result = QSE_NULL;
|
*(const qse_mchar_t**)result = QSE_NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user