#include "json-istream.h"
#include "istream.h"
#include "auth-gs2.h"
+#include "sasl-oauth2.h"
#include "dsasl-client-private.h"
struct oauthbearer_dsasl_client {
*error_r = "password not set";
return DSASL_CLIENT_RESULT_ERR_INTERNAL;
}
+ if (!sasl_oauth2_kvpair_check_value(_client->password)) {
+ *error_r = "password contains unsupported characters";
+ return DSASL_CLIENT_RESULT_ERR_INTERNAL;
+ }
struct auth_gs2_header gs2_header = {
.authzid = _client->set.authid,
*error_r = "password not set";
return DSASL_CLIENT_RESULT_ERR_INTERNAL;
}
+ if (strchr(_client->password, 0x01) != NULL) {
+ *error_r = "password contains unsupported characters";
+ return DSASL_CLIENT_RESULT_ERR_INTERNAL;
+ }
str = str_new(_client->pool, 64);
*end_r = p;
return 0;
}
+
+bool sasl_oauth2_kvpair_check_value(const char *value)
+{
+ const unsigned char *p = (const unsigned char *)value;
+ const unsigned char *pend = p + strlen(value);
+
+ while (p < pend && (char_lookup[*p] & value_mask) != 0x00)
+ p++;
+
+ return (p == pend);
+}
test_assert_strcmp(key, test->key);
test_assert_strcmp(value, test->value);
+
+ test_assert(sasl_oauth2_kvpair_check_value(value));
}
static void test_kvpair_valid(void)