Navigation


Changeset 296:e11a9f90a65a in freeDiameter for extensions/app_radgw/rgwx_auth.c


Ignore:
Timestamp:
May 10, 2010, 4:04:42 PM (14 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Do not send STR if the auth server sent NO_STATE_MAINTAINED

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/app_radgw/rgwx_auth.c

    r273 r296  
    5050#define ACV_OAP_RADIUS                  1       /* RADIUS */
    5151#define ACV_ASS_STATE_MAINTAINED        0       /* STATE_MAINTAINED */
     52#define ACV_ASS_NO_STATE_MAINTAINED     1       /* NO_STATE_MAINTAINED */
    5253#define ER_DIAMETER_MULTI_ROUND_AUTH    1001
    5354#define ER_DIAMETER_LIMITED_SUCCESS     2002
     
    920921        char buf[254]; /* to store some attributes values (with final '\0') */
    921922        int ta_set = 0;
     923        int no_str = 0; /* indicate if an STR is required for this server */
    922924        uint8_t tuntag = 0;
    923925        unsigned char * req_auth = NULL;
     
    10481050                CONV2RAD_STR(RADIUS_ATTR_STATE, buf, strlen(buf), 0);
    10491051        }
    1050         /* The RFC text says that this should always be the case, but it seems odd... */
     1052
    10511053        if ((*rad_fw)->hdr->code == RADIUS_CODE_ACCESS_ACCEPT) {
    10521054                /* Add the Session-Id */
    10531055                if (sizeof(buf) < snprintf(buf, sizeof(buf), "Diameter/%.*s",
    10541056                                sid->avp_value->os.len, sid->avp_value->os.data)) {
    1055                         TRACE_DEBUG(INFO, "Data truncated in Class attribute: %s", buf);
    1056                 }
    1057                 CONV2RAD_STR(RADIUS_ATTR_CLASS, buf, strlen(buf), 0);
    1058                
    1059                 /* Add the auth-application-id required for STR */
    1060                 CHECK_FCT( fd_msg_hdr( *diam_ans, &hdr ) );
    1061                 if (sizeof(buf) < snprintf(buf, sizeof(buf), CLASS_AAI_PREFIX "%u",
    1062                                 hdr->msg_appl)) {
    10631057                        TRACE_DEBUG(INFO, "Data truncated in Class attribute: %s", buf);
    10641058                }
     
    12061200                                        if ((!ta_set) && (ahdr->avp_value->u32 == ACV_ASS_STATE_MAINTAINED)) {
    12071201                                                CONV2RAD_32B( RADIUS_ATTR_TERMINATION_ACTION, RADIUS_TERMINATION_ACTION_RADIUS_REQUEST );
     1202                                        }
     1203                                       
     1204                                        if (ahdr->avp_value->u32 == ACV_ASS_NO_STATE_MAINTAINED) {
     1205                                                no_str = 1;
    12081206                                        }
    12091207                                        break;
     
    16691667        free(req_auth);
    16701668
     1669        if ((*rad_fw)->hdr->code == RADIUS_CODE_ACCESS_ACCEPT) {
     1670                /* Add the auth-application-id required for STR, or 0 if no STR is required */
     1671                CHECK_FCT( fd_msg_hdr( *diam_ans, &hdr ) );
     1672                if (sizeof(buf) < snprintf(buf, sizeof(buf), CLASS_AAI_PREFIX "%u",
     1673                                no_str ? 0 : hdr->msg_appl)) {
     1674                        TRACE_DEBUG(INFO, "Data truncated in Class attribute: %s", buf);
     1675                }
     1676                CONV2RAD_STR(RADIUS_ATTR_CLASS, buf, strlen(buf), 0);
     1677        }
     1678       
    16711679        return 0;
    16721680}
Note: See TracChangeset for help on using the changeset viewer.