2 Unix SMB/CIFS implementation.
4 Copyright (C) Timur I. Bakeyev 2007
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
16 You should have received a copy of the GNU Library General Public
17 License along with this library; if not, write to the
18 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.
22 #include "winbind_client.h"
24 extern enum nss_status
_nss_wins_gethostbyname2_r(const char *name
, int af
, struct hostent
*he
,
25 char *buffer
, size_t buflen
, int *h_errnop
);
27 ns_mtab
*nss_module_register(const char *source
, unsigned int *, nss_module_unregister_fn
*);
29 static NSS_METHOD_PROTOTYPE(__nss_wins_freebsd_gethostbyname2_r
);
31 static ns_mtab methods
[] =
33 { NSDB_HOSTS
, "getaddrinfo", NULL
, NULL
},
34 { NSDB_HOSTS
, "ghbyname", NULL
, NULL
},
35 { NSDB_HOSTS
, "ghbyaddr", NULL
, NULL
},
36 { NSDB_HOSTS
, "gethostbyaddr_r", NULL
, NULL
},
37 { NSDB_HOSTS
, "gethostbyname2_r", __nss_wins_freebsd_gethostbyname2_r
, _nss_wins_gethostbyname2_r
},
38 { NSDB_HOSTS
, "getnetbyname_r", NULL
, NULL
},
39 { NSDB_HOSTS
, "getnetbyaddr_r", NULL
, NULL
},
40 { NSDB_HOSTS
, "gethostbyname", NULL
, NULL
},
41 { NSDB_HOSTS
, "gethostbyaddr", NULL
, NULL
},
42 { NSDB_HOSTS
, "getnetbyname", NULL
, NULL
},
43 { NSDB_HOSTS
, "getnetbyaddr", NULL
, NULL
}
47 __nss_wins_freebsd_gethostbyname2_r(void *retval
, void *mdata
, va_list ap
)
49 int (*fn
)(const char *, int, struct hostent
*, char *, size_t, int *);
56 enum nss_status status
;
59 hostname
= va_arg(ap
, const char *);
61 he
= va_arg(ap
, struct hostent
*);
62 buffer
= va_arg(ap
, char *);
63 buflen
= va_arg(ap
, size_t);
64 h_errnop
= va_arg(ap
, int *);
66 status
= fn(hostname
, af
, he
, buffer
, buflen
, h_errnop
);
67 status
= __nss_compat_result(status
, *h_errnop
);
68 if (status
== NS_SUCCESS
)
69 *(struct hostent
**)retval
= he
;
75 nss_module_register(const char *source __unused
, unsigned int *mtabsize
,
76 nss_module_unregister_fn
*unreg
)
78 *mtabsize
= sizeof(methods
) / sizeof(methods
[0]);