May you provide an example what is structure to store to ? I tried to make some structure. But it would become empty when running came to ap_hook_handler. I suppose that I non correctly tried to get data at handler step saved value at authn step from such structure.
вс, 17 мая 2020 г. в 10:32, Sorin Manolache <sor...@gmail.com>: > On 15/05/2020 23.39, CpServiceSPb . wrote: > > I write hook module for Apache2 consisted of hooks of 2 procedures: > > ap_hook_check_authn/ap_hook_check_user_id and ap_hook_handler. > > This module reads content of post method request, mainly body, and > extract > > necessary information for functioning of the each of mentioned above > > procedure. > > For 1st one - it is user/password passed from clients at post request > body, > > for 2nd one - it is some data. > > That is reading post request body content from brigades/buckets and > saving > > it into char buffer is called twice - from ap_hook_check_authn and and > > ap_hook_handler. > > But after callig reading post request body content reading function for > the > > first time from ap_hook_check_authn, other calling of the function (from > > ap_hook_handler) returns an empty body buffer. > > Even other calling of post request body content reading function from > > ap_hook_check returns already an emptybody biffer. > > > > I read post body to a buffer at the following way: > > 1. apr_brigade_create > > 2. do-while cycle until eos_bucket is got set to 1 > > 3. within the point 2 cycle ap_get_brigade > > 4. in for (bucket = APR_BRIGADE_FIRST(bb); bucket != > > APR_BRIGADE_SENTINEL(bb); bucket = APR_BUCKET_NEXT(bucket)) > > if bucket EOS then eos_bucket set to 1 > > else (transien bucket) apr_bucket_read is called and then all chunks are > > reads to buffer > > 5. body buffer and its len is got finally > > > > But in such pot body reading all buckest are deleted from brigade (not by > > me) . > > Hello, > > I think you are doing everything fine. > > You just cannot read the post body several times, because reading it is > consuming it. > > So you just have to read it only once (in ap_hook_check_authn) and store > it yourself in a structure that belongs to your module. Then you can > reuse that structure in ap_hook_handler. > > HTH, > Sorin > > > > > So what is the best way to read post body content to a buffer as many > times > > as necessary as at ap_hook_check_authn step as at ap_hook_handler step > > without loosing the content ? > > Or may be it's more efficiency to read post body content once at > > ap_hook_check_authn and then pass it to ap_hook_handler ? > > But I don' t understand now how. > > > > P. S.: > > Way of calling of > > > > r->kept_body = apr_brigade_create(r->pool, r->connection->bucket_alloc); > > apr_bucket *bucketnew = apr_bucket_transient_create(bodycontent, > bodysize, > > r->connection->bucket_alloc); > > APR_BRIGADE_INSERT_TAIL(r->kept_body, bucketnew); > > > > after 1st calling of post request body content reading function worked > for > > some versions ago (may be even for 2.2 only) . > > But it doesn' t work now. > > > >