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