Lines Matching refs:ctx

239 	vs_scan_ctx_t ctx;  in vs_icap_scan_file()  local
258 (void) memset(&ctx, 0, sizeof (vs_scan_ctx_t)); in vs_icap_scan_file()
259 ctx.vsc_idx = eng->vse_eidx; in vs_icap_scan_file()
260 (void) strlcpy(ctx.vsc_host, eng->vse_host, sizeof (ctx.vsc_host)); in vs_icap_scan_file()
261 ctx.vsc_port = eng->vse_port; in vs_icap_scan_file()
262 ctx.vsc_sockfd = eng->vse_sockfd; in vs_icap_scan_file()
263 ctx.vsc_fd = fd; in vs_icap_scan_file()
264 ctx.vsc_fname = fname; in vs_icap_scan_file()
265 ctx.vsc_fsize = fsize; in vs_icap_scan_file()
266 ctx.vsc_flags = flags; in vs_icap_scan_file()
267 ctx.vsc_result = result; in vs_icap_scan_file()
270 ctx.vsc_flags |= VS_NO_REPAIR; in vs_icap_scan_file()
271 ctx.vsc_repair = 0; in vs_icap_scan_file()
272 ctx.vsc_repair_fname = NULL; in vs_icap_scan_file()
273 ctx.vsc_repair_fd = -1; in vs_icap_scan_file()
277 if (vs_icap_compare_se(ctx.vsc_idx, ctx.vsc_host, ctx.vsc_port) == 0) { in vs_icap_scan_file()
278 vs_icap_copy_options(&ctx.vsc_options, in vs_icap_scan_file()
279 &vs_options[ctx.vsc_idx]); in vs_icap_scan_file()
291 if (vs_icap_option_request(&ctx) == 0) in vs_icap_scan_file()
292 (void) vs_icap_respmod_request(&ctx); in vs_icap_scan_file()
295 vs_icap_free_options(&ctx.vsc_options); in vs_icap_scan_file()
319 vs_icap_option_request(vs_scan_ctx_t *ctx) in vs_icap_option_request() argument
321 if (ctx->vsc_options.vso_req_time != -1 && in vs_icap_option_request()
322 ((time(0) - ctx->vsc_options.vso_req_time) > in vs_icap_option_request()
323 ctx->vsc_options.vso_ttl)) { in vs_icap_option_request()
325 if (vs_icap_send_option_req(ctx) < 0) in vs_icap_option_request()
328 if (vs_icap_read_option_resp(ctx) < 0) in vs_icap_option_request()
331 vs_icap_update_options(ctx); in vs_icap_option_request()
349 vs_icap_send_option_req(vs_scan_ctx_t *ctx) in vs_icap_send_option_req() argument
353 char *buf0 = ctx->vsc_info.vsi_send_buf; in vs_icap_send_option_req()
359 ctx->vsc_result->vsr_rc = VS_RESULT_ERROR; in vs_icap_send_option_req()
363 (void) memset(ctx->vsc_info.vsi_send_buf, 0, in vs_icap_send_option_req()
364 sizeof (ctx->vsc_info.vsi_send_buf)); in vs_icap_send_option_req()
367 ctx->vsc_host, ctx->vsc_port, VS_SERVICE_NAME, VS_ICAP_VER); in vs_icap_send_option_req()
374 if (vs_icap_write(ctx->vsc_sockfd, buf0, (bufp - buf0)) < 0) in vs_icap_send_option_req()
388 vs_icap_read_option_resp(vs_scan_ctx_t *ctx) in vs_icap_read_option_resp() argument
390 if (vs_icap_read_resp_code(ctx) < 0) in vs_icap_read_option_resp()
393 if (ctx->vsc_info.vsi_icap_rc != VS_RESP_OK) { in vs_icap_read_option_resp()
396 vs_icap_resp_str(ctx->vsc_info.vsi_icap_rc)); in vs_icap_read_option_resp()
400 if (vs_icap_read_hdr(ctx, option_hdrs, VS_OPT_HDR_MAX) != 0) in vs_icap_read_option_resp()
403 if ((ctx->vsc_options.vso_scanstamp[0] == 0) || in vs_icap_read_option_resp()
404 (ctx->vsc_options.vso_respmod == 0) || in vs_icap_read_option_resp()
405 (ctx->vsc_options.vso_req_time == 0)) { in vs_icap_read_option_resp()
436 vs_icap_respmod_request(vs_scan_ctx_t *ctx) in vs_icap_respmod_request() argument
440 uint64_t resid = ctx->vsc_fsize; in vs_icap_respmod_request()
442 if (vs_icap_may_preview(ctx)) { in vs_icap_respmod_request()
444 if ((rv = vs_icap_send_preview(ctx)) < 0) in vs_icap_respmod_request()
447 if (vs_icap_read_respmod_resp(ctx) < 0) in vs_icap_respmod_request()
450 if (ctx->vsc_info.vsi_icap_rc != VS_RESP_CONTINUE) in vs_icap_respmod_request()
456 if ((ctx->vsc_fsize - (uint64_t)bytes_sent) > VS_BUF_SZ) { in vs_icap_respmod_request()
458 if ((rv = vs_icap_send_chunk(ctx, send_len)) < 0) in vs_icap_respmod_request()
467 if (vs_icap_send_respmod_hdr(ctx, 0) < 0) in vs_icap_respmod_request()
475 if ((rv = vs_icap_send_chunk(ctx, send_len)) < 0) in vs_icap_respmod_request()
484 if (vs_icap_send_termination(ctx) < 0) in vs_icap_respmod_request()
488 if (vs_icap_read_respmod_resp(ctx) < 0) in vs_icap_respmod_request()
502 vs_icap_may_preview(vs_scan_ctx_t *ctx) in vs_icap_may_preview() argument
506 vs_options_t *opts = &ctx->vsc_options; in vs_icap_may_preview()
512 if (ctx->vsc_fsize < (uint64_t)ctx->vsc_options.vso_preview_len) in vs_icap_may_preview()
520 if ((ext = vs_icap_find_ext(ctx->vsc_fname)) != 0) in vs_icap_may_preview()
526 if ((ext = vs_icap_find_ext(ctx->vsc_fname)) != 0) in vs_icap_may_preview()
571 vs_icap_send_preview(vs_scan_ctx_t *ctx) in vs_icap_send_preview() argument
573 int preview_len = ctx->vsc_options.vso_preview_len; in vs_icap_send_preview()
577 if (vs_icap_send_respmod_hdr(ctx, 'P') < 0) in vs_icap_send_preview()
580 if ((bytes_sent = vs_icap_send_chunk(ctx, preview_len)) < 0) in vs_icap_send_preview()
586 if (vs_icap_send_termination(ctx) < 0) in vs_icap_send_preview()
602 vs_icap_send_respmod_hdr(vs_scan_ctx_t *ctx, int ispreview) in vs_icap_send_respmod_hdr() argument
606 if ((len = vs_icap_create_respmod_hdr(ctx, ispreview)) == -1) { in vs_icap_send_respmod_hdr()
608 ctx->vsc_result->vsr_rc = VS_RESULT_ERROR; in vs_icap_send_respmod_hdr()
613 if (vs_icap_write(ctx->vsc_sockfd, in vs_icap_send_respmod_hdr()
614 ctx->vsc_info.vsi_send_buf, len) < 0) { in vs_icap_send_respmod_hdr()
638 vs_icap_create_respmod_hdr(vs_scan_ctx_t *ctx, int ispreview) in vs_icap_create_respmod_hdr() argument
642 char *hbuf0 = ctx->vsc_info.vsi_send_buf; in vs_icap_create_respmod_hdr()
645 int preview_len = ctx->vsc_options.vso_preview_len; in vs_icap_create_respmod_hdr()
650 ctx->vsc_result->vsr_rc = VS_RESULT_ERROR; in vs_icap_create_respmod_hdr()
658 ctx->vsc_host, ctx->vsc_port, VS_SERVICE_NAME, VS_ICAP_VER); in vs_icap_create_respmod_hdr()
698 tlen = vs_icap_uri_encode(hbufp, hbufsp, ctx->vsc_fname); in vs_icap_create_respmod_hdr()
741 vs_icap_read_respmod_resp(vs_scan_ctx_t *ctx) in vs_icap_read_respmod_resp() argument
743 if (vs_icap_read_resp_code(ctx) < 0) in vs_icap_read_respmod_resp()
746 if (vs_icap_read_hdr(ctx, resp_hdrs, VS_RESP_HDR_MAX) < 0) in vs_icap_read_respmod_resp()
749 if (ctx->vsc_info.vsi_icap_rc == VS_RESP_CONTINUE) { in vs_icap_read_respmod_resp()
751 if ((ctx->vsc_info.vsi_res_hdr) || in vs_icap_read_respmod_resp()
752 (ctx->vsc_info.vsi_res_body)) { in vs_icap_read_respmod_resp()
758 if (vs_icap_set_scan_result(ctx) < 0) in vs_icap_read_respmod_resp()
761 if (ctx->vsc_info.vsi_res_hdr) { in vs_icap_read_respmod_resp()
762 if (vs_icap_read_encap_hdr(ctx) < 0) in vs_icap_read_respmod_resp()
766 if (ctx->vsc_info.vsi_res_body) in vs_icap_read_respmod_resp()
767 vs_icap_read_encap_data(ctx); in vs_icap_read_respmod_resp()
768 else if (ctx->vsc_result->vsr_rc == VS_RESULT_CLEANED) in vs_icap_read_respmod_resp()
769 ctx->vsc_result->vsr_rc = VS_RESULT_FORBIDDEN; in vs_icap_read_respmod_resp()
782 vs_icap_read_resp_code(vs_scan_ctx_t *ctx) in vs_icap_read_resp_code() argument
784 char *buf = ctx->vsc_info.vsi_recv_buf; in vs_icap_read_resp_code()
791 if ((retval = vs_icap_readline(ctx, buf, VS_BUF_SZ)) < 0) in vs_icap_read_resp_code()
797 &ctx->vsc_info.vsi_icap_rc); in vs_icap_read_resp_code()
820 vs_icap_read_hdr(vs_scan_ctx_t *ctx, vs_hdr_t hdrs[], int num_hdrs) in vs_icap_read_hdr() argument
822 char *buf = ctx->vsc_info.vsi_recv_buf; in vs_icap_read_hdr()
830 if ((retval = vs_icap_readline(ctx, buf, VS_BUF_SZ)) < 0) in vs_icap_read_hdr()
841 hdrs[i].vsh_func(ctx, hdrs[i].vsh_id, val); in vs_icap_read_hdr()
861 vs_icap_set_scan_result(vs_scan_ctx_t *ctx) in vs_icap_set_scan_result() argument
864 vs_result_t *result = ctx->vsc_result; in vs_icap_set_scan_result()
867 ctx->vsc_options.vso_scanstamp, sizeof (vs_scanstamp_t)); in vs_icap_set_scan_result()
869 switch (ctx->vsc_info.vsi_icap_rc) { in vs_icap_set_scan_result()
905 vs_icap_resp_str(ctx->vsc_info.vsi_icap_rc)); in vs_icap_set_scan_result()
937 vs_icap_read_encap_hdr(vs_scan_ctx_t *ctx) in vs_icap_read_encap_hdr() argument
939 char *buf = ctx->vsc_info.vsi_recv_buf; in vs_icap_read_encap_hdr()
945 if ((retval = vs_icap_readline(ctx, buf, VS_BUF_SZ)) < 0) in vs_icap_read_encap_hdr()
954 &ctx->vsc_info.vsi_http_rc); in vs_icap_read_encap_hdr()
955 ctx->vsc_info.vsi_html_content = B_TRUE; in vs_icap_read_encap_hdr()
958 if (ctx->vsc_result->vsr_rc == VS_RESULT_CLEAN) { in vs_icap_read_encap_hdr()
959 if ((ctx->vsc_info.vsi_icap_rc == VS_RESP_OK) && in vs_icap_read_encap_hdr()
960 (ctx->vsc_info.vsi_http_rc == VS_RESP_OK)) { in vs_icap_read_encap_hdr()
961 ctx->vsc_result->vsr_rc = in vs_icap_read_encap_hdr()
964 ctx->vsc_result->vsr_rc = in vs_icap_read_encap_hdr()
972 &ctx->vsc_info.vsi_content_len); in vs_icap_read_encap_hdr()
1002 vs_icap_read_encap_data(vs_scan_ctx_t *ctx) in vs_icap_read_encap_data() argument
1004 if (ctx->vsc_result->vsr_rc == VS_RESULT_CLEANED) { in vs_icap_read_encap_data()
1005 ctx->vsc_result->vsr_rc = VS_RESULT_FORBIDDEN; in vs_icap_read_encap_data()
1007 if (!(ctx->vsc_flags & VS_NO_REPAIR)) { in vs_icap_read_encap_data()
1008 if (vs_icap_create_repair_file(ctx) == 0) in vs_icap_read_encap_data()
1009 ctx->vsc_repair = B_TRUE; in vs_icap_read_encap_data()
1017 (void) vs_icap_read_resp_body(ctx); in vs_icap_read_encap_data()
1019 if (ctx->vsc_repair_fd != -1) { in vs_icap_read_encap_data()
1020 (void) close(ctx->vsc_repair_fd); in vs_icap_read_encap_data()
1022 if (ctx->vsc_repair) { in vs_icap_read_encap_data()
1024 ctx->vsc_result->vsr_rc = VS_RESULT_CLEANED; in vs_icap_read_encap_data()
1027 (void) unlink(ctx->vsc_repair_fname); in vs_icap_read_encap_data()
1039 vs_icap_create_repair_file(vs_scan_ctx_t *ctx) in vs_icap_create_repair_file() argument
1041 if (ctx->vsc_repair_fname == NULL) in vs_icap_create_repair_file()
1044 if ((ctx->vsc_repair_fd = open(ctx->vsc_repair_fname, in vs_icap_create_repair_file()
1064 vs_icap_read_resp_body(vs_scan_ctx_t *ctx) in vs_icap_read_resp_body() argument
1068 while ((retval = vs_icap_read_body_chunk(ctx)) > 0) in vs_icap_read_resp_body()
1072 ctx->vsc_repair = B_FALSE; in vs_icap_read_resp_body()
1090 vs_icap_read_body_chunk(vs_scan_ctx_t *ctx) in vs_icap_read_body_chunk() argument
1092 char *lbuf = ctx->vsc_info.vsi_recv_buf; in vs_icap_read_body_chunk()
1097 if ((vs_icap_readline(ctx, lbuf, VS_BUF_SZ) < 0) || in vs_icap_read_body_chunk()
1107 if ((rsize = vs_icap_read(ctx->vsc_sockfd, lbuf, rsize)) <= 0) in vs_icap_read_body_chunk()
1110 if (ctx->vsc_repair) { in vs_icap_read_body_chunk()
1111 if (vs_icap_write(ctx->vsc_repair_fd, lbuf, rsize) < 0) in vs_icap_read_body_chunk()
1112 ctx->vsc_repair = B_FALSE; in vs_icap_read_body_chunk()
1119 if (vs_icap_readline(ctx, lbuf, VS_BUF_SZ) < 0) in vs_icap_read_body_chunk()
1207 vs_icap_send_chunk(vs_scan_ctx_t *ctx, int chunk_len) in vs_icap_send_chunk() argument
1209 char *hdr = ctx->vsc_info.vsi_send_hdr; in vs_icap_send_chunk()
1210 char *dbuf = ctx->vsc_info.vsi_send_buf; in vs_icap_send_chunk()
1219 if ((nread = vs_icap_read(ctx->vsc_fd, dbuf, chunk_len)) < 0) in vs_icap_send_chunk()
1231 if (vs_icap_write(ctx->vsc_sockfd, hdr, in vs_icap_send_chunk()
1250 vs_icap_send_termination(vs_scan_ctx_t *ctx) in vs_icap_send_termination() argument
1252 if (vs_icap_write(ctx->vsc_sockfd, VS_TERMINATION, in vs_icap_send_termination()
1270 vs_icap_readline(vs_scan_ctx_t *ctx, char *buf, int buflen) in vs_icap_readline() argument
1278 retval = recv(ctx->vsc_sockfd, &c, 1, 0); in vs_icap_readline()
1353 vs_icap_resp_violations(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_resp_violations() argument
1359 ctx->vsc_result->vsr_nviolations = in vs_icap_resp_violations()
1362 ctx->vsc_info.vsi_threat_hdr = VS_RESP_X_VIOLATIONS; in vs_icap_resp_violations()
1365 if ((rv = vs_icap_resp_violation_rec(ctx, i)) < 0) in vs_icap_resp_violations()
1383 vs_icap_resp_violation_rec(vs_scan_ctx_t *ctx, int vr_idx) in vs_icap_resp_violation_rec() argument
1387 char *buf = ctx->vsc_info.vsi_recv_buf; in vs_icap_resp_violation_rec()
1391 vr = &ctx->vsc_result->vsr_vrec[vr_idx]; in vs_icap_resp_violation_rec()
1397 if ((retval = vs_icap_readline(ctx, buf, VS_BUF_SZ)) < 0) in vs_icap_resp_violation_rec()
1431 vs_icap_opt_value(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_opt_value() argument
1444 ctx->vsc_options.vso_preview_len = x; in vs_icap_opt_value()
1449 ctx->vsc_options.vso_req_time = -1; in vs_icap_opt_value()
1457 ctx->vsc_options.vso_ttl = val; in vs_icap_opt_value()
1458 ctx->vsc_options.vso_req_time = time(0); in vs_icap_opt_value()
1462 (void) sscanf(line, "%d", &ctx->vsc_options.vso_allow); in vs_icap_opt_value()
1466 (void) strlcpy(ctx->vsc_options.vso_service, line, in vs_icap_opt_value()
1471 (void) strlcpy(ctx->vsc_options.vso_defninfo, line, in vs_icap_opt_value()
1477 ctx->vsc_options.vso_respmod = 1; in vs_icap_opt_value()
1482 ctx->vsc_options.vso_scanstamp); in vs_icap_opt_value()
1503 vs_icap_resp_istag(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_resp_istag() argument
1505 vs_icap_istag_to_scanstamp(line, ctx->vsc_result->vsr_scanstamp); in vs_icap_resp_istag()
1509 if (vs_icap_compare_se(ctx->vsc_idx, in vs_icap_resp_istag()
1510 ctx->vsc_host, ctx->vsc_port) == 0) { in vs_icap_resp_istag()
1511 if (strcmp(vs_options[ctx->vsc_idx].vso_scanstamp, in vs_icap_resp_istag()
1512 ctx->vsc_result->vsr_scanstamp) != 0) { in vs_icap_resp_istag()
1513 (void) strlcpy(vs_options[ctx->vsc_idx].vso_scanstamp, in vs_icap_resp_istag()
1514 ctx->vsc_result->vsr_scanstamp, in vs_icap_resp_istag()
1561 vs_icap_opt_ext(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_opt_ext() argument
1563 vs_options_t *opt = &ctx->vsc_options; in vs_icap_opt_ext()
1609 vs_icap_resp_infection(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_resp_infection() argument
1654 if ((ctx->vsc_result->vsr_nviolations == 0) || in vs_icap_resp_infection()
1655 (ctx->vsc_info.vsi_threat_hdr < VS_RESP_X_INFECTION)) { in vs_icap_resp_infection()
1656 vr = &ctx->vsc_result->vsr_vrec[0]; in vs_icap_resp_infection()
1660 ctx->vsc_result->vsr_nviolations = 1; in vs_icap_resp_infection()
1662 ctx->vsc_info.vsi_threat_hdr = VS_RESP_X_INFECTION; in vs_icap_resp_infection()
1679 vs_icap_resp_virus_id(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_resp_virus_id() argument
1683 if (ctx->vsc_result->vsr_nviolations == 0) { in vs_icap_resp_virus_id()
1684 vr = &ctx->vsc_result->vsr_vrec[0]; in vs_icap_resp_virus_id()
1688 ctx->vsc_result->vsr_nviolations = 1; in vs_icap_resp_virus_id()
1690 ctx->vsc_info.vsi_threat_hdr = VS_RESP_X_VIRUS_ID; in vs_icap_resp_virus_id()
1704 vs_icap_resp_encap(vs_scan_ctx_t *ctx, int hdr_id, char *line) in vs_icap_resp_encap() argument
1707 ctx->vsc_info.vsi_res_hdr = B_TRUE; in vs_icap_resp_encap()
1710 ctx->vsc_info.vsi_res_body = B_TRUE; in vs_icap_resp_encap()
1803 vs_icap_update_options(vs_scan_ctx_t *ctx) in vs_icap_update_options() argument
1805 int idx = ctx->vsc_idx; in vs_icap_update_options()
1809 if (vs_icap_compare_se(idx, ctx->vsc_host, ctx->vsc_port) == 0) { in vs_icap_update_options()
1811 vs_icap_copy_options(&vs_options[idx], &ctx->vsc_options); in vs_icap_update_options()
1833 char *tmp, *ctx; in vs_icap_make_strvec() local
1847 for (tmp = strtok_r(vec->iov_base, sep, &ctx); tmp; in vs_icap_make_strvec()
1848 tmp = strtok_r(0, sep, &ctx)) { in vs_icap_make_strvec()