From: Vlad S. <ser...@us...> - 2008-10-20 00:07:03
|
Update of /cvsroot/naviserver/naviserver/nsd In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv28102/nsd Modified Files: adprequest.c auth.c conn.c driver.c filter.c form.c nsd.h op.c progress.c queue.c request.c tclmisc.c url2file.c urlspace.c Log Message: Driver changed, no request hacks, request can be empty, ns_conn content returns binary now Index: tclmisc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclmisc.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** tclmisc.c 29 Aug 2008 20:43:07 -0000 1.32 --- tclmisc.c 20 Oct 2008 00:06:54 -0000 1.33 *************** *** 168,173 **** conn = itPtr->conn; Ns_DStringInit(&ds); ! Ns_DStringVarAppend(&ds, conn->request->method, " ", conn->request->url, ! ", PeerAddress: ", Ns_ConnPeer(conn), NULL); logHeaders = itPtr->servPtr->tcl.errorLogHeaders; --- 168,178 ---- conn = itPtr->conn; Ns_DStringInit(&ds); ! if (conn->request->method != NULL) { ! Ns_DStringVarAppend(&ds, conn->request->method, " ", NULL); ! } ! if (conn->request->url != NULL) { ! Ns_DStringVarAppend(&ds, conn->request->url, ", ", NULL); ! } ! Ns_DStringVarAppend(&ds, "PeerAddress: ", Ns_ConnPeer(conn), NULL); logHeaders = itPtr->servPtr->tcl.errorLogHeaders; *************** *** 1077,1080 **** --- 1082,1088 ---- * * $Log$ + * Revision 1.33 2008/10/20 00:06:54 seryakov + * Driver changed, no request hacks, request can be empty, ns_conn content returns binary now + * * Revision 1.32 2008/08/29 20:43:07 seryakov * Revert ns_filestat to not raise exception and use native system call Index: urlspace.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/urlspace.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** urlspace.c 14 Nov 2007 16:18:15 -0000 1.13 --- urlspace.c 20 Oct 2008 00:06:54 -0000 1.14 *************** *** 340,344 **** Ns_DString ds; ! assert(servPtr != NULL); Ns_DStringInit(&ds); --- 340,346 ---- Ns_DString ds; ! if (method == NULL || url == NULL) { ! return; ! } Ns_DStringInit(&ds); *************** *** 387,390 **** --- 389,396 ---- void *data; + if (method == NULL || url == NULL) { + return NULL; + } + Ns_DStringInit(&ds); MkSeq(&ds, method, url); *************** *** 421,424 **** --- 427,434 ---- void *data; + if (method == NULL || url == NULL) { + return NULL; + } + Ns_DStringInit(&ds); MkSeq(&ds, method, url); *************** *** 455,458 **** --- 465,472 ---- void *data = NULL; + if (method == NULL || url == NULL) { + return NULL; + } + Ns_DStringInit(&ds); MkSeq(&ds, method, url); Index: conn.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/conn.c,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** conn.c 8 Oct 2008 21:06:48 -0000 1.54 --- conn.c 20 Oct 2008 00:06:54 -0000 1.55 *************** *** 1223,1233 **** } if (objc == 2) { ! Tcl_SetResult(interp, Ns_ConnContent(conn), TCL_STATIC); } else { if (GetIndices(interp, connPtr, objv+2, &off, &len) != TCL_OK) { return TCL_ERROR; } ! Tcl_SetObjResult(interp, ! Tcl_NewStringObj(Ns_ConnContent(conn)+off, len)); } break; --- 1223,1234 ---- } if (objc == 2) { ! if (connPtr->reqPtr->content != NULL && connPtr->reqPtr->length) { ! Tcl_SetObjResult(interp, Tcl_NewByteArrayObj((uint8_t*)connPtr->reqPtr->content, connPtr->reqPtr->length)); ! } } else { if (GetIndices(interp, connPtr, objv+2, &off, &len) != TCL_OK) { return TCL_ERROR; } ! Tcl_SetObjResult(interp, Tcl_NewByteArrayObj((uint8_t*)Ns_ConnContent(conn) + off, len)); } break; Index: request.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/request.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** request.c 15 Oct 2008 05:21:51 -0000 1.9 --- request.c 20 Oct 2008 00:06:54 -0000 1.10 *************** *** 119,126 **** * * Results: ! * A new Ns_Request. * * Side effects: ! * The result is newly-allocated. * *---------------------------------------------------------------------- --- 119,126 ---- * * Results: ! * NS_OK on success, NS_ERROR on error * * Side effects: ! * The request if not NULL is always zero-ed before filled with values * *---------------------------------------------------------------------- Index: op.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/op.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** op.c 14 Nov 2007 16:18:14 -0000 1.11 --- op.c 20 Oct 2008 00:06:54 -0000 1.12 *************** *** 255,280 **** Ns_ConnRunRequest(Ns_Conn *conn) { ! Req *reqPtr; ! int status; char *server = Ns_ConnServer(conn); ! Ns_MutexLock(&ulock); ! reqPtr = Ns_UrlSpecificGet(server, conn->request->method, ! conn->request->url, uid); ! if (reqPtr == NULL) { ! Ns_MutexUnlock(&ulock); ! if (STREQ(conn->request->method, "BAD")) { ! return Ns_ConnReturnBadRequest(conn, NULL); ! } else { ! return Ns_ConnReturnNotFound(conn); } } - ++reqPtr->refcnt; - Ns_MutexUnlock(&ulock); - status = (*reqPtr->proc) (reqPtr->arg, conn); - Ns_MutexLock(&ulock); - FreeReq(reqPtr); - Ns_MutexUnlock(&ulock); - return status; } --- 255,280 ---- Ns_ConnRunRequest(Ns_Conn *conn) { ! Req *reqPtr; ! int status = NS_OK; char *server = Ns_ConnServer(conn); ! if (conn->request->method != NULL && conn->request->url != NULL) { ! Ns_MutexLock(&ulock); ! reqPtr = Ns_UrlSpecificGet(server, conn->request->method, conn->request->url, uid); ! if (reqPtr == NULL) { ! Ns_MutexUnlock(&ulock); ! if (STREQ(conn->request->method, "BAD")) { ! return Ns_ConnReturnBadRequest(conn, NULL); ! } else { ! return Ns_ConnReturnNotFound(conn); ! } } + ++reqPtr->refcnt; + Ns_MutexUnlock(&ulock); + status = (*reqPtr->proc) (reqPtr->arg, conn); + Ns_MutexLock(&ulock); + FreeReq(reqPtr); + Ns_MutexUnlock(&ulock); } return status; } *************** *** 316,322 **** */ ! status = Ns_AuthorizeRequest(Ns_ConnServer(conn), conn->request->method, ! conn->request->url, Ns_ConnAuthUser(conn), ! Ns_ConnAuthPasswd(conn), Ns_ConnPeer(conn)); switch (status) { case NS_OK: --- 316,325 ---- */ ! status = Ns_AuthorizeRequest(Ns_ConnServer(conn), ! conn->request->method, ! conn->request->url, ! Ns_ConnAuthUser(conn), ! Ns_ConnAuthPasswd(conn), ! Ns_ConnPeer(conn)); switch (status) { case NS_OK: Index: filter.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/filter.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** filter.c 10 Mar 2007 18:04:38 -0000 1.5 --- filter.c 20 Oct 2008 00:06:54 -0000 1.6 *************** *** 131,146 **** Conn *connPtr = (Conn *) conn; Filter *fPtr; - char *method, *url; int status; status = NS_OK; ! if (conn->request != NULL) { ! method = conn->request->method; ! url = conn->request->url; fPtr = connPtr->servPtr->filter.firstFilterPtr; while (fPtr != NULL && status == NS_OK) { if ((fPtr->when & why) ! && Tcl_StringMatch(method, fPtr->method) ! && Tcl_StringMatch(url, fPtr->url)) { status = (*fPtr->proc)(fPtr->arg, conn, why); } --- 131,143 ---- Conn *connPtr = (Conn *) conn; Filter *fPtr; int status; status = NS_OK; ! if (conn->request->method != NULL && conn->request->url != NULL) { fPtr = connPtr->servPtr->filter.firstFilterPtr; while (fPtr != NULL && status == NS_OK) { if ((fPtr->when & why) ! && Tcl_StringMatch(conn->request->method, fPtr->method) ! && Tcl_StringMatch(conn->request->url, fPtr->url)) { status = (*fPtr->proc)(fPtr->arg, conn, why); } Index: auth.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/auth.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** auth.c 9 Oct 2007 12:43:19 -0000 1.6 --- auth.c 20 Oct 2008 00:06:54 -0000 1.7 *************** *** 60,64 **** * * Side effects: ! * Depends on user supplied routine. * *---------------------------------------------------------------------- --- 60,65 ---- * * Side effects: ! * Depends on user supplied routine. method and url could be NULL in case ! * of non HTTP request * *---------------------------------------------------------------------- Index: queue.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/queue.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** queue.c 15 Oct 2008 05:21:51 -0000 1.27 --- queue.c 20 Oct 2008 00:06:54 -0000 1.28 *************** *** 660,669 **** Ns_Conn *conn = (Ns_Conn *) connPtr; NsServer *servPtr = connPtr->servPtr; ! int i, status; char *auth; /* ! * Re-initialize and run the connection. Also it will make sure the ! * request is valid and not empty */ --- 660,668 ---- Ns_Conn *conn = (Ns_Conn *) connPtr; NsServer *servPtr = connPtr->servPtr; ! int i, status = NS_OK; char *auth; /* ! * Re-initialize and run the connection. */ *************** *** 681,687 **** strcpy(connPtr->reqPtr->peer, ns_inet_ntoa(connPtr->sockPtr->sa.sin_addr)); - connPtr->contentLength = connPtr->reqPtr->length; - connPtr->headers = connPtr->reqPtr->headers; connPtr->request = &connPtr->reqPtr->request; connPtr->nContentSent = 0; connPtr->responseStatus = 200; --- 680,686 ---- strcpy(connPtr->reqPtr->peer, ns_inet_ntoa(connPtr->sockPtr->sa.sin_addr)); connPtr->request = &connPtr->reqPtr->request; + connPtr->headers = connPtr->reqPtr->headers; + connPtr->contentLength = connPtr->reqPtr->length; connPtr->nContentSent = 0; connPtr->responseStatus = 200; *************** *** 694,699 **** connPtr->keep = -1; /* Default keep-alive rules apply */ ! Ns_ConnSetCompression(conn, ! servPtr->compress.enable ? servPtr->compress.level : 0); connPtr->compress = -1; --- 693,697 ---- connPtr->keep = -1; /* Default keep-alive rules apply */ ! Ns_ConnSetCompression(conn, servPtr->compress.enable ? servPtr->compress.level : 0); connPtr->compress = -1; *************** *** 720,729 **** NsParseAuth(connPtr, auth); } ! if (conn->request->method && STREQ(conn->request->method, "HEAD")) { conn->flags |= NS_CONN_SKIPBODY; } /* ! * Run the request. */ --- 718,735 ---- NsParseAuth(connPtr, auth); } ! if (conn->request->method != NULL && STREQ(conn->request->method, "HEAD")) { conn->flags |= NS_CONN_SKIPBODY; } /* ! * Run the driver's private handler ! */ ! ! if (connPtr->sockPtr->drvPtr->requestProc != NULL) { ! status = (*connPtr->sockPtr->drvPtr->requestProc)(connPtr->sockPtr->drvPtr->arg, conn); ! } ! ! /* ! * Run the rest of the request. */ *************** *** 731,735 **** status = NsConnRunProxyRequest((Ns_Conn *) connPtr); } else { ! status = NsRunFilters(conn, NS_FILTER_PRE_AUTH); if (status == NS_OK) { status = Ns_AuthorizeRequest(servPtr->server, --- 737,743 ---- status = NsConnRunProxyRequest((Ns_Conn *) connPtr); } else { ! if (status == NS_OK) { ! status = NsRunFilters(conn, NS_FILTER_PRE_AUTH); ! } if (status == NS_OK) { status = Ns_AuthorizeRequest(servPtr->server, *************** *** 898,904 **** */ ! p = (connPtr->request && connPtr->request->method) ? connPtr->request->method : "?"; Tcl_DStringAppendElement(dsPtr, strncpy(buf, p, sizeof(buf))); ! p = (connPtr->request && connPtr->request->url) ? connPtr->request->url : "?"; Tcl_DStringAppendElement(dsPtr, strncpy(buf, p, sizeof(buf))); Ns_GetTime(&now); --- 906,912 ---- */ ! p = connPtr->request->method ? connPtr->request->method : "?"; Tcl_DStringAppendElement(dsPtr, strncpy(buf, p, sizeof(buf))); ! p = connPtr->request->url ? connPtr->request->url : "?"; Tcl_DStringAppendElement(dsPtr, strncpy(buf, p, sizeof(buf))); Ns_GetTime(&now); Index: nsd.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nsd.h,v retrieving revision 1.141 retrieving revision 1.142 diff -C2 -d -r1.141 -r1.142 *** nsd.h 15 Oct 2008 05:21:51 -0000 1.141 --- nsd.h 20 Oct 2008 00:06:54 -0000 1.142 *************** *** 364,367 **** --- 364,368 ---- Ns_DriverSendFileProc *sendFileProc; Ns_DriverKeepProc *keepProc; + Ns_DriverRequestProc *requestProc; Ns_DriverCloseProc *closeProc; int opts; /* NS_DRIVER_* options */ Index: url2file.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/url2file.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** url2file.c 14 Nov 2007 16:18:15 -0000 1.8 --- url2file.c 20 Oct 2008 00:06:54 -0000 1.9 *************** *** 241,246 **** { Url2File *u2fPtr; ! int status; if (servPtr->fastpath.url2file != NULL) { status = (*servPtr->fastpath.url2file)(dsPtr, servPtr->server, url); --- 241,249 ---- { Url2File *u2fPtr; ! int status = NS_ERROR; + if (url == NULL) { + return status; + } if (servPtr->fastpath.url2file != NULL) { status = (*servPtr->fastpath.url2file)(dsPtr, servPtr->server, url); Index: driver.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/driver.c,v retrieving revision 1.118 retrieving revision 1.119 diff -C2 -d -r1.118 -r1.119 *** driver.c 15 Oct 2008 05:21:51 -0000 1.118 --- driver.c 20 Oct 2008 00:06:54 -0000 1.119 *************** *** 326,329 **** --- 326,330 ---- drvPtr->sendFileProc = init->sendFileProc; drvPtr->keepProc = init->keepProc; + drvPtr->requestProc = init->requestProc; drvPtr->closeProc = init->closeProc; drvPtr->arg = init->arg; *************** *** 485,531 **** } - /* - *---------------------------------------------------------------------- - * - * Ns_DriverSetRequest -- - * - * Parses request line and sets as current Request struct, should be - * in the form: METHOD URL ?PROTO? - * - * Results: - * NS_ERROR in case of empty line - * NS_FATAL if request cannot be parsed. - * NS_OK if parsed sucessfully - * - * Side effects: - * This is supposed to be called from drivers before the - * socket is queued, usually in Accept callback - * Primary purpose is to allow non-HTTP drivers to setup - * request line so registered callback proc will be called - * during connection processing - * - *---------------------------------------------------------------------- - */ - - int - Ns_DriverSetRequest(Ns_Sock *sock, char *reqline) - { - Sock *sockPtr = (Sock*)sock; - - SockPrepare(sockPtr); - - if (reqline != NULL) { - Ns_ResetRequest(&sockPtr->reqPtr->request); - if (Ns_ParseRequest(&sockPtr->reqPtr->request, reqline) == NS_ERROR) { - NsFreeRequest(sockPtr->reqPtr); - sockPtr->reqPtr = NULL; - return NS_FATAL; - } - return NS_OK; - } - - return NS_ERROR; - } - /* --- 486,489 ---- *************** *** 695,707 **** sockPtr->reqPtr = NULL; - /* Sanity check against bad drivers */ - if (reqPtr->request.line == NULL || - reqPtr->request.method == NULL || - reqPtr->request.url == NULL) { - - NsFreeRequest(reqPtr); - SockError(sockPtr, SOCK_BADREQUEST, 0); - return NULL; - } return reqPtr; } --- 653,656 ---- *************** *** 1590,1593 **** --- 1539,1549 ---- } } else { + + /* + * We need to call this to make sure socket has request structure allocated, + * otherwise NsGetRequest will call SockRead which is not what this driver wants + */ + + SockPrepare(sockPtr); status = SOCK_READY; } Index: form.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/form.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** form.c 10 Mar 2007 18:04:39 -0000 1.6 --- form.c 20 Oct 2008 00:06:54 -0000 1.7 *************** *** 77,81 **** if (connPtr->query == NULL) { connPtr->query = Ns_SetCreate(NULL); ! if (!STREQ(connPtr->request->method, "POST")) { form = connPtr->request->query; if (form != NULL) { --- 77,81 ---- if (connPtr->query == NULL) { connPtr->query = Ns_SetCreate(NULL); ! if (connPtr->request->method != NULL && !STREQ(connPtr->request->method, "POST")) { form = connPtr->request->query; if (form != NULL) { Index: progress.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/progress.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** progress.c 15 Oct 2008 05:21:51 -0000 1.6 --- progress.c 20 Oct 2008 00:06:54 -0000 1.7 *************** *** 185,188 **** --- 185,189 ---- if (progressMinSize > 0 + && request->url != NULL && sockPtr->reqPtr->length > progressMinSize) { Index: adprequest.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/adprequest.c,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** adprequest.c 8 Oct 2008 20:14:46 -0000 1.34 --- adprequest.c 20 Oct 2008 00:06:54 -0000 1.35 *************** *** 151,154 **** --- 151,155 ---- servPtr = connPtr->servPtr; if ((itPtr->servPtr->adp.flags & ADP_DEBUG) && + conn->request->method != NULL && STREQ(conn->request->method, "GET") && (query = Ns_ConnGetQuery(conn)) != NULL) { |