/[mailutils]/mailutils/auth/gsasl.c
ViewVC logotype

Diff of /mailutils/auth/gsasl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by gray, Thu Aug 28 19:34:42 2003 UTC revision 1.7 by gray, Thu Aug 28 21:53:50 2003 UTC
# Line 96  _gsasl_destroy (stream_t stream) Line 96  _gsasl_destroy (stream_t stream)
96  {  {
97    struct _gsasl_stream *s = stream_get_owner (stream);    struct _gsasl_stream *s = stream_get_owner (stream);
98    _auth_lb_destroy (&s->lb);    _auth_lb_destroy (&s->lb);
   s->buffer = NULL;  
99  }  }
100    
101  static int  static int
# Line 108  _gsasl_readline (stream_t stream, char * Line 107  _gsasl_readline (stream_t stream, char *
107    size_t len, sz;    size_t len, sz;
108    char *bufp;    char *bufp;
109        
110    if (_auth_lb_level (&s->lb))    if (_auth_lb_level (s->lb))
111      {      {
112        len = _auth_lb_readline (s->lb, optr, osize-1);        len = _auth_lb_readline (s->lb, optr, osize-1);
113        optr[len] = 0;        optr[len] = 0;
# Line 130  _gsasl_readline (stream_t stream, char * Line 129  _gsasl_readline (stream_t stream, char *
129            return errno;            return errno;
130          }          }
131    
132        rc = _auth_lb_grow (s, buf, sz);        rc = _auth_lb_grow (s->lb, buf, sz);
133        if (rc)        if (rc)
134          return rc;          return rc;
135    
136        len = UINT_MAX; /* override the bug in libgsasl */        len = UINT_MAX; /* override the bug in libgsasl */
137        rc = gsasl_decode (s->sess_ctx, s->buffer, s->level, NULL, &len);        rc = gsasl_decode (s->sess_ctx,
138                             _auth_lb_data (s->lb),
139                             _auth_lb_level (s->lb),
140                             NULL, &len);
141      }      }
142    while (rc == GSASL_NEEDS_MORE);    while (rc == GSASL_NEEDS_MORE);
143    
# Line 162  _gsasl_readline (stream_t stream, char * Line 164  _gsasl_readline (stream_t stream, char *
164    if (len > osize)    if (len > osize)
165      {      {
166        memcpy (optr, bufp, osize);        memcpy (optr, bufp, osize);
167        _auth_lb_drop (s);        _auth_lb_drop (s->lb);
168        _auth_lb_grow (s, bufp + osize, len - osize);        _auth_lb_grow (s->lb, bufp + osize, len - osize);
169        len = osize;        len = osize;
170      }      }
171    else    else
172      {      {
173        _auth_lb_drop (s);        _auth_lb_drop (s->lb);
174        memcpy (optr, bufp, len);        memcpy (optr, bufp, len);
175      }      }
176        
# Line 181  _gsasl_readline (stream_t stream, char * Line 183  _gsasl_readline (stream_t stream, char *
183  }  }
184    
185  int  int
186  write_chunk (struct _gsasl_stream *s, char *start, char *end)  write_chunk (void *data, char *start, char *end)
187  {  {
188      struct _gsasl_stream *s = data;
189    size_t chunk_size = end - start + 1;    size_t chunk_size = end - start + 1;
190    size_t len;    size_t len;
191    size_t wrsize;    size_t wrsize;
# Line 224  _gsasl_write (stream_t stream, const cha Line 227  _gsasl_write (stream_t stream, const cha
227    int rc;    int rc;
228    struct _gsasl_stream *s = stream_get_owner (stream);    struct _gsasl_stream *s = stream_get_owner (stream);
229        
230    rc = _auth_lb_grow (s, iptr, isize);    rc = _auth_lb_grow (s->lb, iptr, isize);
231    if (rc)    if (rc)
232      return rc;      return rc;
233    
234    if (s->level > 2)    return _auth_lb_writelines (s->lb, iptr, isize, offset,
235      {                                write_chunk, s, nbytes);      
       char *start, *end;  
         
       for (start = s->buffer, end = strchr (start, '\n');  
            end && end < s->buffer + s->level;  
            start = end + 1, end = strchr (start, '\n'))  
         if (end[-1] == '\r')  
           {  
             int rc = write_chunk (s, start, end);  
             if (rc)  
               return rc;  
           }  
   
       if (start > s->buffer)  
         {  
           if (start < s->buffer + s->level)  
             {  
               int rest = s->buffer + s->level - start + 1;  
               memmove (s->buffer, start, rest);  
               s->level = rest;  
             }  
           else  
             s->level = 0;  
         }  
     }  
     
   if (nbytes)  
     *nbytes = isize;  
         
   return 0;  
236  }  }
237    
238  static int  static int
# Line 297  _gsasl_strerror (stream_t stream, char * Line 271  _gsasl_strerror (stream_t stream, char *
271  }  }
272    
273  int  int
274  _gsasl_get_fd (stream_t stream, int *pfd)  _gsasl_get_fd (stream_t stream, int *pfd, int *pfd2)
275  {  {
276    struct _gsasl_stream *s = stream_get_owner (stream);    struct _gsasl_stream *s = stream_get_owner (stream);
277      if (pfd2)
278        return ENOSYS;
279    *pfd = s->fd;    *pfd = s->fd;
280    return 0;    return 0;
281  }  }

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26