@@ -1592,7 +1592,7 @@ ngx_http_upload_cleanup(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1592
1592
1593
1593
static ngx_uint_t /* {{{ ngx_http_upload_add_slave_conf */
1594
1594
ngx_http_upload_add_slave_conf (ngx_str_t * content_type , ngx_array_t * * content_type_map ,
1595
- ngx_http_upload_loc_conf_t * ulcf , ngx_pool_t * pool )
1595
+ ngx_http_core_loc_conf_t * clcf , ngx_pool_t * pool )
1596
1596
{
1597
1597
ngx_upload_content_type_map_t * ctmap ;
1598
1598
@@ -1610,7 +1610,7 @@ ngx_http_upload_add_slave_conf(ngx_str_t *content_type, ngx_array_t **content_ty
1610
1610
}
1611
1611
1612
1612
ctmap -> content_type = * content_type ;
1613
- ctmap -> conf = ulcf ;
1613
+ ctmap -> conf = clcf ;
1614
1614
1615
1615
return NGX_OK ;
1616
1616
} /* }}} */
@@ -1691,21 +1691,21 @@ ngx_http_upload_filter_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1691
1691
1692
1692
ulcf -> parent = pulcf ;
1693
1693
1694
- for (i = 1 ; i < cf -> args -> nelts ; i ++ ) {
1695
- if (ngx_http_upload_add_slave_conf (& value [i ], & pulcf -> content_type_map ,
1696
- ulcf , cf -> pool ) != NGX_OK )
1697
- {
1698
- return NGX_CONF_ERROR ;
1699
- }
1700
- }
1701
-
1702
1694
pclcf = pctx -> loc_conf [ngx_http_core_module .ctx_index ];
1703
1695
1704
1696
clcf = ctx -> loc_conf [ngx_http_core_module .ctx_index ];
1705
1697
clcf -> loc_conf = ctx -> loc_conf ;
1706
1698
clcf -> name = pclcf -> name ;
1707
1699
clcf -> noname = 1 ;
1708
1700
1701
+ for (i = 1 ; i < cf -> args -> nelts ; i ++ ) {
1702
+ if (ngx_http_upload_add_slave_conf (& value [i ], & pulcf -> content_type_map ,
1703
+ clcf , cf -> pool ) != NGX_OK )
1704
+ {
1705
+ return NGX_CONF_ERROR ;
1706
+ }
1707
+ }
1708
+
1709
1709
if (ngx_http_add_location (cf , & pclcf -> locations , clcf ) != NGX_OK ) {
1710
1710
return NGX_CONF_ERROR ;
1711
1711
}
@@ -1741,7 +1741,7 @@ ngx_http_upload_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1741
1741
return NGX_CONF_OK ;
1742
1742
} /* }}} */
1743
1743
1744
- ngx_upload_field_filter_t * /* {{{ ngx_upload_get_next_content_filter */
1744
+ ngx_upload_field_filter_t * /* {{{ ngx_upload_get_next_field_filter */
1745
1745
ngx_upload_get_next_field_filter (ngx_http_upload_ctx_t * ctx ) {
1746
1746
return & ngx_write_field_filter ;
1747
1747
} /* }}} */
@@ -2314,27 +2314,36 @@ static ngx_int_t /* {{{ ngx_upload_set_content_filter */
2314
2314
ngx_upload_set_content_filter (ngx_http_upload_ctx_t * u , ngx_str_t * content_type )
2315
2315
{
2316
2316
ngx_uint_t i ;
2317
- ngx_http_upload_loc_conf_t * ulcf ;
2317
+ ngx_http_upload_loc_conf_t * pulcf , * ulcf ;
2318
2318
ngx_upload_content_type_map_t * ulctm ;
2319
2319
2320
- ulcf = ngx_http_get_module_loc_conf (u -> request , ngx_http_upload_module );
2320
+ pulcf = ngx_http_get_module_loc_conf (u -> request , ngx_http_upload_module );
2321
+
2322
+ if (pulcf -> parent ) {
2323
+ pulcf = pulcf -> parent ;
2324
+ }
2321
2325
2322
2326
u -> current_content_filter_idx = 0 ;
2323
2327
2324
- if (content_type -> len && ulcf -> content_type_map != NULL ) {
2325
- for (i = 0 ; i < ulcf -> content_type_map -> nelts ; i ++ ) {
2326
- ulctm = ulcf -> content_type_map -> elts ;
2328
+ if (content_type -> len && pulcf -> content_type_map != NULL ) {
2329
+ ulctm = pulcf -> content_type_map -> elts ;
2330
+ for (i = 0 ; i < pulcf -> content_type_map -> nelts ; i ++ ) {
2331
+
2332
+ if (ngx_strncasecmp (ulctm [i ].content_type .data , content_type -> data , content_type -> len ) == 0 ) {
2333
+ /*
2334
+ * Got to slave configuration
2335
+ */
2336
+ u -> request -> loc_conf = ulctm [i ].conf -> loc_conf ;
2327
2337
2328
- ulctm += i ;
2338
+ ulcf = ngx_http_get_module_loc_conf ( u -> request , ngx_http_upload_module ) ;
2329
2339
2330
- if (ngx_strcmp (ulctm -> content_type .data , content_type -> data ) == 0 ) {
2331
- u -> current_content_filter_chain = ulctm -> conf -> content_filters ;
2340
+ u -> current_content_filter_chain = ulcf -> content_filters ;
2332
2341
return NGX_OK ;
2333
2342
}
2334
2343
}
2335
2344
}
2336
2345
2337
- u -> current_content_filter_chain = ulcf -> content_filters ;
2346
+ u -> current_content_filter_chain = pulcf -> content_filters ;
2338
2347
2339
2348
return NGX_OK ;
2340
2349
} /* }}} */
@@ -2358,6 +2367,8 @@ static ngx_int_t upload_start_part(ngx_http_upload_ctx_t *upload_ctx) { /* {{{ *
2358
2367
upload_ctx -> content_type = content_type ;
2359
2368
}
2360
2369
2370
+ upload_ctx -> original_loc_conf = upload_ctx -> request -> loc_conf ;
2371
+
2361
2372
ngx_upload_set_content_filter (upload_ctx , & upload_ctx -> content_type );
2362
2373
2363
2374
cflt = ngx_upload_get_next_content_filter (upload_ctx );
@@ -2391,6 +2402,8 @@ static void upload_finish_part(ngx_http_upload_ctx_t *upload_ctx) { /* {{{ */
2391
2402
upload_discard_part_attributes (upload_ctx );
2392
2403
2393
2404
upload_ctx -> discard_data = 0 ;
2405
+
2406
+ upload_ctx -> request -> loc_conf = upload_ctx -> original_loc_conf ;
2394
2407
} /* }}} */
2395
2408
2396
2409
static void upload_abort_part (ngx_http_upload_ctx_t * upload_ctx ) { /* {{{ */
@@ -2400,6 +2413,8 @@ static void upload_abort_part(ngx_http_upload_ctx_t *upload_ctx) { /* {{{ */
2400
2413
upload_discard_part_attributes (upload_ctx );
2401
2414
2402
2415
upload_ctx -> discard_data = 0 ;
2416
+
2417
+ upload_ctx -> request -> loc_conf = upload_ctx -> original_loc_conf ;
2403
2418
} /* }}} */
2404
2419
2405
2420
static void upload_flush_output_buffer (ngx_http_upload_ctx_t * upload_ctx ) { /* {{{ */
0 commit comments