Ticket #155: 155-valid-jid-withouth-realm.patch

File 155-valid-jid-withouth-realm.patch, 2.0 KB (added by harry, 14 months ago)
  • c2s/c2s.c

    diff --git a/c2s/c2s.c b/c2s/c2s.c
    index 9a18b79..a5ba507 100644
    a b  
    244244 
    245245                    snprintf(resource_buf, 1024, "%.*s", NAD_CDATA_L(nad, elem), NAD_CDATA(nad, elem)); 
    246246                    /* Put resource into JID */ 
    247                     if (jid_reset_components(jid, jid->node, jid->domain, resource_buf) == NULL) { 
     247                    if (jid == NULL || jid_reset_components(jid, jid->node, jid->domain, resource_buf) == NULL) { 
    248248                        log_debug(ZONE, "invalid jid data"); 
    249249                        sx_nad_write(sess->s, stanza_error(nad, 0, stanza_err_BAD_REQUEST)); 
    250250                         
  • sx/sasl_gsasl.c

    diff --git a/sx/sasl_gsasl.c b/sx/sasl_gsasl.c
    index ba4aaa6..c793ba0 100644
    a b  
    152152 
    153153/** move the stream to the auth state */ 
    154154void _sx_sasl_open(sx_t s, Gsasl_session *sd) { 
    155     char *method, *authzid = NULL; 
     155    char *method, *authzid, *realm = NULL; 
    156156    struct sx_sasl_creds_st creds = {NULL, NULL, NULL, NULL}; 
    157157    _sx_sasl_t ctx = gsasl_session_hook_get(sd); 
    158158     
     
    173173        } 
    174174    } else { 
    175175        /* override unchecked arbitrary authzid */ 
    176         if(creds.realm) { 
    177             authzid = (char *) malloc(sizeof(char) * (strlen(creds.authnid) + strlen(creds.realm) + 2)); 
    178             sprintf(authzid, "%s@%s", creds.authnid, creds.realm); 
    179             creds.authzid = authzid; 
     176        if(creds.realm && creds.realm[0] != '\0') { 
     177            realm = creds.realm; 
    180178        } else { 
    181             creds.authzid = creds.authnid; 
     179            realm = s->req_to; 
    182180        } 
     181        authzid = (char *) malloc(sizeof(char) * (strlen(creds.authnid) + strlen(realm) + 2)); 
     182        sprintf(authzid, "%s@%s", creds.authnid, realm); 
     183        creds.authzid = authzid; 
    183184    } 
    184185 
    185186    /* proceed stream to authenticated state */