static liAction* openssl_setenv_create(liServer *srv, liWorker *wrk, liPlugin* p, liValue *val, gpointer userdata) { guint i; liValue *v; guint params = 0; UNUSED(srv); UNUSED(wrk); UNUSED(p); UNUSED(userdata); if (val && val->type == LI_VALUE_STRING) li_value_wrap_in_list(val); if (!val || val->type != LI_VALUE_LIST) { ERROR(srv, "%s", openssl_setenv_config_error); return NULL; } for (i = 0; i < val->data.list->len; i++) { v = g_array_index(val->data.list, liValue*, i); if (v->type != LI_VALUE_STRING) { ERROR(srv, "%s", openssl_setenv_config_error); return NULL; } if (li_strncase_equal(v->data.string, CONST_STR_LEN("client"))) { params |= SE_CLIENT; } else if (li_strncase_equal(v->data.string, CONST_STR_LEN("client-cert"))) { params |= SE_CLIENT_CERT; } else if (li_strncase_equal(v->data.string, CONST_STR_LEN("server"))) { params |= SE_SERVER; } else if (li_strncase_equal(v->data.string, CONST_STR_LEN("server-cert"))) { params |= SE_SERVER_CERT; } else { ERROR(srv, "%s", openssl_setenv_config_error); return NULL; } } return li_action_new_function(openssl_setenv, NULL, NULL, GUINT_TO_POINTER(params)); }
static void fastcgi_send_env(liVRequest *vr, fastcgi_connection *fcon) { GByteArray *buf = g_byte_array_sized_new(0); liEnvironmentDup *envdup; envdup = li_environment_make_dup(&vr->env); fastcgi_env_create(vr, envdup, buf); { GList *i; GString *tmp = vr->wrk->tmp_str; for (i = vr->request.headers->entries.head; NULL != i; i = i->next) { liHttpHeader *h = (liHttpHeader*) i->data; const GString hkey = li_const_gstring(h->data->str, h->keylen); g_string_truncate(tmp, 0); if (!li_strncase_equal(&hkey, CONST_STR_LEN("CONTENT-TYPE"))) { g_string_append_len(tmp, CONST_STR_LEN("HTTP_")); } g_string_append_len(tmp, h->data->str, h->keylen); fix_header_name(tmp); fastcgi_env_add(buf, envdup, GSTR_LEN(tmp), h->data->str + h->keylen+2, h->data->len - (h->keylen+2)); } } { GHashTableIter i; gpointer key, val; g_hash_table_iter_init(&i, envdup->table); while (g_hash_table_iter_next(&i, &key, &val)) { append_key_value_pair(buf, GSTR_LEN((GString*) key), GSTR_LEN((GString*) val)); } } li_environment_dup_free(envdup); stream_send_bytearr(fcon->fcgi_out, FCGI_PARAMS, fcon->requestid, buf); stream_send_fcgi_record(fcon->fcgi_out, FCGI_PARAMS, fcon->requestid, 0); }