ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ngx_encode_base64url


  • To: nginx-ru@xxxxxxxxx
  • Subject: ngx_encode_base64url
  • From: "theromis1" <nginx-forum@xxxxxxxx>
  • Date: Tue, 21 Aug 2012 14:50:14 -0400 (EDT)
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tigger.jlkhosting.com; s=x; h=From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=bkVJlDP7GLjLSVM/S4dC8Vo1EsXBlQ9JQYto1lFHyOM=; b=KDhcsHwVY47LrrQoMTcX/6er7kfstHvQj1yqtd3Ak8jkyjq9UETbEG6n49r5dnWh7irMOLmZ2nn1CXbxmqPX3ubUSdiop1VBwTsOo7rCuQKfLoDGs3skuT8Oi9FKZWqm;

Вопрос предложение навеяное java (
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html#Base64(int,
byte[], boolean) ) 

Есть логика которая добавляет заголовок который потом переходит как часть
урла (с помощью rewrite rules "rewrite ^ http://blah/qwe=$http_my_header;";),
соответственно в нем бинарные данные которые base64 а потом на него делается
urlescape, но поскольку помнится можно делать эти действия urlsafe то можно
все это было бы делать без ескейпинга, тоесть за один проход base64_encode.

Соответственно можно было бы добавить функцию в ngx_string.c которая делала
бы это все безболезненно. Что кто может сказать по данному вопросу? у меня
нарисовался даже вот такой патч, но это только в первом приближении.

--- ngx_string.c.bak    2012-08-21 11:18:22.342532943 -0700
+++ ngx_string.c    2012-08-21 11:39:36.899480335 -0700
@@ -1057,13 +1057,11 @@
 }


-void
-ngx_encode_base64(ngx_str_t *dst, ngx_str_t *src)
+static void
+ngx_encode_base64_internal(ngx_str_t *dst, ngx_str_t *src, const u_char
*basis64, int is_url)
 {
     u_char         *d, *s;
     size_t          len;
-    static u_char   basis64[] =
-           
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

     len = src->len;
     s = src->data;
@@ -1084,20 +1082,40 @@

         if (len == 1) {
             *d++ = basis64[(s[0] & 3) << 4];
-            *d++ = '=';
+            if (!is_url)
+                *d++ = '=';

         } else {
             *d++ = basis64[((s[0] & 3) << 4) | (s[1] >> 4)];
             *d++ = basis64[(s[1] & 0x0f) << 2];
         }

-        *d++ = '=';
+        if (!is_url)
+            *d++ = '=';
     }

     dst->len = d - dst->data;
 }


+void
+ngx_encode_base64(ngx_str_t *dst, ngx_str_t *src)
+{
+    static u_char   basis64[] =
+           
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+    ngx_encode_base64_internal(dst, src, basis64, 0);
+}
+
+
+void
+ngx_encode_base64url(ngx_str_t *dst, ngx_str_t *src)
+{
+    static u_char   basis64[] =
+           
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+    ngx_encode_base64_internal(dst, src, basis64, 1);
+}
+
+
 ngx_int_t
 ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
 {

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,229965,229965#msg-229965

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.