]> CyberLeo.Net >> Repos - CDN/cdn-ports-overlay.git/blob - cdn/ports/net-im/mu-conference/files/patch-svn-67-77
net/tinyfugue-unicode: Fix build errors
[CDN/cdn-ports-overlay.git] / cdn / ports / net-im / mu-conference / files / patch-svn-67-77
1 Index: include/lib.h
2 ===================================================================
3 --- include/lib.h       (revision 67)
4 +++ include/lib.h       (revision 77)
5 @@ -1,6 +1,7 @@
6  
7  #include <string.h>
8  #include <stdlib.h>
9 +#include <stdint.h>
10  #include <sys/types.h>
11  #include <stdio.h>
12  #include <setjmp.h>
13 @@ -101,6 +102,7 @@
14  char *j_strdup(const char *str); /* provides NULL safe strdup wrapper */
15  char *j_strcat(char *dest, char *txt); /* strcpy() clone */
16  int j_strcmp(const char *a, const char *b); /* provides NULL safe strcmp wrapper */
17 +int j_strcasecmp(const char *a, const char *b); /* provides NULL safe strcasecmp wrapper */
18  int j_strncmp(const char *a, const char *b, int i); /* provides NULL safe strncmp wrapper */
19  int j_strncasecmp(const char *a, const char *b, int i); /* provides NULL safe strncasecmp wrapper */
20  int j_strlen(const char *a); /* provides NULL safe strlen wrapper */
21 @@ -299,10 +301,10 @@
22  
23  
24  typedef struct {
25 -  unsigned long H[5];
26 -  unsigned long W[80];
27 +  uint32_t H[5];
28 +  uint32_t W[80];
29    int lenW;
30 -  unsigned long sizeHi,sizeLo;
31 +  uint32_t sizeHi,sizeLo;
32  } j_SHA_CTX;
33  
34  
35 Index: include/conference.h
36 ===================================================================
37 --- include/conference.h        (revision 67)
38 +++ include/conference.h        (revision 77)
39 @@ -258,6 +258,7 @@
40                                                         /* Adds extended presence info to a presence packet */
41  void add_status_code(xmlnode presence, char *status); /* add a muc status code to a presence stanza */
42  void add_room_status_codes(xmlnode presence, cnr room); /* add room specific status codes (logging, anonymous, ...) */ 
43 +int check_affiliation(GHashTable * ght, jid user, char * affiliation_name); /* Check if user as a particular affiliation */
44  int is_sadmin(cni master, jid user);                   /* Check if user is server admin */
45  int is_owner(cnr room, jid user);                      /* Check if user is room owner */
46  int is_admin(cnr room, jid user);                      /* Check if user is room admin */
47 Index: src/utils.c
48 ===================================================================
49 --- src/utils.c (revision 67)
50 +++ src/utils.c (revision 77)
51 @@ -136,6 +136,45 @@
52    }
53  }
54  
55 +/* Generic function to check if an user as a particular affiliation */
56 +int check_affiliation(GHashTable * ght, jid user, char * affiliation_name)
57 +{
58 +  char ujid[3072];
59 +
60 +  snprintf(ujid, sizeof(ujid), "%s@%s", user->user, user->server);
61 +
62 +  if(g_hash_table_lookup(ght, ujid) != NULL )
63 +  {
64 +    log_debug(NAME, "[%s] Is %s? >%s< - Yes (case 1)", FZONE, affiliation_name, jid_full(user));
65 +    return 1;
66 +  }
67 +
68 +  if(g_hash_table_lookup(ght, user->server) != NULL )
69 +  {
70 +    log_debug(NAME, "[%s] Is %s? >%s< - Yes (case 2)", FZONE, affiliation_name, jid_full(user));
71 +    return 1;
72 +  }
73 +
74 +  snprintf(ujid, sizeof(ujid), "%s@%s/%s", user->user, user->server, user->resource);
75 +
76 +  if(g_hash_table_lookup(ght, ujid) != NULL )
77 +  {
78 +    log_debug(NAME, "[%s] Is %s? >%s< - Yes (case 3)", FZONE, affiliation_name, jid_full(user));
79 +    return 1;
80 +  }
81 +
82 +  snprintf(ujid, sizeof(ujid), "%s/%s", user->server, user->resource);
83 +
84 +  if(g_hash_table_lookup(ght, ujid) != NULL )
85 +  {
86 +    log_debug(NAME, "[%s] Is %s? >%s< - Yes (case 4)", FZONE, affiliation_name, jid_full(user));
87 +    return 1;
88 +  }
89 +
90 +  log_debug(NAME, "[%s] Is %s? >%s< - No", FZONE, affiliation_name, jid_full(user));
91 +  return 0;
92 +}
93 +
94  /* Is the user a Service Admin? */
95  int is_sadmin(cni master, jid user)
96  {
97 @@ -159,62 +198,46 @@
98  /* Is the user an owner for that room */
99  int is_owner(cnr room, jid user)
100  {
101 -  char ujid[2048];
102 -  char cjid[2048];
103 -
104    if(room == NULL || user == NULL)
105    {
106      log_warn(NAME, "[%s] ERR: Missing variable in is_owner", FZONE);
107      return 0;
108    }
109  
110 -  snprintf(ujid, sizeof(ujid), "%s@%s", user->user, user->server);
111 -  if(room->creator)
112 -  {
113 -    snprintf(cjid, sizeof(cjid), "%s@%s", room->creator->user, room->creator->server);
114 -  }
115 -  else
116 -  {
117 -    snprintf(cjid, sizeof(cjid), "@");
118 -  }
119 -
120    log_debug(NAME, "[%s] Is Owner? >%s<", FZONE, jid_full(user));
121  
122    /* Server admin can override */
123    if(is_sadmin(room->master, user))
124 +  {
125 +    log_debug(NAME, "[%s] Is Owner? >%s< - Yes (service admin)", FZONE, jid_full(user));
126      return 2;
127 -  else if(j_strcmp(cjid, ujid) == 0)
128 +  }
129 +
130 +  if(room->creator && j_strcmp(user->user, room->creator->user) == 0 && j_strcmp(user->server, room->creator->server) == 0)
131 +  {
132 +    log_debug(NAME, "[%s] Is Owner? >%s< - Yes (creator)", FZONE, jid_full(user));
133      return 1;
134 -  else if(g_hash_table_lookup(room->owner, ujid) != NULL )
135 -    return 1;
136 -  else
137 -    return 0;
138 +  }
139  
140 +  return check_affiliation(room->owner, user, "Owner");
141  }
142  
143  /* Is the user in the admin affiliation list for that room */
144  int is_admin(cnr room, jid user)
145  {
146 -  char ujid[2048];
147 -
148    if(room == NULL || user == NULL)
149    {
150      log_warn(NAME, "[%s] ERR: Missing variable in is_admin", FZONE);
151      return 0;
152    }
153  
154 -  snprintf(ujid, sizeof(ujid), "%s@%s", user->user, user->server);
155 -  log_debug(NAME, "[%s] Is Admin? >%s<", FZONE, jid_full(user));
156 -
157    if(is_owner(room, user))
158 +  {
159 +    log_debug(NAME, "[%s] Is Admin? >%s< - Yes (owner)", FZONE, jid_full(user));
160      return 2;
161 +  }
162  
163 -  if(g_hash_table_lookup(room->admin, ujid) != NULL )
164 -    return 1;
165 -  else if(g_hash_table_lookup(room->admin, user->server) != NULL )
166 -    return 1;
167 -  else
168 -    return 0;
169 +  return check_affiliation(room->admin, user, "Admin");
170  }
171  
172  /* Is the user in the moderator role list for that room */
173 @@ -271,16 +294,12 @@
174  /* Is the user in the member affiliation list for that room */
175  int is_member(cnr room, jid user)
176  {
177 -  char ujid[2048];
178 -
179    if(room == NULL || user == NULL)
180    {
181      log_warn(NAME, "[%s] ERR: Missing variable in is_member", FZONE);
182      return 0;
183    }
184  
185 -  snprintf(ujid, sizeof(ujid), "%s@%s", user->user, user->server);
186 -
187    /* Owner is automatically a member */
188    if(is_owner(room, user))
189    {
190 @@ -295,42 +314,19 @@
191      return 1;
192    }
193  
194 -  if(g_hash_table_lookup(room->member, ujid) != NULL )
195 -  {
196 -    log_debug(NAME, "[%s] Is Member? >%s< - Yes (case 1)", FZONE, jid_full(user));
197 -    return 1;
198 -  }
199 -  else if(g_hash_table_lookup(room->member, user->server) != NULL )
200 -  {
201 -    log_debug(NAME, "[%s] Is Member? >%s< - Yes (case 2)", FZONE, jid_full(user));
202 -    return 1;
203 -  }
204 -  else
205 -  {
206 -    log_debug(NAME, "[%s] Is Member? >%s< - No", FZONE, jid_full(user));
207 -    return 0;
208 -  }
209 +  return check_affiliation(room->member, user, "Member");
210  }
211  
212  /* Is the user in the outcast affiliation list for that room */
213  int is_outcast(cnr room, jid user)
214  {
215 -  char ujid[2048];
216 -
217    if(room == NULL || user == NULL)
218    {
219      log_warn(NAME, "[%s] ERR: Missing variable in is_outcast", FZONE);
220      return 0;
221    }
222  
223 -  snprintf(ujid, sizeof(ujid), "%s@%s", user->user, user->server);
224 -
225 -  if(g_hash_table_lookup(room->outcast, ujid) != NULL )
226 -    return 1;
227 -  else if(g_hash_table_lookup(room->outcast, user->server) != NULL )
228 -    return 1;
229 -  else
230 -    return 0;
231 +  return check_affiliation(room->outcast, user, "Outcast");
232  }
233  
234  /* Only return 1 if visitor */
235 Index: src/conference_room.c
236 ===================================================================
237 --- src/conference_room.c       (revision 67)
238 +++ src/conference_room.c       (revision 77)
239 @@ -1018,7 +1018,7 @@
240  
241        if( nick == NULL)
242        {
243 -        log_debug(NAME, "[%s] No receipient, returning error", FZONE);
244 +        log_debug(NAME, "[%s] No recipient, returning error", FZONE);
245  
246          jutil_error(jp->x,TERROR_BAD);
247          deliver(dpacket_new(jp->x),NULL);
248 @@ -1031,6 +1031,15 @@
249        {
250          id = jid_new(xmlnode_pool(item), nick);
251  
252 +        if (id == NULL)
253 +        {
254 +          log_debug(NAME, "[%s] Bad recipient, returning error", FZONE);
255 +          jutil_error(jp->x,TERROR_BAD);
256 +          deliver(dpacket_new(jp->x),NULL);
257 +
258 +          xmlnode_free(item);
259 +          return;
260 +        }
261          key = j_strdup(jid_full(jid_user(jid_fix(id))));
262          g_hash_table_insert(room->member, key, (void*)item);
263        }
264 @@ -1143,7 +1152,8 @@
265      if (cont == 0)
266        jutil_delay(node, jid_full(room->id));
267  
268 -    if(room->master->history > 0)
269 +    /* check if stanza contains a body tag and if history is activated */
270 +    if(xmlnode_get_tag_data(node,"body")!=NULL && room->master->history > 0) 
271      {
272  
273        hist_p = pool_new();
274 @@ -1426,7 +1436,7 @@
275    /* Create pool for room struct */
276    p = pool_new(); 
277    room = pmalloco(p, sizeof(_cnr));
278 -  log_debug(NAME, "[%s] Malloc: _cnr = %d", FZONE, sizeof(_cnr));
279 +  log_debug(NAME, "[%s] Malloc: _cnr = %lu", FZONE, sizeof(_cnr));
280    room->p = p;
281    room->master = master;
282  
283 @@ -1448,7 +1458,7 @@
284  
285    /* Initialise room history */
286    room->history = pmalloco(p, sizeof(_cnh) * master->history); /* make array of xmlnodes */
287 -  log_debug(NAME, "[%s] Malloc: history = %d", FZONE, sizeof(_cnh) * master->history);
288 +  log_debug(NAME, "[%s] Malloc: history = %lu", FZONE, sizeof(_cnh) * master->history);
289  
290    /* Room time */
291    room->start = now;
292 @@ -1498,7 +1508,7 @@
293  
294      room->creator = jid_new(room->p, jid_full(jid_user(admin->realid)));
295  
296 -    add_affiliate(room->owner, admin->realid, NULL);
297 +    add_affiliate(room->owner, jid_user(admin->realid), NULL);
298  
299      log_debug(NAME, "[%s] Added new admin: %s to room %s", FZONE, jid_full(jid_fix(owner)), jid_full(room->id));
300    }
301 Index: src/roles.c
302 ===================================================================
303 --- src/roles.c (revision 67)
304 +++ src/roles.c (revision 77)
305 @@ -73,14 +73,37 @@
306    xmlnode old;
307    xmlnode store;
308    xmlnode node;
309 -  char ujid[2048];
310 +  char ujid[3072];
311  
312    if(userid == NULL)
313    {
314      return -1;
315    }
316  
317 -  snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
318 +
319 +  if(userid->user == NULL)
320 +  {
321 +    if(userid->resource == NULL)
322 +    {
323 +      snprintf(ujid, sizeof(ujid), "%s", userid->server);
324 +    }
325 +    else
326 +    {
327 +      snprintf(ujid, sizeof(ujid), "%s/%s", userid->server, userid->resource);
328 +    }
329 +  }
330 +  else
331 +  {
332 +    if(userid->resource == NULL)
333 +    {
334 +      snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
335 +    }
336 +    else
337 +    {
338 +      snprintf(ujid, sizeof(ujid), "%s@%s/%s", userid->user, userid->server, userid->resource);
339 +
340 +    }
341 +  }
342    old = g_hash_table_lookup(hash, ujid);
343  
344    /* User not previously registered. Set up */
345 @@ -121,18 +144,42 @@
346    xmlnode old;
347    xmlnode store;
348    xmlnode node;
349 -  char ujid[2048];
350 +  char ujid[3072];
351  
352    if(userid == NULL)
353    {
354      return -1;
355    }
356  
357 -  snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
358 +  if(userid->user == NULL)
359 +  {
360 +    if(userid->resource == NULL)
361 +    {
362 +      snprintf(ujid, sizeof(ujid), "%s", userid->server);
363 +    }
364 +    else
365 +    {
366 +      snprintf(ujid, sizeof(ujid), "%s/%s", userid->server, userid->resource);
367 +    }
368 +  }
369 +  else
370 +  {
371 +    if(userid->resource == NULL)
372 +    {
373 +      snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
374 +    }
375 +    else
376 +    {
377 +      snprintf(ujid, sizeof(ujid), "%s@%s/%s", userid->user, userid->server, userid->resource);
378 +
379 +    }
380 +  }
381    old = g_hash_table_lookup(hash, ujid);
382  
383    if(old == NULL)
384 +  {
385      return 1;
386 +  }
387  
388    store = xmlnode_dup(old);
389  
390 @@ -158,14 +205,36 @@
391    xmlnode store;
392    xmlnode current;
393    char *userjid;
394 -  char ujid[2048];
395 +  char ujid[3072];
396  
397    if(userid == NULL)
398    {
399      return;
400    }
401  
402 -  snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
403 +  if(userid->user == NULL)
404 +  {
405 +    if(userid->resource == NULL)
406 +    {
407 +      snprintf(ujid, sizeof(ujid), "%s", userid->server);
408 +    }
409 +    else
410 +    {
411 +      snprintf(ujid, sizeof(ujid), "%s/%s", userid->server, userid->resource);
412 +    }
413 +  }
414 +  else
415 +  {
416 +    if(userid->resource == NULL)
417 +    {
418 +      snprintf(ujid, sizeof(ujid), "%s@%s", userid->user, userid->server);
419 +    }
420 +    else
421 +    {
422 +      snprintf(ujid, sizeof(ujid), "%s@%s/%s", userid->user, userid->server, userid->resource);
423 +
424 +    }
425 +  }
426    store = g_hash_table_lookup(hash, ujid);
427  
428    if(store == NULL)
429 Index: src/conference.c
430 ===================================================================
431 --- src/conference.c    (revision 67)
432 +++ src/conference.c    (revision 77)
433 @@ -538,6 +538,15 @@
434        xmlnode_hide_attrib(jp->x, "type");
435      }
436  
437 +    // clean the packet from any x muc#user tag
438 +    for( node = xmlnode_get_firstchild(jp->x); node != NULL; node = xmlnode_get_nextsibling(node)) {
439 +      if (xmlnode_get_name(node)==NULL || strcmp("x",xmlnode_get_name(node))!=0) continue; // check if the node is a "x" node
440 +      if(NSCHECK(node, NS_MUC_USER))
441 +      {
442 +        xmlnode_hide(node);
443 +      }
444 +    }
445 +
446      priority = jutil_priority(jp->x);
447    }
448  
449 @@ -578,7 +587,7 @@
450      }
451  
452      /* Don't allow user if locknicks is set and resource != JID user */
453 -    if ( ((master->locknicks || room->locknicks) && (j_strcmp(jp->to->resource, jp->from->user) != 0)) && !is_sadmin(master, jp->from) ) {
454 +    if ( ((master->locknicks || room->locknicks) && (j_strcasecmp(jp->to->resource, jp->from->user) != 0)) && !is_sadmin(master, jp->from) ) {
455        log_debug(NAME, "[%s] Nicknames locked - Requested nick %s doesn't match required username %s",
456            FZONE, jp->to->resource, jp->from->user);
457  
458 @@ -1079,7 +1088,7 @@
459    tp = pool_new();
460  
461    /* Allocate space for cni struct and link to instance */
462 -  log_debug(NAME, "[%s] Malloc: _cni=%d", FZONE, sizeof(_cni));
463 +  log_debug(NAME, "[%s] Malloc: _cni=%lu", FZONE, sizeof(_cni));
464    master = pmalloco(i->p, sizeof(_cni));
465  
466    master->i = i;
467 Index: src/jcomp/jcr_log.c
468 ===================================================================
469 --- src/jcomp/jcr_log.c (revision 67)
470 +++ src/jcomp/jcr_log.c (revision 77)
471 @@ -79,8 +79,8 @@
472    g_static_mutex_lock(&_jcr_log_lock);
473    va_start(ap, fmt);
474    vsnprintf(logmsg, 512, fmt, ap);
475 +  va_end(ap);
476    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "%s: %s", zone, logmsg);
477 -  va_end(ap);
478    g_static_mutex_unlock(&_jcr_log_lock);
479  }
480  
481 @@ -92,8 +92,8 @@
482    g_static_mutex_lock(&_jcr_log_lock);
483    va_start(ap, fmt);
484    vsnprintf(logmsg, 512, fmt, ap);
485 +  va_end(ap);
486    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "%s: %s", zone, logmsg);
487 -  va_end(ap);
488    g_static_mutex_unlock(&_jcr_log_lock);
489  }
490  
491 @@ -105,8 +105,8 @@
492    g_static_mutex_lock(&_jcr_log_lock);
493    va_start(ap, fmt);
494    vsnprintf(logmsg, 512, fmt, ap);
495 +  va_end(ap);
496    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, "%s: %s", zone, logmsg);
497 -  va_end(ap);
498    g_static_mutex_unlock(&_jcr_log_lock);
499  }
500  
501 @@ -118,8 +118,8 @@
502    g_static_mutex_lock(&_jcr_log_lock);
503    va_start(ap, fmt);
504    vsnprintf(logmsg, 512, fmt, ap);
505 +  va_end(ap);
506    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "%s: %s", zone, logmsg);
507 -  va_end(ap);
508    g_static_mutex_unlock(&_jcr_log_lock);
509  }
510  
511 @@ -131,7 +131,7 @@
512    g_static_mutex_lock(&_jcr_log_lock);
513    va_start(ap, fmt);
514    vsnprintf(logmsg, 512, fmt, ap);
515 +  va_end(ap);
516    g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s: %s", zone, logmsg);
517 -  va_end(ap);
518    g_static_mutex_unlock(&_jcr_log_lock);
519  }
520 Index: src/jcomp/jcr_base_connect.c
521 ===================================================================
522 --- src/jcomp/jcr_base_connect.c        (revision 67)
523 +++ src/jcomp/jcr_base_connect.c        (revision 77)
524 @@ -84,7 +84,7 @@
525    if (rc != G_IO_STATUS_NORMAL) {
526      log_warn(JDBG, "Opening XML stream failed, rc=%d", rc);
527    } else {
528 -    log_debug(JDBG, "Opening XML stream: sent %d bytes", bytes);
529 +    log_debug(JDBG, "Opening XML stream: sent %lu bytes", bytes);
530    }
531  
532  }
533 Index: src/jcomp/jcr_main_stream_error.c
534 ===================================================================
535 --- src/jcomp/jcr_main_stream_error.c   (revision 67)
536 +++ src/jcomp/jcr_main_stream_error.c   (revision 77)
537 @@ -31,6 +31,7 @@
538  
539    jcr->stream_state = _STREAM_INIT_STATE;
540    jcr->parser = XML_ParserCreate(NULL);
541 +  XML_SetDefaultHandler(jcr->parser, NULL);
542    XML_SetElementHandler(jcr->parser, (void *)jcr_start_element, (void *)jcr_end_element);
543    XML_SetCharacterDataHandler(jcr->parser, (void *)jcr_cdata);
544    XML_SetUserData(jcr->parser, NULL);
545 @@ -60,7 +61,6 @@
546    g_source_remove(jcr->gmain_watch_source);
547    g_io_channel_shutdown(jcr->gio, TRUE, NULL);
548    g_io_channel_unref(jcr->gio);
549 -  g_io_channel_unref(jcr->gio);
550    close(jcr->fd);
551    
552  
553 Index: src/jcomp/jcr_deliver.c
554 ===================================================================
555 --- src/jcomp/jcr_deliver.c     (revision 67)
556 +++ src/jcomp/jcr_deliver.c     (revision 77)
557 @@ -33,7 +33,7 @@
558      sleep(1);
559    }
560  
561 -  log_debug(JDBG, "queued %d bytes : >>> %s <<<", strlen(xmlnode2str(d->x)), xmlnode2str(d->x));
562 +  log_debug(JDBG, "queued %lu bytes : >>> %s <<<", strlen(xmlnode2str(d->x)), xmlnode2str(d->x));
563    g_async_queue_push(jcr->dqueue, d);
564  }
565  
566 @@ -90,7 +90,7 @@
567          log_warn(JDBG, "Send packet failed, dropping packet");
568        }
569  
570 -      log_debug(JDBG, "wrote %d packets of %d bytes", pkts, bytes);
571 +      log_debug(JDBG, "wrote %d packets of %lu bytes", pkts, bytes);
572        //    fprintf(stderr, "wrote %d packets of %d bytes\n", pkts, bytes);
573        if (left==0){
574          //queue is empty, flushing the socket
575 @@ -99,7 +99,7 @@
576      }
577    }
578    log_warn(JDBG, "packet delivery thread exiting.");
579 -  log_warn(JDBG, "  Last DvryQ Buffer='%.*s'", buffer->len, buffer->str);
580 +  log_warn(JDBG, "  Last DvryQ Buffer='%.*s'", (int)buffer->len, buffer->str);
581    g_string_free(buffer, TRUE);
582  }
583  
584 Index: src/jcomp/jcr_elements.c
585 ===================================================================
586 --- src/jcomp/jcr_elements.c    (revision 67)
587 +++ src/jcomp/jcr_elements.c    (revision 77)
588 @@ -172,7 +172,7 @@
589      if (rc != G_IO_STATUS_NORMAL) {
590        if (gerr != NULL) {
591          log_warn(JDBG, "Main Channel Error: rc=%d, %d '%s' '%s'", rc,
592 -          gerr->code, gerr->domain, gerr->message);
593 +          gerr->code, g_quark_to_string(gerr->domain), gerr->message);
594          g_error_free(gerr);
595        } else {
596          log_warn(JDBG, "Main Channel Error: rc=%d", rc);
597 @@ -186,7 +186,7 @@
598  
599      if (XML_Parse(jcr->parser, jcr->recv_buffer, bytes_read, 0) == 0) {
600        log_warn(JDBG, "XML Parsing Error: '%s'", (char *)XML_ErrorString(XML_GetErrorCode(jcr->parser)));
601 -      log_warn(JDBG, "   Last Rcvd Buffer='%.*s'", bytes_read, jcr->recv_buffer);
602 +      log_warn(JDBG, "   Last Rcvd Buffer='%.*s'", (int)bytes_read, jcr->recv_buffer);
603        jcr_main_close_stream();
604        return FALSE;
605      }
606 Index: src/jabberd/expat.c
607 ===================================================================
608 --- src/jabberd/expat.c (revision 67)
609 +++ src/jabberd/expat.c (revision 77)
610 @@ -95,6 +95,7 @@
611  
612      *x = NULL; /* pointer to NULL */
613      p = XML_ParserCreate(NULL);
614 +    XML_SetDefaultHandler(p, NULL);
615      XML_SetUserData(p, x);
616      XML_SetElementHandler(p, expat_startElement, expat_endElement);
617      XML_SetCharacterDataHandler(p, expat_charData);
618 @@ -128,6 +129,7 @@
619  
620      *x = NULL; /* pointer to NULL */
621      p = XML_ParserCreate(NULL);
622 +    XML_SetDefaultHandler(p, NULL);
623      XML_SetUserData(p, x);
624      XML_SetElementHandler(p, expat_startElement, expat_endElement);
625      XML_SetCharacterDataHandler(p, expat_charData);
626 @@ -165,6 +167,7 @@
627          return "unable to open file";
628  
629      p = XML_ParserCreate(NULL);
630 +    XML_SetDefaultHandler(p, NULL);
631      while(1)
632      {
633          len = read(fd, buf, BUFSIZ);
634 Index: src/jabberd/str.c
635 ===================================================================
636 --- src/jabberd/str.c   (revision 67)
637 +++ src/jabberd/str.c   (revision 77)
638 @@ -65,11 +65,15 @@
639      if(a == NULL || b == NULL)
640          return -1;
641  
642 -    while(*a == *b && *a != '\0' && *b != '\0'){ a++; b++; }
643 +    return strcmp(a, b);
644 +}
645  
646 -    if(*a == *b) return 0;
647 +int j_strcasecmp(const char *a, const char *b)
648 +{
649 +    if(a == NULL || b == NULL)
650 +        return -1;
651  
652 -    return -1;
653 +    return strcasecmp(a, b);
654  }
655  
656  int j_strncmp(const char *a, const char *b, int i)
657 Index: src/jabberd/sha.c
658 ===================================================================
659 --- src/jabberd/sha.c   (revision 67)
660 +++ src/jabberd/sha.c   (revision 77)
661 @@ -50,7 +50,7 @@
662     */
663    for (i = 0; i < len; i++) {
664      ctx->W[ctx->lenW / 4] <<= 8;
665 -    ctx->W[ctx->lenW / 4] |= (unsigned long)dataIn[i];
666 +    ctx->W[ctx->lenW / 4] |= (uint32_t)dataIn[i];
667      if ((++ctx->lenW) % 64 == 0) {
668        shaHashBlock(ctx);
669        ctx->lenW = 0;
670 @@ -109,7 +109,7 @@
671  
672  static void shaHashBlock(j_SHA_CTX *ctx) {
673    int t;
674 -  unsigned long A,B,C,D,E,TEMP;
675 +  uint32_t A,B,C,D,E,TEMP;
676  
677    for (t = 16; t <= 79; t++)
678      ctx->W[t] =