/* * 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; }