Hi! Bump...
Rivo On 3/6/19 10:57 PM, Rivo Nurges wrote: > Hi! > > > On 3/6/19 10:20 PM, Rivo Nurges wrote: >> On 3/6/19 6:36 PM, Sebastian Benoit wrote: >>>> Does something like this make sense? >>> >>> i think the seperator list needs to include '\t' >>> because https://tools.ietf.org/html/rfc7230#appendix-B includes HTAB. >>> >>> And i dont think you can mix "," with " \t" seperators, >>> because otherwise "Foo Upgrade, Bar" will match. >>> >>> Something more is needed to parse elements of a header. >> >> Oh yeah. I'll work on that. > > So here comes the next version. Works with both spaces and tabs. > > Index: usr.sbin/relayd/relay_http.c > =================================================================== > RCS file: /cvs/src/usr.sbin/relayd/relay_http.c,v > retrieving revision 1.72 > diff -u -p -r1.72 relay_http.c > --- usr.sbin/relayd/relay_http.c 4 Mar 2019 21:25:03 -0000 1.72 > +++ usr.sbin/relayd/relay_http.c 6 Mar 2019 20:53:59 -0000 > @@ -36,6 +36,7 @@ > #include <siphash.h> > #include <imsg.h> > #include <unistd.h> > +#include <ctype.h> > > #include "relayd.h" > #include "http.h" > @@ -166,6 +167,7 @@ relay_read_http(struct bufferevent *bev, > struct relay_http_priv *priv = con->se_priv; > char *line = NULL, *key, *value; > char *urlproto, *host, *path; > + char *valuecopy, *valuepart; > int action, unique, ret; > const char *errstr; > size_t size, linelen; > @@ -399,10 +401,19 @@ relay_read_http(struct bufferevent *bev, > > if (cre->line != 1) { > if (cre->dir == RELAY_DIR_REQUEST) { > - if (strcasecmp("Connection", key) == 0 && > - strcasecmp("Upgrade", value) == 0) > - priv->http_upgrade_req |= > - HTTP_CONNECTION_UPGRADE; > + if (strcasecmp("Connection", key) == 0) { > + valuecopy = strdup(value); > + while ((valuepart = strsep(&valuecopy, > + ",")) != NULL) { > + while (isblank(*valuepart)) > + valuepart = &valuepart[1]; > + if (strcasecmp("Upgrade", valuepart) > + == 0) > + priv->http_upgrade_req |= > + HTTP_CONNECTION_UPGRADE; > + } > + free(valuecopy); > + } > if (strcasecmp("Upgrade", key) == 0 && > strcasecmp("websocket", value) == 0) > priv->http_upgrade_req |= > > > begin-base64 644 websocket3.diff > SW5kZXg6IHVzci5zYmluL3JlbGF5ZC9yZWxheV9odHRwLmMKPT09PT09PT09PT09PT09PT09PT09 > PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog > L2N2cy9zcmMvdXNyLnNiaW4vcmVsYXlkL3JlbGF5X2h0dHAuYyx2CnJldHJpZXZpbmcgcmV2aXNp > b24gMS43MgpkaWZmIC11IC1wIC1yMS43MiByZWxheV9odHRwLmMKLS0tIHVzci5zYmluL3JlbGF5 > ZC9yZWxheV9odHRwLmMJNCBNYXIgMjAxOSAyMToyNTowMyAtMDAwMAkxLjcyCisrKyB1c3Iuc2Jp > bi9yZWxheWQvcmVsYXlfaHR0cC5jCTYgTWFyIDIwMTkgMjA6NTM6NTkgLTAwMDAKQEAgLTM2LDYg > KzM2LDcgQEAKICNpbmNsdWRlIDxzaXBoYXNoLmg+CiAjaW5jbHVkZSA8aW1zZy5oPgogI2luY2x1 > ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CiAKICNpbmNsdWRlICJyZWxheWQuaCIK > ICNpbmNsdWRlICJodHRwLmgiCkBAIC0xNjYsNiArMTY3LDcgQEAgcmVsYXlfcmVhZF9odHRwKHN0 > cnVjdCBidWZmZXJldmVudCAqYmV2LAogCXN0cnVjdCByZWxheV9odHRwX3ByaXYJKnByaXYgPSBj > b24tPnNlX3ByaXY7CiAJY2hhcgkJCSpsaW5lID0gTlVMTCwgKmtleSwgKnZhbHVlOwogCWNoYXIJ > CQkqdXJscHJvdG8sICpob3N0LCAqcGF0aDsKKwljaGFyCQkJKnZhbHVlY29weSwgKnZhbHVlcGFy > dDsKIAlpbnQJCQkgYWN0aW9uLCB1bmlxdWUsIHJldDsKIAljb25zdCBjaGFyCQkqZXJyc3RyOwog > CXNpemVfdAkJCSBzaXplLCBsaW5lbGVuOwpAQCAtMzk5LDEwICs0MDEsMTkgQEAgcmVsYXlfcmVh > ZF9odHRwKHN0cnVjdCBidWZmZXJldmVudCAqYmV2LAogCiAJCWlmIChjcmUtPmxpbmUgIT0gMSkg > ewogCQkJaWYgKGNyZS0+ZGlyID09IFJFTEFZX0RJUl9SRVFVRVNUKSB7Ci0JCQkJaWYgKHN0cmNh > c2VjbXAoIkNvbm5lY3Rpb24iLCBrZXkpID09IDAgJiYKLQkJCQkgICAgc3RyY2FzZWNtcCgiVXBn > cmFkZSIsIHZhbHVlKSA9PSAwKQotCQkJCQlwcml2LT5odHRwX3VwZ3JhZGVfcmVxIHw9Ci0JCQkJ > CSAgICBIVFRQX0NPTk5FQ1RJT05fVVBHUkFERTsKKwkJCQlpZiAoc3RyY2FzZWNtcCgiQ29ubmVj > dGlvbiIsIGtleSkgPT0gMCkgeworCQkJCSAgICB2YWx1ZWNvcHkgPSBzdHJkdXAodmFsdWUpOwor > CQkJCSAgICB3aGlsZSAoKHZhbHVlcGFydCA9IHN0cnNlcCgmdmFsdWVjb3B5LAorCQkJCQkiLCIp > KSAhPSBOVUxMKSB7CisJCQkJCXdoaWxlIChpc2JsYW5rKCp2YWx1ZXBhcnQpKQorCQkJCQkgICAg > dmFsdWVwYXJ0ID0gJnZhbHVlcGFydFsxXTsKKwkJCQkgICAgCWlmIChzdHJjYXNlY21wKCJVcGdy > YWRlIiwgdmFsdWVwYXJ0KQorCQkJCQkgICAgPT0gMCkKKwkJCQkJICAgIHByaXYtPmh0dHBfdXBn > cmFkZV9yZXEgfD0KKwkJCQkJICAgIAlIVFRQX0NPTk5FQ1RJT05fVVBHUkFERTsKKwkJCQkgICAg > fQorCQkJCSAgICBmcmVlKHZhbHVlY29weSk7CisJCQkJfQogCQkJCWlmIChzdHJjYXNlY21wKCJV > cGdyYWRlIiwga2V5KSA9PSAwICYmCiAJCQkJICAgIHN0cmNhc2VjbXAoIndlYnNvY2tldCIsIHZh > bHVlKSA9PSAwKQogCQkJCQlwcml2LT5odHRwX3VwZ3JhZGVfcmVxIHw9Cg== > ==== >