added qse_httpd_serverstd_realm_t and qse_httpd_serverstd_auth_t
This commit is contained in:
		| @ -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; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user