summaryrefslogtreecommitdiff
path: root/daemon/rfcnb
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2004-08-25 00:48:14 +0000
committerStef Walter <stef@memberwebs.com>2004-08-25 00:48:14 +0000
commitbb59442e8131ab45ab36900c05c02757eca05feb (patch)
treebf4ba74235ed3ded3704cfe4472165d2abd64315 /daemon/rfcnb
parentb200e99089f3e52bf8306a122cbd81054a60887a (diff)
Removed NTLM support from the main branch.
Diffstat (limited to 'daemon/rfcnb')
-rw-r--r--daemon/rfcnb/byteorder.h80
-rw-r--r--daemon/rfcnb/rfcnb-common.h36
-rw-r--r--daemon/rfcnb/rfcnb-error.h75
-rw-r--r--daemon/rfcnb/rfcnb-io.c407
-rw-r--r--daemon/rfcnb/rfcnb-io.h28
-rw-r--r--daemon/rfcnb/rfcnb-priv.h151
-rw-r--r--daemon/rfcnb/rfcnb-util.c532
-rw-r--r--daemon/rfcnb/rfcnb-util.h50
-rw-r--r--daemon/rfcnb/rfcnb.h48
-rw-r--r--daemon/rfcnb/session.c364
-rw-r--r--daemon/rfcnb/std-includes.h45
-rw-r--r--daemon/rfcnb/x_Makefile38
12 files changed, 0 insertions, 1854 deletions
diff --git a/daemon/rfcnb/byteorder.h b/daemon/rfcnb/byteorder.h
deleted file mode 100644
index 2dae575..0000000
--- a/daemon/rfcnb/byteorder.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- SMB Byte handling
- Copyright (C) Andrew Tridgell 1992-1995
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
- This file implements macros for machine independent short and
- int manipulation
-*/
-
-#undef CAREFUL_ALIGNMENT
-
-/* we know that the 386 can handle misalignment and has the "right"
- byteorder */
-#ifdef __i386__
-#define CAREFUL_ALIGNMENT 0
-#endif
-
-#ifndef CAREFUL_ALIGNMENT
-#define CAREFUL_ALIGNMENT 1
-#endif
-
-#define CVAL(buf,pos) (((unsigned char *)(buf))[pos])
-#define PVAL(buf,pos) ((unsigned)CVAL(buf,pos))
-#define SCVAL(buf,pos,val) (CVAL(buf,pos) = (val))
-
-
-#if CAREFUL_ALIGNMENT
-#define SVAL(buf,pos) (PVAL(buf,pos)|PVAL(buf,(pos)+1)<<8)
-#define IVAL(buf,pos) (SVAL(buf,pos)|SVAL(buf,(pos)+2)<<16)
-#define SSVALX(buf,pos,val) (CVAL(buf,pos)=(val)&0xFF,CVAL(buf,pos+1)=(val)>>8)
-#define SIVALX(buf,pos,val) (SSVALX(buf,pos,val&0xFFFF),SSVALX(buf,pos+2,val>>16))
-#define SVALS(buf,pos) ((int16)SVAL(buf,pos))
-#define IVALS(buf,pos) ((int32)IVAL(buf,pos))
-#define SSVAL(buf,pos,val) SSVALX((buf),(pos),((uint16)(val)))
-#define SIVAL(buf,pos,val) SIVALX((buf),(pos),((uint32)(val)))
-#define SSVALS(buf,pos,val) SSVALX((buf),(pos),((int16)(val)))
-#define SIVALS(buf,pos,val) SIVALX((buf),(pos),((int32)(val)))
-#else
-/* this handles things for architectures like the 386 that can handle
- alignment errors */
-/*
- WARNING: This section is dependent on the length of int16 and int32
- being correct
-*/
-#define SVAL(buf,pos) (*(uint16 *)((char *)(buf) + (pos)))
-#define IVAL(buf,pos) (*(uint32 *)((char *)(buf) + (pos)))
-#define SVALS(buf,pos) (*(int16 *)((char *)(buf) + (pos)))
-#define IVALS(buf,pos) (*(int32 *)((char *)(buf) + (pos)))
-#define SSVAL(buf,pos,val) SVAL(buf,pos)=((uint16)(val))
-#define SIVAL(buf,pos,val) IVAL(buf,pos)=((uint32)(val))
-#define SSVALS(buf,pos,val) SVALS(buf,pos)=((int16)(val))
-#define SIVALS(buf,pos,val) IVALS(buf,pos)=((int32)(val))
-#endif
-
-
-/* now the reverse routines - these are used in nmb packets (mostly) */
-#define SREV(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF))
-#define IREV(x) ((SREV(x)<<16) | (SREV((x)>>16)))
-
-#define RSVAL(buf,pos) SREV(SVAL(buf,pos))
-#define RIVAL(buf,pos) IREV(IVAL(buf,pos))
-#define RSSVAL(buf,pos,val) SSVAL(buf,pos,SREV(val))
-#define RSIVAL(buf,pos,val) SIVAL(buf,pos,IREV(val))
diff --git a/daemon/rfcnb/rfcnb-common.h b/daemon/rfcnb/rfcnb-common.h
deleted file mode 100644
index 0d7d5dd..0000000
--- a/daemon/rfcnb/rfcnb-common.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Common Structures etc Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* A data structure we need */
-
-typedef struct RFCNB_Pkt {
-
- char * data; /* The data in this portion */
- int len;
- struct RFCNB_Pkt *next;
-
-} RFCNB_Pkt;
-
-
diff --git a/daemon/rfcnb/rfcnb-error.h b/daemon/rfcnb/rfcnb-error.h
deleted file mode 100644
index bb49d68..0000000
--- a/daemon/rfcnb/rfcnb-error.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Error Response Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* Error responses */
-
-#define RFCNBE_Bad -1 /* Bad response */
-#define RFCNBE_OK 0
-
-/* these should follow the spec ... is there one ?*/
-
-#define RFCNBE_NoSpace 1 /* Could not allocate space for a struct */
-#define RFCNBE_BadName 2 /* Could not translate a name */
-#define RFCNBE_BadRead 3 /* Read sys call failed */
-#define RFCNBE_BadWrite 4 /* Write Sys call failed */
-#define RFCNBE_ProtErr 5 /* Protocol Error */
-#define RFCNBE_ConGone 6 /* Connection dropped */
-#define RFCNBE_BadHandle 7 /* Handle passed was bad */
-#define RFCNBE_BadSocket 8 /* Problems creating socket */
-#define RFCNBE_ConnectFailed 9 /* Connect failed */
-#define RFCNBE_CallRejNLOCN 10 /* Call rejected, not listening on CN */
-#define RFCNBE_CallRejNLFCN 11 /* Call rejected, not listening for CN */
-#define RFCNBE_CallRejCNNP 12 /* Call rejected, called name not present */
-#define RFCNBE_CallRejInfRes 13/* Call rejetced, name ok, no resources */
-#define RFCNBE_CallRejUnSpec 14/* Call rejected, unspecified error */
-#define RFCNBE_BadParam 15/* Bad parameters passed ... */
-#define RFCNBE_Timeout 16/* IO Timed out */
-
-/* Text strings for the error responses */
-
-static char *RFCNB_Error_Strings[] = {
-
- "RFCNBE_OK: Routine completed successfully.",
- "RFCNBE_NoSpace: No space available for a malloc call.",
- "RFCNBE_BadName: NetBIOS name could not be translated to IP address.",
- "RFCNBE_BadRead: Read system call returned an error. Check errno.",
- "RFCNBE_BadWrite: Write system call returned an error. Check errno.",
- "RFCNBE_ProtErr: A protocol error has occurred.",
- "RFCNBE_ConGone: Connection dropped during a read or write system call.",
- "RFCNBE_BadHandle: Bad connection handle passed.",
- "RFCNBE_BadSocket: Problems creating socket.",
- "RFCNBE_ConnectFailed: Connection failed. See errno.",
- "RFCNBE_CallRejNLOCN: Call rejected. Not listening on called name.",
- "RFCNBE_CallRejNLFCN: Call rejected. Not listening for called name.",
- "RFCNBE_CallRejCNNP: Call rejected. Called name not present.",
- "RFCNBE_CallRejInfRes: Call rejected. Name present, but insufficient resources.",
- "RFCNBE_CallRejUnSpec: Call rejected. Unspecified error.",
- "RFCNBE_BadParam: Bad parameters passed to a routine.",
- "RFCNBE_Timeout: IO Operation timed out ..."
-
-};
-
-
-
diff --git a/daemon/rfcnb/rfcnb-io.c b/daemon/rfcnb/rfcnb-io.c
deleted file mode 100644
index db2437f..0000000
--- a/daemon/rfcnb/rfcnb-io.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NEtBIOS implementation
-
- Version 1.0
- RFCNB IO Routines ...
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "std-includes.h"
-#include "rfcnb-priv.h"
-#include "rfcnb-util.h"
-#include "rfcnb-io.h"
-#include <sys/uio.h>
-#include <sys/signal.h>
-
-int RFCNB_Timeout = 0; /* Timeout in seconds ... */
-
-void rfcnb_alarm(int sig)
-
-{
-
- fprintf(stderr, "IO Timed out ...\n");
-
-}
-
-/* Set timeout value and setup signal handling */
-
-int RFCNB_Set_Timeout(int seconds)
-
-{
- /* If we are on a Bezerkeley system, use sigvec, else sigaction */
-#ifndef SA_RESTART
- struct sigvec invec, outvec;
-#else
- struct sigaction inact, outact;
-#endif
-
- RFCNB_Timeout = seconds;
-
- if (RFCNB_Timeout > 0) { /* Set up handler to ignore but not restart */
-
-#ifndef SA_RESTART
- invec.sv_handler = (void (*)())rfcnb_alarm;
- invec.sv_mask = 0;
- invec.sv_flags = SV_INTERRUPT;
-
- if (sigvec(SIGALRM, &invec, &outvec) < 0)
- return(-1);
-#else
- inact.sa_handler = (void (*)())rfcnb_alarm;
- memset(&(inact.sa_mask), 0, sizeof(inact.sa_mask));
- inact.sa_flags = 0; /* Don't restart */
-
- if (sigaction(SIGALRM, &inact, &outact) < 0)
- return(-1);
-
-#endif
-
- }
-
- return(0);
-
-}
-
-/* Discard the rest of an incoming packet as we do not have space for it
- in the buffer we allocated or were passed ... */
-
-int RFCNB_Discard_Rest(struct RFCNB_Con *con, int len)
-
-{ char temp[100]; /* Read into here */
- int rest, this_read, bytes_read;
-
- /* len is the amount we should read */
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Discard_Rest called to discard: %i\n", len);
-#endif
-
- rest = len;
-
- while (rest > 0) {
-
- this_read = (rest > sizeof(temp)?sizeof(temp):rest);
-
- bytes_read = read(con -> fd, temp, this_read);
-
- if (bytes_read <= 0) { /* Error so return */
-
- if (bytes_read < 0)
- RFCNB_errno = RFCNBE_BadRead;
- else
- RFCNB_errno = RFCNBE_ConGone;
-
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- rest = rest - bytes_read;
-
- }
-
- return(0);
-
-}
-
-
-/* Send an RFCNB packet to the connection.
-
- We just send each of the blocks linked together ...
-
- If we can, try to send it as one iovec ...
-
-*/
-
-int RFCNB_Put_Pkt(struct RFCNB_Con *con, struct RFCNB_Pkt *pkt, int len)
-
-{ int len_sent, tot_sent, this_len;
- struct RFCNB_Pkt *pkt_ptr;
- char *this_data;
- int i;
- struct iovec io_list[10]; /* We should never have more */
- /* If we do, this will blow up ...*/
-
- /* Try to send the data ... We only send as many bytes as len claims */
- /* We should try to stuff it into an IOVEC and send as one write */
-
-
- pkt_ptr = pkt;
- len_sent = tot_sent = 0; /* Nothing sent so far */
- i = 0;
-
- while ((pkt_ptr != NULL) & (i < 10)) { /* Watch that magic number! */
-
- this_len = pkt_ptr -> len;
- this_data = pkt_ptr -> data;
- if ((tot_sent + this_len) > len)
- this_len = len - tot_sent; /* Adjust so we don't send too much */
-
- /* Now plug into the iovec ... */
-
- io_list[i].iov_len = this_len;
- io_list[i].iov_base = this_data;
- i++;
-
- tot_sent += this_len;
-
- if (tot_sent == len) break; /* Let's not send too much */
-
- pkt_ptr = pkt_ptr -> next;
-
- }
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Frags = %i, tot_sent = %i\n", i, tot_sent);
-#endif
-
- /* Set up an alarm if timeouts are set ... */
-
- if (RFCNB_Timeout > 0)
- alarm(RFCNB_Timeout);
-
- if ((len_sent = writev(con -> fd, io_list, i)) < 0) { /* An error */
-
- con -> err = errno;
- if (errno == EINTR) /* We were interrupted ... */
- RFCNB_errno = RFCNBE_Timeout;
- else
- RFCNB_errno = RFCNBE_BadWrite;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- if (len_sent < tot_sent) { /* Less than we wanted */
- if (errno == EINTR) /* We were interrupted */
- RFCNB_errno = RFCNBE_Timeout;
- else
- RFCNB_errno = RFCNBE_BadWrite;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
- }
-
- if (RFCNB_Timeout > 0)
- alarm(0); /* Reset that sucker */
-
-#ifdef RFCNB_DEBUG
-
- fprintf(stderr, "Len sent = %i ...\n", len_sent);
- RFCNB_Print_Pkt(stderr, "sent", pkt, len_sent); /* Print what send ... */
-
-#endif
-
- return(len_sent);
-
-}
-
-/* Read an RFCNB packet off the connection.
-
- We read the first 4 bytes, that tells us the length, then read the
- rest. We should implement a timeout, but we don't just yet
-
-*/
-
-
-int RFCNB_Get_Pkt(struct RFCNB_Con *con, struct RFCNB_Pkt *pkt, int len)
-
-{ int read_len, pkt_len;
- char hdr[RFCNB_Pkt_Hdr_Len]; /* Local space for the header */
- struct RFCNB_Pkt *pkt_frag;
- int more, this_time, offset, frag_len, this_len;
- BOOL seen_keep_alive = TRUE;
-
- /* Read that header straight into the buffer */
-
- if (len < RFCNB_Pkt_Hdr_Len) { /* What a bozo */
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Trying to read less than a packet:");
- perror("");
-#endif
- RFCNB_errno = RFCNBE_BadParam;
- return(RFCNBE_Bad);
-
- }
-
- /* We discard keep alives here ... */
-
- if (RFCNB_Timeout > 0)
- alarm(RFCNB_Timeout);
-
- while (seen_keep_alive) {
-
- if ((read_len = read(con -> fd, hdr, sizeof(hdr))) < 0) { /* Problems */
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Reading the packet, we got:");
- perror("");
-#endif
- if (errno == EINTR)
- RFCNB_errno = RFCNBE_Timeout;
- else
- RFCNB_errno = RFCNBE_BadRead;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- /* Now we check out what we got */
-
- if (read_len == 0) { /* Connection closed, send back eof? */
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Connection closed reading\n");
-#endif
-
- if (errno == EINTR)
- RFCNB_errno = RFCNBE_Timeout;
- else
- RFCNB_errno = RFCNBE_ConGone;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- if (RFCNB_Pkt_Type(hdr) == RFCNB_SESSION_KEEP_ALIVE) {
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "RFCNB KEEP ALIVE received\n");
-#endif
-
- }
- else {
- seen_keep_alive = FALSE;
- }
-
- }
-
- /* What if we got less than or equal to a hdr size in bytes? */
-
- if (read_len < sizeof(hdr)) { /* We got a small packet */
-
- /* Now we need to copy the hdr portion we got into the supplied packet */
-
- memcpy(pkt -> data, hdr, read_len); /*Copy data */
-
-#ifdef RFCNB_DEBUG
- RFCNB_Print_Pkt(stderr, "rcvd", pkt, read_len);
-#endif
-
- return(read_len);
-
- }
-
- /* Now, if we got at least a hdr size, alloc space for rest, if we need it */
-
- pkt_len = RFCNB_Pkt_Len(hdr);
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Reading Pkt: Length = %i\n", pkt_len);
-#endif
-
- /* Now copy in the hdr */
-
- memcpy(pkt -> data, hdr, sizeof(hdr));
-
- /* Get the rest of the packet ... first figure out how big our buf is? */
- /* And make sure that we handle the fragments properly ... Sure should */
- /* use an iovec ... */
-
- if (len < pkt_len) /* Only get as much as we have space for */
- more = len - RFCNB_Pkt_Hdr_Len;
- else
- more = pkt_len;
-
- this_time = 0;
-
- /* We read for each fragment ... */
-
- if (pkt -> len == read_len){ /* If this frag was exact size */
- pkt_frag = pkt -> next; /* Stick next lot in next frag */
- offset = 0; /* then we start at 0 in next */
- }
- else {
- pkt_frag = pkt; /* Otherwise use rest of this frag */
- offset = RFCNB_Pkt_Hdr_Len; /* Otherwise skip the header */
- }
-
- frag_len = pkt_frag -> len;
-
- if (more <= frag_len) /* If len left to get less than frag space */
- this_len = more; /* Get the rest ... */
- else
- this_len = frag_len - offset;
-
- while (more > 0) {
-
- if ((this_time = read(con -> fd, (pkt_frag -> data) + offset, this_len)) <= 0) { /* Problems */
-
- if (errno == EINTR) {
-
- RFCNB_errno = RFCNB_Timeout;
-
- }
- else {
- if (this_time < 0)
- RFCNB_errno = RFCNBE_BadRead;
- else
- RFCNB_errno = RFCNBE_ConGone;
- }
-
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Frag_Len = %i, this_time = %i, this_len = %i, more = %i\n", frag_len,
- this_time, this_len, more);
-#endif
-
- read_len = read_len + this_time; /* How much have we read ... */
-
- /* Now set up the next part */
-
- if (pkt_frag -> next == NULL) break; /* That's it here */
-
- pkt_frag = pkt_frag -> next;
- this_len = pkt_frag -> len;
- offset = 0;
-
- more = more - this_time;
-
- }
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr,"Pkt Len = %i, read_len = %i\n", pkt_len, read_len);
- RFCNB_Print_Pkt(stderr, "rcvd", pkt, read_len + sizeof(hdr));
-#endif
-
- if (read_len < (pkt_len + sizeof(hdr))) { /* Discard the rest */
-
- return(RFCNB_Discard_Rest(con, (pkt_len + sizeof(hdr)) - read_len));
-
- }
-
- if (RFCNB_Timeout > 0)
- alarm(0); /* Reset that sucker */
-
- return(read_len + sizeof(RFCNB_Hdr));
-}
diff --git a/daemon/rfcnb/rfcnb-io.h b/daemon/rfcnb/rfcnb-io.h
deleted file mode 100644
index 9af8e90..0000000
--- a/daemon/rfcnb/rfcnb-io.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB IO Routines Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-int RFCNB_Put_Pkt(struct RFCNB_Con *con, struct RFCNB_Pkt *pkt, int len);
-
-int RFCNB_Get_Pkt(struct RFCNB_Con *con, struct RFCNB_Pkt *pkt, int len);
diff --git a/daemon/rfcnb/rfcnb-priv.h b/daemon/rfcnb/rfcnb-priv.h
deleted file mode 100644
index 3541c0e..0000000
--- a/daemon/rfcnb/rfcnb-priv.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* Defines we need */
-
-typedef unsigned short uint16;
-
-#define GLOBAL extern
-
-#include "rfcnb-error.h"
-#include "rfcnb-common.h"
-#include "byteorder.h"
-
-#ifdef RFCNB_PORT
-#define RFCNB_Default_Port RFCNB_PORT
-#else
-#define RFCNB_Default_Port 139
-#endif
-
-#define RFCNB_MAX_STATS 1
-
-/* Protocol defines we need */
-
-#define RFCNB_SESSION_MESSAGE 0
-#define RFCNB_SESSION_REQUEST 0x81
-#define RFCNB_SESSION_ACK 0x82
-#define RFCNB_SESSION_REJ 0x83
-#define RFCNB_SESSION_RETARGET 0x84
-#define RFCNB_SESSION_KEEP_ALIVE 0x85
-
-/* Structures */
-
-typedef struct redirect_addr * redirect_ptr;
-
-struct redirect_addr {
-
- struct in_addr ip_addr;
- int port;
- redirect_ptr next;
-
-};
-
-typedef struct RFCNB_Con {
-
- int fd; /* File descripter for TCP/IP connection */
- int err; /* last error */
- int timeout; /* How many milli-secs before IO times out */
- int redirects; /* How many times we were redirected */
- struct redirect_addr *redirect_list; /* First is first address */
- struct redirect_addr *last_addr;
-
-} RFCNB_Con;
-
-typedef char RFCNB_Hdr[4]; /* The header is 4 bytes long with */
- /* char[0] as the type, char[1] the */
- /* flags, and char[2..3] the length */
-
-/* Macros to extract things from the header. These are for portability
- between architecture types where we are worried about byte order */
-
-#define RFCNB_Pkt_Hdr_Len 4
-#define RFCNB_Pkt_Sess_Len 72
-#define RFCNB_Pkt_Retarg_Len 10
-#define RFCNB_Pkt_Nack_Len 5
-#define RFCNB_Pkt_Type_Offset 0
-#define RFCNB_Pkt_Flags_Offset 1
-#define RFCNB_Pkt_Len_Offset 2 /* Length is 2 bytes plus a flag bit */
-#define RFCNB_Pkt_N1Len_Offset 4
-#define RFCNB_Pkt_Called_Offset 5
-#define RFCNB_Pkt_N2Len_Offset 38
-#define RFCNB_Pkt_Calling_Offset 39
-#define RFCNB_Pkt_Error_Offset 4
-#define RFCNB_Pkt_IP_Offset 4
-#define RFCNB_Pkt_Port_Offset 8
-
-/* The next macro isolates the length of a packet, including the bit in the
- flags */
-
-#define RFCNB_Pkt_Len(p) (PVAL(p, 3) | (PVAL(p, 2) << 8) | \
- ((PVAL(p, RFCNB_Pkt_Flags_Offset) & 0x01) << 16))
-
-#define RFCNB_Put_Pkt_Len(p, v) (p[1] = ((v >> 16) & 1)); \
- (p[2] = ((v >> 8) & 0xFF)); \
- (p[3] = (v & 0xFF));
-
-#define RFCNB_Pkt_Type(p) (CVAL(p, RFCNB_Pkt_Type_Offset))
-
-/*typedef struct RFCNB_Hdr {
-
- unsigned char type;
- unsigned char flags;
- int16 len;
-
- } RFCNB_Hdr;
-
-typedef struct RFCNB_Sess_Pkt {
- unsigned char type;
- unsigned char flags;
- int16 length;
- unsigned char n1_len;
- char called_name[33];
- unsigned char n2_len;
- char calling_name[33];
- } RFCNB_Sess_Pkt;
-
-
-typedef struct RFCNB_Nack_Pkt {
-
- struct RFCNB_Hdr hdr;
- unsigned char error;
-
- } RFCNB_Nack_Pkt;
-
-typedef struct RFCNB_Retarget_Pkt {
-
- struct RFCNB_Hdr hdr;
- int dest_ip;
- unsigned char port;
-
- } RFCNB_Redir_Pkt; */
-
-/* Static variables */
-
-/* Only declare this if not defined */
-
-#ifndef RFCNB_ERRNO
-extern int RFCNB_errno;
-extern int RFCNB_saved_errno; /* Save this from point of error */
-#endif
diff --git a/daemon/rfcnb/rfcnb-util.c b/daemon/rfcnb/rfcnb-util.c
deleted file mode 100644
index adcc092..0000000
--- a/daemon/rfcnb/rfcnb-util.c
+++ /dev/null
@@ -1,532 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Utility Routines ...
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "std-includes.h"
-#include "rfcnb-priv.h"
-#include "rfcnb-util.h"
-#include "rfcnb-io.h"
-
-extern void (*Prot_Print_Routine)(); /* Pointer to protocol print routine */
-
-/* Convert name and pad to 16 chars as needed */
-/* Name 1 is a C string with null termination, name 2 may not be */
-/* If SysName is true, then put a <00> on end, else space> */
-
-void RFCNB_CvtPad_Name(char *name1, char *name2)
-
-{ char c, c1, c2;
- int i, len;
-
- len = strlen(name1);
-
- for (i = 0; i < 16; i++) {
-
- if (i >= len) {
-
- c1 = 'C'; c2 = 'A'; /* CA is a space */
-
- } else {
-
- c = name1[i];
- c1 = (char)((int)c/16 + (int)'A');
- c2 = (char)((int)c%16 + (int)'A');
- }
-
- name2[i*2] = c1;
- name2[i*2+1] = c2;
-
- }
-
- name2[32] = 0; /* Put in the nll ...*/
-
-}
-
-/* Converts an Ascii NB Name (16 chars) to an RFCNB Name (32 chars)
- Uses the encoding in RFC1001. Each nibble of byte is added to 'A'
- to produce the next byte in the name.
-
- This routine assumes that AName is 16 bytes long and that NBName has
- space for 32 chars, so be careful ...
-
-*/
-
-void RFCNB_AName_To_NBName(char *AName, char *NBName)
-
-{ char c, c1, c2;
- int i;
-
- for (i=0; i < 16; i++) {
-
- c = AName[i];
-
- c1 = (char)((c >> 4) + 'A');
- c2 = (char)((c & 0xF) + 'A');
-
- NBName[i*2] = c1;
- NBName[i*2+1] = c2;
- }
-
- NBName[32] = 0; /* Put in a null */
-
-}
-
-/* Do the reverse of the above ... */
-
-void RFCNB_NBName_To_AName(char *NBName, char *AName)
-
-{ char c, c1, c2;
- int i;
-
- for (i=0; i < 16; i++) {
-
- c1 = NBName[i*2];
- c2 = NBName[i*2+1];
-
- c = (char)(((int)c1 - (int)'A') * 16 + ((int)c2 - (int)'A'));
-
- AName[i] = c;
-
- }
-
- AName[i] = 0; /* Put a null on the end ... */
-
-}
-
-/* Print a string of bytes in HEX etc */
-
-void RFCNB_Print_Hex(FILE *fd, struct RFCNB_Pkt *pkt, int Offset, int Len)
-
-{ char c1, c2, outbuf1[33];
- unsigned char c;
- int i, j;
- struct RFCNB_Pkt *pkt_ptr = pkt;
- static char Hex_List[17] = "0123456789ABCDEF";
-
- j = 0;
-
- /* We only want to print as much as sepcified in Len */
-
- while (pkt_ptr != NULL) {
-
- for (i = 0;
- i < ((Len > (pkt_ptr -> len)?pkt_ptr -> len:Len) - Offset);
- i++) {
-
- c = pkt_ptr -> data[i + Offset];
- c1 = Hex_List[c >> 4];
- c2 = Hex_List[c & 0xF];
-
- outbuf1[j++] = c1; outbuf1[j++] = c2;
-
- if (j == 32){ /* Print and reset */
- outbuf1[j] = 0;
- fprintf(fd, " %s\n", outbuf1);
- j = 0;
- }
-
- }
-
- Offset = 0;
- Len = Len - pkt_ptr -> len; /* Reduce amount by this much */
- pkt_ptr = pkt_ptr -> next;
-
- }
-
- /* Print last lot in the buffer ... */
-
- if (j > 0) {
-
- outbuf1[j] = 0;
- fprintf(fd, " %s\n", outbuf1);
-
- }
-
- fprintf(fd, "\n");
-
-}
-
-/* Get a packet of size n */
-
-struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n)
-
-{ RFCNB_Pkt *pkt;
-
- if ((pkt = (struct RFCNB_Pkt *)malloc(sizeof(struct RFCNB_Pkt))) == NULL) {
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- return(NULL);
-
- }
-
- pkt -> next = NULL;
- pkt -> len = n;
-
- if (n == 0) return(pkt);
-
- if ((pkt -> data = (char *)malloc(n)) == NULL) {
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- free(pkt);
- return(NULL);
-
- }
-
- return(pkt);
-
-}
-
-/* Free up a packet */
-
-int RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt)
-
-{ struct RFCNB_Pkt *pkt_next; char *data_ptr;
-
- while (pkt != NULL) {
-
- pkt_next = pkt -> next;
-
- data_ptr = pkt -> data;
-
- if (data_ptr != NULL)
- free(data_ptr);
-
- free(pkt);
-
- pkt = pkt_next;
-
- }
-
-}
-
-/* Print an RFCNB packet */
-
-void RFCNB_Print_Pkt(FILE *fd, char *dirn, struct RFCNB_Pkt *pkt, int len)
-
-{ char lname[17];
-
- /* We assume that the first fragment is the RFCNB Header */
- /* We should loop through the fragments printing them out */
-
- fprintf(fd, "RFCNB Pkt %s:", dirn);
-
- switch (RFCNB_Pkt_Type(pkt -> data)) {
-
- case RFCNB_SESSION_MESSAGE:
-
- fprintf(fd, "SESSION MESSAGE: Length = %i\n", RFCNB_Pkt_Len(pkt -> data));
- RFCNB_Print_Hex(fd, pkt, RFCNB_Pkt_Hdr_Len,
-#ifdef RFCNB_PRINT_DATA
- RFCNB_Pkt_Len(pkt -> data) - RFCNB_Pkt_Hdr_Len);
-#else
- 40);
-#endif
-
- if (Prot_Print_Routine != 0) { /* Print the rest of the packet */
-
- Prot_Print_Routine(fd, strcmp(dirn, "sent"), pkt, RFCNB_Pkt_Hdr_Len,
- RFCNB_Pkt_Len(pkt -> data) - RFCNB_Pkt_Hdr_Len);
-
- }
-
- break;
-
- case RFCNB_SESSION_REQUEST:
-
- fprintf(fd, "SESSION REQUEST: Length = %i\n",
- RFCNB_Pkt_Len(pkt -> data));
- RFCNB_NBName_To_AName((char *)(pkt -> data + RFCNB_Pkt_Called_Offset), lname);
- fprintf(fd, " Called Name: %s\n", lname);
- RFCNB_NBName_To_AName((char *)(pkt -> data + RFCNB_Pkt_Calling_Offset), lname);
- fprintf(fd, " Calling Name: %s\n", lname);
-
- break;
-
- case RFCNB_SESSION_ACK:
-
- fprintf(fd, "RFCNB SESSION ACK: Length = %i\n",
- RFCNB_Pkt_Len(pkt -> data));
-
- break;
-
- case RFCNB_SESSION_REJ:
- fprintf(fd, "RFCNB SESSION REJECT: Length = %i\n",
- RFCNB_Pkt_Len(pkt -> data));
-
- if (RFCNB_Pkt_Len(pkt -> data) < 1) {
- fprintf(fd, " Protocol Error, short Reject packet!\n");
- }
- else {
- fprintf(fd, " Error = %x\n", CVAL(pkt -> data, RFCNB_Pkt_Error_Offset));
- }
-
- break;
-
- case RFCNB_SESSION_RETARGET:
-
- fprintf(fd, "RFCNB SESSION RETARGET: Length = %i\n",
- RFCNB_Pkt_Len(pkt -> data));
-
- /* Print out the IP address etc and the port? */
-
- break;
-
- case RFCNB_SESSION_KEEP_ALIVE:
-
- fprintf(fd, "RFCNB SESSION KEEP ALIVE: Length = %i\n",
- RFCNB_Pkt_Len(pkt -> data));
- break;
-
- default:
-
- break;
- }
-
-}
-
-/* Resolve a name into an address */
-
-int RFCNB_Name_To_IP(char *host, struct in_addr *Dest_IP)
-
-{ int addr; /* Assumes IP4, 32 bit network addresses */
- struct hostent *hp;
-
- /* Use inet_addr to try to convert the address */
-
- if ((addr = inet_addr(host)) == INADDR_NONE) { /* Oh well, a good try :-) */
-
- /* Now try a name look up with gethostbyname */
-
- if ((hp = gethostbyname(host)) == NULL) { /* Not in DNS */
-
- /* Try NetBIOS name lookup, how the hell do we do that? */
-
- RFCNB_errno = RFCNBE_BadName; /* Is this right? */
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
- else { /* We got a name */
-
- memcpy((void *)Dest_IP, (void *)hp -> h_addr_list[0], sizeof(struct in_addr));
-
- }
- }
- else { /* It was an IP address */
-
- memcpy((void *)Dest_IP, (void *)&addr, sizeof(struct in_addr));
-
- }
-
- return 0;
-
-}
-
-/* Disconnect the TCP connection to the server */
-
-int RFCNB_Close(int socket)
-
-{
-
- close(socket);
-
- /* If we want to do error recovery, here is where we put it */
-
- return 0;
-
-}
-
-/* Connect to the server specified in the IP address.
- Not sure how to handle socket options etc. */
-
-int RFCNB_IP_Connect(struct in_addr Dest_IP, int port)
-
-{ struct sockaddr_in Socket;
- int fd;
-
- /* Create a socket */
-
- if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) { /* Handle the error */
-
- RFCNB_errno = RFCNBE_BadSocket;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
- }
-
- bzero((char *)&Socket, sizeof(Socket));
- memcpy((char *)&Socket.sin_addr, (char *)&Dest_IP, sizeof(Dest_IP));
-
- Socket.sin_port = htons(port);
- Socket.sin_family = PF_INET;
-
- /* Now connect to the destination */
-
- if (connect(fd, (struct sockaddr *)&Socket, sizeof(Socket)) < 0) { /* Error */
-
- close(fd);
- RFCNB_errno = RFCNBE_ConnectFailed;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
- }
-
- return(fd);
-
-}
-
-/* handle the details of establishing the RFCNB session with remote
- end
-
-*/
-
-int RFCNB_Session_Req(struct RFCNB_Con *con,
- char *Called_Name,
- char *Calling_Name,
- BOOL *redirect,
- struct in_addr *Dest_IP,
- int * port)
-
-{ char *sess_pkt;
-
- /* Response packet should be no more than 9 bytes, make 16 jic */
-
- char ln1[16], ln2[16], n1[32], n2[32], resp[16];
- int len;
- struct RFCNB_Pkt *pkt, res_pkt;
-
- /* We build and send the session request, then read the response */
-
- pkt = RFCNB_Alloc_Pkt(RFCNB_Pkt_Sess_Len);
-
- if (pkt == NULL) {
-
- return(RFCNBE_Bad); /* Leave the error that RFCNB_Alloc_Pkt gives) */
-
- }
-
- sess_pkt = pkt -> data; /* Get pointer to packet proper */
-
- sess_pkt[RFCNB_Pkt_Type_Offset] = RFCNB_SESSION_REQUEST;
- RFCNB_Put_Pkt_Len(sess_pkt, RFCNB_Pkt_Sess_Len-RFCNB_Pkt_Hdr_Len);
- sess_pkt[RFCNB_Pkt_N1Len_Offset] = 32;
- sess_pkt[RFCNB_Pkt_N2Len_Offset] = 32;
-
- RFCNB_CvtPad_Name(Called_Name, (sess_pkt + RFCNB_Pkt_Called_Offset));
- RFCNB_CvtPad_Name(Calling_Name, (sess_pkt + RFCNB_Pkt_Calling_Offset));
-
- /* Now send the packet */
-
-#ifdef RFCNB_DEBUG
-
- fprintf(stderr, "Sending packet: ");
-
-#endif
-
- if ((len = RFCNB_Put_Pkt(con, pkt, RFCNB_Pkt_Sess_Len)) < 0) {
-
- return(RFCNBE_Bad); /* Should be able to write that lot ... */
-
- }
-
-#ifdef RFCNB_DEBUG
-
- fprintf(stderr, "Getting packet.\n");
-
-#endif
-
- res_pkt.data = resp;
- res_pkt.len = sizeof(resp);
- res_pkt.next = NULL;
-
- if ((len = RFCNB_Get_Pkt(con, &res_pkt, sizeof(resp))) < 0) {
-
- return(RFCNBE_Bad);
-
- }
-
- /* Now analyze the packet ... */
-
- switch (RFCNB_Pkt_Type(resp)) {
-
- case RFCNB_SESSION_REJ: /* Didnt like us ... too bad */
-
- /* Why did we get rejected ? */
-
- switch (CVAL(resp,RFCNB_Pkt_Error_Offset)) {
-
- case 0x80:
- RFCNB_errno = RFCNBE_CallRejNLOCN;
- break;
- case 0x81:
- RFCNB_errno = RFCNBE_CallRejNLFCN;
- break;
- case 0x82:
- RFCNB_errno = RFCNBE_CallRejCNNP;
- break;
- case 0x83:
- RFCNB_errno = RFCNBE_CallRejInfRes;
- break;
- case 0x8F:
- RFCNB_errno = RFCNBE_CallRejUnSpec;
- break;
- default:
- RFCNB_errno = RFCNBE_ProtErr;
- break;
- }
-
- return(RFCNBE_Bad);
- break;
-
- case RFCNB_SESSION_ACK: /* Got what we wanted ... */
-
- return(0);
- break;
-
- case RFCNB_SESSION_RETARGET: /* Go elsewhere */
-
- *redirect = TRUE; /* Copy port and ip addr */
-
- memcpy(Dest_IP, (resp + RFCNB_Pkt_IP_Offset), sizeof(struct in_addr));
- *port = SVAL(resp, RFCNB_Pkt_Port_Offset);
-
- return(0);
- break;
-
- default: /* A protocol error */
-
- RFCNB_errno = RFCNBE_ProtErr;
- return(RFCNBE_Bad);
- break;
- }
-}
-
-
-
-
-
-
-
-
-
diff --git a/daemon/rfcnb/rfcnb-util.h b/daemon/rfcnb/rfcnb-util.h
deleted file mode 100644
index b3f2315..0000000
--- a/daemon/rfcnb/rfcnb-util.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Utility Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-void RFCNB_CvtPad_Name(char *name1, char *name2);
-
-void RFCNB_AName_To_NBName(char *AName, char *NBName);
-
-void RFCNB_NBName_To_AName(char *NBName, char *AName);
-
-void RFCNB_Print_Hex(FILE *fd, struct RFCNB_Pkt *pkt, int Offset, int Len);
-
-struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n);
-
-void RFCNB_Print_Pkt(FILE *fd, char *dirn, struct RFCNB_Pkt *pkt, int len);
-
-int RFCNB_Name_To_IP(char *host, struct in_addr *Dest_IP);
-
-int RFCNB_Close(int socket);
-
-int RFCNB_IP_Connect(struct in_addr Dest_IP, int port);
-
-int RFCNB_Session_Req(struct RFCNB_Con *con,
- char *Called_Name,
- char *Calling_Name,
- BOOL *redirect,
- struct in_addr *Dest_IP,
- int * port);
-
diff --git a/daemon/rfcnb/rfcnb.h b/daemon/rfcnb/rfcnb.h
deleted file mode 100644
index a7cfe1f..0000000
--- a/daemon/rfcnb/rfcnb.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- RFCNB Defines
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* Error responses */
-
-#include "rfcnb-error.h"
-#include "rfcnb-common.h"
-
-/* Defines we need */
-
-#define RFCNB_Default_Port 139
-
-/* Definition of routines we define */
-
-void *RFCNB_Call(char *Called_Name, char *Calling_Name, char *Called_Address,
- int port);
-
-int RFCNB_Send(void *Con_Handle, struct RFCNB_Pkt *Data, int Length);
-
-int RFCNB_Recv(void *Con_Handle, struct RFCNB_Pkt *Data, int Length);
-
-int RFCNB_Hangup(void *con_Handle);
-
-void *RFCNB_Listen();
-
-void RFCNB_Get_Error(char *buffer, int buf_len);
diff --git a/daemon/rfcnb/session.c b/daemon/rfcnb/session.c
deleted file mode 100644
index 981fda8..0000000
--- a/daemon/rfcnb/session.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation
-
- Version 1.0
- Session Routines ...
-
- Copyright (C) Richard Sharpe 1996
-
-*/
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-int RFCNB_errno = 0;
-int RFCNB_saved_errno = 0;
-#define RFCNB_ERRNO
-
-#include "std-includes.h"
-#include <netinet/tcp.h>
-#include "rfcnb-priv.h"
-#include "rfcnb-util.h"
-
-int RFCNB_Stats[RFCNB_MAX_STATS];
-
-void (*Prot_Print_Routine)() = NULL; /* Pointer to print routine */
-
-/* Set up a session with a remote name. We are passed Called_Name as a
- string which we convert to a NetBIOS name, ie space terminated, up to
- 16 characters only if we need to. If Called_Address is not empty, then
- we use it to connect to the remote end, but put in Called_Name ... Called
- Address can be a DNS based name, or a TCP/IP address ...
-*/
-
-void *RFCNB_Call(char *Called_Name, char *Calling_Name, char *Called_Address,
- int port)
-
-{ struct RFCNB_Con *con;
- struct in_addr Dest_IP;
- int Client;
- BOOL redirect; struct redirect_addr *redir_addr;
- char *Service_Address;
-
- /* Now, we really should look up the port in /etc/services ... */
-
- if (port == 0) port = RFCNB_Default_Port;
-
- /* Create a connection structure first */
-
- if ((con = (struct RFCNB_Con *)malloc(sizeof(struct RFCNB_Con))) == NULL) { /* Error in size */
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- return(NULL);
-
- }
-
- con -> fd = -0; /* no descriptor yet */
- con -> err = 0; /* no error yet */
- con -> timeout = 0; /* no timeout */
- con -> redirects = 0;
-
- /* Resolve that name into an IP address */
-
- Service_Address = Called_Name;
- if (strcmp(Called_Address, "") != 0) { /* If the Called Address = "" */
- Service_Address = Called_Address;
- }
-
- if ((errno = RFCNB_Name_To_IP(Service_Address, &Dest_IP)) < 0) { /* Error */
-
- /* No need to modify RFCNB_errno as it was done by RFCNB_Name_To_IP */
-
- return(NULL);
-
- }
-
- /* Now connect to the remote end */
-
- redirect = TRUE; /* Fudge this one so we go once through */
-
- while (redirect) { /* Connect and get session info etc */
-
- redirect = FALSE; /* Assume all OK */
-
- /* Build the redirect info. First one is first addr called */
- /* And tack it onto the list of addresses we called */
-
- if ((redir_addr = (struct redirect_addr *)malloc(sizeof(struct redirect_addr))) == NULL) { /* Could not get space */
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- return(NULL);
-
- }
-
- memcpy((char *)&(redir_addr -> ip_addr), (char *)&Dest_IP, sizeof(Dest_IP));
- redir_addr -> port = port;
- redir_addr -> next = NULL;
-
- if (con -> redirect_list == NULL) { /* Stick on head */
-
- con -> redirect_list = con -> last_addr = redir_addr;
-
- } else {
-
- con -> last_addr -> next = redir_addr;
- con -> last_addr = redir_addr;
-
- }
-
- /* Now, make that connection */
-
- if ((Client = RFCNB_IP_Connect(Dest_IP, port)) < 0) { /* Error */
-
- /* No need to modify RFCNB_errno as it was done by RFCNB_IP_Connect */
-
- return(NULL);
-
- }
-
- con -> fd = Client;
-
- /* Now send and handle the RFCNB session request */
- /* If we get a redirect, we will comeback with redirect true
- and a new IP address in DEST_IP */
-
- if ((errno = RFCNB_Session_Req(con,
- Called_Name,
- Calling_Name,
- &redirect, &Dest_IP, &port)) < 0) {
-
- /* No need to modify RFCNB_errno as it was done by RFCNB_Session.. */
-
- return(NULL);
-
- }
-
- if (redirect) {
-
- /* We have to close the connection, and then try again */
-
- (con -> redirects)++;
-
- RFCNB_Close(con -> fd); /* Close it */
-
- }
- }
-
- return(con);
-
-}
-
-/* We send a packet to the other end ... for the moment, we treat the
- data as a series of pointers to blocks of data ... we should check the
- length ... */
-
-int RFCNB_Send(struct RFCNB_Con *Con_Handle, struct RFCNB_Pkt *udata, int Length)
-
-{ struct RFCNB_Pkt *pkt; char *hdr;
- int len;
-
- /* Plug in the header and send the data */
-
- pkt = RFCNB_Alloc_Pkt(RFCNB_Pkt_Hdr_Len);
-
- if (pkt == NULL) {
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- pkt -> next = udata; /* The user data we want to send */
-
- hdr = pkt -> data;
-
- /* Following crap is for portability across multiple UNIX machines */
-
- *(hdr + RFCNB_Pkt_Type_Offset) = RFCNB_SESSION_MESSAGE;
- RFCNB_Put_Pkt_Len(hdr, Length);
-
-#ifdef RFCNB_DEBUG
-
- fprintf(stderr, "Sending packet: ");
-
-#endif
-
- if ((len = RFCNB_Put_Pkt(Con_Handle, pkt, Length + RFCNB_Pkt_Hdr_Len)) < 0) {
-
- /* No need to change RFCNB_errno as it was done by put_pkt ... */
-
- return(RFCNBE_Bad); /* Should be able to write that lot ... */
-
- }
-
- /* Now we have sent that lot, let's get rid of the RFCNB Header and return */
-
- pkt -> next = NULL;
-
- RFCNB_Free_Pkt(pkt);
-
- return(len);
-
-}
-
-/* We pick up a message from the internet ... We have to worry about
- non-message packets ... */
-
-int RFCNB_Recv(void *con_Handle, struct RFCNB_Pkt *Data, int Length)
-
-{ struct RFCNB_Pkt *pkt; struct RFCNB_Hdr *hdr;
- int ret_len;
-
- if (con_Handle == NULL){
-
- RFCNB_errno = RFCNBE_BadHandle;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- /* Now get a packet from below. We allocate a header first */
-
- /* Plug in the header and send the data */
-
- pkt = RFCNB_Alloc_Pkt(RFCNB_Pkt_Hdr_Len);
-
- if (pkt == NULL) {
-
- RFCNB_errno = RFCNBE_NoSpace;
- RFCNB_saved_errno = errno;
- return(RFCNBE_Bad);
-
- }
-
- pkt -> next = Data; /* Plug in the data portion */
-
- if ((ret_len = RFCNB_Get_Pkt(con_Handle, pkt, Length + RFCNB_Pkt_Hdr_Len)) < 0) {
-
-#ifdef RFCNB_DEBUG
- fprintf(stderr, "Bad packet return in RFCNB_Recv... \n");
-#endif
-
- return(RFCNBE_Bad);
-
- }
-
- /* We should check that we go a message and not a keep alive */
-
- pkt -> next = NULL;
-
- RFCNB_Free_Pkt(pkt);
-
- return(ret_len);
-
-}
-
-/* We just disconnect from the other end, as there is nothing in the RFCNB */
-/* protocol that specifies any exchange as far as I can see */
-
-int RFCNB_Hangup(struct RFCNB_Con *con_Handle)
-
-{
-
- if (con_Handle != NULL) {
- RFCNB_Close(con_Handle -> fd); /* Could this fail? */
- free(con_Handle);
- }
-
- return 0;
-
-
-}
-
-/* Set TCP_NODELAY on the socket */
-
-int RFCNB_Set_Sock_NoDelay(struct RFCNB_Con *con_Handle, BOOL yn)
-
-{
-
- return(setsockopt(con_Handle -> fd, IPPROTO_TCP, TCP_NODELAY,
- (char *)&yn, sizeof(yn)));
-
-}
-
-
-/* Listen for a connection on a port???, when */
-/* the connection comes in, we return with the connection */
-
-void *RFCNB_Listen()
-
-{
-
-}
-
-/* Pick up the last error response as a string, hmmm, this routine should */
-/* have been different ... */
-
-void RFCNB_Get_Error(char *buffer, int buf_len)
-
-{
-
- if (RFCNB_saved_errno <= 0) {
- sprintf(buffer, "%s", RFCNB_Error_Strings[RFCNB_errno]);
- }
- else {
- sprintf(buffer, "%s\n\terrno:%s", RFCNB_Error_Strings[RFCNB_errno],
- strerror(RFCNB_saved_errno));
- }
-
-}
-
-/* Pick up the last error response and returns as a code */
-
-int RFCNB_Get_Last_Error()
-
-{
-
- return(RFCNB_errno);
-
-}
-
-/* Pick up saved errno as well */
-
-int RFCNB_Get_Last_Errno()
-
-{
-
- return(RFCNB_saved_errno);
-
-}
-
-/* Pick up the last error response and return in string ... */
-
-int RFCNB_Get_Error_Msg(int code, char *msg_buf, int len)
-
-{
-
- strncpy(msg_buf, RFCNB_Error_Strings[abs(code)], len);
-
-}
-
-/* Register a higher level protocol print routine */
-
-void RFCNB_Register_Print_Routine(void (*fn)())
-
-{
-
- Prot_Print_Routine = fn;
-
-}
diff --git a/daemon/rfcnb/std-includes.h b/daemon/rfcnb/std-includes.h
deleted file mode 100644
index e90e60a..0000000
--- a/daemon/rfcnb/std-includes.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* RFCNB Standard includes ... */
-/*
-
- RFCNB Standard Includes
-
- Copyright (C) 1996, Richard Sharpe
-
-/* One day we will conditionalize these on OS types ... */
-
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#define BOOL int
-typedef short int16;
-
-#include <netdb.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <signal.h>
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define TRUE 1
-#define FALSE 0
-
-/* Pick up define for INADDR_NONE */
-
-#ifndef INADDR_NONE
-#define INADDR_NONE -1
-#endif
diff --git a/daemon/rfcnb/x_Makefile b/daemon/rfcnb/x_Makefile
deleted file mode 100644
index 97a01be..0000000
--- a/daemon/rfcnb/x_Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# Find the LDFLAGS entry for your system type and uncomment it ...
-
-CC = gcc
-
-#CFLAGS = -g -DRFCNB_DEBUG
-# Uncomment the above and recomment the below if you want debugging
-CFLAGS = -g
-
-#CFLAGS = -g -DRFCNB_DEBUG -DRFCNB_PRINT_DATA
-# Different LDFLAGS for different systems:
-# ULTRIX and Digital UNIX (OSF/1)
-# LDFALGS =
-#
-# Linux
-# LDFLAGS =
-#
-# Solaris and maybe SunOS???
-# LDFLAGS = -lsocket -lnsl
-#
-# HP-UX ???
-# LDFLAGS = ???
-
-INCLUDES = rfcnb.h rfcnb-priv.h rfcnb-util.h rfcnb-io.h
-
-.SUFFIXES: .c .o .h
-
-all: test_rfcnb
-
-.c.o: $(INCLUDES)
- @echo Compiling $*.c
- @$(CC) $(CFLAGS) -c $*.c
-
-test_rfcnb: test_rfcnb.o session.o rfcnb-util.o rfcnb-io.o
- $(CC) $(CFLAGS) $(LDFLAGS) -o test_rfcnb test_rfcnb.o session.o rfcnb-util.o rfcnb-io.o
-
-clean:
- rm *.o test_rfcnb
-