示例#1
0
srvd_boolean_t srvd_service_nss_passwd_response_gid_set(srvd_service_response_t *response,
                                                        gid_t gid) {
  SRVD_RETURN_FALSE_UNLESS(response);

  return srvd_protocol_packet_field_append_uint32(&response->packet,
                                                  SRVD_SERVICE_NSS_PASSWD_RESPONSE_GID,
                                                  (uint32_t)gid);
}
示例#2
0
enum nss_status
_nss_srvd_getaliasent_r(struct aliasent *ae, char *buffer,
                        size_t bufsize, int *ret_errno) {
  enum nss_status status;
  uint32_t *offset;

  srvd_service_request_t request;
  srvd_service_response_t response;

  SRVD_THREAD_ONCE_CALL(_srvd_nss_aliases_aliasent_initialize,
                        _srvd_nss_aliases_aliasent_initialize_callback);
  if(!SRVD_THREAD_KEY_DATA_HAS(_srvd_nss_aliases_aliasent_offset)) {
    if(!_srvd_nss_aliases_aliasent_initialize_offset())
      return NSS_STATUS_UNAVAIL;
  }

  offset = (uint32_t *)SRVD_THREAD_KEY_DATA_GET(_srvd_nss_aliases_aliasent_offset);

  srvd_service_request_initialize(&request);
  srvd_protocol_packet_field_append_uint32(&request.packet,
                                           SRVD_SERVICE_NSS_ALIASES_REQUEST_ENTITIES, *offset);

  srvd_service_response_initialize(&response);
  srvd_service_request_query(&request, &response);

  if(response.status == SRVD_SERVICE_RESPONSE_NOTFOUND) {
    SRVD_NSS_NORECORD(status, _nss_srvd_getaliasent_r_error);
  }
  else if(response.status == SRVD_SERVICE_RESPONSE_UNAVAIL) {
    SRVD_NSS_UNAVAIL(status, _nss_srvd_getaliasent_r_error);
  }
  else if(response.status != SRVD_SERVICE_RESPONSE_SUCCESS) {
    SRVD_NSS_FAIL(status, ret_errno, NSS_STATUS_TRYAGAIN, EINVAL,
                  _nss_srvd_getaliasent_r_error);
  }

  status = _srvd_nss_aliases_populate(&response, ae, buffer, bufsize, ret_errno);
  (*offset)++;

 _nss_srvd_getaliasent_r_error:

  srvd_service_request_finalize(&request);
  srvd_service_response_finalize(&response);

  return status;
}