Ejemplo n.º 1
0
/* 
 * LASIpv6Getter
 * This is the Attribute Getter function for  IPv6 Addresses.
 * LAS_EVAL_FAIL on failure of LAS_EVAL_TRUE on success.
 */
int
LASIpv6Getter(NSErr_t *errp, PList_t subject, PList_t resource, PList_t
              auth_info, PList_t global_auth, void *arg)
{
    Request *rq = 0;
    int rv = PListGetValue(resource, ACL_ATTR_REQUEST_INDEX,
                           (void **)&rq, NULL);
    if (rv < 0) {
        ereport(LOG_VERBOSE, "Unable to get request object", rv);
        return LAS_EVAL_FAIL;
    }
    HttpRequest *hrq =  GetHrq(rq);
    DaemonSession &dsn = hrq->GetDaemonSession();
    PRNetAddr *ip = dsn.GetRemoteAddress();
    
    rv = PListInitProp(subject, ACL_ATTR_IP_INDEX, ACL_ATTR_IP,
                       (void *)ip, NULL);
    if (rv < 0) {
        ereport(LOG_SECURITY, XP_GetAdminStr(DBT_aclFrameLASIpGetter2), rv);
        return LAS_EVAL_FAIL;
    }

    return LAS_EVAL_TRUE;
}
static inline SessionThreadData *find_thread_data(Session *sn)
{
    NSAPISession *nsn = (NSAPISession *)sn;

    if (nsn && nsn->thread_data)
        return nsn->thread_data;

    HttpRequest *hrq = HttpRequest::CurrentRequest();
    if (hrq) {
        DaemonSession &dsn = hrq->GetDaemonSession();
        if (nsn)
            nsn->thread_data = &dsn.thread_data;
        return &dsn.thread_data;
    }

    // We're being called from a non-DaemonSession thread
    void *data = PR_GetThreadPrivate(_session_thread_key);
    if (!data) {
        data = PERM_CALLOC(sizeof(SessionThreadData));
        PR_SetThreadPrivate(_session_thread_key, data);
    }

    return (SessionThreadData *)data;
}