14bff34e3Sthurlow /*
24bff34e3Sthurlow * Copyright (c) 2000, Boris Popov
34bff34e3Sthurlow * All rights reserved.
44bff34e3Sthurlow *
54bff34e3Sthurlow * Redistribution and use in source and binary forms, with or without
64bff34e3Sthurlow * modification, are permitted provided that the following conditions
74bff34e3Sthurlow * are met:
84bff34e3Sthurlow * 1. Redistributions of source code must retain the above copyright
94bff34e3Sthurlow * notice, this list of conditions and the following disclaimer.
104bff34e3Sthurlow * 2. Redistributions in binary form must reproduce the above copyright
114bff34e3Sthurlow * notice, this list of conditions and the following disclaimer in the
124bff34e3Sthurlow * documentation and/or other materials provided with the distribution.
134bff34e3Sthurlow * 3. All advertising materials mentioning features or use of this software
144bff34e3Sthurlow * must display the following acknowledgement:
154bff34e3Sthurlow * This product includes software developed by Boris Popov.
164bff34e3Sthurlow * 4. Neither the name of the author nor the names of any co-contributors
174bff34e3Sthurlow * may be used to endorse or promote products derived from this software
184bff34e3Sthurlow * without specific prior written permission.
194bff34e3Sthurlow *
204bff34e3Sthurlow * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
214bff34e3Sthurlow * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
224bff34e3Sthurlow * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
234bff34e3Sthurlow * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
244bff34e3Sthurlow * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
254bff34e3Sthurlow * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
264bff34e3Sthurlow * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
274bff34e3Sthurlow * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
284bff34e3Sthurlow * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
294bff34e3Sthurlow * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
304bff34e3Sthurlow * SUCH DAMAGE.
314bff34e3Sthurlow *
324bff34e3Sthurlow * $Id: nb_net.c,v 1.8 2004/03/19 01:49:47 lindak Exp $
334bff34e3Sthurlow */
344bff34e3Sthurlow
354bff34e3Sthurlow #include <sys/param.h>
364bff34e3Sthurlow #include <sys/socket.h>
374bff34e3Sthurlow #include <sys/ioctl.h>
384bff34e3Sthurlow #include <sys/sockio.h>
394bff34e3Sthurlow #include <net/if.h>
404bff34e3Sthurlow #include <ctype.h>
414bff34e3Sthurlow #include <errno.h>
424bff34e3Sthurlow #include <stdlib.h>
434bff34e3Sthurlow #include <string.h>
444bff34e3Sthurlow #include <strings.h>
454bff34e3Sthurlow #include <stdio.h>
464bff34e3Sthurlow #include <unistd.h>
47*613a2f6bSGordon Ross #include <netdb.h>
48*613a2f6bSGordon Ross #include <nss_dbdefs.h>
494bff34e3Sthurlow
504bff34e3Sthurlow #include <err.h>
514bff34e3Sthurlow
524bff34e3Sthurlow #include <netsmb/netbios.h>
534bff34e3Sthurlow #include <netsmb/smb_lib.h>
544bff34e3Sthurlow #include <netsmb/nb_lib.h>
559c9af259SGordon Ross #include "private.h"
569c9af259SGordon Ross
579c9af259SGordon Ross /*
589c9af259SGordon Ross * General networking stuff, in spite of the names
599c9af259SGordon Ross * that imply they're specific to NetBIOS.
609c9af259SGordon Ross */
614bff34e3Sthurlow
624bff34e3Sthurlow int
nb_resolvehost_in(const char * name,struct in_addr * ia)63*613a2f6bSGordon Ross nb_resolvehost_in(const char *name, struct in_addr *ia)
644bff34e3Sthurlow {
65*613a2f6bSGordon Ross char he_buf[NSS_BUFLEN_HOSTS];
66*613a2f6bSGordon Ross struct hostent he, *h;
67*613a2f6bSGordon Ross int err;
684bff34e3Sthurlow
69*613a2f6bSGordon Ross h = gethostbyname_r(name, &he, he_buf, sizeof (he_buf), &err);
70*613a2f6bSGordon Ross if (h == NULL) {
714bff34e3Sthurlow #ifdef DEBUG
724bff34e3Sthurlow warnx("can't get server address `%s': ", name);
734bff34e3Sthurlow #endif
744bff34e3Sthurlow return (ENETDOWN);
754bff34e3Sthurlow }
764bff34e3Sthurlow if (h->h_addrtype != AF_INET) {
774bff34e3Sthurlow #ifdef DEBUG
784bff34e3Sthurlow warnx("address for `%s' is not in the AF_INET family", name);
794bff34e3Sthurlow #endif
804bff34e3Sthurlow return (EAFNOSUPPORT);
814bff34e3Sthurlow }
824bff34e3Sthurlow if (h->h_length != 4) {
834bff34e3Sthurlow #ifdef DEBUG
844bff34e3Sthurlow warnx("address for `%s' has invalid length", name);
854bff34e3Sthurlow #endif
864bff34e3Sthurlow return (EAFNOSUPPORT);
874bff34e3Sthurlow }
88*613a2f6bSGordon Ross
89*613a2f6bSGordon Ross memcpy(ia, h->h_addr, sizeof (*ia));
904bff34e3Sthurlow return (0);
914bff34e3Sthurlow }
92