Mercurial > hg > nginx-quic
comparison src/mail/ngx_mail_auth_http_module.c @ 1512:b19709ee1f52 stable-0.5
r1406 merge:
escape " ", "%", and %00-%1F in login and password
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 22 Sep 2007 19:15:01 +0000 |
parents | fa67e7914b70 |
children | ed9cd1702f7a |
comparison
equal
deleted
inserted
replaced
1511:0c5c8ab56a44 | 1512:b19709ee1f52 |
---|---|
1249 | 1249 |
1250 | 1250 |
1251 static ngx_int_t | 1251 static ngx_int_t |
1252 ngx_mail_auth_http_escape(ngx_pool_t *pool, ngx_str_t *text, ngx_str_t *escaped) | 1252 ngx_mail_auth_http_escape(ngx_pool_t *pool, ngx_str_t *text, ngx_str_t *escaped) |
1253 { | 1253 { |
1254 u_char ch, *p; | 1254 u_char *p; |
1255 ngx_uint_t i, n; | 1255 uintptr_t n; |
1256 | 1256 |
1257 n = 0; | 1257 n = ngx_escape_uri(NULL, text->data, text->len, NGX_ESCAPE_MAIL_AUTH); |
1258 | |
1259 for (i = 0; i < text->len; i++) { | |
1260 ch = text->data[i]; | |
1261 | |
1262 if (ch == CR || ch == LF) { | |
1263 n++; | |
1264 } | |
1265 } | |
1266 | 1258 |
1267 if (n == 0) { | 1259 if (n == 0) { |
1268 *escaped = *text; | 1260 *escaped = *text; |
1269 return NGX_OK; | 1261 return NGX_OK; |
1270 } | 1262 } |
1274 p = ngx_palloc(pool, escaped->len); | 1266 p = ngx_palloc(pool, escaped->len); |
1275 if (p == NULL) { | 1267 if (p == NULL) { |
1276 return NGX_ERROR; | 1268 return NGX_ERROR; |
1277 } | 1269 } |
1278 | 1270 |
1271 (void) ngx_escape_uri(p, text->data, text->len, NGX_ESCAPE_MAIL_AUTH); | |
1272 | |
1279 escaped->data = p; | 1273 escaped->data = p; |
1280 | |
1281 for (i = 0; i < text->len; i++) { | |
1282 ch = text->data[i]; | |
1283 | |
1284 if (ch == CR) { | |
1285 *p++ = '%'; | |
1286 *p++ = '0'; | |
1287 *p++ = 'D'; | |
1288 continue; | |
1289 } | |
1290 | |
1291 if (ch == LF) { | |
1292 *p++ = '%'; | |
1293 *p++ = '0'; | |
1294 *p++ = 'A'; | |
1295 continue; | |
1296 } | |
1297 | |
1298 *p++ = ch; | |
1299 } | |
1300 | 1274 |
1301 return NGX_OK; | 1275 return NGX_OK; |
1302 } | 1276 } |
1303 | 1277 |
1304 | 1278 |