WOCGICopyHTTPHeaders
2007/03/30 (Fri) 22:07:46 JST
while (envp && *envp) { char *key, *value; /* 環境変数行をコピー */ key = WOSTRDUP(*envp); for (value = key; *value && !isspace((int)*value) && (*value != '='); value++) {} if (*value) { *value++ = '?0'; /* null terminate 'key' */ } while (*value && (isspace((int)*value) || (*value == '='))) { value++; } /* クライアント証明書の確認を開始 */ if (strcmp((const char *)key, "SSL_CLIENT_CERTIFICATE") == 0 || strcmp((const char *)key, "SSL_SERVER_CERTIFICATE") == 0 ) { value = 0; WOLog(WO_INFO," DROPPING ENV VAR (DUPLICATE) = %s", key); } if (strcmp((const char *)key, "SSL_CLIENT_CERT") == 0 || strcmp((const char *)key, "SSL_SERVER_CERT") == 0) { value = make_cert_one_line(value); //WOLog(WO_INFO," PASSING %s = %s", key, value); } /* クライアント証明書の確認を終了 */ if (key && *key && value && *value) { /* キーと値を指定してコピーする */ /* バッファ中のキーと値が鍵交換によって置換される可能性がある */ req_addHeader(req, key, value, STR_COPYKEY|STR_COPYVALUE); } /* クライアント証明書の確認を開始 */ if (freeValueNeeded) { free(value); freeValueNeeded=0; } /* クライアント証明書の確認を終了 */ WOFREE(key); envp++; /* next env variable */ }
アプリケーションに渡すため、環境変数にあるすべてのヘッダをコピーします。 途中いくつかマクロや関数があるので、そこだけチェックしましょう。
WOSTRDUP, WOFREEアダプタには、メモリリークをチェックするためのマクロが定義されています。 デフォルトではメモリリークをチェックするフラグは無効になっていて、それぞれstrdup(), free()となります。 フラグを有効にしても、機能的には同じです。
char *make_cert_one_line(char *value) { char *returnValue = (char *)NULL; int i; int j; if (value) { returnValue = strdup(value); freeValueNeeded=1; for (j=0, i = 0; i < strlen(value);i++) { if (value[i] != '?n') { returnValue[j]= value[i]; j++; } } returnValue[j] = '?0'; // and NULL-terminate } return returnValue; }
BASE64のデータを取り出すため、改行、スペース、タブを除いて文字列をコピーします。 しかし、実際の実装では改行を除いて文字列をコピーするだけです。 コメントには "this will do for now..." とありますが、まあCGIアダプタなんて誰も使わないからいいや、ってことでしょう。
req_addHeader() req_addHeader() (request.c) void req_addHeader(HTTPRequest *req, const char *key, const char *value, int flags) { const char *hdrkey; hdrkey = req_AddHeader_common(req, key, value); st_add((strtbl *)req->headers, hdrkey, value, flags); return; }
Inverse Pages: WOCGIAdaptor