Написание специального NSS модуль хостов

голоса
0

Я ищу для реализации пользовательского nssмодуля для getent hostsпоиска. На основе Glibc - х resolv/nss-dns/dns-host.cи Gnunet - х src/gns/nss/nss_gns.cя написал следующую минимальную реализацию, я надеялся , по крайней мере , должен написать что - то системный журнал - что он , к сожалению , не делает .

#include <netdb.h>
#include <nss.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>

#define _nss_lash_gethostbyname2_r _nss_lash_gethostbyname_r
#define _nss_lash_gethostbyname3_r _nss_lash_gethostbyname_r
#define _nss_lash_gethostbyname4_r _nss_lash_gethostbyname_r
#define _nss_lash_getcanonname_r _nss_lash_gethostbyaddr_r
#define _nss_lash_gethostbyaddr2_r _nss_lash_gethostbyaddr_r
#define _nss_lash_getnetbyname_r _nss_lash_gethostbyaddr_r
#define _nss_lash_getnetbyaddr_r _nss_lash_gethostbyaddr_r

typedef char addr[1]; 
const addr default_addrs[2] = {0x01, 0x00};

enum nss_status
_nss_lash_gethostbyname_r (const char *name, struct hostent *result,
              char *buffer, size_t buflen, int *errnop,
              int *h_errnop)
{
    syslog(LOG_WARNING, name);
    if (!strcmp(name, lash)) {
        return NSS_STATUS_UNAVAIL;
    }
    *(result->h_aliases) = 0x0;
    result->h_addrtype = AF_INET;
    result->h_length = 1;
    *(result->h_addr_list) = (char *)default_addrs;
    *errnop = 0;
    *h_errnop = NETDB_SUCCESS; 
    return NSS_STATUS_SUCCESS;      
}

enum nss_status
_nss_lash_gethostbyaddr_r (const char *name, struct hostent *result,
              char *buffer, size_t buflen, int *errnop,
              int *h_errnop)
{
    syslog(LOG_ERR, name);
    if (!strcmp(name, lash)) {
        return NSS_STATUS_UNAVAIL;
    }
    *(result->h_aliases) = 0x0;
    result->h_addrtype = AF_INET;
    result->h_length = 1;
    *(result->h_addr_list) = (char *)default_addrs;
    *errnop = 0;
    *h_errnop = NETDB_SUCCESS; 
    return NSS_STATUS_SUCCESS;      

}

straceпоказывает , что /lib/libnss_lash.so.2успешно открыт файл. Однако возвращаемое значение из nssпоиска является NSS_UNAVAIL/ ENOENT.

Кто-нибудь есть какие-либо ключи к тому, что я не хватает?

Задан 13/02/2020 в 23:58
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more