Lines Matching refs:pb
3408 webdav_propfind_live_props (const webdav_propfind_bufs * const restrict pb, in webdav_propfind_live_props() argument
3411 buffer * const restrict b = pb->b_200; in webdav_propfind_live_props()
3433 if (__builtin_expect( (NULL != gmtime64_r(&pb->st.st_ctime, &tm)), 1)) { in webdav_propfind_live_props()
3467 buffer_append_int(b, pb->st.st_size); in webdav_propfind_live_props()
3488 if (S_ISDIR(pb->st.st_mode)) { in webdav_propfind_live_props()
3495 const array * const mtypes = pb->r->conf.mimetypes; in webdav_propfind_live_props()
3497 stat_cache_mimetype_by_ext(mtypes, BUF_PTR_LEN(&pb->dst->path)); in webdav_propfind_live_props()
3514 if (0 != pb->r->conf.etag_flags) { in webdav_propfind_live_props()
3515 buffer * const etagb = pb->r->tmp_buf; in webdav_propfind_live_props()
3516 http_etag_create(etagb, &pb->st, pb->r->conf.etag_flags); in webdav_propfind_live_props()
3531 http_date_time_append(b, pb->st.st_mtime); in webdav_propfind_live_props()
3545 if (S_ISDIR(pb->st.st_mode)) in webdav_propfind_live_props()
3589 webdav_propfind_resource_props (const webdav_propfind_bufs * const restrict pb) in webdav_propfind_resource_props() argument
3591 const webdav_property_names * const props = &pb->proplist; in webdav_propfind_resource_props()
3596 ? 0 == webdav_propfind_live_props(pb, (enum webdav_live_props_e) in webdav_propfind_resource_props()
3598 : 0 == webdav_prop_select_prop(pb->pconf, &pb->dst->rel_path, in webdav_propfind_resource_props()
3599 prop, pb->b_200)) in webdav_propfind_resource_props()
3604 webdav_xml_prop(pb->b_404, prop, NULL, 0); in webdav_propfind_resource_props()
3613 webdav_xml_prop(pb->b_404, &lprop, NULL, 0); in webdav_propfind_resource_props()
3620 if (pb->allprop) { in webdav_propfind_resource_props()
3621 webdav_propfind_live_props(pb, WEBDAV_PROP_ALL); in webdav_propfind_resource_props()
3622 webdav_prop_select_props(pb->pconf, &pb->dst->rel_path, pb->b_200); in webdav_propfind_resource_props()
3626 if (pb->lockdiscovery) { in webdav_propfind_resource_props()
3640 buffer_append_string_len(pb->b_200, CONST_STR_LEN( in webdav_propfind_resource_props()
3642 webdav_lock_activelocks(pb->pconf, &pb->dst->rel_path, in webdav_propfind_resource_props()
3643 (pb->lockdiscovery > 0), in webdav_propfind_resource_props()
3644 webdav_propfind_lockdiscovery_cb, pb->b_200); in webdav_propfind_resource_props()
3645 buffer_append_string_len(pb->b_200, CONST_STR_LEN( in webdav_propfind_resource_props()
3654 const restrict pb) in webdav_propfind_resource_propnames() argument
3668 buffer_append_string_len(pb->b_200,live_propnames,sizeof(live_propnames)-1); in webdav_propfind_resource_propnames()
3671 webdav_prop_select_propnames(pb->pconf, &pb->dst->rel_path, pb->b_200); in webdav_propfind_resource_propnames()
3677 webdav_propfind_resource_403 (const webdav_propfind_bufs * const restrict pb) in webdav_propfind_resource_403() argument
3679 buffer * const restrict b = pb->b; in webdav_propfind_resource_403()
3682 webdav_xml_href(b, &pb->dst->rel_path); in webdav_propfind_resource_403()
3690 webdav_double_buffer(pb->r, b); in webdav_propfind_resource_403()
3695 webdav_propfind_resource (const webdav_propfind_bufs * const restrict pb) in webdav_propfind_resource() argument
3697 buffer_clear(pb->b_200); in webdav_propfind_resource()
3698 buffer_clear(pb->b_404); in webdav_propfind_resource()
3700 if (!pb->propname) in webdav_propfind_resource()
3701 webdav_propfind_resource_props(pb); in webdav_propfind_resource()
3703 webdav_propfind_resource_propnames(pb); in webdav_propfind_resource()
3713 buffer * const restrict b = pb->b; in webdav_propfind_resource()
3714 buffer * const restrict b_200 = pb->b_200; in webdav_propfind_resource()
3715 buffer * const restrict b_404 = pb->b_404; in webdav_propfind_resource()
3724 webdav_xml_href(b, &pb->dst->rel_path); in webdav_propfind_resource()
3732 webdav_double_buffer(pb->r, b); in webdav_propfind_resource()
3737 webdav_propfind_dir (webdav_propfind_bufs * const restrict pb) in webdav_propfind_dir() argument
3741 if (++pb->recursed > 100) return; in webdav_propfind_dir()
3743 physical_st * const dst = pb->dst; in webdav_propfind_dir()
3755 webdav_propfind_resource_403(pb); /* Forbidden */ in webdav_propfind_dir()
3759 webdav_propfind_resource(pb); in webdav_propfind_dir()
3761 if (pb->lockdiscovery > 0) in webdav_propfind_dir()
3762 pb->lockdiscovery = -pb->lockdiscovery; /*(check locks on node only)*/ in webdav_propfind_dir()
3769 (pb->r->conf.force_lowercase_filenames ? WEBDAV_FLAG_LC_NAMES : 0); in webdav_propfind_dir()
3778 if (0 != fstatat(dfd, de->d_name, &pb->st, pb->atflags)) in webdav_propfind_dir()
3788 if (0 != stat(dst->path.ptr, &pb->st)) { in webdav_propfind_dir()
3794 if (S_ISDIR(pb->st.st_mode)) { in webdav_propfind_dir()
3799 if (S_ISDIR(pb->st.st_mode) && -1 == pb->depth) in webdav_propfind_dir()
3800 webdav_propfind_dir(pb); /* recurse */ in webdav_propfind_dir()
3802 webdav_propfind_resource(pb); in webdav_propfind_dir()
4204 webdav_propfind_bufs pb; in mod_webdav_propfind() local
4214 pb.allprop = 0; in mod_webdav_propfind()
4215 pb.propname = 0; in mod_webdav_propfind()
4216 pb.lockdiscovery= 0; in mod_webdav_propfind()
4217 pb.recursed = 0; in mod_webdav_propfind()
4218 pb.depth = webdav_parse_Depth(r); in mod_webdav_propfind()
4220 if (-1 == pb.depth && !(pconf->opts & MOD_WEBDAV_PROPFIND_DEPTH_INFINITY)) { in mod_webdav_propfind()
4225 pb.atflags = in mod_webdav_propfind()
4231 if (pb.atflags == AT_SYMLINK_NOFOLLOW in mod_webdav_propfind()
4232 ? 0 != lstat(r->physical.path.ptr, &pb.st) in mod_webdav_propfind()
4233 : 0 != stat(r->physical.path.ptr, &pb.st)) { /* non-standard */ in mod_webdav_propfind()
4237 else if (S_ISDIR(pb.st.st_mode)) { in mod_webdav_propfind()
4251 pb.depth = 0; in mod_webdav_propfind()
4254 pb.proplist.ptr = NULL; in mod_webdav_propfind()
4255 pb.proplist.used = 0; in mod_webdav_propfind()
4272 pb.allprop = pb.lockdiscovery = 1; in mod_webdav_propfind()
4274 pb.propname = 1; in mod_webdav_propfind()
4290 free(pb.proplist.ptr); in mod_webdav_propfind()
4296 if (!(pb.proplist.used & (32-1))) { in mod_webdav_propfind()
4297 if (pb.proplist.used == 32) { in mod_webdav_propfind()
4302 free(pb.proplist.ptr); in mod_webdav_propfind()
4306 ck_realloc_u32((void **)&pb.proplist.ptr, in mod_webdav_propfind()
4307 (uint32_t)pb.proplist.used, in mod_webdav_propfind()
4308 32, sizeof(*pb.proplist.ptr)); in mod_webdav_propfind()
4316 pb.lockdiscovery = 1; in mod_webdav_propfind()
4326 pb.proplist.ptr[pb.proplist.used].ns = ""; in mod_webdav_propfind()
4327 pb.proplist.ptr[pb.proplist.used].nslen = 0; in mod_webdav_propfind()
4328 pb.proplist.ptr[pb.proplist.used].name = NULL; in mod_webdav_propfind()
4329 pb.proplist.ptr[pb.proplist.used].namelen = in mod_webdav_propfind()
4331 pb.proplist.used++; in mod_webdav_propfind()
4344 pb.proplist.ptr + pb.proplist.used++; in mod_webdav_propfind()
4360 if (NULL == pb.proplist.ptr && !pb.propname) in mod_webdav_propfind()
4361 pb.allprop = pb.lockdiscovery = 1; in mod_webdav_propfind()
4363 pb.r = r; in mod_webdav_propfind()
4364 pb.pconf = pconf; in mod_webdav_propfind()
4365 pb.dst = &r->physical; in mod_webdav_propfind()
4366 pb.b = chunk_buffer_acquire(); in mod_webdav_propfind()
4367 pb.b_200 = chunk_buffer_acquire(); in mod_webdav_propfind()
4368 pb.b_404 = chunk_buffer_acquire(); in mod_webdav_propfind()
4370 chunk_buffer_prepare_append(pb.b, 8192); in mod_webdav_propfind()
4372 webdav_xml_doctype(pb.b, r); in mod_webdav_propfind()
4373 buffer_append_string_len(pb.b, CONST_STR_LEN( in mod_webdav_propfind()
4376 if (0 != pb.depth) /*(must be collection or else error returned above)*/ in mod_webdav_propfind()
4377 webdav_propfind_dir(&pb); in mod_webdav_propfind()
4379 webdav_propfind_resource(&pb); in mod_webdav_propfind()
4381 buffer_append_string_len(pb.b, CONST_STR_LEN( in mod_webdav_propfind()
4384 http_chunk_append_buffer(r, pb.b); /*(might move/steal/reset buffer)*/ in mod_webdav_propfind()
4385 chunk_buffer_release(pb.b); in mod_webdav_propfind()
4388 chunk_buffer_release(pb.b_404); in mod_webdav_propfind()
4389 chunk_buffer_release(pb.b_200); in mod_webdav_propfind()
4391 if (pb.proplist.ptr) in mod_webdav_propfind()
4392 free(pb.proplist.ptr); in mod_webdav_propfind()