--- /dev/null
+See the respective source files to find out which copyrights apply.
+
+------------------------------------------------------------------------------
+Copyright (C) 2002 Roaring Penguin Software Inc.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose and without fee is hereby granted, provided that this
+copyright and permission notice appear on all copies and supporting
+documentation, the name of Roaring Penguin Software Inc. not be used
+in advertising or publicity pertaining to distribution of the program
+without specific prior permission, and notice be given in supporting
+documentation that copying and distribution is by permission of
+Roaring Penguin Software Inc..
+
+Roaring Penguin Software Inc. makes no representations about the
+suitability of this software for any purpose. It is provided "as is"
+without express or implied warranty.
+
+------------------------------------------------------------------------------
+Copyright (C) 1995,1996,1997,1998 Lars Fenneberg <lf@elemental.net>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose and without fee is hereby granted, provided that this copyright and
+permission notice appear on all copies and supporting documentation, the
+name of Lars Fenneberg not be used in advertising or publicity pertaining to
+distribution of the program without specific prior permission, and notice be
+given in supporting documentation that copying and distribution is by
+permission of Lars Fenneberg.
+
+Lars Fenneberg makes no representations about the suitability of this
+software for any purpose. It is provided "as is" without express or implied
+warranty.
+
+------------------------------------------------------------------------------
+Copyright 1992 Livingston Enterprises, Inc.
+Livingston Enterprises, Inc. 6920 Koll Center Parkway Pleasanton, CA 94566
+
+Permission to use, copy, modify, and distribute this software for any
+purpose and without fee is hereby granted, provided that this copyright
+and permission notice appear on all copies and supporting documentation,
+the name of Livingston Enterprises, Inc. not be used in advertising or
+publicity pertaining to distribution of the program without specific
+prior permission, and notice be given in supporting documentation that
+copying and distribution is by permission of Livingston Enterprises, Inc.
+
+Livingston Enterprises, Inc. makes no representations about the suitability
+of this software for any purpose. It is provided "as is" without express
+or implied warranty.
+------------------------------------------------------------------------------
+[C] The Regents of the University of Michigan and Merit Network, Inc. 1992,
+1993, 1994, 1995 All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice and this permission notice appear in all
+copies of the software and derivative works or modified versions thereof,
+and that both the copyright notice and this permission and disclaimer
+notice appear in supporting documentation.
+
+THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE
+UNIVERSITY OF MICHIGAN AND MERIT NETWORK, INC. DO NOT WARRANT THAT THE
+FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR
+THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the
+University of Michigan and Merit Network, Inc. shall not be liable for any
+special, indirect, incidental or consequential damages with respect to any
+claim by Licensee or any third party arising from use of the software.
+------------------------------------------------------------------------------
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991.
+All rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+------------------------------------------------------------------------------
MANDIR = $(DESTDIR)/share/man/man8
LIBDIR = $(DESTDIR)/lib/pppd/$(VERSION)
+VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h)
+
INSTALL = install
PLUGIN=radius.so radattr.so radrealms.so
-CFLAGS=-I../.. -I../../../include -Iradiusclient/include -O2
+CFLAGS=-I. -I../.. -I../../../include -O2 -fPIC -DRC_LOG_FACILITY=LOG_DAEMON
# Uncomment the next line to include support for Microsoft's
# MS-CHAP authentication protocol.
all: $(PLUGIN)
install: all
- $(MAKE) $(MFLAGS) -C radiusclient install
$(INSTALL) -d -m 755 $(LIBDIR)
$(INSTALL) -s -c -m 755 radius.so $(LIBDIR)
$(INSTALL) -s -c -m 755 radattr.so $(LIBDIR)
$(INSTALL) -c -m 444 pppd-radius.8 $(MANDIR)
$(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)
-radius.so: radiusclient/lib/.libs/libradiusclient.a radius.o
- gcc -o radius.so -shared radius.o radiusclient/lib/.libs/libradiusclient.a
+radius.so: radius.o libradiusclient.a
+ $(CC) -o radius.so -shared radius.o libradiusclient.a
radattr.so: radattr.o
- gcc -o radattr.so -shared radattr.o
+ $(CC) -o radattr.so -shared radattr.o
radrealms.so: radrealms.o
- gcc -o radrealms.so -shared radrealms.o
-
-radius.o: radius.c
- gcc $(CFLAGS) -c -o radius.o -fPIC radius.c
-
-radattr.o: radattr.c
- gcc $(CFLAGS) -c -o radattr.o -fPIC radattr.c
-
-radrealms.o: radrealms.c
- gcc $(CFLAGS) -c -o radrealms.o -fPIC radrealms.c
+ $(CC) -o radrealms.so -shared radrealms.o
-radiusclient/lib/.libs/libradiusclient.a:
- test -r radiusclient/Makefile || \
- (cd radiusclient; \
- ./configure --prefix=@PREFIX@ \
- --sysconfdir=@SYSCONF@ \
- --enable-shared \
- --enable-static)
- $(MAKE) -C radiusclient
+CLIENTOBJS = avpair.o buildreq.o config.o dict.o ip_util.o \
+ clientid.o sendserver.o lock.o util.o md5.o
+libradiusclient.a: $(CLIENTOBJS)
+ $(AR) rv $@ $?
clean:
- $(MAKE) $(MFLAGS) -C radiusclient clean
- rm -f *.o *.so
+ rm -f *.o *.so *.a
distclean:
- rm -f *.o *.so
- $(MAKE) $(MFLAGS) -C radiusclient distclean
+ rm -f *.o *.so *.a
dist-clean: distclean
--- /dev/null
+/*
+ * $Id: avpair.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+static void rc_extract_vendor_specific_attributes(int attrlen,
+ unsigned char *ptr,
+ VALUE_PAIR **vp);
+/*
+ * Function: rc_avpair_add
+ *
+ * Purpose: add an attribute-value pair to the given list.
+ *
+ * Returns: pointer to added a/v pair upon success, NULL pointer upon failure.
+ *
+ * Remarks: Always appends the new pair to the end of the list.
+ *
+ */
+
+VALUE_PAIR *rc_avpair_add (VALUE_PAIR **list, int attrid, void *pval, int len,
+ int vendorcode)
+{
+ VALUE_PAIR *vp;
+
+ vp = rc_avpair_new (attrid, pval, len, vendorcode);
+
+ if (vp != (VALUE_PAIR *) NULL)
+ {
+ rc_avpair_insert (list, (VALUE_PAIR *) NULL, vp);
+ }
+
+ return vp;
+
+}
+
+/*
+ * Function: rc_avpair_assign
+ *
+ * Purpose: assign the given value to an attribute-value pair.
+ *
+ * Returns: 0 on success,
+ * -1 on failure.
+ *
+ */
+
+int rc_avpair_assign (VALUE_PAIR *vp, void *pval, int len)
+{
+ int result = -1;
+
+ switch (vp->type)
+ {
+ case PW_TYPE_STRING:
+
+ if (((len == 0) && (strlen ((char *) pval)) > AUTH_STRING_LEN)
+ || (len > AUTH_STRING_LEN)) {
+ error("rc_avpair_assign: bad attribute length");
+ return result;
+ }
+
+ if (len > 0) {
+ memcpy(vp->strvalue, (char *)pval, len);
+ vp->strvalue[len] = '\0';
+ vp->lvalue = len;
+ } else {
+ strncpy (vp->strvalue, (char *) pval, AUTH_STRING_LEN);
+ vp->lvalue = strlen((char *) pval);
+ }
+
+ result = 0;
+ break;
+
+ case PW_TYPE_DATE:
+ case PW_TYPE_INTEGER:
+ case PW_TYPE_IPADDR:
+
+ vp->lvalue = * (UINT4 *) pval;
+
+ result = 0;
+ break;
+
+ default:
+ error("rc_avpair_assign: unknown attribute %d", vp->type);
+ }
+ return result;
+}
+
+/*
+ * Function: rc_avpair_new
+ *
+ * Purpose: make a new attribute-value pair with given parameters.
+ *
+ * Returns: pointer to generated a/v pair when successful, NULL when failure.
+ *
+ */
+
+VALUE_PAIR *rc_avpair_new (int attrid, void *pval, int len, int vendorcode)
+{
+ VALUE_PAIR *vp = (VALUE_PAIR *) NULL;
+ DICT_ATTR *pda;
+
+ if ((pda = rc_dict_getattr (attrid, vendorcode)) == (DICT_ATTR *) NULL)
+ {
+ error("rc_avpair_new: unknown attribute %d", attrid);
+ }
+ else
+ {
+ if ((vp = (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR)))
+ != (VALUE_PAIR *) NULL)
+ {
+ strncpy (vp->name, pda->name, sizeof (vp->name));
+ vp->attribute = attrid;
+ vp->vendorcode = vendorcode;
+ vp->next = (VALUE_PAIR *) NULL;
+ vp->type = pda->type;
+ if (rc_avpair_assign (vp, pval, len) == 0)
+ {
+ return vp;
+ }
+ free (vp);
+ vp = (VALUE_PAIR *) NULL;
+ }
+ else
+ novm("rc_avpair_new");
+ }
+ return vp;
+}
+
+/*
+ *
+ * Function: rc_avpair_gen
+ *
+ * Purpose: takes attribute/value pairs from buffer and builds a
+ * value_pair list using allocated memory.
+ *
+ * Returns: value_pair list or NULL on failure
+ */
+
+VALUE_PAIR *rc_avpair_gen (AUTH_HDR *auth)
+{
+ int length;
+ int x_len;
+ int attribute;
+ int attrlen;
+ UINT4 lvalue;
+ unsigned char *x_ptr;
+ unsigned char *ptr;
+ DICT_ATTR *attr;
+ VALUE_PAIR *vp;
+ VALUE_PAIR *pair;
+ unsigned char hex[3]; /* For hex string conversion. */
+ char buffer[512];
+
+ /*
+ * Extract attribute-value pairs
+ */
+ ptr = auth->data;
+ length = ntohs ((unsigned short) auth->length) - AUTH_HDR_LEN;
+ vp = (VALUE_PAIR *) NULL;
+
+ while (length > 0)
+ {
+ attribute = *ptr++;
+ attrlen = *ptr++;
+ attrlen -= 2;
+ if (attrlen < 0)
+ {
+ error("rc_avpair_gen: received attribute with invalid length");
+ break;
+ }
+
+ /* Handle vendor-specific specially */
+ if (attribute == PW_VENDOR_SPECIFIC) {
+ rc_extract_vendor_specific_attributes(attrlen, ptr, &vp);
+ ptr += attrlen;
+ length -= (attrlen + 2);
+ continue;
+ }
+ if ((attr = rc_dict_getattr (attribute, VENDOR_NONE)) == (DICT_ATTR *) NULL)
+ {
+ *buffer= '\0'; /* Initial length. */
+ for (x_ptr = ptr, x_len = attrlen ;
+ x_len > 0 ;
+ x_len--, x_ptr++)
+ {
+ sprintf (hex, "%2.2X", *x_ptr);
+ strcat (buffer, hex);
+ }
+ warn("rc_avpair_gen: received unknown attribute %d of length %d: 0x%s",
+ attribute, attrlen, buffer);
+ }
+ else
+ {
+ if ((pair =
+ (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR))) ==
+ (VALUE_PAIR *) NULL)
+ {
+ novm("rc_avpair_gen");
+ rc_avpair_free(vp);
+ return NULL;
+ }
+ strcpy (pair->name, attr->name);
+ pair->attribute = attr->value;
+ pair->vendorcode = VENDOR_NONE;
+ pair->type = attr->type;
+ pair->next = (VALUE_PAIR *) NULL;
+
+ switch (attr->type)
+ {
+
+ case PW_TYPE_STRING:
+ memcpy (pair->strvalue, (char *) ptr, (size_t) attrlen);
+ pair->strvalue[attrlen] = '\0';
+ pair->lvalue = attrlen;
+ rc_avpair_insert (&vp, (VALUE_PAIR *) NULL, pair);
+ break;
+
+ case PW_TYPE_INTEGER:
+ case PW_TYPE_IPADDR:
+ memcpy ((char *) &lvalue, (char *) ptr,
+ sizeof (UINT4));
+ pair->lvalue = ntohl (lvalue);
+ rc_avpair_insert (&vp, (VALUE_PAIR *) NULL, pair);
+ break;
+
+ default:
+ warn("rc_avpair_gen: %s has unknown type", attr->name);
+ free (pair);
+ break;
+ }
+
+ }
+ ptr += attrlen;
+ length -= attrlen + 2;
+ }
+ return (vp);
+}
+
+/*
+ * Function: rc_extract_vendor_specific_attributes
+ *
+ * Purpose: Extracts vendor-specific attributes, assuming they are in
+ * the "SHOULD" format recommended by RCF 2138.
+ *
+ * Returns: found value_pair
+ *
+ */
+static void rc_extract_vendor_specific_attributes(int attrlen,
+ unsigned char *ptr,
+ VALUE_PAIR **vp)
+{
+ int vendor_id;
+ int vtype;
+ int vlen;
+ UINT4 lvalue;
+ DICT_ATTR *attr;
+ VALUE_PAIR *pair;
+
+ /* ptr is sitting at vendor-ID */
+ if (attrlen < 8) {
+ /* Nothing to see here... */
+ return;
+ }
+
+ /* High-order octet of Vendor-Id must be zero (RFC2138) */
+ if (*ptr) {
+ return;
+ }
+
+ /* Extract vendor_id */
+ vendor_id = (int) (
+ ((unsigned int) ptr[1]) * 256 * 256 +
+ ((unsigned int) ptr[2]) * 256 +
+ ((unsigned int) ptr[3]));
+ /* Bump ptr up to contents */
+ ptr += 4;
+
+ /* Set attrlen to length of data */
+ attrlen -= 4;
+ for (; attrlen; attrlen -= vlen+2, ptr += vlen) {
+ vtype = *ptr++;
+ vlen = *ptr++;
+ vlen -= 2;
+ if (vlen < 0 || vlen > attrlen - 2) {
+ /* Do not log an error. We are supposed to be able to cope with
+ arbitrary vendor-specific gunk */
+ return;
+ }
+ /* Looks plausible... */
+ if ((attr = rc_dict_getattr(vtype, vendor_id)) == NULL) {
+ continue;
+ }
+
+ /* TODO: Check that length matches data size!!!!! */
+ pair = (VALUE_PAIR *) malloc(sizeof(VALUE_PAIR));
+ if (!pair) {
+ novm("rc_avpair_gen");
+ return;
+ }
+ strcpy(pair->name, attr->name);
+ pair->attribute = attr->value;
+ pair->vendorcode = vendor_id;
+ pair->type = attr->type;
+ pair->next = NULL;
+ switch (attr->type) {
+ case PW_TYPE_STRING:
+ memcpy (pair->strvalue, (char *) ptr, (size_t) vlen);
+ pair->strvalue[vlen] = '\0';
+ pair->lvalue = vlen;
+ rc_avpair_insert (vp, (VALUE_PAIR *) NULL, pair);
+ break;
+
+ case PW_TYPE_INTEGER:
+ case PW_TYPE_IPADDR:
+ memcpy ((char *) &lvalue, (char *) ptr,
+ sizeof (UINT4));
+ pair->lvalue = ntohl (lvalue);
+ rc_avpair_insert (vp, (VALUE_PAIR *) NULL, pair);
+ break;
+
+ default:
+ warn("rc_avpair_gen: %s has unknown type", attr->name);
+ free (pair);
+ break;
+ }
+ }
+}
+
+/*
+ * Function: rc_avpair_get
+ *
+ * Purpose: Find the first attribute value-pair (which matches the given
+ * attribute) from the specified value-pair list.
+ *
+ * Returns: found value_pair
+ *
+ */
+
+VALUE_PAIR *rc_avpair_get (VALUE_PAIR *vp, UINT4 attr)
+{
+ for (; vp != (VALUE_PAIR *) NULL && vp->attribute != attr; vp = vp->next)
+ {
+ continue;
+ }
+ return (vp);
+}
+
+/*
+ * Function: rc_avpair_copy
+ *
+ * Purpose: Return a copy of the existing list "p" ala strdup().
+ *
+ */
+VALUE_PAIR *rc_avpair_copy(VALUE_PAIR *p)
+{
+ VALUE_PAIR *vp, *fp = NULL, *lp = NULL;
+
+ while (p) {
+ vp = malloc(sizeof(VALUE_PAIR));
+ if (!vp) {
+ novm("rc_avpair_copy");
+ return NULL; /* leaks a little but so what */
+ }
+ *vp = *p;
+ if (!fp)
+ fp = vp;
+ if (lp)
+ lp->next = vp;
+ lp = vp;
+ p = p->next;
+ }
+
+ return fp;
+}
+
+/*
+ * Function: rc_avpair_insert
+ *
+ * Purpose: Given the address of an existing list "a" and a pointer
+ * to an entry "p" in that list, add the list "b" to
+ * the "a" list after the "p" entry. If "p" is NULL, add
+ * the list "b" to the end of "a".
+ *
+ */
+
+void rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b)
+{
+ VALUE_PAIR *this_node = NULL;
+ VALUE_PAIR *vp;
+
+ if (*a == (VALUE_PAIR *) NULL)
+ {
+ *a = b;
+ return;
+ }
+
+ if (!b)
+ return;
+
+ vp = *a;
+
+ if ( p == (VALUE_PAIR *) NULL) /* run to end of "a" list */
+ {
+ while (vp != (VALUE_PAIR *) NULL)
+ {
+ this_node = vp;
+ vp = vp->next;
+ }
+ }
+ else /* look for the "p" entry in the "a" list (or run to end) */
+ {
+ this_node = *a;
+ while (this_node != (VALUE_PAIR *) NULL)
+ {
+ if (this_node == p)
+ {
+ break;
+ }
+ this_node = this_node->next;
+ }
+ }
+
+ /* add "b" at this_node */
+ vp = this_node->next;
+ this_node->next = b;
+
+ /* run to end of "b" and connect the rest of "a" */
+ while (b->next)
+ b = b->next;
+ b->next = vp;
+
+ return;
+}
+
+/*
+ * Function: rc_avpair_free
+ *
+ * Purpose: frees all value_pairs in the list
+ *
+ */
+
+void rc_avpair_free (VALUE_PAIR *pair)
+{
+ VALUE_PAIR *next;
+
+ while (pair != (VALUE_PAIR *) NULL)
+ {
+ next = pair->next;
+ free (pair);
+ pair = next;
+ }
+}
+
+/*
+ * Function: rc_fieldcpy
+ *
+ * Purpose: Copy a data field from the buffer. Advance the buffer
+ * past the data field.
+ *
+ */
+
+static void rc_fieldcpy (char *string, char **uptr)
+{
+ char *ptr;
+
+ ptr = *uptr;
+ if (*ptr == '"')
+ {
+ ptr++;
+ while (*ptr != '"' && *ptr != '\0' && *ptr != '\n')
+ {
+ *string++ = *ptr++;
+ }
+ *string = '\0';
+ if (*ptr == '"')
+ {
+ ptr++;
+ }
+ *uptr = ptr;
+ return;
+ }
+
+ while (*ptr != ' ' && *ptr != '\t' && *ptr != '\0' && *ptr != '\n' &&
+ *ptr != '=' && *ptr != ',')
+ {
+ *string++ = *ptr++;
+ }
+ *string = '\0';
+ *uptr = ptr;
+ return;
+}
+
+
+/*
+ * Function: rc_avpair_parse
+ *
+ * Purpose: parses the buffer to extract the attribute-value pairs.
+ *
+ * Returns: 0 = successful parse of attribute-value pair,
+ * -1 = syntax (or other) error detected.
+ *
+ */
+
+#define PARSE_MODE_NAME 0
+#define PARSE_MODE_EQUAL 1
+#define PARSE_MODE_VALUE 2
+#define PARSE_MODE_INVALID 3
+
+int rc_avpair_parse (char *buffer, VALUE_PAIR **first_pair)
+{
+ int mode;
+ char attrstr[AUTH_ID_LEN];
+ char valstr[AUTH_ID_LEN];
+ DICT_ATTR *attr = NULL;
+ DICT_VALUE *dval;
+ VALUE_PAIR *pair;
+ VALUE_PAIR *link;
+ struct tm *tm;
+ time_t timeval;
+
+ mode = PARSE_MODE_NAME;
+ while (*buffer != '\n' && *buffer != '\0')
+ {
+ if (*buffer == ' ' || *buffer == '\t')
+ {
+ buffer++;
+ continue;
+ }
+
+ switch (mode)
+ {
+ case PARSE_MODE_NAME: /* Attribute Name */
+ rc_fieldcpy (attrstr, &buffer);
+ if ((attr =
+ rc_dict_findattr (attrstr)) == (DICT_ATTR *) NULL)
+ {
+ error("rc_avpair_parse: unknown attribute");
+ if (*first_pair) {
+ rc_avpair_free(*first_pair);
+ *first_pair = (VALUE_PAIR *) NULL;
+ }
+ return (-1);
+ }
+ mode = PARSE_MODE_EQUAL;
+ break;
+
+ case PARSE_MODE_EQUAL: /* Equal sign */
+ if (*buffer == '=')
+ {
+ mode = PARSE_MODE_VALUE;
+ buffer++;
+ }
+ else
+ {
+ error("rc_avpair_parse: missing or misplaced equal sign");
+ if (*first_pair) {
+ rc_avpair_free(*first_pair);
+ *first_pair = (VALUE_PAIR *) NULL;
+ }
+ return (-1);
+ }
+ break;
+
+ case PARSE_MODE_VALUE: /* Value */
+ rc_fieldcpy (valstr, &buffer);
+
+ if ((pair =
+ (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR)))
+ == (VALUE_PAIR *) NULL)
+ {
+ novm("rc_avpair_parse");
+ if (*first_pair) {
+ rc_avpair_free(*first_pair);
+ *first_pair = (VALUE_PAIR *) NULL;
+ }
+ return (-1);
+ }
+ strcpy (pair->name, attr->name);
+ pair->attribute = attr->value;
+ pair->type = attr->type;
+ pair->vendorcode = attr->vendorcode;
+
+ switch (pair->type)
+ {
+
+ case PW_TYPE_STRING:
+ strcpy (pair->strvalue, valstr);
+ pair->lvalue = strlen(valstr);
+ break;
+
+ case PW_TYPE_INTEGER:
+ if (isdigit (*valstr))
+ {
+ pair->lvalue = atoi (valstr);
+ }
+ else
+ {
+ if ((dval = rc_dict_findval (valstr))
+ == (DICT_VALUE *) NULL)
+ {
+ error("rc_avpair_parse: unknown attribute value: %s", valstr);
+ if (*first_pair) {
+ rc_avpair_free(*first_pair);
+ *first_pair = (VALUE_PAIR *) NULL;
+ }
+ free (pair);
+ return (-1);
+ }
+ else
+ {
+ pair->lvalue = dval->value;
+ }
+ }
+ break;
+
+ case PW_TYPE_IPADDR:
+ pair->lvalue = rc_get_ipaddr(valstr);
+ break;
+
+ case PW_TYPE_DATE:
+ timeval = time (0);
+ tm = localtime (&timeval);
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ rc_str2tm (valstr, tm);
+#ifdef TIMELOCAL
+ pair->lvalue = (UINT4) timelocal (tm);
+#else /* TIMELOCAL */
+ pair->lvalue = (UINT4) mktime (tm);
+#endif /* TIMELOCAL */
+ break;
+
+ default:
+ error("rc_avpair_parse: unknown attribute type %d", pair->type);
+ if (*first_pair) {
+ rc_avpair_free(*first_pair);
+ *first_pair = (VALUE_PAIR *) NULL;
+ }
+ free (pair);
+ return (-1);
+ }
+ pair->next = (VALUE_PAIR *) NULL;
+
+ if (*first_pair == (VALUE_PAIR *) NULL)
+ {
+ *first_pair = pair;
+ }
+ else
+ {
+ link = *first_pair;
+ while (link->next != (VALUE_PAIR *) NULL)
+ {
+ link = link->next;
+ }
+ link->next = pair;
+ }
+
+ mode = PARSE_MODE_NAME;
+ break;
+
+ default:
+ mode = PARSE_MODE_NAME;
+ break;
+ }
+ }
+ return (0);
+}
+
+/*
+ * Function: rc_avpair_tostr
+ *
+ * Purpose: Translate an av_pair into two strings
+ *
+ * Returns: 0 on success, -1 on failure
+ *
+ */
+
+int rc_avpair_tostr (VALUE_PAIR *pair, char *name, int ln, char *value, int lv)
+{
+ DICT_VALUE *dval;
+ char buffer[32];
+ struct in_addr inad;
+ unsigned char *ptr;
+
+ *name = *value = '\0';
+
+ if (!pair || pair->name[0] == '\0') {
+ error("rc_avpair_tostr: pair is NULL or empty");
+ return (-1);
+ }
+
+ strncpy(name, pair->name, (size_t) ln);
+
+ switch (pair->type)
+ {
+ case PW_TYPE_STRING:
+ lv--;
+ ptr = (unsigned char *) pair->strvalue;
+ while (*ptr != '\0')
+ {
+ if (!(isprint (*ptr)))
+ {
+ sprintf (buffer, "\\%03o", *ptr);
+ strncat(value, buffer, (size_t) lv);
+ lv -= 4;
+ if (lv < 0) break;
+ }
+ else
+ {
+ strncat(value, ptr, 1);
+ lv--;
+ if (lv < 0) break;
+ }
+ ptr++;
+ }
+ break;
+
+ case PW_TYPE_INTEGER:
+ dval = rc_dict_getval (pair->lvalue, pair->name);
+ if (dval != (DICT_VALUE *) NULL)
+ {
+ strncpy(value, dval->name, (size_t) lv-1);
+ }
+ else
+ {
+ sprintf (buffer, "%ld", pair->lvalue);
+ strncpy(value, buffer, (size_t) lv);
+ }
+ break;
+
+ case PW_TYPE_IPADDR:
+ inad.s_addr = htonl(pair->lvalue);
+ strncpy (value, inet_ntoa (inad), (size_t) lv-1);
+ break;
+
+ case PW_TYPE_DATE:
+ strftime (buffer, sizeof (buffer), "%m/%d/%y %H:%M:%S",
+ gmtime ((time_t *) & pair->lvalue));
+ strncpy(value, buffer, lv-1);
+ break;
+
+ default:
+ error("rc_avpair_tostr: unknown attribute type %d", pair->type);
+ return (-1);
+ break;
+ }
+
+ return 0;
+}
+
+/*
+ * Function: rc_avpair_readin
+ *
+ * Purpose: get a sequence of attribute value pairs from the file input
+ * and make them into a list of value_pairs
+ *
+ */
+
+VALUE_PAIR *rc_avpair_readin(FILE *input)
+{
+ VALUE_PAIR *vp = NULL;
+ char buffer[1024], *q;
+
+ while (fgets(buffer, sizeof(buffer), input) != NULL)
+ {
+ q = buffer;
+
+ while(*q && isspace(*q)) q++;
+
+ if ((*q == '\n') || (*q == '#') || (*q == '\0'))
+ continue;
+
+ if (rc_avpair_parse(q, &vp) < 0) {
+ error("rc_avpair_readin: malformed attribute: %s", buffer);
+ rc_avpair_free(vp);
+ return NULL;
+ }
+ }
+
+ return vp;
+}
--- /dev/null
+/*
+ * $Id: buildreq.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1997 Lars Fenneberg
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+unsigned char rc_get_seqnbr(void);
+
+/*
+ * Function: rc_get_nas_id
+ *
+ * Purpose: fills in NAS-Identifier or NAS-IP-Address in request
+ *
+ */
+
+int rc_get_nas_id(VALUE_PAIR **sendpairs)
+{
+ UINT4 client_id;
+ char *nasid;
+
+ nasid = rc_conf_str("nas_identifier");
+ if (strlen(nasid)) {
+ /*
+ * Fill in NAS-Identifier
+ */
+ if (rc_avpair_add(sendpairs, PW_NAS_IDENTIFIER, nasid, 0,
+ VENDOR_NONE) == NULL)
+ return (ERROR_RC);
+
+ return (OK_RC);
+
+ } else {
+ /*
+ * Fill in NAS-IP-Address
+ */
+ if ((client_id = rc_own_ipaddress()) == 0)
+ return (ERROR_RC);
+
+ if (rc_avpair_add(sendpairs, PW_NAS_IP_ADDRESS, &client_id,
+ 0, VENDOR_NONE) == NULL)
+ return (ERROR_RC);
+ }
+
+ return (OK_RC);
+}
+
+/*
+ * Function: rc_buildreq
+ *
+ * Purpose: builds a skeleton RADIUS request using information from the
+ * config file.
+ *
+ */
+
+void rc_buildreq(SEND_DATA *data, int code, char *server, unsigned short port,
+ int timeout, int retries)
+{
+ data->server = server;
+ data->svc_port = port;
+ data->seq_nbr = rc_get_seqnbr();
+ data->timeout = timeout;
+ data->retries = retries;
+ data->code = code;
+}
+
+/*
+ * Function: rc_guess_seqnbr
+ *
+ * Purpose: return a random sequence number
+ *
+ */
+
+static unsigned char rc_guess_seqnbr(void)
+{
+ return (unsigned char)(magic() & UCHAR_MAX);
+}
+
+/*
+ * Function: rc_get_seqnbr
+ *
+ * Purpose: generate a sequence number
+ *
+ */
+
+unsigned char rc_get_seqnbr(void)
+{
+ FILE *sf;
+ int tries = 1;
+ int seq_nbr, pos;
+ char *seqfile = rc_conf_str("seqfile");
+
+ if ((sf = fopen(seqfile, "a+")) == NULL)
+ {
+ error("rc_get_seqnbr: couldn't open sequence file %s: %s", seqfile, strerror(errno));
+ /* well, so guess a sequence number */
+ return rc_guess_seqnbr();
+ }
+
+ while (do_lock_exclusive(fileno(sf))!= 0)
+ {
+ if (errno != EWOULDBLOCK) {
+ error("rc_get_seqnbr: flock failure: %s: %s", seqfile, strerror(errno));
+ fclose(sf);
+ return rc_guess_seqnbr();
+ }
+ tries++;
+ if (tries <= 10)
+ rc_mdelay(500);
+ else
+ break;
+ }
+
+ if (tries > 10) {
+ error("rc_get_seqnbr: couldn't get lock after %d tries: %s", tries-1, seqfile);
+ fclose(sf);
+ return rc_guess_seqnbr();
+ }
+
+ pos = ftell(sf);
+ rewind(sf);
+ if (fscanf(sf, "%d", &seq_nbr) != 1) {
+ if (pos != ftell(sf)) {
+ /* file was not empty */
+ error("rc_get_seqnbr: fscanf failure: %s", seqfile);
+ }
+ seq_nbr = rc_guess_seqnbr();
+ }
+
+ rewind(sf);
+ ftruncate(fileno(sf),0);
+ fprintf(sf,"%d\n", (seq_nbr+1) & UCHAR_MAX);
+
+ fflush(sf); /* fflush because a process may read it between the do_unlock and fclose */
+
+ if (do_unlock(fileno(sf)) != 0)
+ error("rc_get_seqnbr: couldn't release lock on %s: %s", seqfile, strerror(errno));
+
+ fclose(sf);
+
+ return (unsigned char)seq_nbr;
+}
+
+/*
+ * Function: rc_auth
+ *
+ * Purpose: Builds an authentication request for port id client_port
+ * with the value_pairs send and submits it to a server
+ *
+ * Returns: received value_pairs in received, messages from the server in msg
+ * and 0 on success, negative on failure as return value
+ *
+ */
+
+int rc_auth(UINT4 client_port, VALUE_PAIR *send, VALUE_PAIR **received,
+ char *msg, REQUEST_INFO *info)
+{
+ SERVER *authserver = rc_conf_srv("authserver");
+
+ if (!authserver) {
+ return (ERROR_RC);
+ }
+ return rc_auth_using_server(authserver, client_port, send, received,
+ msg, info);
+}
+
+/*
+ * Function: rc_auth_using_server
+ *
+ * Purpose: Builds an authentication request for port id client_port
+ * with the value_pairs send and submits it to a server. You
+ * explicitly supply a server list.
+ *
+ * Returns: received value_pairs in received, messages from the server in msg
+ * and 0 on success, negative on failure as return value
+ *
+ */
+
+int rc_auth_using_server(SERVER *authserver,
+ UINT4 client_port,
+ VALUE_PAIR *send,
+ VALUE_PAIR **received,
+ char *msg, REQUEST_INFO *info)
+{
+ SEND_DATA data;
+ int result;
+ int i;
+ int timeout = rc_conf_int("radius_timeout");
+ int retries = rc_conf_int("radius_retries");
+
+ data.send_pairs = send;
+ data.receive_pairs = NULL;
+
+ /*
+ * Fill in NAS-IP-Address or NAS-Identifier
+ */
+
+ if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
+ return (ERROR_RC);
+
+ /*
+ * Fill in NAS-Port
+ */
+
+ if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL)
+ return (ERROR_RC);
+
+ result = ERROR_RC;
+ for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC)
+ ; i++)
+ {
+ if (data.receive_pairs != NULL) {
+ rc_avpair_free(data.receive_pairs);
+ data.receive_pairs = NULL;
+ }
+ rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i],
+ authserver->port[i], timeout, retries);
+
+ result = rc_send_server (&data, msg, info);
+ }
+
+ *received = data.receive_pairs;
+
+ return result;
+}
+
+/*
+ * Function: rc_auth_proxy
+ *
+ * Purpose: Builds an authentication request
+ * with the value_pairs send and submits it to a server.
+ * Works for a proxy; does not add IP address, and does
+ * does not rely on config file.
+ *
+ * Returns: received value_pairs in received, messages from the server in msg
+ * and 0 on success, negative on failure as return value
+ *
+ */
+
+int rc_auth_proxy(VALUE_PAIR *send, VALUE_PAIR **received, char *msg)
+{
+ SEND_DATA data;
+ int result;
+ int i;
+ SERVER *authserver = rc_conf_srv("authserver");
+ int timeout = rc_conf_int("radius_timeout");
+ int retries = rc_conf_int("radius_retries");
+
+ data.send_pairs = send;
+ data.receive_pairs = NULL;
+
+ result = ERROR_RC;
+ for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC)
+ ; i++)
+ {
+ if (data.receive_pairs != NULL) {
+ rc_avpair_free(data.receive_pairs);
+ data.receive_pairs = NULL;
+ }
+ rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i],
+ authserver->port[i], timeout, retries);
+
+ result = rc_send_server (&data, msg, NULL);
+ }
+
+ *received = data.receive_pairs;
+
+ return result;
+}
+
+
+/*
+ * Function: rc_acct_using_server
+ *
+ * Purpose: Builds an accounting request for port id client_port
+ * with the value_pairs send. You explicitly supply server list.
+ *
+ * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get
+ * filled in by this function, the rest has to be supplied.
+ */
+
+int rc_acct_using_server(SERVER *acctserver,
+ UINT4 client_port,
+ VALUE_PAIR *send)
+{
+ SEND_DATA data;
+ VALUE_PAIR *adt_vp;
+ int result;
+ time_t start_time, dtime;
+ char msg[4096];
+ int i;
+ int timeout = rc_conf_int("radius_timeout");
+ int retries = rc_conf_int("radius_retries");
+
+ data.send_pairs = send;
+ data.receive_pairs = NULL;
+
+ /*
+ * Fill in NAS-IP-Address or NAS-Identifier
+ */
+
+ if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
+ return (ERROR_RC);
+
+ /*
+ * Fill in NAS-Port
+ */
+
+ if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL)
+ return (ERROR_RC);
+
+ /*
+ * Fill in Acct-Delay-Time
+ */
+
+ dtime = 0;
+ if ((adt_vp = rc_avpair_add(&(data.send_pairs), PW_ACCT_DELAY_TIME, &dtime, 0, VENDOR_NONE)) == NULL)
+ return (ERROR_RC);
+
+ start_time = time(NULL);
+ result = ERROR_RC;
+ for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC)
+ ; i++)
+ {
+ if (data.receive_pairs != NULL) {
+ rc_avpair_free(data.receive_pairs);
+ data.receive_pairs = NULL;
+ }
+ rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i],
+ acctserver->port[i], timeout, retries);
+
+ dtime = time(NULL) - start_time;
+ rc_avpair_assign(adt_vp, &dtime, 0);
+
+ result = rc_send_server (&data, msg, NULL);
+ }
+
+ rc_avpair_free(data.receive_pairs);
+
+ return result;
+}
+
+/*
+ * Function: rc_acct
+ *
+ * Purpose: Builds an accounting request for port id client_port
+ * with the value_pairs send
+ *
+ * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get
+ * filled in by this function, the rest has to be supplied.
+ */
+
+int rc_acct(UINT4 client_port, VALUE_PAIR *send)
+{
+ SERVER *acctserver = rc_conf_srv("acctserver");
+ if (!acctserver) return (ERROR_RC);
+
+ return rc_acct_using_server(acctserver, client_port, send);
+}
+
+/*
+ * Function: rc_acct_proxy
+ *
+ * Purpose: Builds an accounting request with the value_pairs send
+ *
+ */
+
+int rc_acct_proxy(VALUE_PAIR *send)
+{
+ SEND_DATA data;
+ int result;
+ char msg[4096];
+ int i;
+ SERVER *acctserver = rc_conf_srv("authserver");
+ int timeout = rc_conf_int("radius_timeout");
+ int retries = rc_conf_int("radius_retries");
+
+ data.send_pairs = send;
+ data.receive_pairs = NULL;
+
+ result = ERROR_RC;
+ for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC)
+ ; i++)
+ {
+ if (data.receive_pairs != NULL) {
+ rc_avpair_free(data.receive_pairs);
+ data.receive_pairs = NULL;
+ }
+ rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i],
+ acctserver->port[i], timeout, retries);
+
+ result = rc_send_server (&data, msg, NULL);
+ }
+
+ rc_avpair_free(data.receive_pairs);
+
+ return result;
+}
+
+/*
+ * Function: rc_check
+ *
+ * Purpose: ask the server hostname on the specified port for a
+ * status message
+ *
+ */
+
+int rc_check(char *host, unsigned short port, char *msg)
+{
+ SEND_DATA data;
+ int result;
+ UINT4 service_type;
+ int timeout = rc_conf_int("radius_timeout");
+ int retries = rc_conf_int("radius_retries");
+
+ data.send_pairs = data.receive_pairs = NULL;
+
+ /*
+ * Fill in NAS-IP-Address or NAS-Identifier,
+ * although it isn't neccessary
+ */
+
+ if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
+ return (ERROR_RC);
+
+ /*
+ * Fill in Service-Type
+ */
+
+ service_type = PW_ADMINISTRATIVE;
+ rc_avpair_add(&(data.send_pairs), PW_SERVICE_TYPE, &service_type, 0, VENDOR_NONE);
+
+ rc_buildreq(&data, PW_STATUS_SERVER, host, port, timeout, retries);
+ result = rc_send_server (&data, msg, NULL);
+
+ rc_avpair_free(data.receive_pairs);
+
+ return result;
+}
--- /dev/null
+/*
+ * $Id: clientid.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+struct map2id_s {
+ char *name;
+ UINT4 id;
+
+ struct map2id_s *next;
+};
+
+static struct map2id_s *map2id_list = NULL;
+
+/*
+ * Function: rc_read_mapfile
+ *
+ * Purpose: Read in the ttyname to port id map file
+ *
+ * Arguments: the file name of the map file
+ *
+ * Returns: zero on success, negative integer on failure
+ */
+
+int rc_read_mapfile(char *filename)
+{
+ char buffer[1024];
+ FILE *mapfd;
+ char *c, *name, *id, *q;
+ struct map2id_s *p;
+ int lnr = 0;
+
+ if ((mapfd = fopen(filename,"r")) == NULL)
+ {
+ error("rc_read_mapfile: can't read %s: %s", filename, strerror(errno));
+ return (-1);
+ }
+
+#define SKIP(p) while(*p && isspace(*p)) p++;
+
+ while (fgets(buffer, sizeof(buffer), mapfd) != NULL)
+ {
+ lnr++;
+
+ q = buffer;
+
+ SKIP(q);
+
+ if ((*q == '\n') || (*q == '#') || (*q == '\0'))
+ continue;
+
+ if (( c = strchr(q, ' ')) || (c = strchr(q,'\t'))) {
+
+ *c = '\0'; c++;
+ SKIP(c);
+
+ name = q;
+ id = c;
+
+ if ((p = (struct map2id_s *)malloc(sizeof(*p))) == NULL) {
+ novm("rc_read_mapfile");
+ return (-1);
+ }
+
+ p->name = strdup(name);
+ p->id = atoi(id);
+ p->next = map2id_list;
+ map2id_list = p;
+
+ } else {
+
+ error("rc_read_mapfile: malformed line in %s, line %d", filename, lnr);
+ return (-1);
+
+ }
+ }
+
+#undef SKIP
+
+ fclose(mapfd);
+
+ return 0;
+}
+
+/*
+ * Function: rc_map2id
+ *
+ * Purpose: Map ttyname to port id
+ *
+ * Arguments: full pathname of the tty
+ *
+ * Returns: port id, zero if no entry found
+ */
+
+UINT4 rc_map2id(char *name)
+{
+ struct map2id_s *p;
+ char ttyname[PATH_MAX];
+
+ *ttyname = '\0';
+ if (*name != '/')
+ strcpy(ttyname, "/dev/");
+
+ strncat(ttyname, name, sizeof(ttyname));
+
+ for(p = map2id_list; p; p = p->next)
+ if (!strcmp(ttyname, p->name)) return p->id;
+
+ warn("rc_map2id: can't find tty %s in map database", ttyname);
+
+ return 0;
+}
--- /dev/null
+/*
+ * $Id: config.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+#include <options.h>
+
+static int test_config(char *);
+
+/*
+ * Function: find_option
+ *
+ * Purpose: find an option in the option list
+ *
+ * Returns: pointer to option on success, NULL otherwise
+ */
+
+static OPTION *find_option(char *optname, unsigned int type)
+{
+ int i;
+
+ /* there're so few options that a binary search seems not necessary */
+ for (i = 0; i < num_options; i++) {
+ if (!strcmp(config_options[i].name, optname) &&
+ (config_options[i].type & type))
+ return &config_options[i];
+ }
+
+ return NULL;
+}
+
+/*
+ * Function: set_option_...
+ *
+ * Purpose: set a specific option doing type conversions
+ *
+ * Returns: 0 on success, -1 on failure
+ */
+
+static int set_option_str(char *filename, int line, OPTION *option, char *p)
+{
+ if (p)
+ option->val = (void *) strdup(p);
+ else
+ option->val = NULL;
+
+ return 0;
+}
+
+static int set_option_int(char *filename, int line, OPTION *option, char *p)
+{
+ int *iptr;
+
+ if (p == NULL) {
+ error("%s: line %d: bogus option value", filename, line);
+ return (-1);
+ }
+
+ if ((iptr = (int *) malloc(sizeof(iptr))) == NULL) {
+ novm("read_config");
+ return (-1);
+ }
+
+ *iptr = atoi(p);
+ option->val = (void *) iptr;
+
+ return 0;
+}
+
+static int set_option_srv(char *filename, int line, OPTION *option, char *p)
+{
+ SERVER *serv;
+ char *q;
+ struct servent *svp;
+ int i;
+
+ if (p == NULL) {
+ error("%s: line %d: bogus option value", filename, line);
+ return (-1);
+ }
+
+ serv = (SERVER *) option->val;
+
+ for (i = 0; i < serv->max; i++) {
+ free(serv->name[i]);
+ }
+ serv->max = 0;
+
+ while ((p = strtok(p, ", \t")) != NULL) {
+
+ if ((q = strchr(p,':')) != NULL) {
+ *q = '\0';
+ q++;
+ serv->port[serv->max] = atoi(q);
+ } else {
+ if (!strcmp(option->name,"authserver"))
+ if ((svp = getservbyname ("radius", "udp")) == NULL)
+ serv->port[serv->max] = PW_AUTH_UDP_PORT;
+ else
+ serv->port[serv->max] = ntohs ((unsigned int) svp->s_port);
+ else if (!strcmp(option->name, "acctserver"))
+ if ((svp = getservbyname ("radacct", "udp")) == NULL)
+ serv->port[serv->max] = PW_ACCT_UDP_PORT;
+ else
+ serv->port[serv->max] = ntohs ((unsigned int) svp->s_port);
+ else {
+ error("%s: line %d: no default port for %s", filename, line, option->name);
+ return (-1);
+ }
+ }
+
+ serv->name[serv->max++] = strdup(p);
+
+ p = NULL;
+ }
+
+ return 0;
+}
+
+static int set_option_auo(char *filename, int line, OPTION *option, char *p)
+{
+ int *iptr;
+
+ if (p == NULL) {
+ warn("%s: line %d: bogus option value", filename, line);
+ return (-1);
+ }
+
+ if ((iptr = (int *) malloc(sizeof(iptr))) == NULL) {
+ novm("read_config");
+ return (-1);
+ }
+
+ *iptr = 0;
+ p = strtok(p, ", \t");
+
+ if (!strncmp(p, "local", 5))
+ *iptr = AUTH_LOCAL_FST;
+ else if (!strncmp(p, "radius", 6))
+ *iptr = AUTH_RADIUS_FST;
+ else {
+ error("%s: auth_order: unknown keyword: %s", filename, p);
+ return (-1);
+ }
+
+ p = strtok(NULL, ", \t");
+
+ if (p && (*p != '\0')) {
+ if ((*iptr & AUTH_RADIUS_FST) && !strcmp(p, "local"))
+ *iptr = (*iptr) | AUTH_LOCAL_SND;
+ else if ((*iptr & AUTH_LOCAL_FST) && !strcmp(p, "radius"))
+ *iptr = (*iptr) | AUTH_RADIUS_SND;
+ else {
+ error("%s: auth_order: unknown or unexpected keyword: %s", filename, p);
+ return (-1);
+ }
+ }
+
+ option->val = (void *) iptr;
+
+ return 0;
+}
+
+
+/*
+ * Function: rc_read_config
+ *
+ * Purpose: read the global config file
+ *
+ * Returns: 0 on success, -1 when failure
+ */
+
+int rc_read_config(char *filename)
+{
+ FILE *configfd;
+ char buffer[512], *p;
+ OPTION *option;
+ int line, pos;
+
+ if ((configfd = fopen(filename,"r")) == NULL)
+ {
+ error("rc_read_config: can't open %s: %m", filename);
+ return (-1);
+ }
+
+ line = 0;
+ while ((fgets(buffer, sizeof(buffer), configfd) != NULL))
+ {
+ line++;
+ p = buffer;
+
+ if ((*p == '\n') || (*p == '#') || (*p == '\0'))
+ continue;
+
+ p[strlen(p)-1] = '\0';
+
+
+ if ((pos = strcspn(p, "\t ")) == 0) {
+ error("%s: line %d: bogus format: %s", filename, line, p);
+ return (-1);
+ }
+
+ p[pos] = '\0';
+
+ if ((option = find_option(p, OT_ANY)) == NULL) {
+ error("%s: line %d: unrecognized keyword: %s", filename, line, p);
+ return (-1);
+ }
+
+ if (option->status != ST_UNDEF) {
+ error("%s: line %d: duplicate option line: %s", filename, line, p);
+ return (-1);
+ }
+
+ p += pos+1;
+ while (isspace(*p))
+ p++;
+
+ switch (option->type) {
+ case OT_STR:
+ if (set_option_str(filename, line, option, p) < 0)
+ return (-1);
+ break;
+ case OT_INT:
+ if (set_option_int(filename, line, option, p) < 0)
+ return (-1);
+ break;
+ case OT_SRV:
+ if (set_option_srv(filename, line, option, p) < 0)
+ return (-1);
+ break;
+ case OT_AUO:
+ if (set_option_auo(filename, line, option, p) < 0)
+ return (-1);
+ break;
+ default:
+ fatal("rc_read_config: impossible case branch!");
+ abort();
+ }
+ }
+ fclose(configfd);
+
+ return test_config(filename);
+}
+
+/*
+ * Function: rc_conf_str, rc_conf_int, rc_conf_src
+ *
+ * Purpose: get the value of a config option
+ *
+ * Returns: config option value
+ */
+
+char *rc_conf_str(char *optname)
+{
+ OPTION *option;
+
+ option = find_option(optname, OT_STR);
+
+ if (option == NULL)
+ fatal("rc_conf_str: unkown config option requested: %s", optname);
+ return (char *)option->val;
+}
+
+int rc_conf_int(char *optname)
+{
+ OPTION *option;
+
+ option = find_option(optname, OT_INT|OT_AUO);
+
+ if (option == NULL)
+ fatal("rc_conf_int: unkown config option requested: %s", optname);
+ return *((int *)option->val);
+}
+
+SERVER *rc_conf_srv(char *optname)
+{
+ OPTION *option;
+
+ option = find_option(optname, OT_SRV);
+
+ if (option == NULL)
+ fatal("rc_conf_srv: unkown config option requested: %s", optname);
+ return (SERVER *)option->val;
+}
+
+/*
+ * Function: test_config
+ *
+ * Purpose: test the configuration the user supplied
+ *
+ * Returns: 0 on success, -1 when failure
+ */
+
+static int test_config(char *filename)
+{
+#if 0
+ struct stat st;
+ char *file;
+#endif
+
+ if (!(rc_conf_srv("authserver")->max))
+ {
+ error("%s: no authserver specified", filename);
+ return (-1);
+ }
+ if (!(rc_conf_srv("acctserver")->max))
+ {
+ error("%s: no acctserver specified", filename);
+ return (-1);
+ }
+ if (!rc_conf_str("servers"))
+ {
+ error("%s: no servers file specified", filename);
+ return (-1);
+ }
+ if (!rc_conf_str("dictionary"))
+ {
+ error("%s: no dictionary specified", filename);
+ return (-1);
+ }
+
+ if (rc_conf_int("radius_timeout") <= 0)
+ {
+ error("%s: radius_timeout <= 0 is illegal", filename);
+ return (-1);
+ }
+ if (rc_conf_int("radius_retries") <= 0)
+ {
+ error("%s: radius_retries <= 0 is illegal", filename);
+ return (-1);
+ }
+
+#if 0
+ file = rc_conf_str("login_local");
+ if (stat(file, &st) == 0)
+ {
+ if (!S_ISREG(st.st_mode)) {
+ error("%s: not a regular file: %s", filename, file);
+ return (-1);
+ }
+ } else {
+ error("%s: file not found: %s", filename, file);
+ return (-1);
+ }
+ file = rc_conf_str("login_radius");
+ if (stat(file, &st) == 0)
+ {
+ if (!S_ISREG(st.st_mode)) {
+ error("%s: not a regular file: %s", filename, file);
+ return (-1);
+ }
+ } else {
+ error("%s: file not found: %s", filename, file);
+ return (-1);
+ }
+#endif
+
+ if (rc_conf_int("login_tries") <= 0)
+ {
+ error("%s: login_tries <= 0 is illegal", filename);
+ return (-1);
+ }
+ if (rc_conf_str("seqfile") == NULL)
+ {
+ error("%s: seqfile not specified", filename);
+ return (-1);
+ }
+ if (rc_conf_int("login_timeout") <= 0)
+ {
+ error("%s: login_timeout <= 0 is illegal", filename);
+ return (-1);
+ }
+ if (rc_conf_str("mapfile") == NULL)
+ {
+ error("%s: mapfile not specified", filename);
+ return (-1);
+ }
+ if (rc_conf_str("nologin") == NULL)
+ {
+ error("%s: nologin not specified", filename);
+ return (-1);
+ }
+
+ return 0;
+}
+
+/*
+ * Function: rc_find_match
+ *
+ * Purpose: see if ip_addr is one of the ip addresses of hostname
+ *
+ * Returns: 0 on success, -1 when failure
+ *
+ */
+
+static int find_match (UINT4 *ip_addr, char *hostname)
+{
+ UINT4 addr;
+ char **paddr;
+ struct hostent *hp;
+
+ if (rc_good_ipaddr (hostname) == 0)
+ {
+ if (*ip_addr == ntohl(inet_addr (hostname)))
+ {
+ return (0);
+ }
+ }
+ else
+ {
+ if ((hp = gethostbyname (hostname)) == (struct hostent *) NULL)
+ {
+ return (-1);
+ }
+ for (paddr = hp->h_addr_list; *paddr; paddr++)
+ {
+ addr = ** (UINT4 **) paddr;
+ if (ntohl(addr) == *ip_addr)
+ {
+ return (0);
+ }
+ }
+ }
+ return (-1);
+}
+
+/*
+ * Function: rc_find_server
+ *
+ * Purpose: search a server in the servers file
+ *
+ * Returns: 0 on success, -1 on failure
+ *
+ */
+
+int rc_find_server (char *server_name, UINT4 *ip_addr, char *secret)
+{
+ UINT4 myipaddr = 0;
+ int len;
+ int result;
+ FILE *clientfd;
+ char *h;
+ char *s;
+ char *host2;
+ char buffer[128];
+ char hostnm[AUTH_ID_LEN + 1];
+
+ /* Get the IP address of the authentication server */
+ if ((*ip_addr = rc_get_ipaddr (server_name)) == (UINT4) 0)
+ return (-1);
+
+ if ((clientfd = fopen (rc_conf_str("servers"), "r")) == (FILE *) NULL)
+ {
+ error("rc_find_server: couldn't open file: %m: %s", rc_conf_str("servers"));
+ return (-1);
+ }
+
+ myipaddr = rc_own_ipaddress();
+
+ result = 0;
+ while (fgets (buffer, sizeof (buffer), clientfd) != (char *) NULL)
+ {
+ if (*buffer == '#')
+ continue;
+
+ if ((h = strtok (buffer, " \t\n")) == NULL) /* first hostname */
+ continue;
+
+ memset (hostnm, '\0', AUTH_ID_LEN);
+ len = strlen (h);
+ if (len > AUTH_ID_LEN)
+ {
+ len = AUTH_ID_LEN;
+ }
+ strncpy (hostnm, h, (size_t) len);
+ hostnm[AUTH_ID_LEN] = '\0';
+
+ if ((s = strtok (NULL, " \t\n")) == NULL) /* and secret field */
+ continue;
+
+ memset (secret, '\0', MAX_SECRET_LENGTH);
+ len = strlen (s);
+ if (len > MAX_SECRET_LENGTH)
+ {
+ len = MAX_SECRET_LENGTH;
+ }
+ strncpy (secret, s, (size_t) len);
+ secret[MAX_SECRET_LENGTH] = '\0';
+
+ if (!strchr (hostnm, '/')) /* If single name form */
+ {
+ if (find_match (ip_addr, hostnm) == 0)
+ {
+ result++;
+ break;
+ }
+ }
+ else /* <name1>/<name2> "paired" form */
+ {
+ strtok (hostnm, "/");
+ if (find_match (&myipaddr, hostnm) == 0)
+ { /* If we're the 1st name, target is 2nd */
+ host2 = strtok (NULL, " ");
+ if (find_match (ip_addr, host2) == 0)
+ {
+ result++;
+ break;
+ }
+ }
+ else /* If we were 2nd name, target is 1st name */
+ {
+ if (find_match (ip_addr, hostnm) == 0)
+ {
+ result++;
+ break;
+ }
+ }
+ }
+ }
+ fclose (clientfd);
+ if (result == 0)
+ {
+ memset (buffer, '\0', sizeof (buffer));
+ memset (secret, '\0', sizeof (secret));
+ error("rc_find_server: couldn't find RADIUS server %s in %s",
+ server_name, rc_conf_str("servers"));
+ return (-1);
+ }
+ return 0;
+}
--- /dev/null
+/*
+ * $Id: dict.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 2002 Roaring Penguin Software Inc.
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+static DICT_ATTR *dictionary_attributes = NULL;
+static DICT_VALUE *dictionary_values = NULL;
+static VENDOR_DICT *vendor_dictionaries = NULL;
+
+/*
+ * Function: rc_read_dictionary
+ *
+ * Purpose: Initialize the dictionary. Read all ATTRIBUTES into
+ * the dictionary_attributes list. Read all VALUES into
+ * the dictionary_values list. Construct VENDOR dictionaries
+ * as required.
+ *
+ */
+
+int rc_read_dictionary (char *filename)
+{
+ FILE *dictfd;
+ char dummystr[AUTH_ID_LEN];
+ char namestr[AUTH_ID_LEN];
+ char valstr[AUTH_ID_LEN];
+ char attrstr[AUTH_ID_LEN];
+ char typestr[AUTH_ID_LEN];
+ char vendorstr[AUTH_ID_LEN];
+ int line_no;
+ DICT_ATTR *attr;
+ DICT_VALUE *dval;
+ VENDOR_DICT *vdict;
+ char buffer[256];
+ int value;
+ int type;
+ int n;
+ int retcode;
+ if ((dictfd = fopen (filename, "r")) == (FILE *) NULL)
+ {
+ error( "rc_read_dictionary: couldn't open dictionary %s: %s",
+ filename, strerror(errno));
+ return (-1);
+ }
+
+ line_no = 0;
+ retcode = 0;
+ while (fgets (buffer, sizeof (buffer), dictfd) != (char *) NULL)
+ {
+ line_no++;
+
+ /* Skip empty space */
+ if (*buffer == '#' || *buffer == '\0' || *buffer == '\n')
+ {
+ continue;
+ }
+
+ if (strncmp (buffer, "VENDOR", 6) == 0) {
+ /* Read the VENDOR line */
+ if (sscanf(buffer, "%s%s%d", dummystr, namestr, &value) != 3) {
+ error("rc_read_dictionary: invalid vendor on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ /* Validate entry */
+ if (strlen (namestr) > NAME_LENGTH) {
+ error("rc_read_dictionary: invalid name length on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ /* Create new vendor entry */
+ vdict = (VENDOR_DICT *) malloc (sizeof (VENDOR_DICT));
+ if (!vdict) {
+ novm("rc_read_dictionary");
+ retcode = -1;
+ break;
+ }
+ strcpy(vdict->vendorname, namestr);
+ vdict->vendorcode = value;
+ vdict->attributes = NULL;
+ vdict->next = vendor_dictionaries;
+ vendor_dictionaries = vdict;
+ }
+ else if (strncmp (buffer, "ATTRIBUTE", 9) == 0)
+ {
+
+ /* Read the ATTRIBUTE line. It is one of:
+ * ATTRIBUTE attr_name attr_val type OR
+ * ATTRIBUTE attr_name attr_val type vendor */
+ vendorstr[0] = 0;
+ n = sscanf(buffer, "%s%s%s%s%s", dummystr, namestr, valstr, typestr, vendorstr);
+ if (n != 4 && n != 5)
+ {
+ error("rc_read_dictionary: invalid attribute on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ /*
+ * Validate all entries
+ */
+ if (strlen (namestr) > NAME_LENGTH)
+ {
+ error("rc_read_dictionary: invalid name length on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ if (strlen (vendorstr) > NAME_LENGTH)
+ {
+ error("rc_read_dictionary: invalid name length on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ if (!isdigit (*valstr))
+ {
+ error("rc_read_dictionary: invalid value on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ value = atoi (valstr);
+
+ if (strcmp (typestr, "string") == 0)
+ {
+ type = PW_TYPE_STRING;
+ }
+ else if (strcmp (typestr, "integer") == 0)
+ {
+ type = PW_TYPE_INTEGER;
+ }
+ else if (strcmp (typestr, "ipaddr") == 0)
+ {
+ type = PW_TYPE_IPADDR;
+ }
+ else if (strcmp (typestr, "date") == 0)
+ {
+ type = PW_TYPE_DATE;
+ }
+ else
+ {
+ error("rc_read_dictionary: invalid type on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ /* Search for vendor if supplied */
+ if (*vendorstr) {
+ vdict = rc_dict_findvendor(vendorstr);
+ if (!vdict) {
+ error("rc_read_dictionary: unknown vendor on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ } else {
+ vdict = NULL;
+ }
+ /* Create a new attribute for the list */
+ if ((attr =
+ (DICT_ATTR *) malloc (sizeof (DICT_ATTR)))
+ == (DICT_ATTR *) NULL)
+ {
+ novm("rc_read_dictionary");
+ retcode = -1;
+ break;
+ }
+ strcpy (attr->name, namestr);
+ if (vdict) {
+ attr->vendorcode = vdict->vendorcode;
+ } else {
+ attr->vendorcode = VENDOR_NONE;
+ }
+ attr->value = value;
+ attr->type = type;
+
+ /* Insert it into the list */
+ if (vdict) {
+ attr->next = vdict->attributes;
+ vdict->attributes = attr;
+ } else {
+ attr->next = dictionary_attributes;
+ dictionary_attributes = attr;
+ }
+ }
+ else if (strncmp (buffer, "VALUE", 5) == 0)
+ {
+ /* Read the VALUE line */
+ if (sscanf (buffer, "%s%s%s%s", dummystr, attrstr,
+ namestr, valstr) != 4)
+ {
+ error("rc_read_dictionary: invalid value entry on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ /*
+ * Validate all entries
+ */
+ if (strlen (attrstr) > NAME_LENGTH)
+ {
+ error("rc_read_dictionary: invalid attribute length on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ if (strlen (namestr) > NAME_LENGTH)
+ {
+ error("rc_read_dictionary: invalid name length on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+
+ if (!isdigit (*valstr))
+ {
+ error("rc_read_dictionary: invalid value on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ value = atoi (valstr);
+
+ /* Create a new VALUE entry for the list */
+ if ((dval =
+ (DICT_VALUE *) malloc (sizeof (DICT_VALUE)))
+ == (DICT_VALUE *) NULL)
+ {
+ novm("rc_read_dictionary");
+ retcode = -1;
+ break;
+ }
+ strcpy (dval->attrname, attrstr);
+ strcpy (dval->name, namestr);
+ dval->value = value;
+
+ /* Insert it into the list */
+ dval->next = dictionary_values;
+ dictionary_values = dval;
+ }
+ else if (strncmp (buffer, "INCLUDE", 7) == 0)
+ {
+ /* Read the INCLUDE line */
+ if (sscanf (buffer, "%s%s", dummystr, namestr) != 2)
+ {
+ error("rc_read_dictionary: invalid include entry on line %d of dictionary %s",
+ line_no, filename);
+ retcode = -1;
+ break;
+ }
+ if (rc_read_dictionary(namestr) == -1)
+ {
+ retcode = -1;
+ break;
+ }
+ }
+ }
+ fclose (dictfd);
+ return retcode;
+}
+
+/*
+ * Function: rc_dict_getattr
+ *
+ * Purpose: Return the full attribute structure based on the
+ * attribute id number and vendor code. If vendor code is VENDOR_NONE,
+ * non-vendor-specific attributes are used
+ *
+ */
+
+DICT_ATTR *rc_dict_getattr (int attribute, int vendor)
+{
+ DICT_ATTR *attr;
+ VENDOR_DICT *dict;
+
+ if (vendor == VENDOR_NONE) {
+ attr = dictionary_attributes;
+ while (attr != (DICT_ATTR *) NULL) {
+ if (attr->value == attribute) {
+ return (attr);
+ }
+ attr = attr->next;
+ }
+ } else {
+ dict = rc_dict_getvendor(vendor);
+ if (!dict) {
+ return NULL;
+ }
+ attr = dict->attributes;
+ while (attr) {
+ if (attr->value == attribute) {
+ return attr;
+ }
+ attr = attr->next;
+ }
+ }
+ return NULL;
+}
+
+/*
+ * Function: rc_dict_findattr
+ *
+ * Purpose: Return the full attribute structure based on the
+ * attribute name.
+ *
+ */
+
+DICT_ATTR *rc_dict_findattr (char *attrname)
+{
+ DICT_ATTR *attr;
+ VENDOR_DICT *dict;
+
+ attr = dictionary_attributes;
+ while (attr != (DICT_ATTR *) NULL)
+ {
+ if (strcasecmp (attr->name, attrname) == 0)
+ {
+ return (attr);
+ }
+ attr = attr->next;
+ }
+
+ /* Search vendor-specific dictionaries */
+ dict = vendor_dictionaries;
+ while (dict) {
+ attr = dict->attributes;
+ while (attr) {
+ if (strcasecmp (attr->name, attrname) == 0) {
+ return (attr);
+ }
+ attr = attr->next;
+ }
+ dict = dict->next;
+ }
+ return ((DICT_ATTR *) NULL);
+}
+
+
+/*
+ * Function: rc_dict_findval
+ *
+ * Purpose: Return the full value structure based on the
+ * value name.
+ *
+ */
+
+DICT_VALUE *rc_dict_findval (char *valname)
+{
+ DICT_VALUE *val;
+
+ val = dictionary_values;
+ while (val != (DICT_VALUE *) NULL)
+ {
+ if (strcasecmp (val->name, valname) == 0)
+ {
+ return (val);
+ }
+ val = val->next;
+ }
+ return ((DICT_VALUE *) NULL);
+}
+
+/*
+ * Function: dict_getval
+ *
+ * Purpose: Return the full value structure based on the
+ * actual value and the associated attribute name.
+ *
+ */
+
+DICT_VALUE * rc_dict_getval (UINT4 value, char *attrname)
+{
+ DICT_VALUE *val;
+
+ val = dictionary_values;
+ while (val != (DICT_VALUE *) NULL)
+ {
+ if (strcmp (val->attrname, attrname) == 0 &&
+ val->value == value)
+ {
+ return (val);
+ }
+ val = val->next;
+ }
+ return ((DICT_VALUE *) NULL);
+}
+
+/*
+ * Function: rc_dict_findvendor
+ *
+ * Purpose: Return the vendor's dictionary given the vendor name.
+ *
+ */
+VENDOR_DICT * rc_dict_findvendor (char *vendorname)
+{
+ VENDOR_DICT *dict;
+
+ dict = vendor_dictionaries;
+ while (dict) {
+ if (!strcmp(vendorname, dict->vendorname)) {
+ return dict;
+ }
+ dict = dict->next;
+ }
+ return NULL;
+}
+
+/*
+ * Function: rc_dict_getvendor
+ *
+ * Purpose: Return the vendor's dictionary given the vendor ID
+ *
+ */
+VENDOR_DICT * rc_dict_getvendor (int id)
+{
+ VENDOR_DICT *dict;
+
+ dict = vendor_dictionaries;
+ while (dict) {
+ if (id == dict->vendorcode) {
+ return dict;
+ }
+ dict = dict->next;
+ }
+ return NULL;
+}
--- /dev/null
+#
+# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl
+#
+# This file contains dictionary translations for parsing
+# requests and generating responses. All transactions are
+# composed of Attribute/Value Pairs. The value of each attribute
+# is specified as one of 4 data types. Valid data types are:
+#
+# string - 0-253 octets
+# ipaddr - 4 octets in network byte order
+# integer - 32 bit value in big endian order (high byte first)
+# date - 32 bit value in big endian order - seconds since
+# 00:00:00 GMT, Jan. 1, 1970
+#
+# Enumerated values are stored in the user file with dictionary
+# VALUE translations for easy administration.
+#
+# Example:
+#
+# ATTRIBUTE VALUE
+# --------------- -----
+# Framed-Protocol = PPP
+# 7 = 1 (integer encoding)
+#
+
+# The dictionary format now supports vendor-specific attributes.
+# Vendors are introduced like this:
+#
+# VENDOR vendor_name vendor_number
+#
+# For example:
+#
+# VENDOR RoaringPenguin 10055
+#
+# Vendor-specific attributes have a fifth field with the name of the
+# vendor. For example:
+#
+# ATTRIBUTE RP-Upstream-Speed-Limit 1 integer RoaringPenguin
+#
+# introduces a Roaring Penguin vendor-specific attribbute with name
+# RP-Upstream-Speed-Limit, number 1, type integer and vendor RoaringPenguin.
+
+#
+# Following are the proper new names. Use these.
+#
+ATTRIBUTE User-Name 1 string
+ATTRIBUTE Password 2 string
+ATTRIBUTE CHAP-Password 3 string
+ATTRIBUTE NAS-IP-Address 4 ipaddr
+ATTRIBUTE NAS-Port-Id 5 integer
+ATTRIBUTE Service-Type 6 integer
+ATTRIBUTE Framed-Protocol 7 integer
+ATTRIBUTE Framed-IP-Address 8 ipaddr
+ATTRIBUTE Framed-IP-Netmask 9 ipaddr
+ATTRIBUTE Framed-Routing 10 integer
+ATTRIBUTE Filter-Id 11 string
+ATTRIBUTE Framed-MTU 12 integer
+ATTRIBUTE Framed-Compression 13 integer
+ATTRIBUTE Login-IP-Host 14 ipaddr
+ATTRIBUTE Login-Service 15 integer
+ATTRIBUTE Login-TCP-Port 16 integer
+ATTRIBUTE Reply-Message 18 string
+ATTRIBUTE Callback-Number 19 string
+ATTRIBUTE Callback-Id 20 string
+ATTRIBUTE Framed-Route 22 string
+ATTRIBUTE Framed-IPX-Network 23 ipaddr
+ATTRIBUTE State 24 string
+ATTRIBUTE Class 25 string
+ATTRIBUTE Session-Timeout 27 integer
+ATTRIBUTE Idle-Timeout 28 integer
+ATTRIBUTE Termination-Action 29 integer
+ATTRIBUTE Called-Station-Id 30 string
+ATTRIBUTE Calling-Station-Id 31 string
+ATTRIBUTE NAS-Identifier 32 string
+ATTRIBUTE Acct-Status-Type 40 integer
+ATTRIBUTE Acct-Delay-Time 41 integer
+ATTRIBUTE Acct-Input-Octets 42 integer
+ATTRIBUTE Acct-Output-Octets 43 integer
+ATTRIBUTE Acct-Session-Id 44 string
+ATTRIBUTE Acct-Authentic 45 integer
+ATTRIBUTE Acct-Session-Time 46 integer
+ATTRIBUTE Acct-Input-Packets 47 integer
+ATTRIBUTE Acct-Output-Packets 48 integer
+ATTRIBUTE Acct-Terminate-Cause 49 integer
+ATTRIBUTE Chap-Challenge 60 string
+ATTRIBUTE NAS-Port-Type 61 integer
+ATTRIBUTE Port-Limit 62 integer
+ATTRIBUTE Connect-Info 77 string
+
+# RFC 2869
+ATTRIBUTE Acct-Interim-Interval 85 integer
+
+#
+# Experimental Non Protocol Attributes used by Cistron-Radiusd
+#
+ATTRIBUTE Huntgroup-Name 221 string
+ATTRIBUTE User-Category 1029 string
+ATTRIBUTE Group-Name 1030 string
+ATTRIBUTE Simultaneous-Use 1034 integer
+ATTRIBUTE Strip-User-Name 1035 integer
+ATTRIBUTE Fall-Through 1036 integer
+ATTRIBUTE Add-Port-To-IP-Address 1037 integer
+ATTRIBUTE Exec-Program 1038 string
+ATTRIBUTE Exec-Program-Wait 1039 string
+ATTRIBUTE Hint 1040 string
+
+#
+# Non-Protocol Attributes
+# These attributes are used internally by the server
+#
+ATTRIBUTE Expiration 21 date
+ATTRIBUTE Auth-Type 1000 integer
+ATTRIBUTE Menu 1001 string
+ATTRIBUTE Termination-Menu 1002 string
+ATTRIBUTE Prefix 1003 string
+ATTRIBUTE Suffix 1004 string
+ATTRIBUTE Group 1005 string
+ATTRIBUTE Crypt-Password 1006 string
+ATTRIBUTE Connect-Rate 1007 integer
+
+#
+# Experimental, implementation specific attributes
+#
+# Limit session traffic
+ATTRIBUTE Session-Octets-Limit 227 integer
+# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
+ATTRIBUTE Octets-Direction 228 integer
+
+#
+# Integer Translations
+#
+
+# User Types
+
+VALUE Service-Type Login-User 1
+VALUE Service-Type Framed-User 2
+VALUE Service-Type Callback-Login-User 3
+VALUE Service-Type Callback-Framed-User 4
+VALUE Service-Type Outbound-User 5
+VALUE Service-Type Administrative-User 6
+VALUE Service-Type NAS-Prompt-User 7
+
+# Framed Protocols
+
+VALUE Framed-Protocol PPP 1
+VALUE Framed-Protocol SLIP 2
+
+# Framed Routing Values
+
+VALUE Framed-Routing None 0
+VALUE Framed-Routing Broadcast 1
+VALUE Framed-Routing Listen 2
+VALUE Framed-Routing Broadcast-Listen 3
+
+# Framed Compression Types
+
+VALUE Framed-Compression None 0
+VALUE Framed-Compression Van-Jacobson-TCP-IP 1
+
+# Login Services
+
+VALUE Login-Service Telnet 0
+VALUE Login-Service Rlogin 1
+VALUE Login-Service TCP-Clear 2
+VALUE Login-Service PortMaster 3
+
+# Status Types
+
+VALUE Acct-Status-Type Start 1
+VALUE Acct-Status-Type Stop 2
+VALUE Acct-Status-Type Accounting-On 7
+VALUE Acct-Status-Type Accounting-Off 8
+
+# Authentication Types
+
+VALUE Acct-Authentic RADIUS 1
+VALUE Acct-Authentic Local 2
+VALUE Acct-Authentic PowerLink128 100
+
+# Termination Options
+
+VALUE Termination-Action Default 0
+VALUE Termination-Action RADIUS-Request 1
+
+# NAS Port Types, available in 3.3.1 and later
+
+VALUE NAS-Port-Type Async 0
+VALUE NAS-Port-Type Sync 1
+VALUE NAS-Port-Type ISDN 2
+VALUE NAS-Port-Type ISDN-V120 3
+VALUE NAS-Port-Type ISDN-V110 4
+
+# Acct Terminate Causes, available in 3.3.2 and later
+
+VALUE Acct-Terminate-Cause User-Request 1
+VALUE Acct-Terminate-Cause Lost-Carrier 2
+VALUE Acct-Terminate-Cause Lost-Service 3
+VALUE Acct-Terminate-Cause Idle-Timeout 4
+VALUE Acct-Terminate-Cause Session-Timeout 5
+VALUE Acct-Terminate-Cause Admin-Reset 6
+VALUE Acct-Terminate-Cause Admin-Reboot 7
+VALUE Acct-Terminate-Cause Port-Error 8
+VALUE Acct-Terminate-Cause NAS-Error 9
+VALUE Acct-Terminate-Cause NAS-Request 10
+VALUE Acct-Terminate-Cause NAS-Reboot 11
+VALUE Acct-Terminate-Cause Port-Unneeded 12
+VALUE Acct-Terminate-Cause Port-Preempted 13
+VALUE Acct-Terminate-Cause Port-Suspended 14
+VALUE Acct-Terminate-Cause Service-Unavailable 15
+VALUE Acct-Terminate-Cause Callback 16
+VALUE Acct-Terminate-Cause User-Error 17
+VALUE Acct-Terminate-Cause Host-Request 18
+
+#
+# Non-Protocol Integer Translations
+#
+
+VALUE Auth-Type Local 0
+VALUE Auth-Type System 1
+VALUE Auth-Type SecurID 2
+VALUE Auth-Type Crypt-Local 3
+VALUE Auth-Type Reject 4
+
+#
+# Cistron extensions
+#
+VALUE Auth-Type Pam 253
+VALUE Auth-Type None 254
+
+#
+# Experimental Non-Protocol Integer Translations for Cistron-Radiusd
+#
+VALUE Fall-Through No 0
+VALUE Fall-Through Yes 1
+VALUE Add-Port-To-IP-Address No 0
+VALUE Add-Port-To-IP-Address Yes 1
+
+#
+# Configuration Values
+# uncomment these two lines to turn account expiration on
+#
+
+#VALUE Server-Config Password-Expiration 30
+#VALUE Server-Config Password-Warning 5
+
+# Octets-Direction
+VALUE Octets-Direction Sum 0
+VALUE Octets-Direction Input 1
+VALUE Octets-Direction Output 2
+VALUE Octets-Direction MaxOveral 3
+VALUE Octets-Direction MaxSession 4
+
+INCLUDE /etc/radiusclient/dictionary.microsoft
--- /dev/null
+#
+# Ascend dictionary.
+#
+#
+# Version: 1.00 21-Jul-1997 Jens Glaser <jens@regio.net>
+#
+
+
+#
+# Ascend specific extensions
+# Used by ASCEND MAX/Pipeline products
+#
+ATTRIBUTE Ascend-FCP-Parameter 119 string
+ATTRIBUTE Ascend-Modem-PortNo 120 integer
+ATTRIBUTE Ascend-Modem-SlotNo 121 integer
+ATTRIBUTE Ascend-Modem-ShelfNo 122 integer
+ATTRIBUTE Ascend-Call-Attempt-Limit 123 integer
+ATTRIBUTE Ascend-Call-Block-Duration 124 integer
+ATTRIBUTE Ascend-Maximum-Call-Duration 125 integer
+ATTRIBUTE Ascend-Temporary-Rtes 126 integer
+ATTRIBUTE Tunneling-Protocol 127 integer
+ATTRIBUTE Ascend-Shared-Profile-Enable 128 integer
+ATTRIBUTE Ascend-Primary-Home-Agent 129 string
+ATTRIBUTE Ascend-Secondary-Home-Agent 130 string
+ATTRIBUTE Ascend-Dialout-Allowed 131 integer
+ATTRIBUTE Ascend-Client-Gateway 132 ipaddr
+ATTRIBUTE Ascend-BACP-Enable 133 integer
+ATTRIBUTE Ascend-DHCP-Maximum-Leases 134 integer
+ATTRIBUTE Ascend-Client-Primary-DNS 135 ipaddr
+ATTRIBUTE Ascend-Client-Secondary-DNS 136 ipaddr
+ATTRIBUTE Ascend-Client-Assign-DNS 137 integer
+ATTRIBUTE Ascend-User-Acct-Type 138 integer
+ATTRIBUTE Ascend-User-Acct-Host 139 ipaddr
+ATTRIBUTE Ascend-User-Acct-Port 140 integer
+ATTRIBUTE Ascend-User-Acct-Key 141 string
+ATTRIBUTE Ascend-User-Acct-Base 142 integer
+ATTRIBUTE Ascend-User-Acct-Time 143 integer
+ATTRIBUTE Ascend-Assign-IP-Client 144 ipaddr
+ATTRIBUTE Ascend-Assign-IP-Server 145 ipaddr
+ATTRIBUTE Ascend-Assign-IP-Global-Pool 146 string
+ATTRIBUTE Ascend-DHCP-Reply 147 integer
+ATTRIBUTE Ascend-DHCP-Pool-Number 148 integer
+ATTRIBUTE Ascend-Expect-Callback 149 integer
+ATTRIBUTE Ascend-Event-Type 150 integer
+ATTRIBUTE Ascend-Session-Svr-Key 151 string
+ATTRIBUTE Ascend-Multicast-Rate-Limit 152 integer
+ATTRIBUTE Ascend-IF-Netmask 153 ipaddr
+ATTRIBUTE Ascend-Remote-Addr 154 ipaddr
+ATTRIBUTE Ascend-Multicast-Client 155 integer
+ATTRIBUTE Ascend-FR-Circuit-Name 156 string
+ATTRIBUTE Ascend-FR-LinkUp 157 integer
+ATTRIBUTE Ascend-FR-Nailed-Grp 158 integer
+ATTRIBUTE Ascend-FR-Type 159 integer
+ATTRIBUTE Ascend-FR-Link-Mgt 160 integer
+ATTRIBUTE Ascend-FR-N391 161 integer
+ATTRIBUTE Ascend-FR-DCE-N392 162 integer
+ATTRIBUTE Ascend-FR-DTE-N392 163 integer
+ATTRIBUTE Ascend-FR-DCE-N393 164 integer
+ATTRIBUTE Ascend-FR-DTE-N393 165 integer
+ATTRIBUTE Ascend-FR-T391 166 integer
+ATTRIBUTE Ascend-FR-T392 167 integer
+ATTRIBUTE Ascend-Bridge-Address 168 string
+ATTRIBUTE Ascend-TS-Idle-Limit 169 integer
+ATTRIBUTE Ascend-TS-Idle-Mode 170 integer
+ATTRIBUTE Ascend-DBA-Monitor 171 integer
+ATTRIBUTE Ascend-Base-Channel-Count 172 integer
+ATTRIBUTE Ascend-Minimum-Channels 173 integer
+ATTRIBUTE Ascend-IPX-Route 174 string
+ATTRIBUTE Ascend-FT1-Caller 175 integer
+ATTRIBUTE Ascend-Backup 176 string
+ATTRIBUTE Ascend-Call-Type 177 integer
+ATTRIBUTE Ascend-Group 178 string
+ATTRIBUTE Ascend-FR-DLCI 179 integer
+ATTRIBUTE Ascend-FR-Profile-Name 180 string
+ATTRIBUTE Ascend-Ara-PW 181 string
+ATTRIBUTE Ascend-IPX-Node-Addr 182 string
+ATTRIBUTE Ascend-Home-Agent-IP-Addr 183 ipaddr
+ATTRIBUTE Ascend-Home-Agent-Password 184 string
+ATTRIBUTE Ascend-Home-Network-Name 185 string
+ATTRIBUTE Ascend-Home-Agent-UDP-Port 186 integer
+ATTRIBUTE Ascend-Multilink-ID 187 integer
+ATTRIBUTE Ascend-Num-In-Multilink 188 integer
+ATTRIBUTE Ascend-First-Dest 189 ipaddr
+ATTRIBUTE Ascend-Pre-Input-Octets 190 integer
+ATTRIBUTE Ascend-Pre-Output-Octets 191 integer
+ATTRIBUTE Ascend-Pre-Input-Packets 192 integer
+ATTRIBUTE Ascend-Pre-Output-Packets 193 integer
+ATTRIBUTE Ascend-Maximum-Time 194 integer
+ATTRIBUTE Ascend-Disconnect-Cause 195 integer
+ATTRIBUTE Ascend-Connect-Progress 196 integer
+ATTRIBUTE Ascend-Data-Rate 197 integer
+ATTRIBUTE Ascend-PreSession-Time 198 integer
+ATTRIBUTE Ascend-Token-Idle 199 integer
+ATTRIBUTE Ascend-Token-Immediate 200 integer
+ATTRIBUTE Ascend-Require-Auth 201 integer
+ATTRIBUTE Ascend-Number-Sessions 202 string
+ATTRIBUTE Ascend-Authen-Alias 203 string
+ATTRIBUTE Ascend-Token-Expiry 204 integer
+ATTRIBUTE Ascend-Menu-Selector 205 string
+ATTRIBUTE Ascend-Menu-Item 206 string
+ATTRIBUTE Ascend-PW-Warntime 207 integer
+ATTRIBUTE Ascend-PW-Lifetime 208 integer
+ATTRIBUTE Ascend-IP-Direct 209 ipaddr
+ATTRIBUTE Ascend-PPP-VJ-Slot-Comp 210 integer
+ATTRIBUTE Ascend-PPP-VJ-1172 211 integer
+ATTRIBUTE Ascend-PPP-Async-Map 212 integer
+ATTRIBUTE Ascend-Third-Prompt 213 string
+ATTRIBUTE Ascend-Send-Secret 214 string
+ATTRIBUTE Ascend-Receive-Secret 215 string
+ATTRIBUTE Ascend-IPX-Peer-Mode 216 integer
+ATTRIBUTE Ascend-IP-Pool-Definition 217 string
+ATTRIBUTE Ascend-Assign-IP-Pool 218 integer
+ATTRIBUTE Ascend-FR-Direct 219 integer
+ATTRIBUTE Ascend-FR-Direct-Profile 220 string
+ATTRIBUTE Ascend-FR-Direct-DLCI 221 integer
+ATTRIBUTE Ascend-Handle-IPX 222 integer
+ATTRIBUTE Ascend-Netware-timeout 223 integer
+ATTRIBUTE Ascend-IPX-Alias 224 integer
+ATTRIBUTE Ascend-Metric 225 integer
+ATTRIBUTE Ascend-PRI-Number-Type 226 integer
+ATTRIBUTE Ascend-Dial-Number 227 string
+ATTRIBUTE Ascend-Route-IP 228 integer
+ATTRIBUTE Ascend-Route-IPX 229 integer
+ATTRIBUTE Ascend-Bridge 230 integer
+ATTRIBUTE Ascend-Send-Auth 231 integer
+ATTRIBUTE Ascend-Send-Passwd 232 string
+ATTRIBUTE Ascend-Link-Compression 233 integer
+ATTRIBUTE Ascend-Target-Util 234 integer
+ATTRIBUTE Ascend-Maximum-Channels 235 integer
+ATTRIBUTE Ascend-Inc-Channel-Count 236 integer
+ATTRIBUTE Ascend-Dec-Channel-Count 237 integer
+ATTRIBUTE Ascend-Seconds-Of-History 238 integer
+ATTRIBUTE Ascend-History-Weigh-Type 239 integer
+ATTRIBUTE Ascend-Add-Seconds 240 integer
+ATTRIBUTE Ascend-Remove-Seconds 241 integer
+ATTRIBUTE Ascend-Idle-Limit 244 integer
+ATTRIBUTE Ascend-Preempt-Limit 245 integer
+ATTRIBUTE Ascend-Callback 246 integer
+ATTRIBUTE Ascend-Data-Svc 247 integer
+ATTRIBUTE Ascend-Force-56 248 integer
+ATTRIBUTE Ascend-Billing-Number 249 string
+ATTRIBUTE Ascend-Call-By-Call 250 integer
+ATTRIBUTE Ascend-Transit-Number 251 string
+ATTRIBUTE Ascend-Host-Info 252 string
+ATTRIBUTE Ascend-PPP-Address 253 ipaddr
+ATTRIBUTE Ascend-MPP-Idle-Percent 254 integer
+ATTRIBUTE Ascend-Xmit-Rate 255 integer
+
+
+
+# Ascend protocols
+VALUE Service-Type Dialout-Framed-User 5
+VALUE Framed-Protocol ARA 255
+VALUE Framed-Protocol MPP 256
+VALUE Framed-Protocol EURAW 257
+VALUE Framed-Protocol EUUI 258
+VALUE Framed-Protocol X25 259
+VALUE Framed-Protocol COMB 260
+VALUE Framed-Protocol FR 261
+VALUE Framed-Protocol MP 262
+VALUE Framed-Protocol FR-CIR 263
+
+
+#
+# Ascend specific extensions
+# Used by ASCEND MAX/Pipeline products (see above)
+#
+
+VALUE Ascend-FR-Direct FR-Direct-No 0
+VALUE Ascend-FR-Direct FR-Direct-Yes 1
+VALUE Ascend-Handle-IPX Handle-IPX-None 0
+VALUE Ascend-Handle-IPX Handle-IPX-Client 1
+VALUE Ascend-Handle-IPX Handle-IPX-Server 2
+VALUE Ascend-IPX-Peer-Mode IPX-Peer-Router 0
+VALUE Ascend-IPX-Peer-Mode IPX-Peer-Dialin 1
+VALUE Ascend-Call-Type Nailed 1
+VALUE Ascend-Call-Type Nailed/Mpp 2
+VALUE Ascend-Call-Type Perm/Switched 3
+VALUE Ascend-FT1-Caller FT1-No 0
+VALUE Ascend-FT1-Caller FT1-Yes 1
+VALUE Ascend-PRI-Number-Type Unknown-Number 0
+VALUE Ascend-PRI-Number-Type Intl-Number 1
+VALUE Ascend-PRI-Number-Type National-Number 2
+VALUE Ascend-PRI-Number-Type Local-Number 4
+VALUE Ascend-PRI-Number-Type Abbrev-Number 5
+VALUE Ascend-Route-IPX Route-IPX-No 0
+VALUE Ascend-Route-IPX Route-IPX-Yes 1
+VALUE Ascend-Bridge Bridge-No 0
+VALUE Ascend-Bridge Bridge-Yes 1
+VALUE Ascend-TS-Idle-Mode TS-Idle-None 0
+VALUE Ascend-TS-Idle-Mode TS-Idle-Input 1
+VALUE Ascend-TS-Idle-Mode TS-Idle-Input-Output 2
+VALUE Ascend-Send-Auth Send-Auth-None 0
+VALUE Ascend-Send-Auth Send-Auth-PAP 1
+VALUE Ascend-Send-Auth Send-Auth-CHAP 2
+VALUE Ascend-Send-Auth Send-Auth-MS-CHAP 3
+VALUE Ascend-Link-Compression Link-Comp-None 0
+VALUE Ascend-Link-Compression Link-Comp-Stac 1
+VALUE Ascend-Link-Compression Link-Comp-Stac-Draft-9 2
+VALUE Ascend-Link-Compression Link-Comp-MS-Stac 3
+VALUE Ascend-History-Weigh-Type History-Constant 0
+VALUE Ascend-History-Weigh-Type History-Linear 1
+VALUE Ascend-History-Weigh-Type History-Quadratic 2
+VALUE Ascend-Callback Callback-No 0
+VALUE Ascend-Callback Callback-Yes 1
+VALUE Ascend-Expect-Callback Expect-Callback-No 0
+VALUE Ascend-Expect-Callback Expect-Callback-Yes 1
+VALUE Ascend-Data-Svc Switched-Voice-Bearer 0
+VALUE Ascend-Data-Svc Switched-56KR 1
+VALUE Ascend-Data-Svc Switched-64K 2
+VALUE Ascend-Data-Svc Switched-64KR 3
+VALUE Ascend-Data-Svc Switched-56K 4
+VALUE Ascend-Data-Svc Switched-384KR 5
+VALUE Ascend-Data-Svc Switched-384K 6
+VALUE Ascend-Data-Svc Switched-1536K 7
+VALUE Ascend-Data-Svc Switched-1536KR 8
+VALUE Ascend-Data-Svc Switched-128K 9
+VALUE Ascend-Data-Svc Switched-192K 10
+VALUE Ascend-Data-Svc Switched-256K 11
+VALUE Ascend-Data-Svc Switched-320K 12
+VALUE Ascend-Data-Svc Switched-384K-MR 13
+VALUE Ascend-Data-Svc Switched-448K 14
+VALUE Ascend-Data-Svc Switched-512K 15
+VALUE Ascend-Data-Svc Switched-576K 16
+VALUE Ascend-Data-Svc Switched-640K 17
+VALUE Ascend-Data-Svc Switched-704K 18
+VALUE Ascend-Data-Svc Switched-768K 19
+VALUE Ascend-Data-Svc Switched-832K 20
+VALUE Ascend-Data-Svc Switched-896K 21
+VALUE Ascend-Data-Svc Switched-960K 22
+VALUE Ascend-Data-Svc Switched-1024K 23
+VALUE Ascend-Data-Svc Switched-1088K 24
+VALUE Ascend-Data-Svc Switched-1152K 25
+VALUE Ascend-Data-Svc Switched-1216K 26
+VALUE Ascend-Data-Svc Switched-1280K 27
+VALUE Ascend-Data-Svc Switched-1344K 28
+VALUE Ascend-Data-Svc Switched-1408K 29
+VALUE Ascend-Data-Svc Switched-1472K 30
+VALUE Ascend-Data-Svc Switched-1600K 31
+VALUE Ascend-Data-Svc Switched-1664K 32
+VALUE Ascend-Data-Svc Switched-1728K 33
+VALUE Ascend-Data-Svc Switched-1792K 34
+VALUE Ascend-Data-Svc Switched-1856K 35
+VALUE Ascend-Data-Svc Switched-1920K 36
+VALUE Ascend-Data-Svc Switched-inherited 37
+VALUE Ascend-Data-Svc Switched-restricted-bearer-x30 38
+VALUE Ascend-Data-Svc Switched-clear-bearer-v110 39
+VALUE Ascend-Data-Svc Switched-restricted-64-x30 40
+VALUE Ascend-Data-Svc Switched-clear-56-v110 41
+VALUE Ascend-Data-Svc Switched-modem 42
+VALUE Ascend-Data-Svc Switched-atmodem 43
+VALUE Ascend-Data-Svc Nailed-56KR 1
+VALUE Ascend-Data-Svc Nailed-64K 2
+VALUE Ascend-Force-56 Force-56-No 0
+VALUE Ascend-Force-56 Force-56-Yes 1
+VALUE Ascend-PW-Lifetime Lifetime-In-Days 0
+VALUE Ascend-PW-Warntime Days-Of-Warning 0
+VALUE Ascend-PPP-VJ-1172 PPP-VJ-1172 1
+VALUE Ascend-PPP-VJ-Slot-Comp VJ-Slot-Comp-No 1
+VALUE Ascend-Require-Auth Not-Require-Auth 0
+VALUE Ascend-Require-Auth Require-Auth 1
+VALUE Ascend-Token-Immediate Tok-Imm-No 0
+VALUE Ascend-Token-Immediate Tok-Imm-Yes 1
+VALUE Ascend-DBA-Monitor DBA-Transmit 0
+VALUE Ascend-DBA-Monitor DBA-Transmit-Recv 1
+VALUE Ascend-DBA-Monitor DBA-None 2
+VALUE Ascend-FR-Type Ascend-FR-DTE 0
+VALUE Ascend-FR-Type Ascend-FR-DCE 1
+VALUE Ascend-FR-Type Ascend-FR-NNI 2
+VALUE Ascend-FR-Link-Mgt Ascend-FR-No-Link-Mgt 0
+VALUE Ascend-FR-Link-Mgt Ascend-FR-T1-617D 1
+VALUE Ascend-FR-Link-Mgt Ascend-FR-Q-933A 2
+VALUE Ascend-FR-LinkUp Ascend-LinkUp-Default 0
+VALUE Ascend-FR-LinkUp Ascend-LinkUp-AlwaysUp 1
+VALUE Ascend-Multicast-Client Multicast-No 0
+VALUE Ascend-Multicast-Client Multicast-Yes 1
+VALUE Ascend-User-Acct-Type Ascend-User-Acct-None 0
+VALUE Ascend-User-Acct-Type Ascend-User-Acct-User 1
+VALUE Ascend-User-Acct-Type Ascend-User-Acct-User-Default 2
+VALUE Ascend-User-Acct-Base Base-10 0
+VALUE Ascend-User-Acct-Base Base-16 1
+VALUE Ascend-DHCP-Reply DHCP-Reply-No 0
+VALUE Ascend-DHCP-Reply DHCP-Reply-Yes 1
+VALUE Ascend-Client-Assign-DNS DNS-Assign-No 0
+VALUE Ascend-Client-Assign-DNS DNS-Assign-Yes 1
+VALUE Ascend-Event-Type Ascend-ColdStart 1
+VALUE Ascend-Event-Type Ascend-Session-Event 2
+VALUE Ascend-BACP-Enable BACP-No 0
+VALUE Ascend-BACP-Enable BACP-Yes 1
+VALUE Ascend-Dialout-Allowed Dialout-Not-Allowed 0
+VALUE Ascend-Dialout-Allowed Dialout-Allowed 1
+VALUE Ascend-Shared-Profile-Enable Shared-Profile-No 0
+VALUE Ascend-Shared-Profile-Enable Shared-Profile-Yes 1
+VALUE Ascend-Temporary-Rtes Temp-Rtes-No 0
+VALUE Ascend-Temporary-Rtes Temp-Rtes-Yes 1
--- /dev/null
+#
+# Obsolete names for backwards compatibility with older users files.
+#
+ATTRIBUTE Client-Id 4 ipaddr
+ATTRIBUTE Client-Port-Id 5 integer
+ATTRIBUTE User-Service-Type 6 integer
+ATTRIBUTE Framed-Address 8 ipaddr
+ATTRIBUTE Framed-Netmask 9 ipaddr
+ATTRIBUTE Framed-Filter-Id 11 string
+ATTRIBUTE Login-Host 14 ipaddr
+ATTRIBUTE Login-Port 16 integer
+ATTRIBUTE Old-Password 17 string
+ATTRIBUTE Port-Message 18 string
+ATTRIBUTE Dialback-No 19 string
+ATTRIBUTE Dialback-Name 20 string
+ATTRIBUTE Challenge-State 24 string
+VALUE Framed-Compression Van-Jacobsen-TCP-IP 1
+VALUE Framed-Compression VJ-TCP-IP 1
+VALUE Service-Type Shell-User 6
+VALUE Auth-Type Unix 1
+VALUE Service-Type Dialback-Login-User 3
+VALUE Service-Type Dialback-Framed-User 4
+
+#
+# For compatibility with MERIT users files.
+#
+ATTRIBUTE NAS-Port 5 integer
+ATTRIBUTE Login-Host 14 ipaddr
+ATTRIBUTE Login-Callback-Number 19 string
+ATTRIBUTE Framed-Callback-Id 20 string
+ATTRIBUTE Client-Port-DNIS 30 string
+ATTRIBUTE Caller-ID 31 string
+VALUE Service-Type Login 1
+VALUE Service-Type Framed 2
+VALUE Service-Type Callback-Login 3
+VALUE Service-Type Callback-Framed 4
+VALUE Service-Type Exec-User 7
+
+#
+# For compatibility with ESVA RADIUS, Old Cistron RADIUS
+#
+ATTRIBUTE Session 1034 integer
+ATTRIBUTE User-Name-Is-Star 1035 integer
+VALUE User-Name-Is-Star No 0
+VALUE User-Name-Is-Star Yes 1
--- /dev/null
+#
+# Experimental extensions, configuration only (for check-items)
+# Names/numbers as per the MERIT extensions (if possible).
+#
+ATTRIBUTE NAS-Identifier 32 string
+ATTRIBUTE Proxy-State 33 string
+ATTRIBUTE Login-LAT-Service 34 string
+ATTRIBUTE Login-LAT-Node 35 string
+ATTRIBUTE Login-LAT-Group 36 string
+ATTRIBUTE Framed-AppleTalk-Link 37 integer
+ATTRIBUTE Framed-AppleTalk-Network 38 integer
+ATTRIBUTE Framed-AppleTalk-Zone 39 string
+ATTRIBUTE Acct-Input-Packets 47 integer
+ATTRIBUTE Acct-Output-Packets 48 integer
+# 8 is a MERIT extension.
+VALUE Service-Type Authenticate-Only 8
+
--- /dev/null
+#
+# Microsoft's VSA's, from RFC 2548
+#
+# $Id: dictionary.microsoft,v 1.1 2004/11/14 07:26:26 paulus Exp $
+#
+
+VENDOR Microsoft 311 Microsoft
+
+ATTRIBUTE MS-CHAP-Response 1 string Microsoft
+ATTRIBUTE MS-CHAP-Error 2 string Microsoft
+ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft
+ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft
+ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft
+ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft
+ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
+# This is referred to as both singular and plural in the RFC.
+# Plural seems to make more sense.
+ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft
+ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft
+ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft
+ATTRIBUTE MS-CHAP-Domain 10 string Microsoft
+ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft
+ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft
+ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
+ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
+ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft
+ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
+ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
+ATTRIBUTE MS-RAS-Version 18 string Microsoft
+ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft
+ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
+ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft
+
+ATTRIBUTE MS-Filter 22 string Microsoft
+ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
+ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft
+
+ATTRIBUTE MS-CHAP2-Response 25 string Microsoft
+ATTRIBUTE MS-CHAP2-Success 26 string Microsoft
+ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft
+
+ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft
+ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft
+ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft
+ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
+
+#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft
+
+
+#
+# Integer Translations
+#
+
+# MS-BAP-Usage Values
+
+VALUE MS-BAP-Usage Not-Allowed 0
+VALUE MS-BAP-Usage Allowed 1
+VALUE MS-BAP-Usage Required 2
+
+# MS-ARAP-Password-Change-Reason Values
+
+VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
+VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
+VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3
+VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
+
+# MS-Acct-Auth-Type Values
+
+VALUE MS-Acct-Auth-Type PAP 1
+VALUE MS-Acct-Auth-Type CHAP 2
+VALUE MS-Acct-Auth-Type MS-CHAP-1 3
+VALUE MS-Acct-Auth-Type MS-CHAP-2 4
+VALUE MS-Acct-Auth-Type EAP 5
+
+# MS-Acct-EAP-Type Values
+
+VALUE MS-Acct-EAP-Type MD5 4
+VALUE MS-Acct-EAP-Type OTP 5
+VALUE MS-Acct-EAP-Type Generic-Token-Card 6
+VALUE MS-Acct-EAP-Type TLS 13
+
--- /dev/null
+(\I)
+-----------------------------------------------------
+\S \R (\N) (port \L)
+-----------------------------------------------------
+
--- /dev/null
+#
+# port-id-map
+#
+# This file describes the ttyname to port id mapping. The port id
+# is reported as part of a RADIUS authentication or accouting request.
+#
+#ttyname (as returned by ttyname(3)) port-id
+/dev/tty1 1
+/dev/tty2 2
+/dev/tty3 3
+/dev/tty4 4
+/dev/tty5 5
+/dev/tty6 6
+/dev/tty7 7
+/dev/tty8 8
+/dev/ttyS0 9
+/dev/ttyS1 10
+/dev/ttyS2 11
+/dev/ttyS3 12
+/dev/ttyS4 13
+/dev/ttyS5 14
+/dev/ttyS6 15
+/dev/ttyS7 16
+
\ No newline at end of file
--- /dev/null
+# General settings
+
+# specify which authentication comes first respectively which
+# authentication is used. possible values are: "radius" and "local".
+# if you specify "radius,local" then the RADIUS server is asked
+# first then the local one. if only one keyword is specified only
+# this server is asked.
+auth_order radius
+
+# maximum login tries a user has (default 4)
+login_tries 4
+
+# timeout for all login tries (default 60)
+# if this time is exceeded the user is kicked out
+login_timeout 60
+
+# name of the nologin file which when it exists disables logins.
+# it may be extended by the ttyname which will result in
+# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable
+# logins on /dev/ttyS2) (default /etc/nologin)
+nologin /etc/nologin
+
+# name of the issue file. it's only display when no username is passed
+# on the radlogin command line (default /etc/radiusclient/issue)
+issue /usr/local/etc/radiusclient/issue
+
+# RADIUS settings
+
+# RADIUS server to use for authentication requests. this config
+# item can appear more then one time. if multiple servers are
+# defined they are tried in a round robin fashion if one
+# server is not answering.
+# optionally you can specify a the port number on which is remote
+# RADIUS listens separated by a colon from the hostname. if
+# no port is specified /etc/services is consulted of the radius
+# service. if this fails also a compiled in default is used.
+authserver localhost:1812
+
+# RADIUS server to use for accouting requests. All that I
+# said for authserver applies, too.
+#
+acctserver localhost:1813
+
+# file holding shared secrets used for the communication
+# between the RADIUS client and server
+servers /usr/local/etc/radiusclient/servers
+
+# dictionary of allowed attributes and values
+# just like in the normal RADIUS distributions
+dictionary /usr/local/etc/radiusclient/dictionary
+
+# program to call for a RADIUS authenticated login
+# (default /usr/sbin/login.radius)
+login_radius /usr/local/sbin/login.radius
+
+# file which holds sequence number for communication with the
+# RADIUS server
+seqfile /var/run/radius.seq
+
+# file which specifies mapping between ttyname and NAS-Port attribute
+mapfile /usr/local/etc/radiusclient/port-id-map
+
+# default authentication realm to append to all usernames if no
+# realm was explicitly specified by the user
+# the radiusd directly form Livingston doesnt use any realms, so leave
+# it blank then
+default_realm
+
+# time to wait for a reply from the RADIUS server
+radius_timeout 10
+
+# resend request this many times before trying the next server
+radius_retries 3
+
+# NAS-Identifier
+#
+# If supplied, this option will cause the client to send the given string
+# as the contents of the NAS-Identifier attribute in RADIUS requests. No
+# NAS-IP-Address attribute will be sent in this case.
+#
+# The default behavior is to send a NAS-IP-Address option and not send
+# a NAS-Identifier. The value of the NAS-IP-Address option is chosen
+# by resolving the system hostname.
+
+# nas_identifier MyUniqueNASName
+
+# LOCAL settings
+
+# program to execute for local login
+# it must support the -f flag for preauthenticated login
+login_local /bin/login
--- /dev/null
+# General settings
+
+# specify which authentication comes first respectively which
+# authentication is used. possible values are: "radius" and "local".
+# if you specify "radius,local" then the RADIUS server is asked
+# first then the local one. if only one keyword is specified only
+# this server is asked.
+auth_order radius
+
+# maximum login tries a user has (default 4)
+login_tries 4
+
+# timeout for all login tries (default 60)
+# if this time is exceeded the user is kicked out
+login_timeout 60
+
+# name of the nologin file which when it exists disables logins.
+# it may be extended by the ttyname which will result in
+# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable
+# logins on /dev/ttyS2) (default /etc/nologin)
+nologin /etc/nologin
+
+# name of the issue file. it's only display when no username is passed
+# on the radlogin command line (default /etc/radiusclient/issue)
+issue @pkgsysconfdir@/issue
+
+# RADIUS settings
+
+# RADIUS server to use for authentication requests. this config
+# item can appear more then one time. if multiple servers are
+# defined they are tried in a round robin fashion if one
+# server is not answering.
+# optionally you can specify a the port number on which is remote
+# RADIUS listens separated by a colon from the hostname. if
+# no port is specified /etc/services is consulted of the radius
+# service. if this fails also a compiled in default is used.
+authserver localhost:1812
+
+# RADIUS server to use for accouting requests. All that I
+# said for authserver applies, too.
+#
+acctserver localhost:1813
+
+# file holding shared secrets used for the communication
+# between the RADIUS client and server
+servers @pkgsysconfdir@/servers
+
+# dictionary of allowed attributes and values
+# just like in the normal RADIUS distributions
+dictionary @pkgsysconfdir@/dictionary
+
+# program to call for a RADIUS authenticated login
+# (default /usr/sbin/login.radius)
+login_radius @sbindir@/login.radius
+
+# file which holds sequence number for communication with the
+# RADIUS server
+seqfile /var/run/radius.seq
+
+# file which specifies mapping between ttyname and NAS-Port attribute
+mapfile @pkgsysconfdir@/port-id-map
+
+# default authentication realm to append to all usernames if no
+# realm was explicitly specified by the user
+# the radiusd directly form Livingston doesnt use any realms, so leave
+# it blank then
+default_realm
+
+# time to wait for a reply from the RADIUS server
+radius_timeout 10
+
+# resend request this many times before trying the next server
+radius_retries 3
+
+# NAS-Identifier
+#
+# If supplied, this option will cause the client to send the given string
+# as the contents of the NAS-Identifier attribute in RADIUS requests. No
+# NAS-IP-Address attribute will be sent in this case.
+#
+# The default behavior is to send a NAS-IP-Address option and not send
+# a NAS-Identifier. The value of the NAS-IP-Address option is chosen
+# by resolving the system hostname.
+
+# nas_identifier MyUniqueNASName
+
+# LOCAL settings
+
+# program to execute for local login
+# it must support the -f flag for preauthenticated login
+login_local /bin/login
--- /dev/null
+# /etc/radiusclient/realms
+#
+# Handle realm @netservers.co.uk on an internal RADIUS server
+# (note the server must be told to strip the realm)
+
+#authserver netservers.co.uk 192.168.1.1:1812
+#acctserver netservers.co.uk 192.168.1.1:1813
+
+# users in realm @example.com are handled by separate servers
+
+#authserver example.com 10.0.0.1:1812
+#acctserver example.com 10.0.0.2:1813
+
+# the DEFAULT realm matches users that do not supply a realm
+
+#authserver DEFAULT 192.168.1.1:1812
+#acctserver DEFAULT 192.168.1.1:1813
+
+# Any realms that do not match in the realms file automatically fall
+# through to the standard radius plugin which uses the servers in the
+# radiusclient.conf file. Note that this is different than the
+# DEFAULT realm match, above.
--- /dev/null
+#Server Name or Client/Server pair Key
+#---------------- ---------------
+#portmaster.elemental.net hardlyasecret
+#portmaster2.elemental.net donttellanyone
--- /dev/null
+/*
+ * $Id: includes.h,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <netdb.h>
+#include <syslog.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include <limits.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+#ifndef UCHAR_MAX
+# define UCHAR_MAX 255
+#endif
+
+#include <pwd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <time.h>
+
+#include "magic.h"
+
+/* rlib/lock.c */
+int do_lock_exclusive(int);
+int do_unlock(int);
--- /dev/null
+/*
+ * $Id: ip_util.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+/*
+ * Function: rc_get_ipaddr
+ *
+ * Purpose: return an IP address in host long notation from a host
+ * name or address in dot notation.
+ *
+ * Returns: 0 on failure
+ */
+
+UINT4 rc_get_ipaddr (char *host)
+{
+ struct hostent *hp;
+
+ if (rc_good_ipaddr (host) == 0)
+ {
+ return ntohl(inet_addr (host));
+ }
+ else if ((hp = gethostbyname (host)) == (struct hostent *) NULL)
+ {
+ error("rc_get_ipaddr: couldn't resolve hostname: %s", host);
+ return ((UINT4) 0);
+ }
+ return ntohl((*(UINT4 *) hp->h_addr));
+}
+
+/*
+ * Function: rc_good_ipaddr
+ *
+ * Purpose: check for valid IP address in standard dot notation.
+ *
+ * Returns: 0 on success, -1 when failure
+ *
+ */
+
+int rc_good_ipaddr (char *addr)
+{
+ int dot_count;
+ int digit_count;
+
+ if (addr == NULL)
+ return (-1);
+
+ dot_count = 0;
+ digit_count = 0;
+ while (*addr != '\0' && *addr != ' ')
+ {
+ if (*addr == '.')
+ {
+ dot_count++;
+ digit_count = 0;
+ }
+ else if (!isdigit (*addr))
+ {
+ dot_count = 5;
+ }
+ else
+ {
+ digit_count++;
+ if (digit_count > 3)
+ {
+ dot_count = 5;
+ }
+ }
+ addr++;
+ }
+ if (dot_count != 3)
+ {
+ return (-1);
+ }
+ else
+ {
+ return (0);
+ }
+}
+
+/*
+ * Function: rc_ip_hostname
+ *
+ * Purpose: Return a printable host name (or IP address in dot notation)
+ * for the supplied IP address.
+ *
+ */
+
+const char *rc_ip_hostname (UINT4 h_ipaddr)
+{
+ struct hostent *hp;
+ UINT4 n_ipaddr = htonl (h_ipaddr);
+
+ if ((hp = gethostbyaddr ((char *) &n_ipaddr, sizeof (struct in_addr),
+ AF_INET)) == NULL) {
+ error("rc_ip_hostname: couldn't look up host by addr: %08lX", h_ipaddr);
+ }
+
+ return ((hp==NULL)?"unknown":hp->h_name);
+}
+
+/*
+ * Function: rc_own_ipaddress
+ *
+ * Purpose: get the IP address of this host in host order
+ *
+ * Returns: IP address on success, 0 on failure
+ *
+ */
+
+UINT4 rc_own_ipaddress(void)
+{
+ static UINT4 this_host_ipaddr = 0;
+
+ if (!this_host_ipaddr) {
+ if ((this_host_ipaddr = rc_get_ipaddr (hostname)) == 0) {
+ error("rc_own_ipaddress: couldn't get own IP address");
+ return 0;
+ }
+ }
+
+ return this_host_ipaddr;
+}
--- /dev/null
+/*
+ * $Id: lock.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1997 Lars Fenneberg
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include "includes.h"
+#include <unistd.h>
+#include <fcntl.h>
+
+int do_lock_exclusive(int fd)
+{
+ struct flock fl;
+ int res;
+
+ memset((void *)&fl, 0, sizeof(fl));
+
+ fl.l_type = F_WRLCK;
+ fl.l_whence = fl.l_start = 0;
+ fl.l_len = 0; /* 0 means "to end of file" */
+
+ res = fcntl(fd, F_SETLK, &fl);
+
+ if ((res == -1) && (errno == EAGAIN))
+ errno = EWOULDBLOCK;
+
+ return res;
+}
+
+int do_unlock(int fd)
+{
+ struct flock fl;
+
+ memset((void *)&fl, 0, sizeof(fl));
+
+ fl.l_type = F_UNLCK;
+ fl.l_whence = fl.l_start = 0;
+ fl.l_len = 0; /* 0 means "to end of file" */
+
+ return fcntl(fd, F_SETLK, &fl);
+}
--- /dev/null
+/*
+ * $Id: md5.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ */
+#include "md5.h"
+
+void rc_md5_calc (unsigned char *output, unsigned char *input, unsigned int inlen)
+{
+ MD5_CTX context;
+
+ MD5_Init (&context);
+ MD5_Update (&context, input, inlen);
+ MD5_Final (output, &context);
+}
--- /dev/null
+/*
+ * $Id: options.h,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1996 Lars Fenneberg
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#define OPTION_LEN 64
+
+/* ids for different option types */
+#define OT_STR (1<<0) /* string */
+#define OT_INT (1<<1) /* integer */
+#define OT_SRV (1<<2) /* server list */
+#define OT_AUO (1<<3) /* authentication order */
+
+#define OT_ANY ((unsigned int)~0) /* used internally */
+
+/* status types */
+#define ST_UNDEF (1<<0) /* option is undefined */
+
+typedef struct _option {
+ char name[OPTION_LEN]; /* name of the option */
+ int type, status; /* type and status */
+ void *val; /* pointer to option value */
+} OPTION;
+
+static SERVER acctserver = {0};
+static SERVER authserver = {0};
+
+int default_tries = 4;
+int default_timeout = 60;
+
+static OPTION config_options[] = {
+/* internally used options */
+{"config_file", OT_STR, ST_UNDEF, NULL},
+/* General options */
+{"auth_order", OT_AUO, ST_UNDEF, NULL},
+{"login_tries", OT_INT, ST_UNDEF, &default_tries},
+{"login_timeout", OT_INT, ST_UNDEF, &default_timeout},
+{"nologin", OT_STR, ST_UNDEF, "/etc/nologin"},
+{"issue", OT_STR, ST_UNDEF, "/etc/radiusclient/issue"},
+/* RADIUS specific options */
+{"authserver", OT_SRV, ST_UNDEF, &authserver},
+{"acctserver", OT_SRV, ST_UNDEF, &acctserver},
+{"servers", OT_STR, ST_UNDEF, NULL},
+{"dictionary", OT_STR, ST_UNDEF, NULL},
+{"login_radius", OT_STR, ST_UNDEF, "/usr/sbin/login.radius"},
+{"seqfile", OT_STR, ST_UNDEF, NULL},
+{"mapfile", OT_STR, ST_UNDEF, NULL},
+{"default_realm", OT_STR, ST_UNDEF, NULL},
+{"radius_timeout", OT_INT, ST_UNDEF, NULL},
+{"radius_retries", OT_INT, ST_UNDEF, NULL},
+{"nas_identifier", OT_STR, ST_UNDEF, ""},
+/* local options */
+{"login_local", OT_STR, ST_UNDEF, NULL},
+};
+
+static int num_options = ((sizeof(config_options))/(sizeof(config_options[0])));
--- /dev/null
+/*
+ * $Id: pathnames.h,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#ifndef PATHNAMES_H
+#define PATHNAMES_H
+
+#define _PATH_DEV_URANDOM "/dev/urandom" /* Linux only */
+#define _PATH_ETC_ISSUE "/etc/issue"
+
+/* normally defined in the Makefile */
+#ifndef _PATH_ETC_RADIUSCLIENT_CONF
+#define _PATH_ETC_RADIUSCLIENT_CONF "/etc/radiusclient.conf"
+#endif
+
+#endif /* PATHNAMES_H */
*
***********************************************************************/
static char const RCSID[] =
-"$Id: radius.c,v 1.26 2004/10/28 00:22:54 paulus Exp $";
+"$Id: radius.c,v 1.27 2004/11/14 07:26:26 paulus Exp $";
#include "pppd.h"
#include "chap-new.h"
#include <sys/types.h>
#include <sys/time.h>
#include <string.h>
+#include <netinet/in.h>
+#include <stdlib.h>
#define BUF_LEN 1024
memcpy(plain, vp->strvalue, sizeof(plain));
- MD5Init(&Context);
- MD5Update(&Context, req_info->secret, strlen(req_info->secret));
- MD5Update(&Context, req_info->request_vector, AUTH_VECTOR_LEN);
- MD5Final(buf, &Context);
+ MD5_Init(&Context);
+ MD5_Update(&Context, req_info->secret, strlen(req_info->secret));
+ MD5_Update(&Context, req_info->request_vector, AUTH_VECTOR_LEN);
+ MD5_Final(buf, &Context);
for (i = 0; i < 16; i++)
plain[i] ^= buf[i];
- MD5Init(&Context);
- MD5Update(&Context, req_info->secret, strlen(req_info->secret));
- MD5Update(&Context, vp->strvalue, 16);
- MD5Final(buf, &Context);
+ MD5_Init(&Context);
+ MD5_Update(&Context, req_info->secret, strlen(req_info->secret));
+ MD5_Update(&Context, vp->strvalue, 16);
+ MD5_Final(buf, &Context);
for(i = 0; i < 16; i++)
plain[i + 16] ^= buf[i];
memcpy(plain, crypt, 32);
- MD5Init(&Context);
- MD5Update(&Context, req_info->secret, strlen(req_info->secret));
- MD5Update(&Context, req_info->request_vector, AUTH_VECTOR_LEN);
- MD5Update(&Context, salt, 2);
- MD5Final(buf, &Context);
+ MD5_Init(&Context);
+ MD5_Update(&Context, req_info->secret, strlen(req_info->secret));
+ MD5_Update(&Context, req_info->request_vector, AUTH_VECTOR_LEN);
+ MD5_Update(&Context, salt, 2);
+ MD5_Final(buf, &Context);
for (i = 0; i < 16; i++)
plain[i] ^= buf[i];
return -1;
}
- MD5Init(&Context);
- MD5Update(&Context, req_info->secret, strlen(req_info->secret));
- MD5Update(&Context, crypt, 16);
- MD5Final(buf, &Context);
+ MD5_Init(&Context);
+ MD5_Update(&Context, req_info->secret, strlen(req_info->secret));
+ MD5_Update(&Context, crypt, 16);
+ MD5_Final(buf, &Context);
plain[16] ^= buf[0]; /* only need the first byte */
--- /dev/null
+/*
+ * $Id: radiusclient.h,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997,1998 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#ifndef RADIUSCLIENT_H
+#define RADIUSCLIENT_H
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+#include "pppd.h"
+
+#ifndef _UINT4_T
+/* This works for all machines that Linux runs on... */
+typedef unsigned int UINT4;
+typedef int INT4;
+#endif
+
+#define AUTH_VECTOR_LEN 16
+#define AUTH_PASS_LEN (3 * 16) /* multiple of 16 */
+#define AUTH_ID_LEN 64
+#define AUTH_STRING_LEN 128 /* maximum of 253 */
+
+#define BUFFER_LEN 8192
+
+#define NAME_LENGTH 32
+#define GETSTR_LENGTH 128 /* must be bigger than AUTH_PASS_LEN */
+
+/* codes for radius_buildreq, radius_getport, etc. */
+#define AUTH 0
+#define ACCT 1
+
+/* defines for config.c */
+
+#define SERVER_MAX 8
+
+#define AUTH_LOCAL_FST (1<<0)
+#define AUTH_RADIUS_FST (1<<1)
+#define AUTH_LOCAL_SND (1<<2)
+#define AUTH_RADIUS_SND (1<<3)
+
+typedef struct server {
+ int max;
+ char *name[SERVER_MAX];
+ unsigned short port[SERVER_MAX];
+} SERVER;
+
+typedef struct pw_auth_hdr
+{
+ u_char code;
+ u_char id;
+ u_short length;
+ u_char vector[AUTH_VECTOR_LEN];
+ u_char data[2];
+} AUTH_HDR;
+
+#define AUTH_HDR_LEN 20
+#define MAX_SECRET_LENGTH (3 * 16) /* MUST be multiple of 16 */
+#define CHAP_VALUE_LENGTH 16
+
+#define PW_AUTH_UDP_PORT 1812
+#define PW_ACCT_UDP_PORT 1813
+
+#define PW_TYPE_STRING 0
+#define PW_TYPE_INTEGER 1
+#define PW_TYPE_IPADDR 2
+#define PW_TYPE_DATE 3
+
+/* standard RADIUS codes */
+
+#define PW_ACCESS_REQUEST 1
+#define PW_ACCESS_ACCEPT 2
+#define PW_ACCESS_REJECT 3
+#define PW_ACCOUNTING_REQUEST 4
+#define PW_ACCOUNTING_RESPONSE 5
+#define PW_ACCOUNTING_STATUS 6
+#define PW_PASSWORD_REQUEST 7
+#define PW_PASSWORD_ACK 8
+#define PW_PASSWORD_REJECT 9
+#define PW_ACCOUNTING_MESSAGE 10
+#define PW_ACCESS_CHALLENGE 11
+#define PW_STATUS_SERVER 12
+#define PW_STATUS_CLIENT 13
+
+
+/* standard RADIUS attribute-value pairs */
+
+#define PW_USER_NAME 1 /* string */
+#define PW_USER_PASSWORD 2 /* string */
+#define PW_CHAP_PASSWORD 3 /* string */
+#define PW_NAS_IP_ADDRESS 4 /* ipaddr */
+#define PW_NAS_PORT 5 /* integer */
+#define PW_SERVICE_TYPE 6 /* integer */
+#define PW_FRAMED_PROTOCOL 7 /* integer */
+#define PW_FRAMED_IP_ADDRESS 8 /* ipaddr */
+#define PW_FRAMED_IP_NETMASK 9 /* ipaddr */
+#define PW_FRAMED_ROUTING 10 /* integer */
+#define PW_FILTER_ID 11 /* string */
+#define PW_FRAMED_MTU 12 /* integer */
+#define PW_FRAMED_COMPRESSION 13 /* integer */
+#define PW_LOGIN_IP_HOST 14 /* ipaddr */
+#define PW_LOGIN_SERVICE 15 /* integer */
+#define PW_LOGIN_PORT 16 /* integer */
+#define PW_OLD_PASSWORD 17 /* string */ /* deprecated */
+#define PW_REPLY_MESSAGE 18 /* string */
+#define PW_LOGIN_CALLBACK_NUMBER 19 /* string */
+#define PW_FRAMED_CALLBACK_ID 20 /* string */
+#define PW_EXPIRATION 21 /* date */ /* deprecated */
+#define PW_FRAMED_ROUTE 22 /* string */
+#define PW_FRAMED_IPX_NETWORK 23 /* integer */
+#define PW_STATE 24 /* string */
+#define PW_CLASS 25 /* string */
+#define PW_VENDOR_SPECIFIC 26 /* string */
+#define PW_SESSION_TIMEOUT 27 /* integer */
+#define PW_IDLE_TIMEOUT 28 /* integer */
+#define PW_TERMINATION_ACTION 29 /* integer */
+#define PW_CALLED_STATION_ID 30 /* string */
+#define PW_CALLING_STATION_ID 31 /* string */
+#define PW_NAS_IDENTIFIER 32 /* string */
+#define PW_PROXY_STATE 33 /* string */
+#define PW_LOGIN_LAT_SERVICE 34 /* string */
+#define PW_LOGIN_LAT_NODE 35 /* string */
+#define PW_LOGIN_LAT_GROUP 36 /* string */
+#define PW_FRAMED_APPLETALK_LINK 37 /* integer */
+#define PW_FRAMED_APPLETALK_NETWORK 38 /* integer */
+#define PW_FRAMED_APPLETALK_ZONE 39 /* string */
+#define PW_CHAP_CHALLENGE 60 /* string */
+#define PW_NAS_PORT_TYPE 61 /* integer */
+#define PW_PORT_LIMIT 62 /* integer */
+#define PW_LOGIN_LAT_PORT 63 /* string */
+
+/* Vendor RADIUS attribute-value pairs */
+#define PW_MS_CHAP_CHALLENGE 11 /* string */
+#define PW_MS_CHAP_RESPONSE 1 /* string */
+#define PW_MS_CHAP2_RESPONSE 25 /* string */
+#define PW_MS_CHAP2_SUCCESS 26 /* string */
+#define PW_MS_MPPE_ENCRYPTION_POLICY 7 /* string */
+#define PW_MS_MPPE_ENCRYPTION_TYPE 8 /* string */
+#define PW_MS_MPPE_ENCRYPTION_TYPES PW_MS_MPPE_ENCRYPTION_TYPE
+#define PW_MS_CHAP_MPPE_KEYS 12 /* string */
+#define PW_MS_MPPE_SEND_KEY 16 /* string */
+#define PW_MS_MPPE_RECV_KEY 17 /* string */
+
+/* Accounting */
+
+#define PW_ACCT_STATUS_TYPE 40 /* integer */
+#define PW_ACCT_DELAY_TIME 41 /* integer */
+#define PW_ACCT_INPUT_OCTETS 42 /* integer */
+#define PW_ACCT_OUTPUT_OCTETS 43 /* integer */
+#define PW_ACCT_SESSION_ID 44 /* string */
+#define PW_ACCT_AUTHENTIC 45 /* integer */
+#define PW_ACCT_SESSION_TIME 46 /* integer */
+#define PW_ACCT_INPUT_PACKETS 47 /* integer */
+#define PW_ACCT_OUTPUT_PACKETS 48 /* integer */
+#define PW_ACCT_TERMINATE_CAUSE 49 /* integer */
+#define PW_ACCT_MULTI_SESSION_ID 50 /* string */
+#define PW_ACCT_LINK_COUNT 51 /* integer */
+
+/* From RFC 2869 */
+#define PW_ACCT_INTERIM_INTERVAL 85 /* integer */
+
+/* Merit Experimental Extensions */
+
+#define PW_USER_ID 222 /* string */
+#define PW_USER_REALM 223 /* string */
+
+
+/* Session limits */
+#define PW_SESSION_OCTETS_LIMIT 227 /* integer */
+#define PW_OCTETS_DIRECTION 228 /* integer */
+
+/* Integer Translations */
+
+/* SERVICE TYPES */
+
+#define PW_LOGIN 1
+#define PW_FRAMED 2
+#define PW_CALLBACK_LOGIN 3
+#define PW_CALLBACK_FRAMED 4
+#define PW_OUTBOUND 5
+#define PW_ADMINISTRATIVE 6
+#define PW_NAS_PROMPT 7
+#define PW_AUTHENTICATE_ONLY 8
+#define PW_CALLBACK_NAS_PROMPT 9
+
+/* FRAMED PROTOCOLS */
+
+#define PW_PPP 1
+#define PW_SLIP 2
+#define PW_ARA 3
+#define PW_GANDALF 4
+#define PW_XYLOGICS 5
+
+/* FRAMED ROUTING VALUES */
+
+#define PW_NONE 0
+#define PW_BROADCAST 1
+#define PW_LISTEN 2
+#define PW_BROADCAST_LISTEN 3
+
+/* FRAMED COMPRESSION TYPES */
+
+#define PW_VAN_JACOBSON_TCP_IP 1
+#define PW_IPX_HEADER_COMPRESSION 2
+
+/* LOGIN SERVICES */
+
+#define PW_TELNET 0
+#define PW_RLOGIN 1
+#define PW_TCP_CLEAR 2
+#define PW_PORTMASTER 3
+#define PW_LAT 4
+#define PW_X25_PAD 5
+#define PW_X25_T3POS 6
+
+/* TERMINATION ACTIONS */
+
+#define PW_DEFAULT 0
+#define PW_RADIUS_REQUEST 1
+
+/* PROHIBIT PROTOCOL */
+
+#define PW_DUMB 0 /* 1 and 2 are defined in FRAMED PROTOCOLS */
+#define PW_AUTH_ONLY 3
+#define PW_ALL 255
+
+/* ACCOUNTING STATUS TYPES */
+
+#define PW_STATUS_START 1
+#define PW_STATUS_STOP 2
+#define PW_STATUS_ALIVE 3
+#define PW_STATUS_MODEM_START 4
+#define PW_STATUS_MODEM_STOP 5
+#define PW_STATUS_CANCEL 6
+#define PW_ACCOUNTING_ON 7
+#define PW_ACCOUNTING_OFF 8
+
+/* ACCOUNTING TERMINATION CAUSES */
+
+#define PW_USER_REQUEST 1
+#define PW_LOST_CARRIER 2
+#define PW_LOST_SERVICE 3
+#define PW_ACCT_IDLE_TIMEOUT 4
+#define PW_ACCT_SESSION_TIMEOUT 5
+#define PW_ADMIN_RESET 6
+#define PW_ADMIN_REBOOT 7
+#define PW_PORT_ERROR 8
+#define PW_NAS_ERROR 9
+#define PW_NAS_REQUEST 10
+#define PW_NAS_REBOOT 11
+#define PW_PORT_UNNEEDED 12
+#define PW_PORT_PREEMPTED 13
+#define PW_PORT_SUSPENDED 14
+#define PW_SERVICE_UNAVAILABLE 15
+#define PW_CALLBACK 16
+#define PW_USER_ERROR 17
+#define PW_HOST_REQUEST 18
+
+/* NAS PORT TYPES */
+
+#define PW_ASYNC 0
+#define PW_SYNC 1
+#define PW_ISDN_SYNC 2
+#define PW_ISDN_SYNC_V120 3
+#define PW_ISDN_SYNC_V110 4
+#define PW_VIRTUAL 5
+
+/* AUTHENTIC TYPES */
+#define PW_RADIUS 1
+#define PW_LOCAL 2
+#define PW_REMOTE 3
+
+/* Session-Octets-Limit */
+#define PW_OCTETS_DIRECTION_SUM 0
+#define PW_OCTETS_DIRECTION_IN 1
+#define PW_OCTETS_DIRECTION_OUT 2
+#define PW_OCTETS_DIRECTION_MAX 3
+
+
+/* Vendor codes */
+#define VENDOR_NONE (-1)
+#define VENDOR_MICROSOFT 311
+
+/* Server data structures */
+
+typedef struct dict_attr
+{
+ char name[NAME_LENGTH + 1]; /* attribute name */
+ int value; /* attribute index */
+ int type; /* string, int, etc. */
+ int vendorcode; /* vendor code */
+ struct dict_attr *next;
+} DICT_ATTR;
+
+typedef struct dict_value
+{
+ char attrname[NAME_LENGTH +1];
+ char name[NAME_LENGTH + 1];
+ int value;
+ struct dict_value *next;
+} DICT_VALUE;
+
+typedef struct vendor_dict
+{
+ char vendorname[NAME_LENGTH + 1];
+ int vendorcode;
+ DICT_ATTR *attributes;
+ struct vendor_dict *next;
+} VENDOR_DICT;
+
+typedef struct value_pair
+{
+ char name[NAME_LENGTH + 1];
+ int attribute;
+ int vendorcode;
+ int type;
+ UINT4 lvalue;
+ u_char strvalue[AUTH_STRING_LEN + 1];
+ struct value_pair *next;
+} VALUE_PAIR;
+
+/* don't change this, as it has to be the same as in the Merit radiusd code */
+#define MGMT_POLL_SECRET "Hardlyasecret"
+
+/* Define return codes from "SendServer" utility */
+
+#define BADRESP_RC -2
+#define ERROR_RC -1
+#define OK_RC 0
+#define TIMEOUT_RC 1
+
+typedef struct send_data /* Used to pass information to sendserver() function */
+{
+ u_char code; /* RADIUS packet code */
+ u_char seq_nbr; /* Packet sequence number */
+ char *server; /* Name/addrress of RADIUS server */
+ int svc_port; /* RADIUS protocol destination port */
+ int timeout; /* Session timeout in seconds */
+ int retries;
+ VALUE_PAIR *send_pairs; /* More a/v pairs to send */
+ VALUE_PAIR *receive_pairs; /* Where to place received a/v pairs */
+} SEND_DATA;
+
+typedef struct request_info
+{
+ char secret[MAX_SECRET_LENGTH + 1];
+ u_char request_vector[AUTH_VECTOR_LEN];
+} REQUEST_INFO;
+
+#ifndef MIN
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+typedef struct env
+{
+ int maxsize, size;
+ char **env;
+} ENV;
+
+#define ENV_SIZE 128
+
+/* Function prototypes */
+
+/* avpair.c */
+
+VALUE_PAIR *rc_avpair_add __P((VALUE_PAIR **, int, void *, int, int));
+int rc_avpair_assign __P((VALUE_PAIR *, void *, int));
+VALUE_PAIR *rc_avpair_new __P((int, void *, int, int));
+VALUE_PAIR *rc_avpair_gen __P((AUTH_HDR *));
+VALUE_PAIR *rc_avpair_get __P((VALUE_PAIR *, UINT4));
+VALUE_PAIR *rc_avpair_copy __P((VALUE_PAIR *));
+void rc_avpair_insert __P((VALUE_PAIR **, VALUE_PAIR *, VALUE_PAIR *));
+void rc_avpair_free __P((VALUE_PAIR *));
+int rc_avpair_parse __P((char *, VALUE_PAIR **));
+int rc_avpair_tostr __P((VALUE_PAIR *, char *, int, char *, int));
+VALUE_PAIR *rc_avpair_readin __P((FILE *));
+
+/* buildreq.c */
+
+void rc_buildreq __P((SEND_DATA *, int, char *, unsigned short, int, int));
+unsigned char rc_get_seqnbr __P((void));
+int rc_auth __P((UINT4, VALUE_PAIR *, VALUE_PAIR **, char *, REQUEST_INFO *));
+int rc_auth_using_server __P((SERVER *, UINT4, VALUE_PAIR *, VALUE_PAIR **,
+ char *, REQUEST_INFO *));
+int rc_auth_proxy __P((VALUE_PAIR *, VALUE_PAIR **, char *));
+int rc_acct __P((UINT4, VALUE_PAIR *));
+int rc_acct_using_server __P((SERVER *, UINT4, VALUE_PAIR *));
+int rc_acct_proxy __P((VALUE_PAIR *));
+int rc_check __P((char *, unsigned short, char *));
+
+/* clientid.c */
+
+int rc_read_mapfile __P((char *));
+UINT4 rc_map2id __P((char *));
+
+/* config.c */
+
+int rc_read_config __P((char *));
+char *rc_conf_str __P((char *));
+int rc_conf_int __P((char *));
+SERVER *rc_conf_srv __P((char *));
+int rc_find_server __P((char *, UINT4 *, char *));
+
+/* dict.c */
+
+int rc_read_dictionary __P((char *));
+DICT_ATTR *rc_dict_getattr __P((int, int));
+DICT_ATTR *rc_dict_findattr __P((char *));
+DICT_VALUE *rc_dict_findval __P((char *));
+DICT_VALUE * rc_dict_getval __P((UINT4, char *));
+VENDOR_DICT * rc_dict_findvendor __P((char *));
+VENDOR_DICT * rc_dict_getvendor __P((int));
+
+/* ip_util.c */
+
+UINT4 rc_get_ipaddr __P((char *));
+int rc_good_ipaddr __P((char *));
+const char *rc_ip_hostname __P((UINT4));
+UINT4 rc_own_ipaddress __P((void));
+
+
+/* sendserver.c */
+
+int rc_send_server __P((SEND_DATA *, char *, REQUEST_INFO *));
+
+/* util.c */
+
+void rc_str2tm __P((char *, struct tm *));
+char *rc_mksid __P((void));
+void rc_mdelay __P((int));
+
+/* md5.c */
+
+void rc_md5_calc __P((unsigned char *, unsigned char *, unsigned int));
+
+#endif /* RADIUSCLIENT_H */
+++ /dev/null
-$Id: BUGS,v 1.1 2002/01/22 16:03:00 dfs Exp $
-
-Testing can show the presense of bugs, but not their absence.
- -- Dijkstra
-
-The get_seqnbr function in build_req.c sometimes returns the same
-number, if invoked from multiple processes at the same time. This
-occurs only if a lot of process try to read the sequence file,
-so I suspect a race condition in the locking code, but I can't
-find one. Any help is appreciated.
-
-Radlogin respectively send_server in sendserver.c does not honour a
-ACCESS_CHALLENGE packet from the RADIUS server.
-
-There are interoperability problems with radiusd 1.16... but all the Merit
-radiusds I tried worked (last one I tried 2.4.21). There is an option to
-configure (--enable-radius-116) to kludge around this... It turned out to be
-a bug in radiusd 1.16: it doesn't include the shared secret in the digest
-calculation. See patches/radiusd-1.16.accounting.diff for a real fix.
+++ /dev/null
-$Id: CHANGES,v 1.1 2002/01/22 16:03:00 dfs Exp $
-
-This file only documents fixed bugs and new features.. well, if I am not
-too lazy...
-
-01-06-99 Added support for RFC compliant accounting request digest
- calculation.
- Added new attributes and value defines to radiusclient.h.
- Deleted an fclose at the wrong place (could lead to SIGSEGV).
- Add newlines when constructing message from Reply-Message
- attributes.
- Output warning message when --enable-radius-116 is enabled.
-
-07-19-98 Changed licensing terms (GPL -> BSD style).
- Added pointer to pppd patches in patches/README.
-
-03-06-98 Added patch patches/radiusd-1.16.accounting.diff.
-
-02-10-98 IMPORTANT! Changed the name of the "clients" config file
- directive and the file name itself to "servers". This should
- better reflect its content. Furthermore "servers" is now
- installed mode 600 and not 644. Thanks go to Tilman
- Mueller-Gerbes <tmg@suse.de> for pointing this out.
-
-01-15-98 Fixed two bugs in lib/sendserver.c, rc_random_vector:
- - file descriptor leak (found by Michael Lausch)
- - vector was not increased with each read
-
-01-14-98 Portability changes for NetBSD and BSDI. It compiles cleanly
- on both platforms, now. But I haven't been able to test the
- resulting executables. Many thanks go to Meno Abels
- <Meno.Abels@Technical.Adviser.com> for providing accounts on
- a NetBSD and BSDI machine. Furthermore I'd like to thank
- Dave Burgess <burgess@cynjut.neonramp.com> for his help.
-
-Dezember 1997, Lots of portability changes.
-January 1998 Switched to autconf, automake and libtool.
- Change all occurences of radclient to radiusclient (in file and
- directory names).
- Added shared libradiusclient.
- Removed check for login_radius in lib/config.c.
- Fixed bug in src/radacct.c which lead to a SIGSEGV
- when calling ttyname(3).
- Added support for longer passwords (mostly untested).
- Integrated includes/config.h into the configure script.
-
-09-15-96 intermediate release: changed my email address and homepage.
- included the new (working) pppd patch.
-
-06-01-96 patch to pppd included, contributed by Matjaz Godec
- <gody@elgo.si>, heavily changed and broken by me.
-
-06-01-96 ppptraffic is gone, it wasn't really useful as the kernel
- ppp clears the stats right when the device goes done.
- Maybe it's possible to add this functionality to pppd
- directly.
-
-05-13-96 rc_mksid is back in libradiusclient.a
-
-05-12-96 Fixed some bugs in the files MCONFIG and Makefile (reported by
- Matjaz Godec <gody@elgo.si>).
-
-05-12-96 rc_avpair_add, rc_avpair_new, rc_avpair_assign have a new
- last argument: the length of the attribute. This can
- normally always be zero and is needed only in the special
- case when you want to send raw data strings which might
- contain a \0 character.
-
-05-11-96 rc_map2id now preceeds its argument with /dev/ if neccessary
-
-05-03-96 I changed the tabbing style, so from now on tabs are 4
- characters so that there's more space for full blown and
- complicated if, switch, etc. structures. Remember this when
- you look at the source.
-
-05-03-96 improved error checking in a few places and changed
- logging so that now everything goes into syslog.
- facility is configurable in config.h (SYSLOG_FACILITY)
-
-05-02-96 added admin logins: you can now change the radiusclient
- config file from remote. much is still missing. to use this
- feature define a RADIUS user with a service type of
- Administrative.
-
-05-01-96 MERIT_GRANDFATHER compatability define removed again,
- it's simply broken. You HAVE to compile Merit radiusd
- without this define for outbound and admin logins to work.
-
-05-01-96 config.c rewritten, the syntax of more than one authserver
- or acctserver directive in radiusclient.conf is no longer
- supported. instead mutliple servers have to be specified
- in one line seperated by comma.
-
-05-01-96 added outbound support to radlogin, usably via telnet or
- pseudo tty (rport sets this tty up on a remote host).
-
-03-19-96 added support for /etc/nologin, new config option "nologin"
- in radiusclient.conf
-
-03-18-96 Linux (>=1.3.x): added support for /dev/urandom for more
- secure user passwords
-
-03-17-96 normal usage messages are now seperate in src/messages.h
- (thanks go to Migs, who pointed out that this would
- be usefull)
-
-03-15-96 added SCP define, to derive a service type from a user
- name prefix and supply it to the RADIUS server
-
-03-14-96 added RADIUS_116 define, accounting should now "work" with
- Livingston radiusd v1.16.
-
- cleaned up the enviroment handling, the global setenv was
- a mess.
-
-01-07-95 added ppptraffic which reads out the ppp statistics just
- like pppstats.
- this works only for ppp as slip has no such statistics
- (besides packets sent/received which is not very
- useful).
+++ /dev/null
-See the respective source files to find out which copyrights apply.
-
-------------------------------------------------------------------------------
-Copyright (C) 2002 Roaring Penguin Software Inc.
-
-Permission to use, copy, modify, and distribute this software for any
-purpose and without fee is hereby granted, provided that this
-copyright and permission notice appear on all copies and supporting
-documentation, the name of Roaring Penguin Software Inc. not be used
-in advertising or publicity pertaining to distribution of the program
-without specific prior permission, and notice be given in supporting
-documentation that copying and distribution is by permission of
-Roaring Penguin Software Inc..
-
-Roaring Penguin Software Inc. makes no representations about the
-suitability of this software for any purpose. It is provided "as is"
-without express or implied warranty.
-
-------------------------------------------------------------------------------
-Copyright (C) 1995,1996,1997,1998 Lars Fenneberg <lf@elemental.net>
-
-Permission to use, copy, modify, and distribute this software for any
-purpose and without fee is hereby granted, provided that this copyright and
-permission notice appear on all copies and supporting documentation, the
-name of Lars Fenneberg not be used in advertising or publicity pertaining to
-distribution of the program without specific prior permission, and notice be
-given in supporting documentation that copying and distribution is by
-permission of Lars Fenneberg.
-
-Lars Fenneberg makes no representations about the suitability of this
-software for any purpose. It is provided "as is" without express or implied
-warranty.
-
-------------------------------------------------------------------------------
-Copyright 1992 Livingston Enterprises, Inc.
-Livingston Enterprises, Inc. 6920 Koll Center Parkway Pleasanton, CA 94566
-
-Permission to use, copy, modify, and distribute this software for any
-purpose and without fee is hereby granted, provided that this copyright
-and permission notice appear on all copies and supporting documentation,
-the name of Livingston Enterprises, Inc. not be used in advertising or
-publicity pertaining to distribution of the program without specific
-prior permission, and notice be given in supporting documentation that
-copying and distribution is by permission of Livingston Enterprises, Inc.
-
-Livingston Enterprises, Inc. makes no representations about the suitability
-of this software for any purpose. It is provided "as is" without express
-or implied warranty.
-------------------------------------------------------------------------------
-[C] The Regents of the University of Michigan and Merit Network, Inc. 1992,
-1993, 1994, 1995 All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice and this permission notice appear in all
-copies of the software and derivative works or modified versions thereof,
-and that both the copyright notice and this permission and disclaimer
-notice appear in supporting documentation.
-
-THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
-EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE
-UNIVERSITY OF MICHIGAN AND MERIT NETWORK, INC. DO NOT WARRANT THAT THE
-FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR
-THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the
-University of Michigan and Merit Network, Inc. shall not be liable for any
-special, indirect, incidental or consequential damages with respect to any
-claim by Licensee or any third party arising from use of the software.
-------------------------------------------------------------------------------
-Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991.
-All rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
-------------------------------------------------------------------------------
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:00 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-INCLUDES = -D_GNU_SOURCE
-
-ACLOCAL = @ACLOCAL@
-LTLIBOBJS = @LTLIBOBJS@
-
-SUBDIRS = include lib src etc man doc patches login.radius
-EXTRA_DIST = BUGS CHANGES COPYRIGHT README README.radexample
-
-CLEANFILES = *~
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:00 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = .
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-INCLUDES = -D_GNU_SOURCE
-
-ACLOCAL = @ACLOCAL@
-LTLIBOBJS = @LTLIBOBJS@
-
-SUBDIRS = include lib src etc man doc patches login.radius
-EXTRA_DIST = BUGS CHANGES COPYRIGHT README README.radexample
-
-CLEANFILES = *~
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
-DIST_COMMON = README Makefile.am Makefile.in acconfig.h aclocal.m4 \
-config.guess config.h.in config.sub configure configure.in install-sh \
-ltconfig ltmain.sh missing mkinstalldirs stamp-h.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: all-recursive-am all-am
-
-.SUFFIXES:
-
-config.h: stamp-h
- @:
-stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES= CONFIG_HEADERS=config.h \
- $(SHELL) ./config.status
- @echo timestamp > stamp-h
-$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
-$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
- cd $(top_srcdir) && $(AUTOHEADER)
- @echo timestamp > $(srcdir)/stamp-h.in
-
-mostlyclean-hdr:
-
-clean-hdr:
-
-distclean-hdr:
- -rm -f config.h
-
-maintainer-clean-hdr:
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-
-@SET_MAKE@
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- target=`echo $@ | sed s/-recursive//`; \
- echo "Making $$target in $$subdir"; \
- (cd $$subdir && $(MAKE) $$target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done && test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
- rev="$$subdir $$rev"; \
- done; \
- for subdir in $$rev; do \
- target=`echo $@ | sed s/-recursive//`; \
- echo "Making $$target in $$subdir"; \
- (cd $$subdir && $(MAKE) $$target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- (cd $$subdir && $(MAKE) tags); \
- done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
- done; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- -rm -rf $(distdir)
- GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
- mkdir $(distdir)/=build
- mkdir $(distdir)/=inst
- dc_install_base=`cd $(distdir)/=inst && pwd`; \
- cd $(distdir)/=build \
- && ../configure --srcdir=.. --prefix=$$dc_install_base \
- && $(MAKE) \
- && $(MAKE) dvi \
- && $(MAKE) check \
- && $(MAKE) install \
- && $(MAKE) installcheck \
- && $(MAKE) dist
- -rm -rf $(distdir)
- @echo "========================"; \
- echo "$(distdir).tar.gz is ready for distribution"; \
- echo "========================"
-dist: distdir
- -chmod -R a+r $(distdir)
- GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
- -rm -rf $(distdir)
-dist-all: distdir
- -chmod -R a+r $(distdir)
- GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
- -rm -rf $(distdir)
-distdir: $(DISTFILES)
- -rm -rf $(distdir)
- mkdir $(distdir)
- -chmod 777 $(distdir)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
- for subdir in $(SUBDIRS); do \
- test -d $(distdir)/$$subdir \
- || mkdir $(distdir)/$$subdir \
- || exit 1; \
- chmod 777 $(distdir)/$$subdir; \
- (cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
- || exit 1; \
- done
-info: info-recursive
-dvi: dvi-recursive
-check: all-am
- $(MAKE) check-recursive
-installcheck: installcheck-recursive
-all-recursive-am: config.h
- $(MAKE) all-recursive
-
-all-am: Makefile config.h
-
-install-exec: install-exec-recursive
- @$(NORMAL_INSTALL)
-
-install-data: install-data-recursive
- @$(NORMAL_INSTALL)
-
-install: install-recursive
- @:
-
-uninstall: uninstall-recursive
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs: installdirs-recursive
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
-
-clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
-
-distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
-
-maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
- maintainer-clean-generic distclean-am
-
-mostlyclean: mostlyclean-recursive mostlyclean-am
-
-clean: clean-recursive clean-am
-
-distclean: distclean-recursive distclean-am
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-recursive maintainer-clean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -f config.status
-
-.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
-install-data-recursive uninstall-data-recursive install-exec-recursive \
-uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
-all-recursive check-recursive installcheck-recursive info-recursive \
-dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info dvi \
-installcheck all-recursive-am all-am install-exec install-data install \
-uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-$Id: README,v 1.1 2002/01/22 16:03:00 dfs Exp $
-
-Please view doc/instop.html with your favourite WWW browser, e.g lynx or
-netscape.
-
-Currently radiusclient will compile on the following platforms:
-
- Compiled on:
-
- i386-pc-bsdi2.1
- sparc-unknown-netbsd1.2.1
- i386-unknown-freebsd2.2.6
-
- Compiled and tested on:
-
- i486-pc-linux
- sparc-sun-solaris2.5.1
+++ /dev/null
-$Id: README.radexample,v 1.1 2002/01/22 16:03:00 dfs Exp $
-
-In src/radexample.c is a small example on how to use the library
-lib/libradclient.a.
-
-You only need to include radiusclient.h into your applications and link
-against the library. For this example to work your radiusclient config file
-has to be setup right.
-
-I make no guarantees that the library interface stays the same as
-radiusclient evolves, but I think that the whole thing is so simple that the
-changes to source code which uses this library should always be trivial.
+++ /dev/null
-/*
- * $Id: acconfig.h,v 1.1 2002/01/22 16:03:00 dfs Exp $
- *
- * Copyright (C) 1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-@TOP@
-
-/* does /dev/urandom exist ? */
-#undef HAVE_DEV_URANDOM
-
-/* shadow password support */
-#undef HAVE_SHADOW_PASSWORDS
-
-/* struct utsname has domainname field */
-#undef HAVE_STRUCT_UTSNAME_DOMAINNAME
-
-/* do you need the sig* prototypes ? */
-#undef NEED_SIG_PROTOTYPES
-
-/* package name */
-#undef PACKAGE
-
-/* include code to kludge aroung Livingston's RADIUS server 1.16 */
-#undef RADIUS_116
-
-/* SCP support */
-#undef SCP
-
-/* package version */
-#undef VERSION
+++ /dev/null
-dnl aclocal.m4 generated automatically by aclocal 1.3
-
-dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-dnl This Makefile.in is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# Do all the work for Automake. This macro actually does too much --
-# some checks are only needed if your package does certain things.
-# But this isn't really a big deal.
-
-# serial 1
-
-dnl Usage:
-dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AC_PROG_INSTALL])
-PACKAGE=[$1]
-AC_SUBST(PACKAGE)
-VERSION=[$2]
-AC_SUBST(VERSION)
-dnl test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-ifelse([$3],,
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
-AC_REQUIRE([AM_SANITY_CHECK])
-AC_REQUIRE([AC_ARG_PROGRAM])
-dnl FIXME This is truly gross.
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_REQUIRE([AC_PROG_MAKE_SET])])
-
-
-# serial 1
-
-AC_DEFUN(AM_PROG_INSTALL,
-[AC_REQUIRE([AC_PROG_INSTALL])
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-AC_SUBST(INSTALL_SCRIPT)dnl
-])
-
-#
-# Check to make sure that the build environment is sane.
-#
-
-AC_DEFUN(AM_SANITY_CHECK,
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "[$]*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "[$]*" != "X $srcdir/configure conftestfile" \
- && test "[$]*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "[$]2" = conftestfile
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-rm -f conftest*
-AC_MSG_RESULT(yes)])
-
-dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
-dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
-[AC_MSG_CHECKING(for working $2)
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if ($2 --version) < /dev/null > /dev/null 2>&1; then
- $1=$2
- AC_MSG_RESULT(found)
-else
- $1="$3/missing $2"
- AC_MSG_RESULT(missing)
-fi
-AC_SUBST($1)])
-
-
-# serial 18 AM_PROG_LIBTOOL
-AC_DEFUN(AM_PROG_LIBTOOL,
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_RANLIB])
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AM_PROG_LD])
-AC_REQUIRE([AM_PROG_NM])
-AC_REQUIRE([AC_PROG_LN_S])
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)
-
-dnl Allow the --disable-shared flag to stop us from building shared libs.
-AC_ARG_ENABLE(shared,
-[ --enable-shared build shared libraries [default=yes]],
-[if test "$enableval" = no; then
- libtool_enable_shared=no
-else
- libtool_enable_shared=yes
-fi])
-test -n "$libtool_enable_shared" && enable_shared="$libtool_enable_shared"
-libtool_shared=
-test "$enable_shared" = no && libtool_shared=" --disable-shared"
-
-dnl Allow the --disable-static flag to stop us from building static libs.
-AC_ARG_ENABLE(static,
-[ --enable-static build static libraries [default=yes]],
-[if test "$enableval" = no; then
- libtool_enable_static=no
-else
- libtool_enable_static=yes
-fi])
-test -n "$libtool_enable_static" && enable_static="$libtool_enable_static"
-libtool_static=
-test "$enable_static" = no && libtool_static=" --disable-static"
-
-libtool_flags="$libtool_shared$libtool_static"
-test "$silent" = yes && libtool_flags="$libtool_flags --silent"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-[case "$host" in
-*-*-irix6*)
- ac_save_CFLAGS="$CFLAGS"
- flag_passed=no
- for f in -32 -64 -n32 ABI -cckr -mips1 -mips2 -mips3 -mips4; do
- case "$f" in
- ABI)
- test -n "$SGI_ABI" && flag_passed=yes
- if test "$flag_passed" = no && test "$ac_cv_prog_gcc" = yes; then
- # Choose the ABI flag according to GCC's specs.
- if $CC -dumpspecs 2>&1 | sed '/^\*link:$/,/^$/!d' | egrep -e '[ ]-32' >/dev/null; then
- LD="${LD-ld} -32"
- else
- LD="${LD-ld} -n32"
- fi
- fi
- ;;
-
- *)
- if echo " $CC $CFLAGS " | egrep -e "[ ]$f[ ]" > /dev/null; then
- flag_passed=yes
- LD="${LD-ld} $f"
- fi
- ;;
- esac
- done
- CFLAGS="$ac_save_CFLAGS"
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- CFLAGS="$CFLAGS -belf"
- ;;
-esac]
-
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
-|| AC_MSG_ERROR([libtool configure failed])
-])
-
-# AM_PROG_LD - find the path to the GNU or non-GNU linker
-AC_DEFUN(AM_PROG_LD,
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
- /*)
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(ac_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_SUBST(LD)
-AM_PROG_LD_GNU
-])
-
-AC_DEFUN(AM_PROG_LD_GNU,
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
-else
- ac_cv_prog_gnu_ld=no
-fi])
-])
-
-# AM_PROG_NM - find the path to a BSD-compatible name lister
-AC_DEFUN(AM_PROG_NM,
-[AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(ac_cv_path_NM,
-[case "$NM" in
-/*)
- ac_cv_path_NM="$NM" # Let the user override the test with a path.
- ;;
-*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
- test -z "$ac_dir" && dir=.
- if test -f $ac_dir/nm; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1!d' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1!d'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1!d'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
- else
- ac_cv_path_NM="$ac_dir/nm"
- fi
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
- ;;
-esac])
-NM="$ac_cv_path_NM"
-AC_MSG_RESULT([$NM])
-AC_SUBST(NM)
-])
-
-# Like AC_CONFIG_HEADER, but automatically create stamp file.
-
-AC_DEFUN(AM_CONFIG_HEADER,
-[AC_PREREQ([2.12])
-AC_CONFIG_HEADER([$1])
-dnl When config.status generates a header, we must update the stamp-h file.
-dnl This file resides in the same directory as the config header
-dnl that is generated. We must strip everything past the first ":",
-dnl and everything past the last "/".
-AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
-ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
-<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
-<<am_indx=1
-for am_file in <<$1>>; do
- case " <<$>>CONFIG_HEADERS " in
- *" <<$>>am_file "*<<)>>
- echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
- ;;
- esac
- am_indx=`expr "<<$>>am_indx" + 1`
-done<<>>dnl>>)
-changequote([,]))])
-
+++ /dev/null
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
-#
-# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- alpha:OSF1:*:*)
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-cbm-sysv4
- exit 0;;
- amiga:NetBSD:*:*)
- echo m68k-cbm-netbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-cbm-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- atari*:NetBSD:*:*)
- echo m68k-atari-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-atari-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:NetBSD:*:*)
- echo m68k-sun-netbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-sun-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:NetBSD:*:*)
- echo m68k-apple-netbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-apple-openbsd${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- sed 's/^ //' << EOF >dummy.c
- int main (argc, argv) int argc; char **argv; {
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- ${CC-cc} dummy.c -o dummy \
- && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
- -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i?86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- sed 's/^ //' << EOF >dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:4)
- if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=4.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[3478]??:HP-UX:*:*)
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- sed 's/^ //' << EOF >dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i?86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F300:UNIX_System_V:*:*)
- FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- F301:UNIX_System_V:*:*)
- echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
- exit 0 ;;
- hp3[0-9][05]:NetBSD:*:*)
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
- hp3[0-9][05]:OpenBSD:*:*)
- echo m68k-hp-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i?86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:NetBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo i386-pc-cygwin32
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin32
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us.
- ld_help_string=`ld --help 2>&1`
- if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
- echo "${UNAME_MACHINE}-pc-linux" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
- echo "${UNAME_MACHINE}-pc-linux-aout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
- echo "${UNAME_MACHINE}-pc-linux-coff" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
- echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
- echo "${UNAME_MACHINE}-unknown-linux-aout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
- echo "powerpc-unknown-linux" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
- echo alpha-unknown-linux ; exit 0
- elif test "${UNAME_MACHINE}" = "sparc" ; then
- echo sparc-unknown-linux ; exit 0
- else
- # Either a pre-BFD a.out linker (linux-oldld) or one that does not give us
- # useful --help. Gcc wants to distinguish between linux-oldld and linux-aout.
- test ! -d /usr/lib/ldscripts/. \
- && echo "${UNAME_MACHINE}-pc-linux-oldld" && exit 0
- # Determine whether the default compiler is a.out or elf
- cat >dummy.c <<EOF
-main(argc, argv)
-int argc;
-char *argv[];
-{
-#ifdef __ELF__
- printf ("%s-pc-linux\n", argv[1]);
-#else
- printf ("%s-pc-linux-aout\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
-# are messed up and put the nodename in both sysname and nodename.
- i?86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- i?86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i?86:LynxOS:2.*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-cat >dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
-rm -f dummy.c dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-#echo '(Unable to guess system type)' 1>&2
-
-exit 1
+++ /dev/null
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-/*
- * $Id: config.h.in,v 1.3 2002/07/25 16:29:16 dfs Exp $
- *
- * Copyright (C) 1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define if you have the strftime function. */
-#undef HAVE_STRFTIME
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define as the return type of signal handlers (int or void). */
-#undef RETSIGTYPE
-
-/* Define if the setvbuf function takes the buffering type as its second
- argument and the buffer pointer as the third, as on System V
- before release 3. */
-#undef SETVBUF_REVERSED
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define if your <sys/time.h> declares struct tm. */
-#undef TM_IN_SYS_TIME
-
-/* does /dev/urandom exist ? */
-#undef HAVE_DEV_URANDOM
-
-/* shadow password support */
-#undef HAVE_SHADOW_PASSWORDS
-
-/* struct utsname has domainname field */
-#undef HAVE_STRUCT_UTSNAME_DOMAINNAME
-
-/* package name */
-#undef PACKAGE
-
-/* include code to kludge aroung Livingston's RADIUS server 1.16 */
-#undef RADIUS_116
-
-/* SCP support */
-#undef SCP
-
-/* package version */
-#undef VERSION
-
-/* Define if you have the fcntl function. */
-#undef HAVE_FCNTL
-
-/* Define if you have the flock function. */
-#undef HAVE_FLOCK
-
-/* Define if you have the getdomainname function. */
-#undef HAVE_GETDOMAINNAME
-
-/* Define if you have the gethostname function. */
-#undef HAVE_GETHOSTNAME
-
-/* Define if you have the rand function. */
-#undef HAVE_RAND
-
-/* Define if you have the random function. */
-#undef HAVE_RANDOM
-
-/* Define if you have the snprintf function. */
-#undef HAVE_SNPRINTF
-
-/* Define if you have the strcasecmp function. */
-#undef HAVE_STRCASECMP
-
-/* Define if you have the strdup function. */
-#undef HAVE_STRDUP
-
-/* Define if you have the strerror function. */
-#undef HAVE_STRERROR
-
-/* Define if you have the stricmp function. */
-#undef HAVE_STRICMP
-
-/* Define if you have the sysinfo function. */
-#undef HAVE_SYSINFO
-
-/* Define if you have the uname function. */
-#undef HAVE_UNAME
-
-/* Define if you have the vsnprintf function. */
-#undef HAVE_VSNPRINTF
-
-/* Define if you have the <crypt.h> header file. */
-#undef HAVE_CRYPT_H
-
-/* Define if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define if you have the <ndir.h> header file. */
-#undef HAVE_NDIR_H
-
-/* Define if you have the <signal.h> header file. */
-#undef HAVE_SIGNAL_H
-
-/* Define if you have the <sys/dir.h> header file. */
-#undef HAVE_SYS_DIR_H
-
-/* Define if you have the <sys/fcntl.h> header file. */
-#undef HAVE_SYS_FCNTL_H
-
-/* Define if you have the <sys/file.h> header file. */
-#undef HAVE_SYS_FILE_H
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define if you have the <sys/ndir.h> header file. */
-#undef HAVE_SYS_NDIR_H
-
-/* Define if you have the <sys/signal.h> header file. */
-#undef HAVE_SYS_SIGNAL_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define if you have the <sys/utsname.h> header file. */
-#undef HAVE_SYS_UTSNAME_H
-
-/* Define if you have the <termios.h> header file. */
-#undef HAVE_TERMIOS_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the crypt library (-lcrypt). */
-#undef HAVE_LIBCRYPT
-
-/* Define if you have the nsl library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the socket library (-lsocket). */
-#undef HAVE_LIBSOCKET
+++ /dev/null
-#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-if [ x$1 = x ]
-then
- echo Configuration name missing. 1>&2
- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
- echo "or $0 ALIAS" 1>&2
- echo where ALIAS is a recognized configuration type. 1>&2
- exit 1
-fi
-
-# First pass through any local machine types.
-case $1 in
- *local*)
- echo $1
- exit 0
- ;;
- *)
- ;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- linux*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple)
- os=
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid \
- | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
- | alpha | we32k | ns16k | clipper | i370 | sh \
- | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
- | pdp11 | mips64el | mips64orion | mips64orionel \
- | sparc | sparclet | sparclite | sparc64)
- basic_machine=$basic_machine-unknown
- ;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i[3456]86)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-cbm
- ;;
- amigados)
- basic_machine=m68k-cbm
- os=-amigados
- ;;
- amigaunix | amix)
- basic_machine=m68k-cbm
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [ctj]90-cray)
- basic_machine=c90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- os=-mvs
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[3456]86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i[3456]86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i[3456]86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i[3456]86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5)
- basic_machine=i586-intel
- ;;
- pentiumpro | p6)
- basic_machine=i686-intel
- ;;
- pentium-* | p5-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- k5)
- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
- basic_machine=i586-amd
- ;;
- nexen)
- # We don't have specific support for Nexgen yet, so just call it a Pentium
- basic_machine=i586-nexgen
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=rs6000-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- mips)
- basic_machine=mips-mips
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sparc)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -unixware* | svr4*)
- os=-sysv4
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -linux* | -uxpv*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -xenix)
- os=-xenix
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-ibm)
- os=-aix
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigados
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f301-fujitsu)
- os=-uxpv
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -hpux*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
+++ /dev/null
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]"
-ac_help="$ac_help
- --enable-shared build shared libraries [default=yes]"
-ac_help="$ac_help
- --enable-static build static libraries [default=yes]"
-ac_help="$ac_help
- --enable-shadow Enable shadow password support"
-ac_help="$ac_help
- --with-secure-path PATH setting for exec'ed programs"
-ac_help="$ac_help
- --with-facility Syslog facility to use"
-ac_help="$ac_help
- --enable-radius-116 Include support for Livingston's RADIUS server 1.16"
-ac_help="$ac_help
- --enable-scp Add service type hints derived from username prefix"
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.12"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=src/radlogin.c
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
-
-
-# Do some error checking and defaulting for the host and target type.
-# The inputs are:
-# configure --host=HOST --target=TARGET --build=BUILD NONOPT
-#
-# The rules are:
-# 1. You are not allowed to specify --host, --target, and nonopt at the
-# same time.
-# 2. Host defaults to nonopt.
-# 3. If nonopt is not specified, then host defaults to the current host,
-# as determined by config.guess.
-# 4. Target and build default to nonopt.
-# 5. If nonopt is not specified, then target and build default to host.
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-case $host---$target---$nonopt in
-NONE---*---* | *---NONE---* | *---*---NONE) ;;
-*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
-esac
-
-
-# Make sure we can run config.sub.
-if $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:585: checking host system type" >&5
-
-host_alias=$host
-case "$host_alias" in
-NONE)
- case $nonopt in
- NONE)
- if host_alias=`$ac_config_guess`; then :
- else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
- fi ;;
- *) host_alias=$nonopt ;;
- esac ;;
-esac
-
-host=`$ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:606: checking target system type" >&5
-
-target_alias=$target
-case "$target_alias" in
-NONE)
- case $nonopt in
- NONE) target_alias=$host_alias ;;
- *) target_alias=$nonopt ;;
- esac ;;
-esac
-
-target=`$ac_config_sub $target_alias`
-target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$target" 1>&6
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:624: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
- case $nonopt in
- NONE) build_alias=$host_alias ;;
- *) build_alias=$nonopt ;;
- esac ;;
-esac
-
-build=`$ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
-
-test "$host_alias" != "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-case "$target" in
- *)
- ;;
-esac
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:663: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- for ac_prog in ginstall installbsd scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- # OSF/1 installbsd also uses dspmsg, but is usable.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-
-echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:716: checking whether build environment is sane" >&5
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "$*" != "X $srcdir/configure conftestfile" \
- && test "$*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" 1>&2; exit 1; }
- fi
-
- test "$2" = conftestfile
- )
-then
- # Ok.
- :
-else
- { echo "configure: error: newly created file is older than distributed files!
-Check your system clock" 1>&2; exit 1; }
-fi
-rm -f conftest*
-echo "$ac_t""yes" 1>&6
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
-else
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
-fi
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
-
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:773: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
-else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-PACKAGE=radiusclient
-
-VERSION=0.3.1
-
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
-fi
-cat >> confdefs.h <<EOF
-#define PACKAGE "$PACKAGE"
-EOF
-
-cat >> confdefs.h <<EOF
-#define VERSION "$VERSION"
-EOF
-
-
-
-missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:819: checking for working aclocal" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- ACLOCAL=aclocal
- echo "$ac_t""found" 1>&6
-else
- ACLOCAL="$missing_dir/missing aclocal"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:832: checking for working autoconf" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoconf --version) < /dev/null > /dev/null 2>&1; then
- AUTOCONF=autoconf
- echo "$ac_t""found" 1>&6
-else
- AUTOCONF="$missing_dir/missing autoconf"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:845: checking for working automake" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
- AUTOMAKE=automake
- echo "$ac_t""found" 1>&6
-else
- AUTOMAKE="$missing_dir/missing automake"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:858: checking for working autoheader" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoheader --version) < /dev/null > /dev/null 2>&1; then
- AUTOHEADER=autoheader
- echo "$ac_t""found" 1>&6
-else
- AUTOHEADER="$missing_dir/missing autoheader"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:871: checking for working makeinfo" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
- MAKEINFO=makeinfo
- echo "$ac_t""found" 1>&6
-else
- MAKEINFO="$missing_dir/missing makeinfo"
- echo "$ac_t""missing" 1>&6
-fi
-
-
-
-LIBVERSION=0:1:0
-
-
-pkgsysconfdir=${sysconfdir}/$PACKAGE
-
-
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:894: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:923: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- ac_prog_rejected=no
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:971: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 981 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1005: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1010: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1019: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1034: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-O2"
- fi
-else
- GCC=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-
-
-# Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1065: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$AR" in
- /*)
- ac_cv_path_AR="$AR" # Let the user override the test with a path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_AR="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac
-fi
-AR="$ac_cv_path_AR"
-if test -n "$AR"; then
- echo "$ac_t""$AR" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1096: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1135: checking for ld used by GCC" >&5
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
- /*)
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1153: checking for GNU ld" >&5
-else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1156: checking for non-GNU ld" >&5
-fi
-if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
- echo "$ac_t""$LD" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
-
-echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1192: checking if the linker ($LD) is GNU ld" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
-else
- ac_cv_prog_gnu_ld=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
-
-
-echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1208: checking for BSD-compatible nm" >&5
-if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$NM" in
-/*)
- ac_cv_path_NM="$NM" # Let the user override the test with a path.
- ;;
-*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
- test -z "$ac_dir" && dir=.
- if test -f $ac_dir/nm; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1!d' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1!d'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1!d'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
- else
- ac_cv_path_NM="$ac_dir/nm"
- fi
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
- ;;
-esac
-fi
-
-NM="$ac_cv_path_NM"
-echo "$ac_t""$NM" 1>&6
-
-
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1245: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
- rm -f conftestdata
- ac_cv_prog_LN_S="ln -s"
-else
- ac_cv_prog_LN_S=ln
-fi
-fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-
-
-
-
-
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- if test "$enableval" = no; then
- libtool_enable_shared=no
-else
- libtool_enable_shared=yes
-fi
-fi
-
-test -n "$libtool_enable_shared" && enable_shared="$libtool_enable_shared"
-libtool_shared=
-test "$enable_shared" = no && libtool_shared=" --disable-shared"
-
-# Check whether --enable-static or --disable-static was given.
-if test "${enable_static+set}" = set; then
- enableval="$enable_static"
- if test "$enableval" = no; then
- libtool_enable_static=no
-else
- libtool_enable_static=yes
-fi
-fi
-
-test -n "$libtool_enable_static" && enable_static="$libtool_enable_static"
-libtool_static=
-test "$enable_static" = no && libtool_static=" --disable-static"
-
-libtool_flags="$libtool_shared$libtool_static"
-test "$silent" = yes && libtool_flags="$libtool_flags --silent"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case "$host" in
-*-*-irix6*)
- ac_save_CFLAGS="$CFLAGS"
- flag_passed=no
- for f in -32 -64 -n32 ABI -cckr -mips1 -mips2 -mips3 -mips4; do
- case "$f" in
- ABI)
- test -n "$SGI_ABI" && flag_passed=yes
- if test "$flag_passed" = no && test "$ac_cv_prog_gcc" = yes; then
- # Choose the ABI flag according to GCC's specs.
- if $CC -dumpspecs 2>&1 | sed '/^\*link:$/,/^$/!d' | egrep -e '[ ]-32' >/dev/null; then
- LD="${LD-ld} -32"
- else
- LD="${LD-ld} -n32"
- fi
- fi
- ;;
-
- *)
- if echo " $CC $CFLAGS " | egrep -e "[ ]$f[ ]" > /dev/null; then
- flag_passed=yes
- LD="${LD-ld} $f"
- fi
- ;;
- esac
- done
- CFLAGS="$ac_save_CFLAGS"
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- CFLAGS="$CFLAGS -belf"
- ;;
-esac
-
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
-|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
-
-
-echo $ac_n "checking whether to include shadow password support""... $ac_c" 1>&6
-echo "configure:1355: checking whether to include shadow password support" >&5
-# Check whether --enable-shadow or --disable-shadow was given.
-if test "${enable_shadow+set}" = set; then
- enableval="$enable_shadow"
-
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_SHADOW_PASSWORDS 1
-EOF
-
- shadow_passwords=yes
-
-else
-
- echo "$ac_t""no" 1>&6
- shadow_passwords=no
-
-
-fi
-
-
-echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:1377: checking for gethostbyname in -lnsl" >&5
-ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lnsl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1385 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname();
-
-int main() {
-gethostbyname()
-; return 0; }
-EOF
-if { (eval echo configure:1396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lnsl $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:1424: checking for socket in -lsocket" >&5
-ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lsocket $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1432 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:1443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lsocket $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test "$shadow_passwords" = "yes"
-then
- echo $ac_n "checking for getspnam in -lc""... $ac_c" 1>&6
-echo "configure:1473: checking for getspnam in -lc" >&5
-ac_lib_var=`echo c'_'getspnam | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lc $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1481 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char getspnam();
-
-int main() {
-getspnam()
-; return 0; }
-EOF
-if { (eval echo configure:1492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for getspnam in -lshadow""... $ac_c" 1>&6
-echo "configure:1511: checking for getspnam in -lshadow" >&5
-ac_lib_var=`echo shadow'_'getspnam | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lshadow $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1519 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char getspnam();
-
-int main() {
-getspnam()
-; return 0; }
-EOF
-if { (eval echo configure:1530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -lshadow"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-fi
-echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:1556: checking for crypt in -lcrypt" >&5
-ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lcrypt $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1564 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char crypt();
-
-int main() {
-crypt()
-; return 0; }
-EOF
-if { (eval echo configure:1575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lcrypt $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1608: checking for $ac_hdr that defines DIR" >&5
-if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1613 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <$ac_hdr>
-int main() {
-DIR *dirp = 0;
-; return 0; }
-EOF
-if { (eval echo configure:1621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- ac_header_dirent=$ac_hdr; break
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1646: checking for opendir in -ldir" >&5
-ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldir $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1654 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -ldir"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-else
-echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1687: checking for opendir in -lx" >&5
-ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lx $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1695 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -lx"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1729: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 1744 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 1761 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1790: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1795 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1803: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1820 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1838 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 1859 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:1870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-for ac_hdr in crypt.h signal.h sys/signal.h sys/stat.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1897: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1902 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-for ac_hdr in fcntl.h sys/fcntl.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1937: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1942 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-for ac_hdr in sys/utsname.h getopt.h unistd.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1977: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1982 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-for ac_hdr in sys/file.h termios.h sys/ioctl.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2017: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2022 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2027: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-if test "$shadow_passwords" = "yes"
-then
- ac_safe=`echo "shadow.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for shadow.h""... $ac_c" 1>&6
-echo "configure:2057: checking for shadow.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2062 "configure"
-#include "confdefs.h"
-#include <shadow.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2092: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2097 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
-}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:2146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2167: checking for off_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2172 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_off_t=yes
-else
- rm -rf conftest*
- ac_cv_type_off_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_off_t" 1>&6
-if test $ac_cv_type_off_t = no; then
- cat >> confdefs.h <<\EOF
-#define off_t long
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2200: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2205 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
-else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-fi
-
-echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2233: checking whether time.h and sys/time.h may both be included" >&5
-if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2238 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-int main() {
-struct tm *tp;
-; return 0; }
-EOF
-if { (eval echo configure:2247: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_header_time=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_time=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_header_time" 1>&6
-if test $ac_cv_header_time = yes; then
- cat >> confdefs.h <<\EOF
-#define TIME_WITH_SYS_TIME 1
-EOF
-
-fi
-
-echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:2268: checking whether struct tm is in sys/time.h or time.h" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2273 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <time.h>
-int main() {
-struct tm *tp; tp->tm_sec;
-; return 0; }
-EOF
-if { (eval echo configure:2281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_tm=time.h
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_tm=sys/time.h
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_struct_tm" 1>&6
-if test $ac_cv_struct_tm = sys/time.h; then
- cat >> confdefs.h <<\EOF
-#define TM_IN_SYS_TIME 1
-EOF
-
-fi
-
-
-if test $ac_cv_prog_gcc = yes; then
- echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:2304: checking whether ${CC-cc} needs -traditional" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_pattern="Autoconf.*'x'"
- cat > conftest.$ac_ext <<EOF
-#line 2310 "configure"
-#include "confdefs.h"
-#include <sgtty.h>
-Autoconf TIOCGETP
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "$ac_pattern" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_prog_gcc_traditional=yes
-else
- rm -rf conftest*
- ac_cv_prog_gcc_traditional=no
-fi
-rm -f conftest*
-
-
- if test $ac_cv_prog_gcc_traditional = no; then
- cat > conftest.$ac_ext <<EOF
-#line 2328 "configure"
-#include "confdefs.h"
-#include <termio.h>
-Autoconf TCGETA
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "$ac_pattern" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_prog_gcc_traditional=yes
-fi
-rm -f conftest*
-
- fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
- if test $ac_cv_prog_gcc_traditional = yes; then
- CC="$CC -traditional"
- fi
-fi
-
-echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:2350: checking for 8-bit clean memcmp" >&5
-if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_memcmp_clean=no
-else
- cat > conftest.$ac_ext <<EOF
-#line 2358 "configure"
-#include "confdefs.h"
-
-main()
-{
- char c0 = 0x40, c1 = 0x80, c2 = 0x81;
- exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1);
-}
-
-EOF
-if { (eval echo configure:2368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- ac_cv_func_memcmp_clean=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_func_memcmp_clean=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
-test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o"
-
-echo $ac_n "checking whether setvbuf arguments are reversed""... $ac_c" 1>&6
-echo "configure:2386: checking whether setvbuf arguments are reversed" >&5
-if eval "test \"`echo '$''{'ac_cv_func_setvbuf_reversed'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 2394 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-/* If setvbuf has the reversed format, exit 0. */
-main () {
- /* This call has the arguments reversed.
- A reversed system may check and see that the address of main
- is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */
- if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
- exit(1);
- putc('\r', stdout);
- exit(0); /* Non-reversed systems segv here. */
-}
-EOF
-if { (eval echo configure:2408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- ac_cv_func_setvbuf_reversed=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_func_setvbuf_reversed=no
-fi
-rm -fr conftest*
-fi
-
-rm -f core core.* *.core
-fi
-
-echo "$ac_t""$ac_cv_func_setvbuf_reversed" 1>&6
-if test $ac_cv_func_setvbuf_reversed = yes; then
- cat >> confdefs.h <<\EOF
-#define SETVBUF_REVERSED 1
-EOF
-
-fi
-
-echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:2432: checking return type of signal handlers" >&5
-if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2437 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-#ifdef __cplusplus
-extern "C" void (*signal (int, void (*)(int)))(int);
-#else
-void (*signal ()) ();
-#endif
-
-int main() {
-int i;
-; return 0; }
-EOF
-if { (eval echo configure:2454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_type_signal=void
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_type_signal=int
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_type_signal" 1>&6
-cat >> confdefs.h <<EOF
-#define RETSIGTYPE $ac_cv_type_signal
-EOF
-
-
-echo $ac_n "checking for strftime""... $ac_c" 1>&6
-echo "configure:2473: checking for strftime" >&5
-if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2478 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char strftime(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strftime();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_strftime) || defined (__stub___strftime)
-choke me
-#else
-strftime();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_strftime=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_strftime=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'strftime`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_STRFTIME 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-# strftime is in -lintl on SCO UNIX.
-echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6
-echo "configure:2523: checking for strftime in -lintl" >&5
-ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lintl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2531 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strftime();
-
-int main() {
-strftime()
-; return 0; }
-EOF
-if { (eval echo configure:2542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_STRFTIME 1
-EOF
-
-LIBS="-lintl $LIBS"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-for ac_func in strdup strerror strcasecmp
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2571: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2576 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-LIBOBJS="$LIBOBJS ${ac_func}.o"
-fi
-done
-
-
-for ac_func in flock fcntl uname gethostname sysinfo getdomainname
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2628: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2633 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-for ac_func in stricmp random rand snprintf vsnprintf
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2683: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2688 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-
-if test "$ac_cv_func_uname" = 'yes'
-then
- echo $ac_n "checking for field domainname in struct utsname""... $ac_c" 1>&6
-echo "configure:2739: checking for field domainname in struct utsname" >&5
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 2744 "configure"
-#include "confdefs.h"
-
- #include <sys/utsname.h>
-
- main(int argc, char **argv)
- {
- struct utsname uts;
- uts.domainname[0] = '\0';
- }
-
-EOF
-if { (eval echo configure:2756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_STRUCT_UTSNAME_DOMAINNAME 1
-EOF
-
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- echo "$ac_t""no" 1>&6
-
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo $ac_n "checking for /dev/urandom""... $ac_c" 1>&6
-echo "configure:2776: checking for /dev/urandom" >&5
-if test -c /dev/urandom
-then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_DEV_URANDOM 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6
-# Check whether --with-secure-path or --without-secure-path was given.
-if test "${with_secure_path+set}" = set; then
- withval="$with_secure_path"
-
- echo "$ac_t""$withval" 1>&6
- RC_SECURE_PATH=$withval
-
-else
-
- echo "$ac_t""/bin:/usr/bin:/usr/local/bin" 1>&6
- RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin
-
-
-fi
-
-
-echo $ac_n "checking which syslog facility to use""... $ac_c" 1>&6
-echo "configure:2806: checking which syslog facility to use" >&5
-# Check whether --with-facility or --without-facility was given.
-if test "${with_facility+set}" = set; then
- withval="$with_facility"
-
- echo "$ac_t""$withval" 1>&6
- RC_LOG_FACILITY=$withval
-
-else
-
- echo "$ac_t""LOG_DAEMON" 1>&6
- RC_LOG_FACILITY=LOG_DAEMON
-
-
-fi
-
-
-echo $ac_n "checking whether to include Livingston's RADIUS server 1.16 kludge""... $ac_c" 1>&6
-echo "configure:2824: checking whether to include Livingston's RADIUS server 1.16 kludge" >&5
-# Check whether --enable-radius-116 or --disable-radius-116 was given.
-if test "${enable_radius_116+set}" = set; then
- enableval="$enable_radius_116"
-
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define RADIUS_116 1
-EOF
-
- echo "configure: warning: !! This is a bug in Livingston's RADIUS server v1.16. There" 1>&2
- echo "configure: warning: !! is a patch included with radiusclient which fixes this" 1>&2
- echo "configure: warning: !! problem. See patches/radiusd-1.16.accounting.diff. With" 1>&2
- echo "configure: warning: !! the patched RADIUS server you no longer need to activate" 1>&2
- echo "configure: warning: !! this hack." 1>&2
-
-else
-
- echo "$ac_t""no" 1>&6
-
-
-fi
-
-
-echo $ac_n "checking whether to add service type hints derived from username prefix""... $ac_c" 1>&6
-echo "configure:2849: checking whether to add service type hints derived from username prefix" >&5
-# Check whether --enable-scp or --disable-scp was given.
-if test "${enable_scp+set}" = set; then
- enableval="$enable_scp"
-
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define SCP 1
-EOF
-
-
-else
-
- echo "$ac_t""no" 1>&6
-
-
-fi
-
-
-
-
-
-
-
-
-LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'`
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.12"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "
-Makefile
-include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile
-doc/Makefile patches/Makefile
-login.radius/Makefile login.radius/migs/Makefile
- config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@target@%$target%g
-s%@target_alias@%$target_alias%g
-s%@target_cpu@%$target_cpu%g
-s%@target_vendor@%$target_vendor%g
-s%@target_os@%$target_os%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@PACKAGE@%$PACKAGE%g
-s%@VERSION@%$VERSION%g
-s%@ACLOCAL@%$ACLOCAL%g
-s%@AUTOCONF@%$AUTOCONF%g
-s%@AUTOMAKE@%$AUTOMAKE%g
-s%@AUTOHEADER@%$AUTOHEADER%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@LIBVERSION@%$LIBVERSION%g
-s%@pkgsysconfdir@%$pkgsysconfdir%g
-s%@CC@%$CC%g
-s%@AR@%$AR%g
-s%@RANLIB@%$RANLIB%g
-s%@LD@%$LD%g
-s%@NM@%$NM%g
-s%@LN_S@%$LN_S%g
-s%@LIBTOOL@%$LIBTOOL%g
-s%@CPP@%$CPP%g
-s%@LIBOBJS@%$LIBOBJS%g
-s%@RC_SECURE_PATH@%$RC_SECURE_PATH%g
-s%@RC_LOG_FACILITY@%$RC_LOG_FACILITY%g
-s%@LTLIBOBJS@%$LTLIBOBJS%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile
-include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile
-doc/Makefile patches/Makefile
-login.radius/Makefile login.radius/migs/Makefile
-"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
- echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
- else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
+++ /dev/null
-#
-# $Id: configure.in,v 1.1 2002/01/22 16:03:00 dfs Exp $
-#
-# Copyright (C) 1996,1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-AC_INIT(src/radlogin.c)
-AC_CANONICAL_SYSTEM
-
-case "$target" in
- *)
- ;;
-esac
-
-AM_INIT_AUTOMAKE(radiusclient,0.3.1)
-
-LIBVERSION=0:1:0
-AC_SUBST(LIBVERSION)
-
-pkgsysconfdir=${sysconfdir}/$PACKAGE
-AC_SUBST(pkgsysconfdir)
-
-AC_PROG_CC
-
-dnl Needed for normal compile
-AC_PATH_PROG(AR, ar)
-AM_PROG_LIBTOOL
-
-dnl HAVE_SHADOW_PASSWORDS
-AC_MSG_CHECKING(whether to include shadow password support)
-AC_ARG_ENABLE(shadow,
-[ --enable-shadow Enable shadow password support],
-[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SHADOW_PASSWORDS)
- shadow_passwords=yes
-],
-[
- AC_MSG_RESULT(no)
- shadow_passwords=no
-]
-)
-
-dnl Checks for libraries.
-AC_CHECK_LIB(nsl, gethostbyname)
-AC_CHECK_LIB(socket, socket)
-if test "$shadow_passwords" = "yes"
-then
- AC_CHECK_LIB(c, getspnam,:,
- AC_CHECK_LIB(shadow, getspnam,
- LIBS="$LIBS -lshadow"
- )
- )
-fi
-AC_CHECK_LIB(crypt, crypt)
-
-dnl Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS(crypt.h signal.h sys/signal.h sys/stat.h)
-AC_CHECK_HEADERS(fcntl.h sys/fcntl.h)
-AC_CHECK_HEADERS(sys/utsname.h getopt.h unistd.h)
-AC_CHECK_HEADERS(sys/file.h termios.h sys/ioctl.h)
-if test "$shadow_passwords" = "yes"
-then
- AC_CHECK_HEADER(shadow.h)
-fi
-
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_OFF_T
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_STRUCT_TM
-
-dnl Checks for library functions.
-AC_PROG_GCC_TRADITIONAL
-AC_FUNC_MEMCMP
-AC_FUNC_SETVBUF_REVERSED
-AC_TYPE_SIGNAL
-AC_FUNC_STRFTIME
-AC_REPLACE_FUNCS(strdup strerror strcasecmp)
-AC_CHECK_FUNCS(flock fcntl uname gethostname sysinfo getdomainname)
-AC_CHECK_FUNCS(stricmp random rand snprintf vsnprintf)
-
-if test "$ac_cv_func_uname" = 'yes'
-then
- AC_MSG_CHECKING([for field domainname in struct utsname])
- AC_TRY_RUN([
- #include <sys/utsname.h>
-
- main(int argc, char **argv)
- {
- struct utsname uts;
- uts.domainname[0] = '\0';
- }
- ],
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRUCT_UTSNAME_DOMAINNAME),
- AC_MSG_RESULT(no)
- )
-fi
-
-AC_MSG_CHECKING([for /dev/urandom])
-if test -c /dev/urandom
-then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DEV_URANDOM)
-else
- AC_MSG_RESULT(no)
-fi
-
-dnl Determine PATH setting
-echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6
-AC_ARG_WITH(secure-path,
-[ --with-secure-path PATH setting for exec'ed programs],
-[
- AC_MSG_RESULT($withval)
- RC_SECURE_PATH=$withval
-],
-[
- AC_MSG_RESULT(/bin:/usr/bin:/usr/local/bin)
- RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin
-]
-)
-
-dnl Checking which syslog facility to use
-AC_MSG_CHECKING(which syslog facility to use)
-AC_ARG_WITH(facility,
-[ --with-facility Syslog facility to use],
-[
- AC_MSG_RESULT($withval)
- RC_LOG_FACILITY=$withval
-],
-[
- AC_MSG_RESULT(LOG_DAEMON)
- RC_LOG_FACILITY=LOG_DAEMON
-]
-)
-
-dnl RADIUS_116
-AC_MSG_CHECKING(whether to include Livingston's RADIUS server 1.16 kludge)
-AC_ARG_ENABLE(radius-116,
-[ --enable-radius-116 Include support for Livingston's RADIUS server 1.16],
-[
- AC_MSG_RESULT(yes)
- AC_DEFINE(RADIUS_116)
- AC_MSG_WARN([!! This is a bug in Livingston's RADIUS server v1.16. There])
- AC_MSG_WARN([!! is a patch included with radiusclient which fixes this])
- AC_MSG_WARN([!! problem. See patches/radiusd-1.16.accounting.diff. With])
- AC_MSG_WARN([!! the patched RADIUS server you no longer need to activate])
- AC_MSG_WARN([!! this hack.])
-],
-[
- AC_MSG_RESULT(no)
-]
-)
-
-dnl SCP
-AC_MSG_CHECKING(whether to add service type hints derived from username prefix)
-AC_ARG_ENABLE(scp,
-[ --enable-scp Add service type hints derived from username prefix],
-[
- AC_MSG_RESULT(yes)
- AC_DEFINE(SCP)
-],
-[
- AC_MSG_RESULT(no)
-]
-)
-
-AC_SUBST(RC_SECURE_PATH)
-AC_SUBST(RC_LOG_FACILITY)
-
-AM_CONFIG_HEADER(config.h)
-LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'`
-AC_SUBST(LTLIBOBJS)
-AC_OUTPUT([
-Makefile
-include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile
-doc/Makefile patches/Makefile
-login.radius/Makefile login.radius/migs/Makefile
-], [test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h])
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:01 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
-
-EXTRA_DIST = instop.html
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:01 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
-
-EXTRA_DIST = instop.html
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps doc/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-tags: TAGS
-TAGS:
-
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = doc
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall:
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-generic
-
-clean: clean-generic mostlyclean
-
-distclean: distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-generic distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: tags distdir info dvi installcheck install-exec install-data \
-install uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-<html>
-<head>
-<title>
-Radiusclient - Installation and Operation Guide
-</title>
-</head>
-<body>
-
-<h1>
-<center>
-<i>
-Radiusclient - Installation and Operation Guide
-</i>
-</center>
-</h1>
-
-<hr size=8>
-
-<!--------------------------------------------------------------------------->
-<h2>
-Table of contents
-</h2>
-
-<ul>
-<li><a href="#introduction">Introduction</a>
-<li><a href="#principles">Principles of operation</a>
-<li><a href="#installation">Installation</a>
-<li><a href="#availability">Availabiliy</a>
-<li><a href="#credits">Credits</a>
-<li><a href="#copyright">Copyright</a>
-<li><a href="#contacting">Contacting the author</a>
-<li><a href="#appendixa">Appendix A: Command line flags</a>
-</ul>
-
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="introduction">
-Introduction
-</a>
-</h2>
-
- Radiusclient is a /bin/login replacement which gets called by a
- getty to log in a user and to setup the user's login environment.
- <br>
- Normal login programs just check the login name and password which the
- user entered against the local password file (/etc/passwd, /etc/shadow).
- In contrast to that Radiusclient also uses the RADIUS protocol to
- authenticate the user.
-
- <p>
-
- RADIUS stands for <i>R</i>emote <i>A</i>uthentication <i>D</i>ial
- <i>In</i> <i>U</i>ser <i>S</i>ervice and is a protocol for carrying
- authentication, authorization, and configuration information between
- a Network Access Server (NAS) which desires to authenticate its
- links and a shared Authentication Server.<br> The protocol
- originally was designed by the well known terminal server
- manufacturer Livingston for use with their Portmaster series of
- terminal servers. Since then it has been implemented by a lot of
- other vendors and it is also on it's way to become a Internet
- Standard.
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="principles">
-Principles of operation
-</a>
-</h2>
-
- If the main program of Radiusclient which is called <i>radlogin</i> gets
- invoked by your systems's getty, it behaves like the normal login
- program to the user.
-
- <p>
-
- First it asks the user for his loginname (if not supplied by getty)
- and his password.
-
- <p>
-
- Then it tries to find the login name either through a RADIUS server
- query or in the local passwd file or through both methods.
-
- <p>
-
- If the user is authenticated locally <i>radlogin</i> calls the local login
- program to spawn a login enviroment.
-
- <p>
-
- If the user is authenticated via RADIUS <i>radlogin</i> calls a special other
- login program which gets the information that was passed from the RADIUS
- server in enviroment variables.
-
- <p>
-
- In this special login program you can now either start a telnet/rlogin
- session or start up SLIP/CSLIP or even PPP based on the information from
- the RADIUS server. Furthermore you can send accounting information to a
- RADIUS accouting server via a program called radacct which is also
- part of Radiusclient.
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="installation">
-Installation
-</a>
-</h2>
-
- Get the Radiusclient package from the places mentioned
- <a href="#availability">below</a>.
-
- <p>
-
- Then unpack it in a directory which you normally use for keeping your
- source code. For example do:
-
- <p>
-
- <pre>
- cd /usr/src
- gzip -dc radiusclient-x.x.tar.gz | tar xvvf -
- </pre>
-
- <p>
-
- You now should have a directory called radiusclient-x.x in which all the
- source code of Radiusclient is stored.
-
- <p>
-
- First run configure --help to see if you need to enable any options.
- Then configure the sources by calling configure with the
- appropriate options.
-
- <p>
-
- Have a look at include/messages.h if you'd like to change some
- of the messages there. But normally you shouldn't.
-
- <p>
-
- Executing "make" builds the executables.
-
- <p>
-
- Executing "make install" will install the executables and example
- versions of all the needed config and data files. Be careful
- the installation process will <b>overwrite</b> existing files
- without asking you.
- Try "make -n install" to see which file gets were if you're
- unsure.
-
- <p>
-
- The installation procedure will only install a dummy login.radius
- script which just outputs all RADIUS_* environment variables and
- then exits.
-
- <p>
-
- You need to write your own login.radius if you want that the script
- does something useful. See the login.radius directory for example
- scripts.
-
- <p>
-
- You <b>will</b> have to look into radiusclient.conf and edit it.
-
- <p>
-
- Add the following two line to /etc/services if you don't
- already have them:
-
- <p>
-
- <pre>
- radius 1645/udp # RADIUS access requests
- radacct 1646/udp # RADIUS accounting requests
- </pre>
- <p>
-
- Get your getty to execute <i>radlogin</i> instead of the normal login
- process. The method of how to do this varies from getty to getty.
-
- <p>
-
- <ul>
- <li>If you're using getty_ps you can set the LOGIN directive in the
- respective config file.
-
- <p>
-
- <li>agetty has a command line option (-l) which allows
- you to specify an alternate login program, i.e. <i>radlogin</i>.
-
- <p>
-
- <li>With mgetty you add the following line to your login.cfg file:
-
- <p>
-
- <pre>
- * - - <path>/radlogin @
- </pre>
-
- </ul>
-
- I suggest you use mgetty or getty_ps, mgetty even has a nice
- automatic PPP detection feature, which can be useful.
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="availability">
-Availability
-</a>
-</h2>
-
- This program is avaiable from <a href="ftp://ftp.cityline.net/pub/radiusclient/">
- ftp.cityline.net</a> in the directory
- <a href="ftp://ftp.cityline.net/pub/radiusclient/">/pub/radiusclient</a>.
- <br>
- Download the version with the largest version number, older version are
- only kept for reference.
-
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="credits">
-Credits
-</a>
-</h2>
-
- My thanks go to all the people who have helped me in one or another
- way with the development of radiusclient but especially to:
-
- <p>
-
- <center>
- <table cellpadding=0 cellspacing=0 width="90%" border=0>
- <tr>
- <td>
- <a href="mailto:map@iphil.net">
- Miguel A.L. Paraz <map@iphil.net>
- </a>
- </td>
- </tr>
- <tr>
- <td>
- <a href="mailto:gody@master.slon.net">
- Matjaz Godec <gody@master.slon.net>
- </a>
- </td>
- </tr>
- <tr>
- <td>
- <a href="mailto:mla@gams.co.at">
- Michael Lausch <mla@gams.co.at>
- </a>
- </td>
- </tr>
- </table>
- </center>
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="copyright">
-Copyright
-</a>
-</h2>
-
- Read the file COPYRIGHT in the top directory of Radiusclient for the
- respective copyrights.
-
- <p>
-
- If you like the Radiusclient software very much and/or are using
- it on a production machine please send my a postcard. My postal
- address is:
-
- <p>
-
- <center>
- <table cellpadding=0 cellspacing=0 width="90%" border=0>
- <tr>
- <td>
- Lars Fenneberg<br>
- Boettgerstrasse 29<br>
- 22851 Norderstedt<br>
- Germany<br>
- </td>
- </tr>
- </table>
- </center>
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="contacting">
-Contacting the author
-</a>
-</h2>
-
- Send your comments, suggestions, bug reports and patches to
- <a href="mailto:lf@elemental.net">
- Lars Fenneberg <nobr><lf@elemental.net></nobr></a>.
-
-<!--------------------------------------------------------------------------->
-<h2>
-<a name="appendixa">
-Appendix A: Command line flags
-</a>
-</h2>
-
-<center>
-<table cellpadding=0 cellspacing=10 width="95%" border=0>
-
-
-<tr>
-<td>
-
-<table border=2 width=100%>
-<tr>
- <th colspan=2>
- radlogin
- </th>
-</tr>
-<tr>
- <td>
- -f
- </td>
- <td>
- Path to an alternative configuration file
- </td>
-</tr>
-<tr>
- <td>
- -i
- </td>
- <td>
- File name of the terminal used to determine what to send in
- the NAS-Port attribute. Normally the tty of stdin is used.
- </td>
-</tr>
-<tr>
- <td>
- -n
- </td>
- <td>
- Disable display if the radlogin issue file. This option is set
- by default if radlogin is called with an argument.
- </td>
-</tr>
-<tr>
- <td>
- -V
- </td>
- <td>
- Display version information
- </td>
-</tr>
-<tr>
- <td>
- -h
- </td>
- <td>
- Display usage information
- </td>
-</tr>
-</table>
-</td>
-</tr>
-
-<tr>
-<td>
-
-<table border=2 width=100%>
-<tr>
- <th colspan=2>
- radacct
- </th>
-</tr>
-<tr>
- <td>
- -i
- </td>
- <td>
- File name of the terminal used to determine what to send in
- the NAS-Port attribute. Normally the tty of stdout is used.
- </td>
-</tr>
-<tr>
- <td>
- -V
- </td>
- <td>
- Display version information
- </td>
-</tr>
-<tr>
- <td>
- -h
- </td>
- <td>
- Display usage information
- </td>
-</tr>
-</table>
-</td>
-</tr>
-
-<tr>
-<td>
-
-<table border=2 width=100%>
-<tr>
- <th colspan=2>
- radstatus
- </th>
-</tr>
-<tr>
- <td>
- -V
- </td>
- <td>
- Display version information
- </td>
-</tr>
-<tr>
- <td>
- -h
- </td>
- <td>
- Display usage information
- </td>
-</tr>
-</table>
-</td>
-</tr>
-
-</table>
-</center>
-
-<p>
-
-<hr size=16>
-<br>
-Last changed: 7/19/98<br>
-Copyright © 1996,1997,1998, Lars Fenneberg, lf@elemental.net<br>
-</body>
-</html>
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.4 2002/10/05 17:49:00 fcusack Exp $
-#
-# Copyright (C) 1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~ radiusclient.conf
-
-sbindir = @sbindir@
-pkgsysconfdir = @pkgsysconfdir@
-pkgsysconf_DATA = issue port-id-map radiusclient.conf \
- dictionary dictionary.ascend dictionary.compat dictionary.merit \
- dictionary.microsoft
-
-EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \
- dictionary.compat dictionary.merit dictionary.microsoft \
- realms servers radiusclient.conf.in
-
-radiusclient.conf: radiusclient.conf.in
- sed -e 's|@sbin''dir@|$(sbindir)|g' \
- -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \
- <$(srcdir)/radiusclient.conf.in >radiusclient.conf
-
-install-data-local: realms servers
- $(mkinstalldirs) $(pkgsysconfdir); \
- echo " $(INSTALL) -m600 $(srcdir)/realms $(pkgsysconfdir)/realms"; \
- $(INSTALL) -m600 $(srcdir)/realms $(pkgsysconfdir)/realms; \
- echo " $(INSTALL) -m600 $(srcdir)/servers $(pkgsysconfdir)/servers"; \
- $(INSTALL) -m600 $(srcdir)/servers $(pkgsysconfdir)/servers
-
-uninstall-local:
- rm -f $(pkgsysconfdir)/realms
- rm -f $(pkgsysconfdir)/servers
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.5 2002/10/05 17:49:00 fcusack Exp $
-#
-# Copyright (C) 1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~ radiusclient.conf
-
-sbindir = @sbindir@
-pkgsysconfdir = @pkgsysconfdir@
-pkgsysconf_DATA = issue port-id-map radiusclient.conf \
- dictionary dictionary.ascend dictionary.compat dictionary.merit \
- dictionary.microsoft
-
-EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \
- dictionary.compat dictionary.merit dictionary.microsoft \
- realms servers radiusclient.conf.in
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-DATA = $(pkgsysconf_DATA)
-
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile $(DATA)
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps etc/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-install-pkgsysconfDATA: $(pkgsysconf_DATA)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
- @list='$(pkgsysconf_DATA)'; for p in $$list; do \
- if test -f $(srcdir)/$$p; then \
- echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgsysconfdir)/$$p"; \
- $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgsysconfdir)/$$p; \
- else if test -f $$p; then \
- echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgsysconfdir)/$$p"; \
- $(INSTALL_DATA) $$p $(DESTDIR)$(pkgsysconfdir)/$$p; \
- fi; fi; \
- done
-
-uninstall-pkgsysconfDATA:
- @$(NORMAL_UNINSTALL)
- list='$(pkgsysconf_DATA)'; for p in $$list; do \
- rm -f $(DESTDIR)$(pkgsysconfdir)/$$p; \
- done
-tags: TAGS
-TAGS:
-
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = etc
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data: install-pkgsysconfDATA install-data-local
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall: uninstall-pkgsysconfDATA uninstall-local
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
- $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-generic
-
-clean: clean-generic mostlyclean
-
-distclean: distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-generic distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: uninstall-pkgsysconfDATA install-pkgsysconfDATA tags distdir \
-info dvi installcheck install-exec install-data install uninstall all \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-
-
-radiusclient.conf: radiusclient.conf.in
- sed -e 's|@sbin''dir@|$(sbindir)|g' \
- -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \
- <$(srcdir)/radiusclient.conf.in >radiusclient.conf
-
-install-data-local: realms servers
- $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir); \
- echo " $(INSTALL) -m600 $(srcdir)/realms $(DESTDIR)$(pkgsysconfdir)/realms"; \
- $(INSTALL) -m600 $(srcdir)/realms $(DESTDIR)$(pkgsysconfdir)/realms; \
- echo " $(INSTALL) -m600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers"; \
- $(INSTALL) -m600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers
-
-uninstall-local:
- rm -f $(DESTDIR)$(pkgsysconfdir)/realms
- rm -f $(DESTDIR)$(pkgsysconfdir)/servers
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-#
-# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl
-#
-# This file contains dictionary translations for parsing
-# requests and generating responses. All transactions are
-# composed of Attribute/Value Pairs. The value of each attribute
-# is specified as one of 4 data types. Valid data types are:
-#
-# string - 0-253 octets
-# ipaddr - 4 octets in network byte order
-# integer - 32 bit value in big endian order (high byte first)
-# date - 32 bit value in big endian order - seconds since
-# 00:00:00 GMT, Jan. 1, 1970
-#
-# Enumerated values are stored in the user file with dictionary
-# VALUE translations for easy administration.
-#
-# Example:
-#
-# ATTRIBUTE VALUE
-# --------------- -----
-# Framed-Protocol = PPP
-# 7 = 1 (integer encoding)
-#
-
-# The dictionary format now supports vendor-specific attributes.
-# Vendors are introduced like this:
-#
-# VENDOR vendor_name vendor_number
-#
-# For example:
-#
-# VENDOR RoaringPenguin 10055
-#
-# Vendor-specific attributes have a fifth field with the name of the
-# vendor. For example:
-#
-# ATTRIBUTE RP-Upstream-Speed-Limit 1 integer RoaringPenguin
-#
-# introduces a Roaring Penguin vendor-specific attribbute with name
-# RP-Upstream-Speed-Limit, number 1, type integer and vendor RoaringPenguin.
-
-#
-# Following are the proper new names. Use these.
-#
-ATTRIBUTE User-Name 1 string
-ATTRIBUTE Password 2 string
-ATTRIBUTE CHAP-Password 3 string
-ATTRIBUTE NAS-IP-Address 4 ipaddr
-ATTRIBUTE NAS-Port-Id 5 integer
-ATTRIBUTE Service-Type 6 integer
-ATTRIBUTE Framed-Protocol 7 integer
-ATTRIBUTE Framed-IP-Address 8 ipaddr
-ATTRIBUTE Framed-IP-Netmask 9 ipaddr
-ATTRIBUTE Framed-Routing 10 integer
-ATTRIBUTE Filter-Id 11 string
-ATTRIBUTE Framed-MTU 12 integer
-ATTRIBUTE Framed-Compression 13 integer
-ATTRIBUTE Login-IP-Host 14 ipaddr
-ATTRIBUTE Login-Service 15 integer
-ATTRIBUTE Login-TCP-Port 16 integer
-ATTRIBUTE Reply-Message 18 string
-ATTRIBUTE Callback-Number 19 string
-ATTRIBUTE Callback-Id 20 string
-ATTRIBUTE Framed-Route 22 string
-ATTRIBUTE Framed-IPX-Network 23 ipaddr
-ATTRIBUTE State 24 string
-ATTRIBUTE Class 25 string
-ATTRIBUTE Session-Timeout 27 integer
-ATTRIBUTE Idle-Timeout 28 integer
-ATTRIBUTE Termination-Action 29 integer
-ATTRIBUTE Called-Station-Id 30 string
-ATTRIBUTE Calling-Station-Id 31 string
-ATTRIBUTE NAS-Identifier 32 string
-ATTRIBUTE Acct-Status-Type 40 integer
-ATTRIBUTE Acct-Delay-Time 41 integer
-ATTRIBUTE Acct-Input-Octets 42 integer
-ATTRIBUTE Acct-Output-Octets 43 integer
-ATTRIBUTE Acct-Session-Id 44 string
-ATTRIBUTE Acct-Authentic 45 integer
-ATTRIBUTE Acct-Session-Time 46 integer
-ATTRIBUTE Acct-Input-Packets 47 integer
-ATTRIBUTE Acct-Output-Packets 48 integer
-ATTRIBUTE Acct-Terminate-Cause 49 integer
-ATTRIBUTE Chap-Challenge 60 string
-ATTRIBUTE NAS-Port-Type 61 integer
-ATTRIBUTE Port-Limit 62 integer
-ATTRIBUTE Connect-Info 77 string
-
-# RFC 2869
-ATTRIBUTE Acct-Interim-Interval 85 integer
-
-#
-# Experimental Non Protocol Attributes used by Cistron-Radiusd
-#
-ATTRIBUTE Huntgroup-Name 221 string
-ATTRIBUTE User-Category 1029 string
-ATTRIBUTE Group-Name 1030 string
-ATTRIBUTE Simultaneous-Use 1034 integer
-ATTRIBUTE Strip-User-Name 1035 integer
-ATTRIBUTE Fall-Through 1036 integer
-ATTRIBUTE Add-Port-To-IP-Address 1037 integer
-ATTRIBUTE Exec-Program 1038 string
-ATTRIBUTE Exec-Program-Wait 1039 string
-ATTRIBUTE Hint 1040 string
-
-#
-# Non-Protocol Attributes
-# These attributes are used internally by the server
-#
-ATTRIBUTE Expiration 21 date
-ATTRIBUTE Auth-Type 1000 integer
-ATTRIBUTE Menu 1001 string
-ATTRIBUTE Termination-Menu 1002 string
-ATTRIBUTE Prefix 1003 string
-ATTRIBUTE Suffix 1004 string
-ATTRIBUTE Group 1005 string
-ATTRIBUTE Crypt-Password 1006 string
-ATTRIBUTE Connect-Rate 1007 integer
-
-#
-# Experimental, implementation specific attributes
-#
-# Limit session traffic
-ATTRIBUTE Session-Octets-Limit 227 integer
-# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
-ATTRIBUTE Octets-Direction 228 integer
-
-#
-# Integer Translations
-#
-
-# User Types
-
-VALUE Service-Type Login-User 1
-VALUE Service-Type Framed-User 2
-VALUE Service-Type Callback-Login-User 3
-VALUE Service-Type Callback-Framed-User 4
-VALUE Service-Type Outbound-User 5
-VALUE Service-Type Administrative-User 6
-VALUE Service-Type NAS-Prompt-User 7
-
-# Framed Protocols
-
-VALUE Framed-Protocol PPP 1
-VALUE Framed-Protocol SLIP 2
-
-# Framed Routing Values
-
-VALUE Framed-Routing None 0
-VALUE Framed-Routing Broadcast 1
-VALUE Framed-Routing Listen 2
-VALUE Framed-Routing Broadcast-Listen 3
-
-# Framed Compression Types
-
-VALUE Framed-Compression None 0
-VALUE Framed-Compression Van-Jacobson-TCP-IP 1
-
-# Login Services
-
-VALUE Login-Service Telnet 0
-VALUE Login-Service Rlogin 1
-VALUE Login-Service TCP-Clear 2
-VALUE Login-Service PortMaster 3
-
-# Status Types
-
-VALUE Acct-Status-Type Start 1
-VALUE Acct-Status-Type Stop 2
-VALUE Acct-Status-Type Accounting-On 7
-VALUE Acct-Status-Type Accounting-Off 8
-
-# Authentication Types
-
-VALUE Acct-Authentic RADIUS 1
-VALUE Acct-Authentic Local 2
-VALUE Acct-Authentic PowerLink128 100
-
-# Termination Options
-
-VALUE Termination-Action Default 0
-VALUE Termination-Action RADIUS-Request 1
-
-# NAS Port Types, available in 3.3.1 and later
-
-VALUE NAS-Port-Type Async 0
-VALUE NAS-Port-Type Sync 1
-VALUE NAS-Port-Type ISDN 2
-VALUE NAS-Port-Type ISDN-V120 3
-VALUE NAS-Port-Type ISDN-V110 4
-
-# Acct Terminate Causes, available in 3.3.2 and later
-
-VALUE Acct-Terminate-Cause User-Request 1
-VALUE Acct-Terminate-Cause Lost-Carrier 2
-VALUE Acct-Terminate-Cause Lost-Service 3
-VALUE Acct-Terminate-Cause Idle-Timeout 4
-VALUE Acct-Terminate-Cause Session-Timeout 5
-VALUE Acct-Terminate-Cause Admin-Reset 6
-VALUE Acct-Terminate-Cause Admin-Reboot 7
-VALUE Acct-Terminate-Cause Port-Error 8
-VALUE Acct-Terminate-Cause NAS-Error 9
-VALUE Acct-Terminate-Cause NAS-Request 10
-VALUE Acct-Terminate-Cause NAS-Reboot 11
-VALUE Acct-Terminate-Cause Port-Unneeded 12
-VALUE Acct-Terminate-Cause Port-Preempted 13
-VALUE Acct-Terminate-Cause Port-Suspended 14
-VALUE Acct-Terminate-Cause Service-Unavailable 15
-VALUE Acct-Terminate-Cause Callback 16
-VALUE Acct-Terminate-Cause User-Error 17
-VALUE Acct-Terminate-Cause Host-Request 18
-
-#
-# Non-Protocol Integer Translations
-#
-
-VALUE Auth-Type Local 0
-VALUE Auth-Type System 1
-VALUE Auth-Type SecurID 2
-VALUE Auth-Type Crypt-Local 3
-VALUE Auth-Type Reject 4
-
-#
-# Cistron extensions
-#
-VALUE Auth-Type Pam 253
-VALUE Auth-Type None 254
-
-#
-# Experimental Non-Protocol Integer Translations for Cistron-Radiusd
-#
-VALUE Fall-Through No 0
-VALUE Fall-Through Yes 1
-VALUE Add-Port-To-IP-Address No 0
-VALUE Add-Port-To-IP-Address Yes 1
-
-#
-# Configuration Values
-# uncomment these two lines to turn account expiration on
-#
-
-#VALUE Server-Config Password-Expiration 30
-#VALUE Server-Config Password-Warning 5
-
-# Octets-Direction
-VALUE Octets-Direction Sum 0
-VALUE Octets-Direction Input 1
-VALUE Octets-Direction Output 2
-VALUE Octets-Direction MaxOveral 3
-VALUE Octets-Direction MaxSession 4
-
-INCLUDE /etc/radiusclient/dictionary.microsoft
+++ /dev/null
-#
-# Ascend dictionary.
-#
-#
-# Version: 1.00 21-Jul-1997 Jens Glaser <jens@regio.net>
-#
-
-
-#
-# Ascend specific extensions
-# Used by ASCEND MAX/Pipeline products
-#
-ATTRIBUTE Ascend-FCP-Parameter 119 string
-ATTRIBUTE Ascend-Modem-PortNo 120 integer
-ATTRIBUTE Ascend-Modem-SlotNo 121 integer
-ATTRIBUTE Ascend-Modem-ShelfNo 122 integer
-ATTRIBUTE Ascend-Call-Attempt-Limit 123 integer
-ATTRIBUTE Ascend-Call-Block-Duration 124 integer
-ATTRIBUTE Ascend-Maximum-Call-Duration 125 integer
-ATTRIBUTE Ascend-Temporary-Rtes 126 integer
-ATTRIBUTE Tunneling-Protocol 127 integer
-ATTRIBUTE Ascend-Shared-Profile-Enable 128 integer
-ATTRIBUTE Ascend-Primary-Home-Agent 129 string
-ATTRIBUTE Ascend-Secondary-Home-Agent 130 string
-ATTRIBUTE Ascend-Dialout-Allowed 131 integer
-ATTRIBUTE Ascend-Client-Gateway 132 ipaddr
-ATTRIBUTE Ascend-BACP-Enable 133 integer
-ATTRIBUTE Ascend-DHCP-Maximum-Leases 134 integer
-ATTRIBUTE Ascend-Client-Primary-DNS 135 ipaddr
-ATTRIBUTE Ascend-Client-Secondary-DNS 136 ipaddr
-ATTRIBUTE Ascend-Client-Assign-DNS 137 integer
-ATTRIBUTE Ascend-User-Acct-Type 138 integer
-ATTRIBUTE Ascend-User-Acct-Host 139 ipaddr
-ATTRIBUTE Ascend-User-Acct-Port 140 integer
-ATTRIBUTE Ascend-User-Acct-Key 141 string
-ATTRIBUTE Ascend-User-Acct-Base 142 integer
-ATTRIBUTE Ascend-User-Acct-Time 143 integer
-ATTRIBUTE Ascend-Assign-IP-Client 144 ipaddr
-ATTRIBUTE Ascend-Assign-IP-Server 145 ipaddr
-ATTRIBUTE Ascend-Assign-IP-Global-Pool 146 string
-ATTRIBUTE Ascend-DHCP-Reply 147 integer
-ATTRIBUTE Ascend-DHCP-Pool-Number 148 integer
-ATTRIBUTE Ascend-Expect-Callback 149 integer
-ATTRIBUTE Ascend-Event-Type 150 integer
-ATTRIBUTE Ascend-Session-Svr-Key 151 string
-ATTRIBUTE Ascend-Multicast-Rate-Limit 152 integer
-ATTRIBUTE Ascend-IF-Netmask 153 ipaddr
-ATTRIBUTE Ascend-Remote-Addr 154 ipaddr
-ATTRIBUTE Ascend-Multicast-Client 155 integer
-ATTRIBUTE Ascend-FR-Circuit-Name 156 string
-ATTRIBUTE Ascend-FR-LinkUp 157 integer
-ATTRIBUTE Ascend-FR-Nailed-Grp 158 integer
-ATTRIBUTE Ascend-FR-Type 159 integer
-ATTRIBUTE Ascend-FR-Link-Mgt 160 integer
-ATTRIBUTE Ascend-FR-N391 161 integer
-ATTRIBUTE Ascend-FR-DCE-N392 162 integer
-ATTRIBUTE Ascend-FR-DTE-N392 163 integer
-ATTRIBUTE Ascend-FR-DCE-N393 164 integer
-ATTRIBUTE Ascend-FR-DTE-N393 165 integer
-ATTRIBUTE Ascend-FR-T391 166 integer
-ATTRIBUTE Ascend-FR-T392 167 integer
-ATTRIBUTE Ascend-Bridge-Address 168 string
-ATTRIBUTE Ascend-TS-Idle-Limit 169 integer
-ATTRIBUTE Ascend-TS-Idle-Mode 170 integer
-ATTRIBUTE Ascend-DBA-Monitor 171 integer
-ATTRIBUTE Ascend-Base-Channel-Count 172 integer
-ATTRIBUTE Ascend-Minimum-Channels 173 integer
-ATTRIBUTE Ascend-IPX-Route 174 string
-ATTRIBUTE Ascend-FT1-Caller 175 integer
-ATTRIBUTE Ascend-Backup 176 string
-ATTRIBUTE Ascend-Call-Type 177 integer
-ATTRIBUTE Ascend-Group 178 string
-ATTRIBUTE Ascend-FR-DLCI 179 integer
-ATTRIBUTE Ascend-FR-Profile-Name 180 string
-ATTRIBUTE Ascend-Ara-PW 181 string
-ATTRIBUTE Ascend-IPX-Node-Addr 182 string
-ATTRIBUTE Ascend-Home-Agent-IP-Addr 183 ipaddr
-ATTRIBUTE Ascend-Home-Agent-Password 184 string
-ATTRIBUTE Ascend-Home-Network-Name 185 string
-ATTRIBUTE Ascend-Home-Agent-UDP-Port 186 integer
-ATTRIBUTE Ascend-Multilink-ID 187 integer
-ATTRIBUTE Ascend-Num-In-Multilink 188 integer
-ATTRIBUTE Ascend-First-Dest 189 ipaddr
-ATTRIBUTE Ascend-Pre-Input-Octets 190 integer
-ATTRIBUTE Ascend-Pre-Output-Octets 191 integer
-ATTRIBUTE Ascend-Pre-Input-Packets 192 integer
-ATTRIBUTE Ascend-Pre-Output-Packets 193 integer
-ATTRIBUTE Ascend-Maximum-Time 194 integer
-ATTRIBUTE Ascend-Disconnect-Cause 195 integer
-ATTRIBUTE Ascend-Connect-Progress 196 integer
-ATTRIBUTE Ascend-Data-Rate 197 integer
-ATTRIBUTE Ascend-PreSession-Time 198 integer
-ATTRIBUTE Ascend-Token-Idle 199 integer
-ATTRIBUTE Ascend-Token-Immediate 200 integer
-ATTRIBUTE Ascend-Require-Auth 201 integer
-ATTRIBUTE Ascend-Number-Sessions 202 string
-ATTRIBUTE Ascend-Authen-Alias 203 string
-ATTRIBUTE Ascend-Token-Expiry 204 integer
-ATTRIBUTE Ascend-Menu-Selector 205 string
-ATTRIBUTE Ascend-Menu-Item 206 string
-ATTRIBUTE Ascend-PW-Warntime 207 integer
-ATTRIBUTE Ascend-PW-Lifetime 208 integer
-ATTRIBUTE Ascend-IP-Direct 209 ipaddr
-ATTRIBUTE Ascend-PPP-VJ-Slot-Comp 210 integer
-ATTRIBUTE Ascend-PPP-VJ-1172 211 integer
-ATTRIBUTE Ascend-PPP-Async-Map 212 integer
-ATTRIBUTE Ascend-Third-Prompt 213 string
-ATTRIBUTE Ascend-Send-Secret 214 string
-ATTRIBUTE Ascend-Receive-Secret 215 string
-ATTRIBUTE Ascend-IPX-Peer-Mode 216 integer
-ATTRIBUTE Ascend-IP-Pool-Definition 217 string
-ATTRIBUTE Ascend-Assign-IP-Pool 218 integer
-ATTRIBUTE Ascend-FR-Direct 219 integer
-ATTRIBUTE Ascend-FR-Direct-Profile 220 string
-ATTRIBUTE Ascend-FR-Direct-DLCI 221 integer
-ATTRIBUTE Ascend-Handle-IPX 222 integer
-ATTRIBUTE Ascend-Netware-timeout 223 integer
-ATTRIBUTE Ascend-IPX-Alias 224 integer
-ATTRIBUTE Ascend-Metric 225 integer
-ATTRIBUTE Ascend-PRI-Number-Type 226 integer
-ATTRIBUTE Ascend-Dial-Number 227 string
-ATTRIBUTE Ascend-Route-IP 228 integer
-ATTRIBUTE Ascend-Route-IPX 229 integer
-ATTRIBUTE Ascend-Bridge 230 integer
-ATTRIBUTE Ascend-Send-Auth 231 integer
-ATTRIBUTE Ascend-Send-Passwd 232 string
-ATTRIBUTE Ascend-Link-Compression 233 integer
-ATTRIBUTE Ascend-Target-Util 234 integer
-ATTRIBUTE Ascend-Maximum-Channels 235 integer
-ATTRIBUTE Ascend-Inc-Channel-Count 236 integer
-ATTRIBUTE Ascend-Dec-Channel-Count 237 integer
-ATTRIBUTE Ascend-Seconds-Of-History 238 integer
-ATTRIBUTE Ascend-History-Weigh-Type 239 integer
-ATTRIBUTE Ascend-Add-Seconds 240 integer
-ATTRIBUTE Ascend-Remove-Seconds 241 integer
-ATTRIBUTE Ascend-Idle-Limit 244 integer
-ATTRIBUTE Ascend-Preempt-Limit 245 integer
-ATTRIBUTE Ascend-Callback 246 integer
-ATTRIBUTE Ascend-Data-Svc 247 integer
-ATTRIBUTE Ascend-Force-56 248 integer
-ATTRIBUTE Ascend-Billing-Number 249 string
-ATTRIBUTE Ascend-Call-By-Call 250 integer
-ATTRIBUTE Ascend-Transit-Number 251 string
-ATTRIBUTE Ascend-Host-Info 252 string
-ATTRIBUTE Ascend-PPP-Address 253 ipaddr
-ATTRIBUTE Ascend-MPP-Idle-Percent 254 integer
-ATTRIBUTE Ascend-Xmit-Rate 255 integer
-
-
-
-# Ascend protocols
-VALUE Service-Type Dialout-Framed-User 5
-VALUE Framed-Protocol ARA 255
-VALUE Framed-Protocol MPP 256
-VALUE Framed-Protocol EURAW 257
-VALUE Framed-Protocol EUUI 258
-VALUE Framed-Protocol X25 259
-VALUE Framed-Protocol COMB 260
-VALUE Framed-Protocol FR 261
-VALUE Framed-Protocol MP 262
-VALUE Framed-Protocol FR-CIR 263
-
-
-#
-# Ascend specific extensions
-# Used by ASCEND MAX/Pipeline products (see above)
-#
-
-VALUE Ascend-FR-Direct FR-Direct-No 0
-VALUE Ascend-FR-Direct FR-Direct-Yes 1
-VALUE Ascend-Handle-IPX Handle-IPX-None 0
-VALUE Ascend-Handle-IPX Handle-IPX-Client 1
-VALUE Ascend-Handle-IPX Handle-IPX-Server 2
-VALUE Ascend-IPX-Peer-Mode IPX-Peer-Router 0
-VALUE Ascend-IPX-Peer-Mode IPX-Peer-Dialin 1
-VALUE Ascend-Call-Type Nailed 1
-VALUE Ascend-Call-Type Nailed/Mpp 2
-VALUE Ascend-Call-Type Perm/Switched 3
-VALUE Ascend-FT1-Caller FT1-No 0
-VALUE Ascend-FT1-Caller FT1-Yes 1
-VALUE Ascend-PRI-Number-Type Unknown-Number 0
-VALUE Ascend-PRI-Number-Type Intl-Number 1
-VALUE Ascend-PRI-Number-Type National-Number 2
-VALUE Ascend-PRI-Number-Type Local-Number 4
-VALUE Ascend-PRI-Number-Type Abbrev-Number 5
-VALUE Ascend-Route-IPX Route-IPX-No 0
-VALUE Ascend-Route-IPX Route-IPX-Yes 1
-VALUE Ascend-Bridge Bridge-No 0
-VALUE Ascend-Bridge Bridge-Yes 1
-VALUE Ascend-TS-Idle-Mode TS-Idle-None 0
-VALUE Ascend-TS-Idle-Mode TS-Idle-Input 1
-VALUE Ascend-TS-Idle-Mode TS-Idle-Input-Output 2
-VALUE Ascend-Send-Auth Send-Auth-None 0
-VALUE Ascend-Send-Auth Send-Auth-PAP 1
-VALUE Ascend-Send-Auth Send-Auth-CHAP 2
-VALUE Ascend-Send-Auth Send-Auth-MS-CHAP 3
-VALUE Ascend-Link-Compression Link-Comp-None 0
-VALUE Ascend-Link-Compression Link-Comp-Stac 1
-VALUE Ascend-Link-Compression Link-Comp-Stac-Draft-9 2
-VALUE Ascend-Link-Compression Link-Comp-MS-Stac 3
-VALUE Ascend-History-Weigh-Type History-Constant 0
-VALUE Ascend-History-Weigh-Type History-Linear 1
-VALUE Ascend-History-Weigh-Type History-Quadratic 2
-VALUE Ascend-Callback Callback-No 0
-VALUE Ascend-Callback Callback-Yes 1
-VALUE Ascend-Expect-Callback Expect-Callback-No 0
-VALUE Ascend-Expect-Callback Expect-Callback-Yes 1
-VALUE Ascend-Data-Svc Switched-Voice-Bearer 0
-VALUE Ascend-Data-Svc Switched-56KR 1
-VALUE Ascend-Data-Svc Switched-64K 2
-VALUE Ascend-Data-Svc Switched-64KR 3
-VALUE Ascend-Data-Svc Switched-56K 4
-VALUE Ascend-Data-Svc Switched-384KR 5
-VALUE Ascend-Data-Svc Switched-384K 6
-VALUE Ascend-Data-Svc Switched-1536K 7
-VALUE Ascend-Data-Svc Switched-1536KR 8
-VALUE Ascend-Data-Svc Switched-128K 9
-VALUE Ascend-Data-Svc Switched-192K 10
-VALUE Ascend-Data-Svc Switched-256K 11
-VALUE Ascend-Data-Svc Switched-320K 12
-VALUE Ascend-Data-Svc Switched-384K-MR 13
-VALUE Ascend-Data-Svc Switched-448K 14
-VALUE Ascend-Data-Svc Switched-512K 15
-VALUE Ascend-Data-Svc Switched-576K 16
-VALUE Ascend-Data-Svc Switched-640K 17
-VALUE Ascend-Data-Svc Switched-704K 18
-VALUE Ascend-Data-Svc Switched-768K 19
-VALUE Ascend-Data-Svc Switched-832K 20
-VALUE Ascend-Data-Svc Switched-896K 21
-VALUE Ascend-Data-Svc Switched-960K 22
-VALUE Ascend-Data-Svc Switched-1024K 23
-VALUE Ascend-Data-Svc Switched-1088K 24
-VALUE Ascend-Data-Svc Switched-1152K 25
-VALUE Ascend-Data-Svc Switched-1216K 26
-VALUE Ascend-Data-Svc Switched-1280K 27
-VALUE Ascend-Data-Svc Switched-1344K 28
-VALUE Ascend-Data-Svc Switched-1408K 29
-VALUE Ascend-Data-Svc Switched-1472K 30
-VALUE Ascend-Data-Svc Switched-1600K 31
-VALUE Ascend-Data-Svc Switched-1664K 32
-VALUE Ascend-Data-Svc Switched-1728K 33
-VALUE Ascend-Data-Svc Switched-1792K 34
-VALUE Ascend-Data-Svc Switched-1856K 35
-VALUE Ascend-Data-Svc Switched-1920K 36
-VALUE Ascend-Data-Svc Switched-inherited 37
-VALUE Ascend-Data-Svc Switched-restricted-bearer-x30 38
-VALUE Ascend-Data-Svc Switched-clear-bearer-v110 39
-VALUE Ascend-Data-Svc Switched-restricted-64-x30 40
-VALUE Ascend-Data-Svc Switched-clear-56-v110 41
-VALUE Ascend-Data-Svc Switched-modem 42
-VALUE Ascend-Data-Svc Switched-atmodem 43
-VALUE Ascend-Data-Svc Nailed-56KR 1
-VALUE Ascend-Data-Svc Nailed-64K 2
-VALUE Ascend-Force-56 Force-56-No 0
-VALUE Ascend-Force-56 Force-56-Yes 1
-VALUE Ascend-PW-Lifetime Lifetime-In-Days 0
-VALUE Ascend-PW-Warntime Days-Of-Warning 0
-VALUE Ascend-PPP-VJ-1172 PPP-VJ-1172 1
-VALUE Ascend-PPP-VJ-Slot-Comp VJ-Slot-Comp-No 1
-VALUE Ascend-Require-Auth Not-Require-Auth 0
-VALUE Ascend-Require-Auth Require-Auth 1
-VALUE Ascend-Token-Immediate Tok-Imm-No 0
-VALUE Ascend-Token-Immediate Tok-Imm-Yes 1
-VALUE Ascend-DBA-Monitor DBA-Transmit 0
-VALUE Ascend-DBA-Monitor DBA-Transmit-Recv 1
-VALUE Ascend-DBA-Monitor DBA-None 2
-VALUE Ascend-FR-Type Ascend-FR-DTE 0
-VALUE Ascend-FR-Type Ascend-FR-DCE 1
-VALUE Ascend-FR-Type Ascend-FR-NNI 2
-VALUE Ascend-FR-Link-Mgt Ascend-FR-No-Link-Mgt 0
-VALUE Ascend-FR-Link-Mgt Ascend-FR-T1-617D 1
-VALUE Ascend-FR-Link-Mgt Ascend-FR-Q-933A 2
-VALUE Ascend-FR-LinkUp Ascend-LinkUp-Default 0
-VALUE Ascend-FR-LinkUp Ascend-LinkUp-AlwaysUp 1
-VALUE Ascend-Multicast-Client Multicast-No 0
-VALUE Ascend-Multicast-Client Multicast-Yes 1
-VALUE Ascend-User-Acct-Type Ascend-User-Acct-None 0
-VALUE Ascend-User-Acct-Type Ascend-User-Acct-User 1
-VALUE Ascend-User-Acct-Type Ascend-User-Acct-User-Default 2
-VALUE Ascend-User-Acct-Base Base-10 0
-VALUE Ascend-User-Acct-Base Base-16 1
-VALUE Ascend-DHCP-Reply DHCP-Reply-No 0
-VALUE Ascend-DHCP-Reply DHCP-Reply-Yes 1
-VALUE Ascend-Client-Assign-DNS DNS-Assign-No 0
-VALUE Ascend-Client-Assign-DNS DNS-Assign-Yes 1
-VALUE Ascend-Event-Type Ascend-ColdStart 1
-VALUE Ascend-Event-Type Ascend-Session-Event 2
-VALUE Ascend-BACP-Enable BACP-No 0
-VALUE Ascend-BACP-Enable BACP-Yes 1
-VALUE Ascend-Dialout-Allowed Dialout-Not-Allowed 0
-VALUE Ascend-Dialout-Allowed Dialout-Allowed 1
-VALUE Ascend-Shared-Profile-Enable Shared-Profile-No 0
-VALUE Ascend-Shared-Profile-Enable Shared-Profile-Yes 1
-VALUE Ascend-Temporary-Rtes Temp-Rtes-No 0
-VALUE Ascend-Temporary-Rtes Temp-Rtes-Yes 1
+++ /dev/null
-#
-# Obsolete names for backwards compatibility with older users files.
-#
-ATTRIBUTE Client-Id 4 ipaddr
-ATTRIBUTE Client-Port-Id 5 integer
-ATTRIBUTE User-Service-Type 6 integer
-ATTRIBUTE Framed-Address 8 ipaddr
-ATTRIBUTE Framed-Netmask 9 ipaddr
-ATTRIBUTE Framed-Filter-Id 11 string
-ATTRIBUTE Login-Host 14 ipaddr
-ATTRIBUTE Login-Port 16 integer
-ATTRIBUTE Old-Password 17 string
-ATTRIBUTE Port-Message 18 string
-ATTRIBUTE Dialback-No 19 string
-ATTRIBUTE Dialback-Name 20 string
-ATTRIBUTE Challenge-State 24 string
-VALUE Framed-Compression Van-Jacobsen-TCP-IP 1
-VALUE Framed-Compression VJ-TCP-IP 1
-VALUE Service-Type Shell-User 6
-VALUE Auth-Type Unix 1
-VALUE Service-Type Dialback-Login-User 3
-VALUE Service-Type Dialback-Framed-User 4
-
-#
-# For compatibility with MERIT users files.
-#
-ATTRIBUTE NAS-Port 5 integer
-ATTRIBUTE Login-Host 14 ipaddr
-ATTRIBUTE Login-Callback-Number 19 string
-ATTRIBUTE Framed-Callback-Id 20 string
-ATTRIBUTE Client-Port-DNIS 30 string
-ATTRIBUTE Caller-ID 31 string
-VALUE Service-Type Login 1
-VALUE Service-Type Framed 2
-VALUE Service-Type Callback-Login 3
-VALUE Service-Type Callback-Framed 4
-VALUE Service-Type Exec-User 7
-
-#
-# For compatibility with ESVA RADIUS, Old Cistron RADIUS
-#
-ATTRIBUTE Session 1034 integer
-ATTRIBUTE User-Name-Is-Star 1035 integer
-VALUE User-Name-Is-Star No 0
-VALUE User-Name-Is-Star Yes 1
+++ /dev/null
-#
-# Experimental extensions, configuration only (for check-items)
-# Names/numbers as per the MERIT extensions (if possible).
-#
-ATTRIBUTE NAS-Identifier 32 string
-ATTRIBUTE Proxy-State 33 string
-ATTRIBUTE Login-LAT-Service 34 string
-ATTRIBUTE Login-LAT-Node 35 string
-ATTRIBUTE Login-LAT-Group 36 string
-ATTRIBUTE Framed-AppleTalk-Link 37 integer
-ATTRIBUTE Framed-AppleTalk-Network 38 integer
-ATTRIBUTE Framed-AppleTalk-Zone 39 string
-ATTRIBUTE Acct-Input-Packets 47 integer
-ATTRIBUTE Acct-Output-Packets 48 integer
-# 8 is a MERIT extension.
-VALUE Service-Type Authenticate-Only 8
-
+++ /dev/null
-#
-# Microsoft's VSA's, from RFC 2548
-#
-# $Id: dictionary.microsoft,v 1.1 2002/03/06 13:23:09 dfs Exp $
-#
-
-VENDOR Microsoft 311 Microsoft
-
-ATTRIBUTE MS-CHAP-Response 1 string Microsoft
-ATTRIBUTE MS-CHAP-Error 2 string Microsoft
-ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft
-ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft
-ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft
-ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft
-ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
-# This is referred to as both singular and plural in the RFC.
-# Plural seems to make more sense.
-ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft
-ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft
-ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft
-ATTRIBUTE MS-CHAP-Domain 10 string Microsoft
-ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft
-ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft
-ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
-ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
-ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft
-ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
-ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
-ATTRIBUTE MS-RAS-Version 18 string Microsoft
-ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft
-ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
-ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft
-
-ATTRIBUTE MS-Filter 22 string Microsoft
-ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
-ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft
-
-ATTRIBUTE MS-CHAP2-Response 25 string Microsoft
-ATTRIBUTE MS-CHAP2-Success 26 string Microsoft
-ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft
-
-ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft
-ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft
-ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft
-ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
-
-#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft
-
-
-#
-# Integer Translations
-#
-
-# MS-BAP-Usage Values
-
-VALUE MS-BAP-Usage Not-Allowed 0
-VALUE MS-BAP-Usage Allowed 1
-VALUE MS-BAP-Usage Required 2
-
-# MS-ARAP-Password-Change-Reason Values
-
-VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
-VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
-VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3
-VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
-
-# MS-Acct-Auth-Type Values
-
-VALUE MS-Acct-Auth-Type PAP 1
-VALUE MS-Acct-Auth-Type CHAP 2
-VALUE MS-Acct-Auth-Type MS-CHAP-1 3
-VALUE MS-Acct-Auth-Type MS-CHAP-2 4
-VALUE MS-Acct-Auth-Type EAP 5
-
-# MS-Acct-EAP-Type Values
-
-VALUE MS-Acct-EAP-Type MD5 4
-VALUE MS-Acct-EAP-Type OTP 5
-VALUE MS-Acct-EAP-Type Generic-Token-Card 6
-VALUE MS-Acct-EAP-Type TLS 13
-
+++ /dev/null
-(\I)
------------------------------------------------------
-\S \R (\N) (port \L)
------------------------------------------------------
-
+++ /dev/null
-#
-# port-id-map
-#
-# This file describes the ttyname to port id mapping. The port id
-# is reported as part of a RADIUS authentication or accouting request.
-#
-#ttyname (as returned by ttyname(3)) port-id
-/dev/tty1 1
-/dev/tty2 2
-/dev/tty3 3
-/dev/tty4 4
-/dev/tty5 5
-/dev/tty6 6
-/dev/tty7 7
-/dev/tty8 8
-/dev/ttyS0 9
-/dev/ttyS1 10
-/dev/ttyS2 11
-/dev/ttyS3 12
-/dev/ttyS4 13
-/dev/ttyS5 14
-/dev/ttyS6 15
-/dev/ttyS7 16
-
\ No newline at end of file
+++ /dev/null
-# General settings
-
-# specify which authentication comes first respectively which
-# authentication is used. possible values are: "radius" and "local".
-# if you specify "radius,local" then the RADIUS server is asked
-# first then the local one. if only one keyword is specified only
-# this server is asked.
-auth_order radius
-
-# maximum login tries a user has (default 4)
-login_tries 4
-
-# timeout for all login tries (default 60)
-# if this time is exceeded the user is kicked out
-login_timeout 60
-
-# name of the nologin file which when it exists disables logins.
-# it may be extended by the ttyname which will result in
-# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable
-# logins on /dev/ttyS2) (default /etc/nologin)
-nologin /etc/nologin
-
-# name of the issue file. it's only display when no username is passed
-# on the radlogin command line (default /etc/radiusclient/issue)
-issue @pkgsysconfdir@/issue
-
-# RADIUS settings
-
-# RADIUS server to use for authentication requests. this config
-# item can appear more then one time. if multiple servers are
-# defined they are tried in a round robin fashion if one
-# server is not answering.
-# optionally you can specify a the port number on which is remote
-# RADIUS listens separated by a colon from the hostname. if
-# no port is specified /etc/services is consulted of the radius
-# service. if this fails also a compiled in default is used.
-authserver localhost:1812
-
-# RADIUS server to use for accouting requests. All that I
-# said for authserver applies, too.
-#
-acctserver localhost:1813
-
-# file holding shared secrets used for the communication
-# between the RADIUS client and server
-servers @pkgsysconfdir@/servers
-
-# dictionary of allowed attributes and values
-# just like in the normal RADIUS distributions
-dictionary @pkgsysconfdir@/dictionary
-
-# program to call for a RADIUS authenticated login
-# (default /usr/sbin/login.radius)
-login_radius @sbindir@/login.radius
-
-# file which holds sequence number for communication with the
-# RADIUS server
-seqfile /var/run/radius.seq
-
-# file which specifies mapping between ttyname and NAS-Port attribute
-mapfile @pkgsysconfdir@/port-id-map
-
-# default authentication realm to append to all usernames if no
-# realm was explicitly specified by the user
-# the radiusd directly form Livingston doesnt use any realms, so leave
-# it blank then
-default_realm
-
-# time to wait for a reply from the RADIUS server
-radius_timeout 10
-
-# resend request this many times before trying the next server
-radius_retries 3
-
-# NAS-Identifier
-#
-# If supplied, this option will cause the client to send the given string
-# as the contents of the NAS-Identifier attribute in RADIUS requests. No
-# NAS-IP-Address attribute will be sent in this case.
-#
-# The default behavior is to send a NAS-IP-Address option and not send
-# a NAS-Identifier. The value of the NAS-IP-Address option is chosen
-# by resolving the system hostname.
-
-# nas_identifier MyUniqueNASName
-
-# LOCAL settings
-
-# program to execute for local login
-# it must support the -f flag for preauthenticated login
-login_local /bin/login
+++ /dev/null
-# /etc/radiusclient/realms
-#
-# Handle realm @netservers.co.uk on an internal RADIUS server
-# (note the server must be told to strip the realm)
-
-#authserver netservers.co.uk 192.168.1.1:1812
-#acctserver netservers.co.uk 192.168.1.1:1813
-
-# users in realm @example.com are handled by separate servers
-
-#authserver example.com 10.0.0.1:1812
-#acctserver example.com 10.0.0.2:1813
-
-# the DEFAULT realm matches users that do not supply a realm
-
-#authserver DEFAULT 192.168.1.1:1812
-#acctserver DEFAULT 192.168.1.1:1813
-
-# Any realms that do not match in the realms file automatically fall
-# through to the standard radius plugin which uses the servers in the
-# radiusclient.conf file. Note that this is different than the
-# DEFAULT realm match, above.
+++ /dev/null
-#Server Name or Client/Server pair Key
-#---------------- ---------------
-#portmaster.elemental.net hardlyasecret
-#portmaster2.elemental.net donttellanyone
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:01 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-noinst_HEADERS = pathnames.h messages.h includes.h
-include_HEADERS = radiusclient.h
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:01 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-noinst_HEADERS = pathnames.h messages.h includes.h
-include_HEADERS = radiusclient.h
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-HEADERS = $(include_HEADERS) $(noinst_HEADERS)
-
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile $(HEADERS)
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps include/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-install-includeHEADERS: $(include_HEADERS)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(includedir)
- @list='$(include_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
- echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \
- $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \
- done
-
-uninstall-includeHEADERS:
- @$(NORMAL_UNINSTALL)
- list='$(include_HEADERS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(includedir)/$$p; \
- done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = include
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data: install-includeHEADERS
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall: uninstall-includeHEADERS
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
- $(mkinstalldirs) $(DATADIR)$(includedir)
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-tags mostlyclean-generic
-
-clean: clean-tags clean-generic mostlyclean
-
-distclean: distclean-tags distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-tags maintainer-clean-generic \
- distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: uninstall-includeHEADERS install-includeHEADERS tags \
-mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \
-distdir info dvi installcheck install-exec install-data install \
-uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-/*
- * $Id: includes.h,v 1.2 2002/02/27 15:51:19 dfs Exp $
- *
- * Copyright (C) 1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-
-#include <ctype.h>
-#include <stdio.h>
-#include <errno.h>
-#include <netdb.h>
-#include <syslog.h>
-
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-# include <stdarg.h>
-#else
-# include <stdarg.h>
-# ifndef HAVE_STRCHR
-# define strchr index
-# define strrchr rindex
-# endif
-#endif
-
-/* I realize that this is ugly and unsafe.. :( */
-#ifndef HAVE_SNPRINTF
-# define snprintf(buf, len, format, args...) sprintf(buf, format, ## args)
-#endif
-#ifndef HAVE_VSNPRINTF
-# define vsnprintf(buf, len, format, ap) vsprintf(buf, format, ap)
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_FCNTL_H
-# include <sys/fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_FILE_H
-# include <sys/file.h>
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-
-#ifdef HAVE_SYS_UTSNAME_H
-# include <sys/utsname.h>
-#endif
-
-#ifdef HAVE_SYS_IOCTL_H
-# include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_CRYPT_H
-# include <crypt.h>
-#endif
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#ifdef HAVE_TERMIOS_H
-# include <termios.h>
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-#ifndef UCHAR_MAX
-# ifdef __STDC__
-# define UCHAR_MAX 255U
-# else
-# define UCHAR_MAX 255
-# endif
-#endif
-
-#include <pwd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#if defined(HAVE_SIGNAL_H)
-# include <signal.h>
-#endif
-#if defined(HAVE_SYS_SIGNAL_H)
-# include <sys/signal.h>
-#endif
-
-#ifdef NEED_SIG_PROTOTYPES
-int sigemptyset(sigset_t *);
-int sigaddset(sigset_t *, int);
-int sigprocmask (int, sigset_t *, sigset_t *);
-#endif
-
-#if HAVE_GETOPT_H
-# include <getopt.h>
-#endif
-
-#if defined(HAVE_SHADOW_H) && defined(HAVE_SHADOW_PASSWORDS)
-# include <shadow.h>
-#endif
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-/*
- * prefer srandom/random over srand/rand as there generator has a
- * better distribution of the numbers on certain systems.
- * on Linux both generators are identical.
- */
-#ifndef HAVE_RANDOM
-# ifdef HAVE_RAND
-# define srandom srand
-# define random rand
-# endif
-#endif
-
-/* rlib/lock.c */
-int do_lock_exclusive(int);
-int do_unlock(int);
+++ /dev/null
-/*
- * $Id: messages.h,v 1.2 2002/02/27 15:51:19 dfs Exp $
- *
- * Copyright (C) 1995,1996 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-/*
- * Only messages that the user gets under normal use are in here.
- * Error messages and such are still in the source code.
- */
-
-#ifndef MESSAGES_H
-#define MESSAGES_H
-
-/* radlogin.c */
-
-#define SC_LOGIN "login: "
-#define SC_PASSWORD "Password: "
-
-#define SC_TIMEOUT "\r\nlogin timed out after %d seconds. Bye.\r\n"
-#define SC_EXCEEDED "Maximum login tries exceeded. Go away!\r\n"
-
-#define SC_RADIUS_OK "RADIUS: Authentication OK\r\n"
-#define SC_RADIUS_FAILED "RADIUS: Authentication failure\r\n"
-
-#define SC_LOCAL_OK "local: Authentication OK\r\n"
-#define SC_LOCAL_FAILED "local: Authentication failure\r\n"
-#define SC_NOLOGIN "\r\nSystem closed for maintenance. Try again later...\r\n"
-
-#define SC_SERVER_REPLY "RADIUS: %s"
-
-#define SC_DEFAULT_ISSUE "(\\I)\r\n\r\n\\S \\R (\\N) (port \\L)\r\n\r\n"
-
-/* radacct.c */
-
-#define SC_ACCT_OK "RADIUS accounting OK\r\n"
-#define SC_ACCT_FAILED "RADIUS accounting failed (RC=%i)\r\n"
-
-/* radstatus.c */
-
-#define SC_STATUS_FAILED "RADIUS: Status failure\r\n"
-
-#endif /* MESSAGES_H */
+++ /dev/null
-/*
- * $Id: pathnames.h,v 1.2 2002/02/27 15:51:19 dfs Exp $
- *
- * Copyright (C) 1995,1996 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#ifndef PATHNAMES_H
-#define PATHNAMES_H
-
-#define _PATH_DEV_URANDOM "/dev/urandom" /* Linux only */
-#define _PATH_ETC_ISSUE "/etc/issue"
-
-/* normally defined in the Makefile */
-#ifndef _PATH_ETC_RADIUSCLIENT_CONF
-#define _PATH_ETC_RADIUSCLIENT_CONF "/etc/radiusclient.conf"
-#endif
-
-#endif /* PATHNAMES_H */
+++ /dev/null
-/*
- * $Id: radiusclient.h,v 1.9 2002/11/13 18:19:26 fcusack Exp $
- *
- * Copyright (C) 1995,1996,1997,1998 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#ifndef RADIUSCLIENT_H
-#define RADIUSCLIENT_H
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <time.h>
-
-#undef __BEGIN_DECLS
-#undef __END_DECLS
-#ifdef __cplusplus
-# define __BEGIN_DECLS extern "C" {
-# define __END_DECLS }
-#else
-# define __BEGIN_DECLS /* empty */
-# define __END_DECLS /* empty */
-#endif
-
-#undef __P
-#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
-# define __P(protos) protos
-#else
-# define __P(protos) ()
-#endif
-
-#ifndef _UINT4_T
-#ifdef _LP64
-typedef unsigned int UINT4;
-typedef int INT4;
-#else
-typedef unsigned long UINT4;
-typedef long INT4;
-#endif
-#endif
-
-#define AUTH_VECTOR_LEN 16
-#define AUTH_PASS_LEN (3 * 16) /* multiple of 16 */
-#define AUTH_ID_LEN 64
-#define AUTH_STRING_LEN 128 /* maximum of 253 */
-
-#define BUFFER_LEN 8192
-
-#define NAME_LENGTH 32
-#define GETSTR_LENGTH 128 /* must be bigger than AUTH_PASS_LEN */
-
-/* codes for radius_buildreq, radius_getport, etc. */
-#define AUTH 0
-#define ACCT 1
-
-/* defines for config.c */
-
-#define SERVER_MAX 8
-
-#define AUTH_LOCAL_FST (1<<0)
-#define AUTH_RADIUS_FST (1<<1)
-#define AUTH_LOCAL_SND (1<<2)
-#define AUTH_RADIUS_SND (1<<3)
-
-typedef struct server {
- int max;
- char *name[SERVER_MAX];
- unsigned short port[SERVER_MAX];
-} SERVER;
-
-typedef struct pw_auth_hdr
-{
- u_char code;
- u_char id;
- u_short length;
- u_char vector[AUTH_VECTOR_LEN];
- u_char data[2];
-} AUTH_HDR;
-
-#define AUTH_HDR_LEN 20
-#define MAX_SECRET_LENGTH (3 * 16) /* MUST be multiple of 16 */
-#define CHAP_VALUE_LENGTH 16
-
-#define PW_AUTH_UDP_PORT 1812
-#define PW_ACCT_UDP_PORT 1813
-
-#define PW_TYPE_STRING 0
-#define PW_TYPE_INTEGER 1
-#define PW_TYPE_IPADDR 2
-#define PW_TYPE_DATE 3
-
-/* standard RADIUS codes */
-
-#define PW_ACCESS_REQUEST 1
-#define PW_ACCESS_ACCEPT 2
-#define PW_ACCESS_REJECT 3
-#define PW_ACCOUNTING_REQUEST 4
-#define PW_ACCOUNTING_RESPONSE 5
-#define PW_ACCOUNTING_STATUS 6
-#define PW_PASSWORD_REQUEST 7
-#define PW_PASSWORD_ACK 8
-#define PW_PASSWORD_REJECT 9
-#define PW_ACCOUNTING_MESSAGE 10
-#define PW_ACCESS_CHALLENGE 11
-#define PW_STATUS_SERVER 12
-#define PW_STATUS_CLIENT 13
-
-
-/* standard RADIUS attribute-value pairs */
-
-#define PW_USER_NAME 1 /* string */
-#define PW_USER_PASSWORD 2 /* string */
-#define PW_CHAP_PASSWORD 3 /* string */
-#define PW_NAS_IP_ADDRESS 4 /* ipaddr */
-#define PW_NAS_PORT 5 /* integer */
-#define PW_SERVICE_TYPE 6 /* integer */
-#define PW_FRAMED_PROTOCOL 7 /* integer */
-#define PW_FRAMED_IP_ADDRESS 8 /* ipaddr */
-#define PW_FRAMED_IP_NETMASK 9 /* ipaddr */
-#define PW_FRAMED_ROUTING 10 /* integer */
-#define PW_FILTER_ID 11 /* string */
-#define PW_FRAMED_MTU 12 /* integer */
-#define PW_FRAMED_COMPRESSION 13 /* integer */
-#define PW_LOGIN_IP_HOST 14 /* ipaddr */
-#define PW_LOGIN_SERVICE 15 /* integer */
-#define PW_LOGIN_PORT 16 /* integer */
-#define PW_OLD_PASSWORD 17 /* string */ /* deprecated */
-#define PW_REPLY_MESSAGE 18 /* string */
-#define PW_LOGIN_CALLBACK_NUMBER 19 /* string */
-#define PW_FRAMED_CALLBACK_ID 20 /* string */
-#define PW_EXPIRATION 21 /* date */ /* deprecated */
-#define PW_FRAMED_ROUTE 22 /* string */
-#define PW_FRAMED_IPX_NETWORK 23 /* integer */
-#define PW_STATE 24 /* string */
-#define PW_CLASS 25 /* string */
-#define PW_VENDOR_SPECIFIC 26 /* string */
-#define PW_SESSION_TIMEOUT 27 /* integer */
-#define PW_IDLE_TIMEOUT 28 /* integer */
-#define PW_TERMINATION_ACTION 29 /* integer */
-#define PW_CALLED_STATION_ID 30 /* string */
-#define PW_CALLING_STATION_ID 31 /* string */
-#define PW_NAS_IDENTIFIER 32 /* string */
-#define PW_PROXY_STATE 33 /* string */
-#define PW_LOGIN_LAT_SERVICE 34 /* string */
-#define PW_LOGIN_LAT_NODE 35 /* string */
-#define PW_LOGIN_LAT_GROUP 36 /* string */
-#define PW_FRAMED_APPLETALK_LINK 37 /* integer */
-#define PW_FRAMED_APPLETALK_NETWORK 38 /* integer */
-#define PW_FRAMED_APPLETALK_ZONE 39 /* string */
-#define PW_CHAP_CHALLENGE 60 /* string */
-#define PW_NAS_PORT_TYPE 61 /* integer */
-#define PW_PORT_LIMIT 62 /* integer */
-#define PW_LOGIN_LAT_PORT 63 /* string */
-
-/* Vendor RADIUS attribute-value pairs */
-#define PW_MS_CHAP_CHALLENGE 11 /* string */
-#define PW_MS_CHAP_RESPONSE 1 /* string */
-#define PW_MS_CHAP2_RESPONSE 25 /* string */
-#define PW_MS_CHAP2_SUCCESS 26 /* string */
-#define PW_MS_MPPE_ENCRYPTION_POLICY 7 /* string */
-#define PW_MS_MPPE_ENCRYPTION_TYPE 8 /* string */
-#define PW_MS_MPPE_ENCRYPTION_TYPES PW_MS_MPPE_ENCRYPTION_TYPE
-#define PW_MS_CHAP_MPPE_KEYS 12 /* string */
-#define PW_MS_MPPE_SEND_KEY 16 /* string */
-#define PW_MS_MPPE_RECV_KEY 17 /* string */
-
-/* Accounting */
-
-#define PW_ACCT_STATUS_TYPE 40 /* integer */
-#define PW_ACCT_DELAY_TIME 41 /* integer */
-#define PW_ACCT_INPUT_OCTETS 42 /* integer */
-#define PW_ACCT_OUTPUT_OCTETS 43 /* integer */
-#define PW_ACCT_SESSION_ID 44 /* string */
-#define PW_ACCT_AUTHENTIC 45 /* integer */
-#define PW_ACCT_SESSION_TIME 46 /* integer */
-#define PW_ACCT_INPUT_PACKETS 47 /* integer */
-#define PW_ACCT_OUTPUT_PACKETS 48 /* integer */
-#define PW_ACCT_TERMINATE_CAUSE 49 /* integer */
-#define PW_ACCT_MULTI_SESSION_ID 50 /* string */
-#define PW_ACCT_LINK_COUNT 51 /* integer */
-
-/* From RFC 2869 */
-#define PW_ACCT_INTERIM_INTERVAL 85 /* integer */
-
-/* Merit Experimental Extensions */
-
-#define PW_USER_ID 222 /* string */
-#define PW_USER_REALM 223 /* string */
-
-
-/* Session limits */
-#define PW_SESSION_OCTETS_LIMIT 227 /* integer */
-#define PW_OCTETS_DIRECTION 228 /* integer */
-
-/* Integer Translations */
-
-/* SERVICE TYPES */
-
-#define PW_LOGIN 1
-#define PW_FRAMED 2
-#define PW_CALLBACK_LOGIN 3
-#define PW_CALLBACK_FRAMED 4
-#define PW_OUTBOUND 5
-#define PW_ADMINISTRATIVE 6
-#define PW_NAS_PROMPT 7
-#define PW_AUTHENTICATE_ONLY 8
-#define PW_CALLBACK_NAS_PROMPT 9
-
-/* FRAMED PROTOCOLS */
-
-#define PW_PPP 1
-#define PW_SLIP 2
-#define PW_ARA 3
-#define PW_GANDALF 4
-#define PW_XYLOGICS 5
-
-/* FRAMED ROUTING VALUES */
-
-#define PW_NONE 0
-#define PW_BROADCAST 1
-#define PW_LISTEN 2
-#define PW_BROADCAST_LISTEN 3
-
-/* FRAMED COMPRESSION TYPES */
-
-#define PW_VAN_JACOBSON_TCP_IP 1
-#define PW_IPX_HEADER_COMPRESSION 2
-
-/* LOGIN SERVICES */
-
-#define PW_TELNET 0
-#define PW_RLOGIN 1
-#define PW_TCP_CLEAR 2
-#define PW_PORTMASTER 3
-#define PW_LAT 4
-#define PW_X25_PAD 5
-#define PW_X25_T3POS 6
-
-/* TERMINATION ACTIONS */
-
-#define PW_DEFAULT 0
-#define PW_RADIUS_REQUEST 1
-
-/* PROHIBIT PROTOCOL */
-
-#define PW_DUMB 0 /* 1 and 2 are defined in FRAMED PROTOCOLS */
-#define PW_AUTH_ONLY 3
-#define PW_ALL 255
-
-/* ACCOUNTING STATUS TYPES */
-
-#define PW_STATUS_START 1
-#define PW_STATUS_STOP 2
-#define PW_STATUS_ALIVE 3
-#define PW_STATUS_MODEM_START 4
-#define PW_STATUS_MODEM_STOP 5
-#define PW_STATUS_CANCEL 6
-#define PW_ACCOUNTING_ON 7
-#define PW_ACCOUNTING_OFF 8
-
-/* ACCOUNTING TERMINATION CAUSES */
-
-#define PW_USER_REQUEST 1
-#define PW_LOST_CARRIER 2
-#define PW_LOST_SERVICE 3
-#define PW_ACCT_IDLE_TIMEOUT 4
-#define PW_ACCT_SESSION_TIMEOUT 5
-#define PW_ADMIN_RESET 6
-#define PW_ADMIN_REBOOT 7
-#define PW_PORT_ERROR 8
-#define PW_NAS_ERROR 9
-#define PW_NAS_REQUEST 10
-#define PW_NAS_REBOOT 11
-#define PW_PORT_UNNEEDED 12
-#define PW_PORT_PREEMPTED 13
-#define PW_PORT_SUSPENDED 14
-#define PW_SERVICE_UNAVAILABLE 15
-#define PW_CALLBACK 16
-#define PW_USER_ERROR 17
-#define PW_HOST_REQUEST 18
-
-/* NAS PORT TYPES */
-
-#define PW_ASYNC 0
-#define PW_SYNC 1
-#define PW_ISDN_SYNC 2
-#define PW_ISDN_SYNC_V120 3
-#define PW_ISDN_SYNC_V110 4
-#define PW_VIRTUAL 5
-
-/* AUTHENTIC TYPES */
-#define PW_RADIUS 1
-#define PW_LOCAL 2
-#define PW_REMOTE 3
-
-/* Session-Octets-Limit */
-#define PW_OCTETS_DIRECTION_SUM 0
-#define PW_OCTETS_DIRECTION_IN 1
-#define PW_OCTETS_DIRECTION_OUT 2
-#define PW_OCTETS_DIRECTION_MAX 3
-
-
-/* Vendor codes */
-#define VENDOR_NONE (-1)
-#define VENDOR_MICROSOFT 311
-
-/* Server data structures */
-
-typedef struct dict_attr
-{
- char name[NAME_LENGTH + 1]; /* attribute name */
- int value; /* attribute index */
- int type; /* string, int, etc. */
- int vendorcode; /* vendor code */
- struct dict_attr *next;
-} DICT_ATTR;
-
-typedef struct dict_value
-{
- char attrname[NAME_LENGTH +1];
- char name[NAME_LENGTH + 1];
- int value;
- struct dict_value *next;
-} DICT_VALUE;
-
-typedef struct vendor_dict
-{
- char vendorname[NAME_LENGTH + 1];
- int vendorcode;
- DICT_ATTR *attributes;
- struct vendor_dict *next;
-} VENDOR_DICT;
-
-typedef struct value_pair
-{
- char name[NAME_LENGTH + 1];
- int attribute;
- int vendorcode;
- int type;
- UINT4 lvalue;
- u_char strvalue[AUTH_STRING_LEN + 1];
- struct value_pair *next;
-} VALUE_PAIR;
-
-/* don't change this, as it has to be the same as in the Merit radiusd code */
-#define MGMT_POLL_SECRET "Hardlyasecret"
-
-/* Define return codes from "SendServer" utility */
-
-#define BADRESP_RC -2
-#define ERROR_RC -1
-#define OK_RC 0
-#define TIMEOUT_RC 1
-
-typedef struct send_data /* Used to pass information to sendserver() function */
-{
- u_char code; /* RADIUS packet code */
- u_char seq_nbr; /* Packet sequence number */
- char *server; /* Name/addrress of RADIUS server */
- int svc_port; /* RADIUS protocol destination port */
- int timeout; /* Session timeout in seconds */
- int retries;
- VALUE_PAIR *send_pairs; /* More a/v pairs to send */
- VALUE_PAIR *receive_pairs; /* Where to place received a/v pairs */
-} SEND_DATA;
-
-typedef struct request_info
-{
- char secret[MAX_SECRET_LENGTH + 1];
- u_char request_vector[AUTH_VECTOR_LEN];
-} REQUEST_INFO;
-
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-typedef struct env
-{
- int maxsize, size;
- char **env;
-} ENV;
-
-#define ENV_SIZE 128
-
-__BEGIN_DECLS
-
-/* Function prototypes */
-
-/* avpair.c */
-
-VALUE_PAIR *rc_avpair_add __P((VALUE_PAIR **, int, void *, int, int));
-int rc_avpair_assign __P((VALUE_PAIR *, void *, int));
-VALUE_PAIR *rc_avpair_new __P((int, void *, int, int));
-VALUE_PAIR *rc_avpair_gen __P((AUTH_HDR *));
-VALUE_PAIR *rc_avpair_get __P((VALUE_PAIR *, UINT4));
-VALUE_PAIR *rc_avpair_copy __P((VALUE_PAIR *));
-void rc_avpair_insert __P((VALUE_PAIR **, VALUE_PAIR *, VALUE_PAIR *));
-void rc_avpair_free __P((VALUE_PAIR *));
-int rc_avpair_parse __P((char *, VALUE_PAIR **));
-int rc_avpair_tostr __P((VALUE_PAIR *, char *, int, char *, int));
-VALUE_PAIR *rc_avpair_readin __P((FILE *));
-
-/* buildreq.c */
-
-void rc_buildreq __P((SEND_DATA *, int, char *, unsigned short, int, int));
-unsigned char rc_get_seqnbr __P((void));
-int rc_auth __P((UINT4, VALUE_PAIR *, VALUE_PAIR **, char *, REQUEST_INFO *));
-int rc_auth_using_server __P((SERVER *, UINT4, VALUE_PAIR *, VALUE_PAIR **,
- char *, REQUEST_INFO *));
-int rc_auth_proxy __P((VALUE_PAIR *, VALUE_PAIR **, char *));
-int rc_acct __P((UINT4, VALUE_PAIR *));
-int rc_acct_using_server __P((SERVER *, UINT4, VALUE_PAIR *));
-int rc_acct_proxy __P((VALUE_PAIR *));
-int rc_check __P((char *, unsigned short, char *));
-
-/* clientid.c */
-
-int rc_read_mapfile __P((char *));
-UINT4 rc_map2id __P((char *));
-
-/* config.c */
-
-int rc_read_config __P((char *));
-char *rc_conf_str __P((char *));
-int rc_conf_int __P((char *));
-SERVER *rc_conf_srv __P((char *));
-int rc_find_server __P((char *, UINT4 *, char *));
-
-/* dict.c */
-
-int rc_read_dictionary __P((char *));
-DICT_ATTR *rc_dict_getattr __P((int, int));
-DICT_ATTR *rc_dict_findattr __P((char *));
-DICT_VALUE *rc_dict_findval __P((char *));
-DICT_VALUE * rc_dict_getval __P((UINT4, char *));
-VENDOR_DICT * rc_dict_findvendor __P((char *));
-VENDOR_DICT * rc_dict_getvendor __P((int));
-
-/* ip_util.c */
-
-UINT4 rc_get_ipaddr __P((char *));
-int rc_good_ipaddr __P((char *));
-const char *rc_ip_hostname __P((UINT4));
-unsigned short rc_getport __P((int));
-int rc_own_hostname __P((char *, int));
-UINT4 rc_own_ipaddress __P((void));
-
-
-/* log.c */
-
-void rc_openlog __P((char *));
-void rc_log __P((int, const char *, ...));
-
-/* sendserver.c */
-
-int rc_send_server __P((SEND_DATA *, char *, REQUEST_INFO *));
-
-/* util.c */
-
-void rc_str2tm __P((char *, struct tm *));
-char *rc_mksid __P((void));
-char *rc_getifname __P((char *));
-char *rc_getstr __P((char *, int));
-void rc_mdelay __P((int));
-char *rc_mksid __P((void));
-
-/* env.c */
-
-struct env *rc_new_env __P((int));
-void rc_free_env __P((struct env *));
-int rc_add_env __P((struct env *, char *, char *));
-int rc_import_env __P((struct env *, char **));
-
-/* md5.c */
-
-void rc_md5_calc __P((unsigned char *, unsigned char *, unsigned int));
-
-__END_DECLS
-
-#endif /* RADIUSCLIENT_H */
+++ /dev/null
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1995,1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-LIBVERSION = @LIBVERSION@
-
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir)
-DEFS = @DEFS@ -DRC_LOG_FACILITY=$(RC_LOG_FACILITY)
-
-CLEANFILES = *~
-
-noinst_HEADERS = options.h
-
-#radiusclient_SOURCES = buildreq.c clientid.c env.c sendserver.c avpair.c \
-# config.c dict.c ip_util.c log.c md5.c util.c lock.c
-
-#radiusclient_LIBADD = @LIBOBJS@
-
-#lib_LIBRARIES = radiusclient
-
-lib_LTLIBRARIES = libradiusclient.la
-libradiusclient_la_SOURCES = buildreq.c clientid.c env.c sendserver.c \
- avpair.c config.c dict.c ip_util.c log.c md5.c util.c lock.c
-libradiusclient_la_LDFLAGS = -version-info $(LIBVERSION)
-libradiusclient_la_LIBADD = @LTLIBOBJS@
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.2 2002/02/20 02:22:35 dfs Exp $
-#
-# Copyright (C) 1995,1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-LIBVERSION = @LIBVERSION@
-
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir)
-DEFS = @DEFS@ -DRC_LOG_FACILITY=$(RC_LOG_FACILITY)
-
-CLEANFILES = *~
-
-noinst_HEADERS = options.h
-
-#radiusclient_SOURCES = buildreq.c clientid.c env.c sendserver.c avpair.c \
-# config.c dict.c ip_util.c log.c md5.c util.c lock.c
-
-#radiusclient_LIBADD = @LIBOBJS@
-
-#lib_LIBRARIES = radiusclient
-
-lib_LTLIBRARIES = libradiusclient.la
-libradiusclient_la_SOURCES = buildreq.c clientid.c env.c sendserver.c \
- avpair.c config.c dict.c ip_util.c log.c md5.c util.c lock.c
-libradiusclient_la_LDFLAGS = -version-info $(LIBVERSION)
-libradiusclient_la_LIBADD = @LTLIBOBJS@
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-LTLIBRARIES = $(lib_LTLIBRARIES)
-
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-libradiusclient_la_DEPENDENCIES = @LTLIBOBJS@
-libradiusclient_la_OBJECTS = buildreq.lo clientid.lo env.lo \
-sendserver.lo avpair.lo config.lo dict.lo ip_util.lo log.lo md5.lo \
-util.lo lock.lo
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
-HEADERS = $(noinst_HEADERS)
-
-DIST_COMMON = Makefile.am Makefile.in memcmp.c strcasecmp.c strdup.c \
-strerror.c
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-SOURCES = $(libradiusclient_la_SOURCES)
-OBJECTS = $(libradiusclient_la_OBJECTS)
-
-all: Makefile $(LTLIBRARIES) $(HEADERS)
-
-.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps lib/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-libLTLIBRARIES:
-
-clean-libLTLIBRARIES:
- -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-
-distclean-libLTLIBRARIES:
-
-maintainer-clean-libLTLIBRARIES:
-
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(libdir)
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
- $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
- else :; fi; \
- done
-
-uninstall-libLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
- done
-
-.c.o:
- $(COMPILE) -c $<
-
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
-mostlyclean-compile:
- -rm -f *.o core *.core
-
-clean-compile:
-
-distclean-compile:
- -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.s.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-libradiusclient.la: $(libradiusclient_la_OBJECTS) $(libradiusclient_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libradiusclient_la_LDFLAGS) $(libradiusclient_la_OBJECTS) $(libradiusclient_la_LIBADD) $(LIBS)
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = lib
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-avpair.lo avpair.o: avpair.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-buildreq.lo buildreq.o: buildreq.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-clientid.lo clientid.o: clientid.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-config.lo config.o: config.c ../config.h ../include/includes.h \
- ../include/radiusclient.h options.h
-dict.lo dict.o: dict.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-env.lo env.o: env.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-ip_util.lo ip_util.o: ip_util.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-lock.lo lock.o: lock.c ../config.h ../include/includes.h
-log.lo log.o: log.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-md5.lo md5.o: md5.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-memcmp.o memcmp.lo: memcmp.c ../config.h ../include/includes.h
-sendserver.lo sendserver.o: sendserver.c ../config.h \
- ../include/includes.h ../include/radiusclient.h \
- ../include/pathnames.h
-strcasecmp.o strcasecmp.lo: strcasecmp.c ../config.h \
- ../include/includes.h
-strdup.o strdup.lo: strdup.c ../config.h ../include/includes.h
-strerror.o strerror.lo: strerror.c ../config.h ../include/includes.h
-util.lo util.o: util.c ../config.h ../include/includes.h \
- ../include/radiusclient.h
-
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec: install-libLTLIBRARIES
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall: uninstall-libLTLIBRARIES
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
- $(mkinstalldirs) $(DATADIR)$(libdir)
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-libLTLIBRARIES mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
-
-clean: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \
- clean-generic mostlyclean
-
-distclean: distclean-libLTLIBRARIES distclean-compile distclean-libtool \
- distclean-tags distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-libLTLIBRARIES \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
-clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
-uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir info dvi installcheck \
-install-exec install-data install uninstall all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-/*
- * $Id: avpair.c,v 1.4 2003/04/16 05:55:35 fcusack Exp $
- *
- * Copyright (C) 1995 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-static void rc_extract_vendor_specific_attributes(int attrlen,
- unsigned char *ptr,
- VALUE_PAIR **vp);
-/*
- * Function: rc_avpair_add
- *
- * Purpose: add an attribute-value pair to the given list.
- *
- * Returns: pointer to added a/v pair upon success, NULL pointer upon failure.
- *
- * Remarks: Always appends the new pair to the end of the list.
- *
- */
-
-VALUE_PAIR *rc_avpair_add (VALUE_PAIR **list, int attrid, void *pval, int len,
- int vendorcode)
-{
- VALUE_PAIR *vp;
-
- vp = rc_avpair_new (attrid, pval, len, vendorcode);
-
- if (vp != (VALUE_PAIR *) NULL)
- {
- rc_avpair_insert (list, (VALUE_PAIR *) NULL, vp);
- }
-
- return vp;
-
-}
-
-/*
- * Function: rc_avpair_assign
- *
- * Purpose: assign the given value to an attribute-value pair.
- *
- * Returns: 0 on success,
- * -1 on failure.
- *
- */
-
-int rc_avpair_assign (VALUE_PAIR *vp, void *pval, int len)
-{
- int result = -1;
-
- switch (vp->type)
- {
- case PW_TYPE_STRING:
-
- if (((len == 0) && (strlen ((char *) pval)) > AUTH_STRING_LEN)
- || (len > AUTH_STRING_LEN)) {
- rc_log(LOG_ERR, "rc_avpair_assign: bad attribute length");
- return result;
- }
-
- if (len > 0) {
- memcpy(vp->strvalue, (char *)pval, len);
- vp->strvalue[len] = '\0';
- vp->lvalue = len;
- } else {
- strncpy (vp->strvalue, (char *) pval, AUTH_STRING_LEN);
- vp->lvalue = strlen((char *) pval);
- }
-
- result = 0;
- break;
-
- case PW_TYPE_DATE:
- case PW_TYPE_INTEGER:
- case PW_TYPE_IPADDR:
-
- vp->lvalue = * (UINT4 *) pval;
-
- result = 0;
- break;
-
- default:
- rc_log(LOG_ERR, "rc_avpair_assign: unknown attribute %d", vp->type);
- }
- return result;
-}
-
-/*
- * Function: rc_avpair_new
- *
- * Purpose: make a new attribute-value pair with given parameters.
- *
- * Returns: pointer to generated a/v pair when successful, NULL when failure.
- *
- */
-
-VALUE_PAIR *rc_avpair_new (int attrid, void *pval, int len, int vendorcode)
-{
- VALUE_PAIR *vp = (VALUE_PAIR *) NULL;
- DICT_ATTR *pda;
-
- if ((pda = rc_dict_getattr (attrid, vendorcode)) == (DICT_ATTR *) NULL)
- {
- rc_log(LOG_ERR,"rc_avpair_new: unknown attribute %d", attrid);
- }
- else
- {
- if ((vp = (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR)))
- != (VALUE_PAIR *) NULL)
- {
- strncpy (vp->name, pda->name, sizeof (vp->name));
- vp->attribute = attrid;
- vp->vendorcode = vendorcode;
- vp->next = (VALUE_PAIR *) NULL;
- vp->type = pda->type;
- if (rc_avpair_assign (vp, pval, len) == 0)
- {
- return vp;
- }
- free (vp);
- vp = (VALUE_PAIR *) NULL;
- }
- else
- {
- rc_log(LOG_CRIT,"rc_avpair_new: out of memory");
- }
- }
- return vp;
-}
-
-/*
- *
- * Function: rc_avpair_gen
- *
- * Purpose: takes attribute/value pairs from buffer and builds a
- * value_pair list using allocated memory.
- *
- * Returns: value_pair list or NULL on failure
- */
-
-VALUE_PAIR *rc_avpair_gen (AUTH_HDR *auth)
-{
- int length;
- int x_len;
- int attribute;
- int attrlen;
- UINT4 lvalue;
- unsigned char *x_ptr;
- unsigned char *ptr;
- DICT_ATTR *attr;
- VALUE_PAIR *vp;
- VALUE_PAIR *pair;
- unsigned char hex[3]; /* For hex string conversion. */
- char buffer[512];
-
- /*
- * Extract attribute-value pairs
- */
- ptr = auth->data;
- length = ntohs ((unsigned short) auth->length) - AUTH_HDR_LEN;
- vp = (VALUE_PAIR *) NULL;
-
- while (length > 0)
- {
- attribute = *ptr++;
- attrlen = *ptr++;
- attrlen -= 2;
- if (attrlen < 0)
- {
- rc_log(LOG_ERR, "rc_avpair_gen: received attribute with invalid length");
- break;
- }
-
- /* Handle vendor-specific specially */
- if (attribute == PW_VENDOR_SPECIFIC) {
- rc_extract_vendor_specific_attributes(attrlen, ptr, &vp);
- ptr += attrlen;
- length -= (attrlen + 2);
- continue;
- }
- if ((attr = rc_dict_getattr (attribute, VENDOR_NONE)) == (DICT_ATTR *) NULL)
- {
- *buffer= '\0'; /* Initial length. */
- for (x_ptr = ptr, x_len = attrlen ;
- x_len > 0 ;
- x_len--, x_ptr++)
- {
- sprintf (hex, "%2.2X", *x_ptr);
- strcat (buffer, hex);
- }
- rc_log(LOG_WARNING, "rc_avpair_gen: received unknown attribute %d of length %d: 0x%s",
- attribute, attrlen, buffer);
- }
- else
- {
- if ((pair =
- (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR))) ==
- (VALUE_PAIR *) NULL)
- {
- rc_log(LOG_CRIT, "rc_avpair_gen: out of memory");
- rc_avpair_free(vp);
- return NULL;
- }
- strcpy (pair->name, attr->name);
- pair->attribute = attr->value;
- pair->vendorcode = VENDOR_NONE;
- pair->type = attr->type;
- pair->next = (VALUE_PAIR *) NULL;
-
- switch (attr->type)
- {
-
- case PW_TYPE_STRING:
- memcpy (pair->strvalue, (char *) ptr, (size_t) attrlen);
- pair->strvalue[attrlen] = '\0';
- pair->lvalue = attrlen;
- rc_avpair_insert (&vp, (VALUE_PAIR *) NULL, pair);
- break;
-
- case PW_TYPE_INTEGER:
- case PW_TYPE_IPADDR:
- memcpy ((char *) &lvalue, (char *) ptr,
- sizeof (UINT4));
- pair->lvalue = ntohl (lvalue);
- rc_avpair_insert (&vp, (VALUE_PAIR *) NULL, pair);
- break;
-
- default:
- rc_log(LOG_WARNING, "rc_avpair_gen: %s has unknown type", attr->name);
- free (pair);
- break;
- }
-
- }
- ptr += attrlen;
- length -= attrlen + 2;
- }
- return (vp);
-}
-
-/*
- * Function: rc_extract_vendor_specific_attributes
- *
- * Purpose: Extracts vendor-specific attributes, assuming they are in
- * the "SHOULD" format recommended by RCF 2138.
- *
- * Returns: found value_pair
- *
- */
-static void rc_extract_vendor_specific_attributes(int attrlen,
- unsigned char *ptr,
- VALUE_PAIR **vp)
-{
- int vendor_id;
- int vtype;
- int vlen;
- UINT4 lvalue;
- DICT_ATTR *attr;
- VALUE_PAIR *pair;
-
- /* ptr is sitting at vendor-ID */
- if (attrlen < 8) {
- /* Nothing to see here... */
- return;
- }
-
- /* High-order octet of Vendor-Id must be zero (RFC2138) */
- if (*ptr) {
- return;
- }
-
- /* Extract vendor_id */
- vendor_id = (int) (
- ((unsigned int) ptr[1]) * 256 * 256 +
- ((unsigned int) ptr[2]) * 256 +
- ((unsigned int) ptr[3]));
- /* Bump ptr up to contents */
- ptr += 4;
-
- /* Set attrlen to length of data */
- attrlen -= 4;
- for (; attrlen; attrlen -= vlen+2, ptr += vlen) {
- vtype = *ptr++;
- vlen = *ptr++;
- vlen -= 2;
- if (vlen < 0 || vlen > attrlen - 2) {
- /* Do not log an error. We are supposed to be able to cope with
- arbitrary vendor-specific gunk */
- return;
- }
- /* Looks plausible... */
- if ((attr = rc_dict_getattr(vtype, vendor_id)) == NULL) {
- continue;
- }
-
- /* TODO: Check that length matches data size!!!!! */
- pair = (VALUE_PAIR *) malloc(sizeof(VALUE_PAIR));
- if (!pair) {
- rc_log(LOG_CRIT, "rc_avpair_gen: out of memory");
- return;
- }
- strcpy(pair->name, attr->name);
- pair->attribute = attr->value;
- pair->vendorcode = vendor_id;
- pair->type = attr->type;
- pair->next = NULL;
- switch (attr->type) {
- case PW_TYPE_STRING:
- memcpy (pair->strvalue, (char *) ptr, (size_t) vlen);
- pair->strvalue[vlen] = '\0';
- pair->lvalue = vlen;
- rc_avpair_insert (vp, (VALUE_PAIR *) NULL, pair);
- break;
-
- case PW_TYPE_INTEGER:
- case PW_TYPE_IPADDR:
- memcpy ((char *) &lvalue, (char *) ptr,
- sizeof (UINT4));
- pair->lvalue = ntohl (lvalue);
- rc_avpair_insert (vp, (VALUE_PAIR *) NULL, pair);
- break;
-
- default:
- rc_log(LOG_WARNING, "rc_avpair_gen: %s has unknown type", attr->name);
- free (pair);
- break;
- }
- }
-}
-
-/*
- * Function: rc_avpair_get
- *
- * Purpose: Find the first attribute value-pair (which matches the given
- * attribute) from the specified value-pair list.
- *
- * Returns: found value_pair
- *
- */
-
-VALUE_PAIR *rc_avpair_get (VALUE_PAIR *vp, UINT4 attr)
-{
- for (; vp != (VALUE_PAIR *) NULL && vp->attribute != attr; vp = vp->next)
- {
- continue;
- }
- return (vp);
-}
-
-/*
- * Function: rc_avpair_copy
- *
- * Purpose: Return a copy of the existing list "p" ala strdup().
- *
- */
-VALUE_PAIR *rc_avpair_copy(VALUE_PAIR *p)
-{
- VALUE_PAIR *vp, *fp = NULL, *lp = NULL;
-
- while (p) {
- vp = malloc(sizeof(VALUE_PAIR));
- if (!vp) {
- rc_log(LOG_CRIT, "rc_avpair_copy: out of memory");
- return NULL; /* leaks a little but so what */
- }
- *vp = *p;
- if (!fp)
- fp = vp;
- if (lp)
- lp->next = vp;
- lp = vp;
- p = p->next;
- }
-
- return fp;
-}
-
-/*
- * Function: rc_avpair_insert
- *
- * Purpose: Given the address of an existing list "a" and a pointer
- * to an entry "p" in that list, add the list "b" to
- * the "a" list after the "p" entry. If "p" is NULL, add
- * the list "b" to the end of "a".
- *
- */
-
-void rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b)
-{
- VALUE_PAIR *this_node = NULL;
- VALUE_PAIR *vp;
-
- if (*a == (VALUE_PAIR *) NULL)
- {
- *a = b;
- return;
- }
-
- if (!b)
- return;
-
- vp = *a;
-
- if ( p == (VALUE_PAIR *) NULL) /* run to end of "a" list */
- {
- while (vp != (VALUE_PAIR *) NULL)
- {
- this_node = vp;
- vp = vp->next;
- }
- }
- else /* look for the "p" entry in the "a" list (or run to end) */
- {
- this_node = *a;
- while (this_node != (VALUE_PAIR *) NULL)
- {
- if (this_node == p)
- {
- break;
- }
- this_node = this_node->next;
- }
- }
-
- /* add "b" at this_node */
- vp = this_node->next;
- this_node->next = b;
-
- /* run to end of "b" and connect the rest of "a" */
- while (b->next)
- b = b->next;
- b->next = vp;
-
- return;
-}
-
-/*
- * Function: rc_avpair_free
- *
- * Purpose: frees all value_pairs in the list
- *
- */
-
-void rc_avpair_free (VALUE_PAIR *pair)
-{
- VALUE_PAIR *next;
-
- while (pair != (VALUE_PAIR *) NULL)
- {
- next = pair->next;
- free (pair);
- pair = next;
- }
-}
-
-/*
- * Function: rc_fieldcpy
- *
- * Purpose: Copy a data field from the buffer. Advance the buffer
- * past the data field.
- *
- */
-
-static void rc_fieldcpy (char *string, char **uptr)
-{
- char *ptr;
-
- ptr = *uptr;
- if (*ptr == '"')
- {
- ptr++;
- while (*ptr != '"' && *ptr != '\0' && *ptr != '\n')
- {
- *string++ = *ptr++;
- }
- *string = '\0';
- if (*ptr == '"')
- {
- ptr++;
- }
- *uptr = ptr;
- return;
- }
-
- while (*ptr != ' ' && *ptr != '\t' && *ptr != '\0' && *ptr != '\n' &&
- *ptr != '=' && *ptr != ',')
- {
- *string++ = *ptr++;
- }
- *string = '\0';
- *uptr = ptr;
- return;
-}
-
-
-/*
- * Function: rc_avpair_parse
- *
- * Purpose: parses the buffer to extract the attribute-value pairs.
- *
- * Returns: 0 = successful parse of attribute-value pair,
- * -1 = syntax (or other) error detected.
- *
- */
-
-#define PARSE_MODE_NAME 0
-#define PARSE_MODE_EQUAL 1
-#define PARSE_MODE_VALUE 2
-#define PARSE_MODE_INVALID 3
-
-int rc_avpair_parse (char *buffer, VALUE_PAIR **first_pair)
-{
- int mode;
- char attrstr[AUTH_ID_LEN];
- char valstr[AUTH_ID_LEN];
- DICT_ATTR *attr = NULL;
- DICT_VALUE *dval;
- VALUE_PAIR *pair;
- VALUE_PAIR *link;
- struct tm *tm;
- time_t timeval;
-
- mode = PARSE_MODE_NAME;
- while (*buffer != '\n' && *buffer != '\0')
- {
- if (*buffer == ' ' || *buffer == '\t')
- {
- buffer++;
- continue;
- }
-
- switch (mode)
- {
- case PARSE_MODE_NAME: /* Attribute Name */
- rc_fieldcpy (attrstr, &buffer);
- if ((attr =
- rc_dict_findattr (attrstr)) == (DICT_ATTR *) NULL)
- {
- rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute");
- if (*first_pair) {
- rc_avpair_free(*first_pair);
- *first_pair = (VALUE_PAIR *) NULL;
- }
- return (-1);
- }
- mode = PARSE_MODE_EQUAL;
- break;
-
- case PARSE_MODE_EQUAL: /* Equal sign */
- if (*buffer == '=')
- {
- mode = PARSE_MODE_VALUE;
- buffer++;
- }
- else
- {
- rc_log(LOG_ERR, "rc_avpair_parse: missing or misplaced equal sign");
- if (*first_pair) {
- rc_avpair_free(*first_pair);
- *first_pair = (VALUE_PAIR *) NULL;
- }
- return (-1);
- }
- break;
-
- case PARSE_MODE_VALUE: /* Value */
- rc_fieldcpy (valstr, &buffer);
-
- if ((pair =
- (VALUE_PAIR *) malloc (sizeof (VALUE_PAIR)))
- == (VALUE_PAIR *) NULL)
- {
- rc_log(LOG_CRIT, "rc_avpair_parse: out of memory");
- if (*first_pair) {
- rc_avpair_free(*first_pair);
- *first_pair = (VALUE_PAIR *) NULL;
- }
- return (-1);
- }
- strcpy (pair->name, attr->name);
- pair->attribute = attr->value;
- pair->type = attr->type;
- pair->vendorcode = attr->vendorcode;
-
- switch (pair->type)
- {
-
- case PW_TYPE_STRING:
- strcpy (pair->strvalue, valstr);
- pair->lvalue = strlen(valstr);
- break;
-
- case PW_TYPE_INTEGER:
- if (isdigit (*valstr))
- {
- pair->lvalue = atoi (valstr);
- }
- else
- {
- if ((dval = rc_dict_findval (valstr))
- == (DICT_VALUE *) NULL)
- {
- rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute value: %s", valstr);
- if (*first_pair) {
- rc_avpair_free(*first_pair);
- *first_pair = (VALUE_PAIR *) NULL;
- }
- free (pair);
- return (-1);
- }
- else
- {
- pair->lvalue = dval->value;
- }
- }
- break;
-
- case PW_TYPE_IPADDR:
- pair->lvalue = rc_get_ipaddr(valstr);
- break;
-
- case PW_TYPE_DATE:
- timeval = time (0);
- tm = localtime (&timeval);
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- rc_str2tm (valstr, tm);
-#ifdef TIMELOCAL
- pair->lvalue = (UINT4) timelocal (tm);
-#else /* TIMELOCAL */
- pair->lvalue = (UINT4) mktime (tm);
-#endif /* TIMELOCAL */
- break;
-
- default:
- rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute type %d", pair->type);
- if (*first_pair) {
- rc_avpair_free(*first_pair);
- *first_pair = (VALUE_PAIR *) NULL;
- }
- free (pair);
- return (-1);
- }
- pair->next = (VALUE_PAIR *) NULL;
-
- if (*first_pair == (VALUE_PAIR *) NULL)
- {
- *first_pair = pair;
- }
- else
- {
- link = *first_pair;
- while (link->next != (VALUE_PAIR *) NULL)
- {
- link = link->next;
- }
- link->next = pair;
- }
-
- mode = PARSE_MODE_NAME;
- break;
-
- default:
- mode = PARSE_MODE_NAME;
- break;
- }
- }
- return (0);
-}
-
-/*
- * Function: rc_avpair_tostr
- *
- * Purpose: Translate an av_pair into two strings
- *
- * Returns: 0 on success, -1 on failure
- *
- */
-
-int rc_avpair_tostr (VALUE_PAIR *pair, char *name, int ln, char *value, int lv)
-{
- DICT_VALUE *dval;
- char buffer[32];
- struct in_addr inad;
- unsigned char *ptr;
-
- *name = *value = '\0';
-
- if (!pair || pair->name[0] == '\0') {
- rc_log(LOG_ERR, "rc_avpair_tostr: pair is NULL or empty");
- return (-1);
- }
-
- strncpy(name, pair->name, (size_t) ln);
-
- switch (pair->type)
- {
- case PW_TYPE_STRING:
- lv--;
- ptr = (unsigned char *) pair->strvalue;
- while (*ptr != '\0')
- {
- if (!(isprint (*ptr)))
- {
- sprintf (buffer, "\\%03o", *ptr);
- strncat(value, buffer, (size_t) lv);
- lv -= 4;
- if (lv < 0) break;
- }
- else
- {
- strncat(value, ptr, 1);
- lv--;
- if (lv < 0) break;
- }
- ptr++;
- }
- break;
-
- case PW_TYPE_INTEGER:
- dval = rc_dict_getval (pair->lvalue, pair->name);
- if (dval != (DICT_VALUE *) NULL)
- {
- strncpy(value, dval->name, (size_t) lv-1);
- }
- else
- {
- sprintf (buffer, "%ld", pair->lvalue);
- strncpy(value, buffer, (size_t) lv);
- }
- break;
-
- case PW_TYPE_IPADDR:
- inad.s_addr = htonl(pair->lvalue);
- strncpy (value, inet_ntoa (inad), (size_t) lv-1);
- break;
-
- case PW_TYPE_DATE:
- strftime (buffer, sizeof (buffer), "%m/%d/%y %H:%M:%S",
- gmtime ((time_t *) & pair->lvalue));
- strncpy(value, buffer, lv-1);
- break;
-
- default:
- rc_log(LOG_ERR, "rc_avpair_tostr: unknown attribute type %d", pair->type);
- return (-1);
- break;
- }
-
- return 0;
-}
-
-/*
- * Function: rc_avpair_readin
- *
- * Purpose: get a sequence of attribute value pairs from the file input
- * and make them into a list of value_pairs
- *
- */
-
-VALUE_PAIR *rc_avpair_readin(FILE *input)
-{
- VALUE_PAIR *vp = NULL;
- char buffer[1024], *q;
-
- while (fgets(buffer, sizeof(buffer), input) != NULL)
- {
- q = buffer;
-
- while(*q && isspace(*q)) q++;
-
- if ((*q == '\n') || (*q == '#') || (*q == '\0'))
- continue;
-
- if (rc_avpair_parse(q, &vp) < 0) {
- rc_log(LOG_ERR, "rc_avpair_readin: malformed attribute: %s", buffer);
- rc_avpair_free(vp);
- return NULL;
- }
- }
-
- return vp;
-}
+++ /dev/null
-/*
- * $Id: buildreq.c,v 1.5 2003/04/25 08:10:46 fcusack Exp $
- *
- * Copyright (C) 1995,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-unsigned char rc_get_seqnbr(void);
-
-/*
- * Function: rc_get_nas_id
- *
- * Purpose: fills in NAS-Identifier or NAS-IP-Address in request
- *
- */
-
-int rc_get_nas_id(VALUE_PAIR **sendpairs)
-{
- UINT4 client_id;
- char *nasid;
-
- nasid = rc_conf_str("nas_identifier");
- if (strlen(nasid)) {
- /*
- * Fill in NAS-Identifier
- */
- if (rc_avpair_add(sendpairs, PW_NAS_IDENTIFIER, nasid, 0,
- VENDOR_NONE) == NULL)
- return (ERROR_RC);
-
- return (OK_RC);
-
- } else {
- /*
- * Fill in NAS-IP-Address
- */
- if ((client_id = rc_own_ipaddress()) == 0)
- return (ERROR_RC);
-
- if (rc_avpair_add(sendpairs, PW_NAS_IP_ADDRESS, &client_id,
- 0, VENDOR_NONE) == NULL)
- return (ERROR_RC);
- }
-
- return (OK_RC);
-}
-
-/*
- * Function: rc_buildreq
- *
- * Purpose: builds a skeleton RADIUS request using information from the
- * config file.
- *
- */
-
-void rc_buildreq(SEND_DATA *data, int code, char *server, unsigned short port,
- int timeout, int retries)
-{
- data->server = server;
- data->svc_port = port;
- data->seq_nbr = rc_get_seqnbr();
- data->timeout = timeout;
- data->retries = retries;
- data->code = code;
-}
-
-/*
- * Function: rc_guess_seqnbr
- *
- * Purpose: return a random sequence number
- *
- */
-
-static unsigned char rc_guess_seqnbr(void)
-{
- srandom((unsigned int)(time(NULL)+getpid()));
- return (unsigned char)(random() & UCHAR_MAX);
-}
-
-/*
- * Function: rc_get_seqnbr
- *
- * Purpose: generate a sequence number
- *
- */
-
-unsigned char rc_get_seqnbr(void)
-{
- FILE *sf;
- int tries = 1;
- int seq_nbr, pos;
- char *seqfile = rc_conf_str("seqfile");
-
- if ((sf = fopen(seqfile, "a+")) == NULL)
- {
- rc_log(LOG_ERR,"rc_get_seqnbr: couldn't open sequence file %s: %s", seqfile, strerror(errno));
- /* well, so guess a sequence number */
- return rc_guess_seqnbr();
- }
-
- while (do_lock_exclusive(fileno(sf))!= 0)
- {
- if (errno != EWOULDBLOCK) {
- rc_log(LOG_ERR, "rc_get_seqnbr: flock failure: %s: %s", seqfile, strerror(errno));
- fclose(sf);
- return rc_guess_seqnbr();
- }
- tries++;
- if (tries <= 10)
- rc_mdelay(500);
- else
- break;
- }
-
- if (tries > 10) {
- rc_log(LOG_ERR,"rc_get_seqnbr: couldn't get lock after %d tries: %s", tries-1, seqfile);
- fclose(sf);
- return rc_guess_seqnbr();
- }
-
- pos = ftell(sf);
- rewind(sf);
- if (fscanf(sf, "%d", &seq_nbr) != 1) {
- if (pos != ftell(sf)) {
- /* file was not empty */
- rc_log(LOG_ERR,"rc_get_seqnbr: fscanf failure: %s", seqfile);
- }
- seq_nbr = rc_guess_seqnbr();
- }
-
- rewind(sf);
- ftruncate(fileno(sf),0);
- fprintf(sf,"%d\n", (seq_nbr+1) & UCHAR_MAX);
-
- fflush(sf); /* fflush because a process may read it between the do_unlock and fclose */
-
- if (do_unlock(fileno(sf)) != 0)
- rc_log(LOG_ERR, "rc_get_seqnbr: couldn't release lock on %s: %s", seqfile, strerror(errno));
-
- fclose(sf);
-
- return (unsigned char)seq_nbr;
-}
-
-/*
- * Function: rc_auth
- *
- * Purpose: Builds an authentication request for port id client_port
- * with the value_pairs send and submits it to a server
- *
- * Returns: received value_pairs in received, messages from the server in msg
- * and 0 on success, negative on failure as return value
- *
- */
-
-int rc_auth(UINT4 client_port, VALUE_PAIR *send, VALUE_PAIR **received,
- char *msg, REQUEST_INFO *info)
-{
- SERVER *authserver = rc_conf_srv("authserver");
-
- if (!authserver) {
- return (ERROR_RC);
- }
- return rc_auth_using_server(authserver, client_port, send, received,
- msg, info);
-}
-
-/*
- * Function: rc_auth_using_server
- *
- * Purpose: Builds an authentication request for port id client_port
- * with the value_pairs send and submits it to a server. You
- * explicitly supply a server list.
- *
- * Returns: received value_pairs in received, messages from the server in msg
- * and 0 on success, negative on failure as return value
- *
- */
-
-int rc_auth_using_server(SERVER *authserver,
- UINT4 client_port,
- VALUE_PAIR *send,
- VALUE_PAIR **received,
- char *msg, REQUEST_INFO *info)
-{
- SEND_DATA data;
- int result;
- int i;
- int timeout = rc_conf_int("radius_timeout");
- int retries = rc_conf_int("radius_retries");
-
- data.send_pairs = send;
- data.receive_pairs = NULL;
-
- /*
- * Fill in NAS-IP-Address or NAS-Identifier
- */
-
- if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
- return (ERROR_RC);
-
- /*
- * Fill in NAS-Port
- */
-
- if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL)
- return (ERROR_RC);
-
- result = ERROR_RC;
- for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC)
- ; i++)
- {
- if (data.receive_pairs != NULL) {
- rc_avpair_free(data.receive_pairs);
- data.receive_pairs = NULL;
- }
- rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i],
- authserver->port[i], timeout, retries);
-
- result = rc_send_server (&data, msg, info);
- }
-
- *received = data.receive_pairs;
-
- return result;
-}
-
-/*
- * Function: rc_auth_proxy
- *
- * Purpose: Builds an authentication request
- * with the value_pairs send and submits it to a server.
- * Works for a proxy; does not add IP address, and does
- * does not rely on config file.
- *
- * Returns: received value_pairs in received, messages from the server in msg
- * and 0 on success, negative on failure as return value
- *
- */
-
-int rc_auth_proxy(VALUE_PAIR *send, VALUE_PAIR **received, char *msg)
-{
- SEND_DATA data;
- int result;
- int i;
- SERVER *authserver = rc_conf_srv("authserver");
- int timeout = rc_conf_int("radius_timeout");
- int retries = rc_conf_int("radius_retries");
-
- data.send_pairs = send;
- data.receive_pairs = NULL;
-
- result = ERROR_RC;
- for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC)
- ; i++)
- {
- if (data.receive_pairs != NULL) {
- rc_avpair_free(data.receive_pairs);
- data.receive_pairs = NULL;
- }
- rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i],
- authserver->port[i], timeout, retries);
-
- result = rc_send_server (&data, msg, NULL);
- }
-
- *received = data.receive_pairs;
-
- return result;
-}
-
-
-/*
- * Function: rc_acct_using_server
- *
- * Purpose: Builds an accounting request for port id client_port
- * with the value_pairs send. You explicitly supply server list.
- *
- * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get
- * filled in by this function, the rest has to be supplied.
- */
-
-int rc_acct_using_server(SERVER *acctserver,
- UINT4 client_port,
- VALUE_PAIR *send)
-{
- SEND_DATA data;
- VALUE_PAIR *adt_vp;
- int result;
- time_t start_time, dtime;
- char msg[4096];
- int i;
- int timeout = rc_conf_int("radius_timeout");
- int retries = rc_conf_int("radius_retries");
-
- data.send_pairs = send;
- data.receive_pairs = NULL;
-
- /*
- * Fill in NAS-IP-Address or NAS-Identifier
- */
-
- if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
- return (ERROR_RC);
-
- /*
- * Fill in NAS-Port
- */
-
- if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL)
- return (ERROR_RC);
-
- /*
- * Fill in Acct-Delay-Time
- */
-
- dtime = 0;
- if ((adt_vp = rc_avpair_add(&(data.send_pairs), PW_ACCT_DELAY_TIME, &dtime, 0, VENDOR_NONE)) == NULL)
- return (ERROR_RC);
-
- start_time = time(NULL);
- result = ERROR_RC;
- for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC)
- ; i++)
- {
- if (data.receive_pairs != NULL) {
- rc_avpair_free(data.receive_pairs);
- data.receive_pairs = NULL;
- }
- rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i],
- acctserver->port[i], timeout, retries);
-
- dtime = time(NULL) - start_time;
- rc_avpair_assign(adt_vp, &dtime, 0);
-
- result = rc_send_server (&data, msg, NULL);
- }
-
- rc_avpair_free(data.receive_pairs);
-
- return result;
-}
-
-/*
- * Function: rc_acct
- *
- * Purpose: Builds an accounting request for port id client_port
- * with the value_pairs send
- *
- * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get
- * filled in by this function, the rest has to be supplied.
- */
-
-int rc_acct(UINT4 client_port, VALUE_PAIR *send)
-{
- SERVER *acctserver = rc_conf_srv("acctserver");
- if (!acctserver) return (ERROR_RC);
-
- return rc_acct_using_server(acctserver, client_port, send);
-}
-
-/*
- * Function: rc_acct_proxy
- *
- * Purpose: Builds an accounting request with the value_pairs send
- *
- */
-
-int rc_acct_proxy(VALUE_PAIR *send)
-{
- SEND_DATA data;
- int result;
- char msg[4096];
- int i;
- SERVER *acctserver = rc_conf_srv("authserver");
- int timeout = rc_conf_int("radius_timeout");
- int retries = rc_conf_int("radius_retries");
-
- data.send_pairs = send;
- data.receive_pairs = NULL;
-
- result = ERROR_RC;
- for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC)
- ; i++)
- {
- if (data.receive_pairs != NULL) {
- rc_avpair_free(data.receive_pairs);
- data.receive_pairs = NULL;
- }
- rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i],
- acctserver->port[i], timeout, retries);
-
- result = rc_send_server (&data, msg, NULL);
- }
-
- rc_avpair_free(data.receive_pairs);
-
- return result;
-}
-
-/*
- * Function: rc_check
- *
- * Purpose: ask the server hostname on the specified port for a
- * status message
- *
- */
-
-int rc_check(char *host, unsigned short port, char *msg)
-{
- SEND_DATA data;
- int result;
- UINT4 service_type;
- int timeout = rc_conf_int("radius_timeout");
- int retries = rc_conf_int("radius_retries");
-
- data.send_pairs = data.receive_pairs = NULL;
-
- /*
- * Fill in NAS-IP-Address or NAS-Identifier,
- * although it isn't neccessary
- */
-
- if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC)
- return (ERROR_RC);
-
- /*
- * Fill in Service-Type
- */
-
- service_type = PW_ADMINISTRATIVE;
- rc_avpair_add(&(data.send_pairs), PW_SERVICE_TYPE, &service_type, 0, VENDOR_NONE);
-
- rc_buildreq(&data, PW_STATUS_SERVER, host, port, timeout, retries);
- result = rc_send_server (&data, msg, NULL);
-
- rc_avpair_free(data.receive_pairs);
-
- return result;
-}
+++ /dev/null
-/*
- * $Id: clientid.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-struct map2id_s {
- char *name;
- UINT4 id;
-
- struct map2id_s *next;
-};
-
-static struct map2id_s *map2id_list = NULL;
-
-/*
- * Function: rc_read_mapfile
- *
- * Purpose: Read in the ttyname to port id map file
- *
- * Arguments: the file name of the map file
- *
- * Returns: zero on success, negative integer on failure
- */
-
-int rc_read_mapfile(char *filename)
-{
- char buffer[1024];
- FILE *mapfd;
- char *c, *name, *id, *q;
- struct map2id_s *p;
- int lnr = 0;
-
- if ((mapfd = fopen(filename,"r")) == NULL)
- {
- rc_log(LOG_ERR,"rc_read_mapfile: can't read %s: %s", filename, strerror(errno));
- return (-1);
- }
-
-#define SKIP(p) while(*p && isspace(*p)) p++;
-
- while (fgets(buffer, sizeof(buffer), mapfd) != NULL)
- {
- lnr++;
-
- q = buffer;
-
- SKIP(q);
-
- if ((*q == '\n') || (*q == '#') || (*q == '\0'))
- continue;
-
- if (( c = strchr(q, ' ')) || (c = strchr(q,'\t'))) {
-
- *c = '\0'; c++;
- SKIP(c);
-
- name = q;
- id = c;
-
- if ((p = (struct map2id_s *)malloc(sizeof(*p))) == NULL) {
- rc_log(LOG_CRIT,"rc_read_mapfile: out of memory");
- return (-1);
- }
-
- p->name = strdup(name);
- p->id = atoi(id);
- p->next = map2id_list;
- map2id_list = p;
-
- } else {
-
- rc_log(LOG_ERR, "rc_read_mapfile: malformed line in %s, line %d", filename, lnr);
- return (-1);
-
- }
- }
-
-#undef SKIP
-
- fclose(mapfd);
-
- return 0;
-}
-
-/*
- * Function: rc_map2id
- *
- * Purpose: Map ttyname to port id
- *
- * Arguments: full pathname of the tty
- *
- * Returns: port id, zero if no entry found
- */
-
-UINT4 rc_map2id(char *name)
-{
- struct map2id_s *p;
- char ttyname[PATH_MAX];
-
- *ttyname = '\0';
- if (*name != '/')
- strcpy(ttyname, "/dev/");
-
- strncat(ttyname, name, sizeof(ttyname));
-
- for(p = map2id_list; p; p = p->next)
- if (!strcmp(ttyname, p->name)) return p->id;
-
- rc_log(LOG_WARNING,"rc_map2id: can't find tty %s in map database", ttyname);
-
- return 0;
-}
+++ /dev/null
-/*
- * $Id: config.c,v 1.3 2002/10/01 09:51:01 fcusack Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <options.h>
-
-static int test_config(char *);
-
-/*
- * Function: find_option
- *
- * Purpose: find an option in the option list
- *
- * Returns: pointer to option on success, NULL otherwise
- */
-
-static OPTION *find_option(char *optname, unsigned int type)
-{
- int i;
-
- /* there're so few options that a binary search seems not necessary */
- for (i = 0; i < num_options; i++) {
- if (!strcmp(config_options[i].name, optname) &&
- (config_options[i].type & type))
- return &config_options[i];
- }
-
- return NULL;
-}
-
-/*
- * Function: set_option_...
- *
- * Purpose: set a specific option doing type conversions
- *
- * Returns: 0 on success, -1 on failure
- */
-
-static int set_option_str(char *filename, int line, OPTION *option, char *p)
-{
- if (p)
- option->val = (void *) strdup(p);
- else
- option->val = NULL;
-
- return 0;
-}
-
-static int set_option_int(char *filename, int line, OPTION *option, char *p)
-{
- int *iptr;
-
- if (p == NULL) {
- rc_log(LOG_ERR, "%s: line %d: bogus option value", filename, line);
- return (-1);
- }
-
- if ((iptr = (int *) malloc(sizeof(iptr))) == NULL) {
- rc_log(LOG_CRIT, "read_config: out of memory");
- return (-1);
- }
-
- *iptr = atoi(p);
- option->val = (void *) iptr;
-
- return 0;
-}
-
-static int set_option_srv(char *filename, int line, OPTION *option, char *p)
-{
- SERVER *serv;
- char *q;
- struct servent *svp;
- int i;
-
- if (p == NULL) {
- rc_log(LOG_ERR, "%s: line %d: bogus option value", filename, line);
- return (-1);
- }
-
- serv = (SERVER *) option->val;
-
- for (i = 0; i < serv->max; i++) {
- free(serv->name[i]);
- }
- serv->max = 0;
-
- while ((p = strtok(p, ", \t")) != NULL) {
-
- if ((q = strchr(p,':')) != NULL) {
- *q = '\0';
- q++;
- serv->port[serv->max] = atoi(q);
- } else {
- if (!strcmp(option->name,"authserver"))
- if ((svp = getservbyname ("radius", "udp")) == NULL)
- serv->port[serv->max] = PW_AUTH_UDP_PORT;
- else
- serv->port[serv->max] = ntohs ((unsigned int) svp->s_port);
- else if (!strcmp(option->name, "acctserver"))
- if ((svp = getservbyname ("radacct", "udp")) == NULL)
- serv->port[serv->max] = PW_ACCT_UDP_PORT;
- else
- serv->port[serv->max] = ntohs ((unsigned int) svp->s_port);
- else {
- rc_log(LOG_ERR, "%s: line %d: no default port for %s", filename, line, option->name);
- return (-1);
- }
- }
-
- serv->name[serv->max++] = strdup(p);
-
- p = NULL;
- }
-
- return 0;
-}
-
-static int set_option_auo(char *filename, int line, OPTION *option, char *p)
-{
- int *iptr;
-
- if (p == NULL) {
- rc_log(LOG_WARNING, "%s: line %d: bogus option value", filename, line);
- return (-1);
- }
-
- if ((iptr = (int *) malloc(sizeof(iptr))) == NULL) {
- rc_log(LOG_CRIT, "read_config: out of memory");
- return (-1);
- }
-
- *iptr = 0;
- p = strtok(p, ", \t");
-
- if (!strncmp(p, "local", 5))
- *iptr = AUTH_LOCAL_FST;
- else if (!strncmp(p, "radius", 6))
- *iptr = AUTH_RADIUS_FST;
- else {
- rc_log(LOG_ERR,"%s: auth_order: unknown keyword: %s", filename, p);
- return (-1);
- }
-
- p = strtok(NULL, ", \t");
-
- if (p && (*p != '\0')) {
- if ((*iptr & AUTH_RADIUS_FST) && !strcmp(p, "local"))
- *iptr = (*iptr) | AUTH_LOCAL_SND;
- else if ((*iptr & AUTH_LOCAL_FST) && !strcmp(p, "radius"))
- *iptr = (*iptr) | AUTH_RADIUS_SND;
- else {
- rc_log(LOG_ERR,"%s: auth_order: unknown or unexpected keyword: %s", filename, p);
- return (-1);
- }
- }
-
- option->val = (void *) iptr;
-
- return 0;
-}
-
-
-/*
- * Function: rc_read_config
- *
- * Purpose: read the global config file
- *
- * Returns: 0 on success, -1 when failure
- */
-
-int rc_read_config(char *filename)
-{
- FILE *configfd;
- char buffer[512], *p;
- OPTION *option;
- int line, pos;
-
- if ((configfd = fopen(filename,"r")) == NULL)
- {
- rc_log(LOG_ERR,"rc_read_config: can't open %s: %s", filename, strerror(errno));
- return (-1);
- }
-
- line = 0;
- while ((fgets(buffer, sizeof(buffer), configfd) != NULL))
- {
- line++;
- p = buffer;
-
- if ((*p == '\n') || (*p == '#') || (*p == '\0'))
- continue;
-
- p[strlen(p)-1] = '\0';
-
-
- if ((pos = strcspn(p, "\t ")) == 0) {
- rc_log(LOG_ERR, "%s: line %d: bogus format: %s", filename, line, p);
- return (-1);
- }
-
- p[pos] = '\0';
-
- if ((option = find_option(p, OT_ANY)) == NULL) {
- rc_log(LOG_ERR, "%s: line %d: unrecognized keyword: %s", filename, line, p);
- return (-1);
- }
-
- if (option->status != ST_UNDEF) {
- rc_log(LOG_ERR, "%s: line %d: duplicate option line: %s", filename, line, p);
- return (-1);
- }
-
- p += pos+1;
- while (isspace(*p))
- p++;
-
- switch (option->type) {
- case OT_STR:
- if (set_option_str(filename, line, option, p) < 0)
- return (-1);
- break;
- case OT_INT:
- if (set_option_int(filename, line, option, p) < 0)
- return (-1);
- break;
- case OT_SRV:
- if (set_option_srv(filename, line, option, p) < 0)
- return (-1);
- break;
- case OT_AUO:
- if (set_option_auo(filename, line, option, p) < 0)
- return (-1);
- break;
- default:
- rc_log(LOG_CRIT, "rc_read_config: impossible case branch!");
- abort();
- }
- }
- fclose(configfd);
-
- return test_config(filename);
-}
-
-/*
- * Function: rc_conf_str, rc_conf_int, rc_conf_src
- *
- * Purpose: get the value of a config option
- *
- * Returns: config option value
- */
-
-char *rc_conf_str(char *optname)
-{
- OPTION *option;
-
- option = find_option(optname, OT_STR);
-
- if (option != NULL) {
- return (char *)option->val;
- } else {
- rc_log(LOG_CRIT, "rc_conf_str: unkown config option requested: %s", optname);
- abort();
- }
-}
-
-int rc_conf_int(char *optname)
-{
- OPTION *option;
-
- option = find_option(optname, OT_INT|OT_AUO);
-
- if (option != NULL) {
- return *((int *)option->val);
- } else {
- rc_log(LOG_CRIT, "rc_conf_int: unkown config option requested: %s", optname);
- abort();
- }
-}
-
-SERVER *rc_conf_srv(char *optname)
-{
- OPTION *option;
-
- option = find_option(optname, OT_SRV);
-
- if (option != NULL) {
- return (SERVER *)option->val;
- } else {
- rc_log(LOG_CRIT, "rc_conf_srv: unkown config option requested: %s", optname);
- abort();
- }
-}
-
-/*
- * Function: test_config
- *
- * Purpose: test the configuration the user supplied
- *
- * Returns: 0 on success, -1 when failure
- */
-
-static int test_config(char *filename)
-{
-#if 0
- struct stat st;
- char *file;
-#endif
-
- if (!(rc_conf_srv("authserver")->max))
- {
- rc_log(LOG_ERR,"%s: no authserver specified", filename);
- return (-1);
- }
- if (!(rc_conf_srv("acctserver")->max))
- {
- rc_log(LOG_ERR,"%s: no acctserver specified", filename);
- return (-1);
- }
- if (!rc_conf_str("servers"))
- {
- rc_log(LOG_ERR,"%s: no servers file specified", filename);
- return (-1);
- }
- if (!rc_conf_str("dictionary"))
- {
- rc_log(LOG_ERR,"%s: no dictionary specified", filename);
- return (-1);
- }
-
- if (rc_conf_int("radius_timeout") <= 0)
- {
- rc_log(LOG_ERR,"%s: radius_timeout <= 0 is illegal", filename);
- return (-1);
- }
- if (rc_conf_int("radius_retries") <= 0)
- {
- rc_log(LOG_ERR,"%s: radius_retries <= 0 is illegal", filename);
- return (-1);
- }
-
-#if 0
- file = rc_conf_str("login_local");
- if (stat(file, &st) == 0)
- {
- if (!S_ISREG(st.st_mode)) {
- rc_log(LOG_ERR,"%s: not a regular file: %s", filename, file);
- return (-1);
- }
- } else {
- rc_log(LOG_ERR,"%s: file not found: %s", filename, file);
- return (-1);
- }
- file = rc_conf_str("login_radius");
- if (stat(file, &st) == 0)
- {
- if (!S_ISREG(st.st_mode)) {
- rc_log(LOG_ERR,"%s: not a regular file: %s", filename, file);
- return (-1);
- }
- } else {
- rc_log(LOG_ERR,"%s: file not found: %s", filename, file);
- return (-1);
- }
-#endif
-
- if (rc_conf_int("login_tries") <= 0)
- {
- rc_log(LOG_ERR,"%s: login_tries <= 0 is illegal", filename);
- return (-1);
- }
- if (rc_conf_str("seqfile") == NULL)
- {
- rc_log(LOG_ERR,"%s: seqfile not specified", filename);
- return (-1);
- }
- if (rc_conf_int("login_timeout") <= 0)
- {
- rc_log(LOG_ERR,"%s: login_timeout <= 0 is illegal", filename);
- return (-1);
- }
- if (rc_conf_str("mapfile") == NULL)
- {
- rc_log(LOG_ERR,"%s: mapfile not specified", filename);
- return (-1);
- }
- if (rc_conf_str("nologin") == NULL)
- {
- rc_log(LOG_ERR,"%s: nologin not specified", filename);
- return (-1);
- }
-
- return 0;
-}
-
-/*
- * Function: rc_find_match
- *
- * Purpose: see if ip_addr is one of the ip addresses of hostname
- *
- * Returns: 0 on success, -1 when failure
- *
- */
-
-static int find_match (UINT4 *ip_addr, char *hostname)
-{
- UINT4 addr;
- char **paddr;
- struct hostent *hp;
-
- if (rc_good_ipaddr (hostname) == 0)
- {
- if (*ip_addr == ntohl(inet_addr (hostname)))
- {
- return (0);
- }
- }
- else
- {
- if ((hp = gethostbyname (hostname)) == (struct hostent *) NULL)
- {
- return (-1);
- }
- for (paddr = hp->h_addr_list; *paddr; paddr++)
- {
- addr = ** (UINT4 **) paddr;
- if (ntohl(addr) == *ip_addr)
- {
- return (0);
- }
- }
- }
- return (-1);
-}
-
-/*
- * Function: rc_find_server
- *
- * Purpose: search a server in the servers file
- *
- * Returns: 0 on success, -1 on failure
- *
- */
-
-int rc_find_server (char *server_name, UINT4 *ip_addr, char *secret)
-{
- UINT4 myipaddr = 0;
- int len;
- int result;
- FILE *clientfd;
- char *h;
- char *s;
- char *host2;
- char buffer[128];
- char hostnm[AUTH_ID_LEN + 1];
-
- /* Get the IP address of the authentication server */
- if ((*ip_addr = rc_get_ipaddr (server_name)) == (UINT4) 0)
- return (-1);
-
- if ((clientfd = fopen (rc_conf_str("servers"), "r")) == (FILE *) NULL)
- {
- rc_log(LOG_ERR, "rc_find_server: couldn't open file: %s: %s", strerror(errno), rc_conf_str("servers"));
- return (-1);
- }
-
- myipaddr = rc_own_ipaddress();
-
- result = 0;
- while (fgets (buffer, sizeof (buffer), clientfd) != (char *) NULL)
- {
- if (*buffer == '#')
- continue;
-
- if ((h = strtok (buffer, " \t\n")) == NULL) /* first hostname */
- continue;
-
- memset (hostnm, '\0', AUTH_ID_LEN);
- len = strlen (h);
- if (len > AUTH_ID_LEN)
- {
- len = AUTH_ID_LEN;
- }
- strncpy (hostnm, h, (size_t) len);
- hostnm[AUTH_ID_LEN] = '\0';
-
- if ((s = strtok (NULL, " \t\n")) == NULL) /* and secret field */
- continue;
-
- memset (secret, '\0', MAX_SECRET_LENGTH);
- len = strlen (s);
- if (len > MAX_SECRET_LENGTH)
- {
- len = MAX_SECRET_LENGTH;
- }
- strncpy (secret, s, (size_t) len);
- secret[MAX_SECRET_LENGTH] = '\0';
-
- if (!strchr (hostnm, '/')) /* If single name form */
- {
- if (find_match (ip_addr, hostnm) == 0)
- {
- result++;
- break;
- }
- }
- else /* <name1>/<name2> "paired" form */
- {
- strtok (hostnm, "/");
- if (find_match (&myipaddr, hostnm) == 0)
- { /* If we're the 1st name, target is 2nd */
- host2 = strtok (NULL, " ");
- if (find_match (ip_addr, host2) == 0)
- {
- result++;
- break;
- }
- }
- else /* If we were 2nd name, target is 1st name */
- {
- if (find_match (ip_addr, hostnm) == 0)
- {
- result++;
- break;
- }
- }
- }
- }
- fclose (clientfd);
- if (result == 0)
- {
- memset (buffer, '\0', sizeof (buffer));
- memset (secret, '\0', sizeof (secret));
- rc_log(LOG_ERR, "rc_find_server: couldn't find RADIUS server %s in %s",
- server_name, rc_conf_str("servers"));
- return (-1);
- }
- return 0;
-}
+++ /dev/null
-/*
- * $Id: dict.c,v 1.2 2002/03/05 15:14:06 dfs Exp $
- *
- * Copyright (C) 2002 Roaring Penguin Software Inc.
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-static DICT_ATTR *dictionary_attributes = NULL;
-static DICT_VALUE *dictionary_values = NULL;
-static VENDOR_DICT *vendor_dictionaries = NULL;
-
-/*
- * Function: rc_read_dictionary
- *
- * Purpose: Initialize the dictionary. Read all ATTRIBUTES into
- * the dictionary_attributes list. Read all VALUES into
- * the dictionary_values list. Construct VENDOR dictionaries
- * as required.
- *
- */
-
-int rc_read_dictionary (char *filename)
-{
- FILE *dictfd;
- char dummystr[AUTH_ID_LEN];
- char namestr[AUTH_ID_LEN];
- char valstr[AUTH_ID_LEN];
- char attrstr[AUTH_ID_LEN];
- char typestr[AUTH_ID_LEN];
- char vendorstr[AUTH_ID_LEN];
- int line_no;
- DICT_ATTR *attr;
- DICT_VALUE *dval;
- VENDOR_DICT *vdict;
- char buffer[256];
- int value;
- int type;
- int n;
- int retcode;
- if ((dictfd = fopen (filename, "r")) == (FILE *) NULL)
- {
- rc_log(LOG_ERR, "rc_read_dictionary: couldn't open dictionary %s: %s",
- filename, strerror(errno));
- return (-1);
- }
-
- line_no = 0;
- retcode = 0;
- while (fgets (buffer, sizeof (buffer), dictfd) != (char *) NULL)
- {
- line_no++;
-
- /* Skip empty space */
- if (*buffer == '#' || *buffer == '\0' || *buffer == '\n')
- {
- continue;
- }
-
- if (strncmp (buffer, "VENDOR", 6) == 0) {
- /* Read the VENDOR line */
- if (sscanf(buffer, "%s%s%d", dummystr, namestr, &value) != 3) {
- rc_log(LOG_ERR, "rc_read_dictionary: invalid vendor on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- /* Validate entry */
- if (strlen (namestr) > NAME_LENGTH) {
- rc_log(LOG_ERR, "rc_read_dictionary: invalid name length on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- /* Create new vendor entry */
- vdict = (VENDOR_DICT *) malloc (sizeof (VENDOR_DICT));
- if (!vdict) {
- rc_log(LOG_CRIT, "rc_read_dictionary: out of memory");
- retcode = -1;
- break;
- }
- strcpy(vdict->vendorname, namestr);
- vdict->vendorcode = value;
- vdict->attributes = NULL;
- vdict->next = vendor_dictionaries;
- vendor_dictionaries = vdict;
- }
- else if (strncmp (buffer, "ATTRIBUTE", 9) == 0)
- {
-
- /* Read the ATTRIBUTE line. It is one of:
- * ATTRIBUTE attr_name attr_val type OR
- * ATTRIBUTE attr_name attr_val type vendor */
- vendorstr[0] = 0;
- n = sscanf(buffer, "%s%s%s%s%s", dummystr, namestr, valstr, typestr, vendorstr);
- if (n != 4 && n != 5)
- {
- rc_log(LOG_ERR, "rc_read_dictionary: invalid attribute on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- /*
- * Validate all entries
- */
- if (strlen (namestr) > NAME_LENGTH)
- {
- rc_log(LOG_ERR, "rc_read_dictionary: invalid name length on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- if (strlen (vendorstr) > NAME_LENGTH)
- {
- rc_log(LOG_ERR, "rc_read_dictionary: invalid name length on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- if (!isdigit (*valstr))
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid value on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- value = atoi (valstr);
-
- if (strcmp (typestr, "string") == 0)
- {
- type = PW_TYPE_STRING;
- }
- else if (strcmp (typestr, "integer") == 0)
- {
- type = PW_TYPE_INTEGER;
- }
- else if (strcmp (typestr, "ipaddr") == 0)
- {
- type = PW_TYPE_IPADDR;
- }
- else if (strcmp (typestr, "date") == 0)
- {
- type = PW_TYPE_DATE;
- }
- else
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid type on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- /* Search for vendor if supplied */
- if (*vendorstr) {
- vdict = rc_dict_findvendor(vendorstr);
- if (!vdict) {
- rc_log(LOG_ERR,
- "rc_read_dictionary: unknown vendor on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- } else {
- vdict = NULL;
- }
- /* Create a new attribute for the list */
- if ((attr =
- (DICT_ATTR *) malloc (sizeof (DICT_ATTR)))
- == (DICT_ATTR *) NULL)
- {
- rc_log(LOG_CRIT, "rc_read_dictionary: out of memory");
- retcode = -1;
- break;
- }
- strcpy (attr->name, namestr);
- if (vdict) {
- attr->vendorcode = vdict->vendorcode;
- } else {
- attr->vendorcode = VENDOR_NONE;
- }
- attr->value = value;
- attr->type = type;
-
- /* Insert it into the list */
- if (vdict) {
- attr->next = vdict->attributes;
- vdict->attributes = attr;
- } else {
- attr->next = dictionary_attributes;
- dictionary_attributes = attr;
- }
- }
- else if (strncmp (buffer, "VALUE", 5) == 0)
- {
- /* Read the VALUE line */
- if (sscanf (buffer, "%s%s%s%s", dummystr, attrstr,
- namestr, valstr) != 4)
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid value entry on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- /*
- * Validate all entries
- */
- if (strlen (attrstr) > NAME_LENGTH)
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid attribute length on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- if (strlen (namestr) > NAME_LENGTH)
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid name length on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
-
- if (!isdigit (*valstr))
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid value on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- value = atoi (valstr);
-
- /* Create a new VALUE entry for the list */
- if ((dval =
- (DICT_VALUE *) malloc (sizeof (DICT_VALUE)))
- == (DICT_VALUE *) NULL)
- {
- rc_log(LOG_CRIT, "rc_read_dictionary: out of memory");
- retcode = -1;
- break;
- }
- strcpy (dval->attrname, attrstr);
- strcpy (dval->name, namestr);
- dval->value = value;
-
- /* Insert it into the list */
- dval->next = dictionary_values;
- dictionary_values = dval;
- }
- else if (strncmp (buffer, "INCLUDE", 7) == 0)
- {
- /* Read the INCLUDE line */
- if (sscanf (buffer, "%s%s", dummystr, namestr) != 2)
- {
- rc_log(LOG_ERR,
- "rc_read_dictionary: invalid include entry on line %d of dictionary %s",
- line_no, filename);
- retcode = -1;
- break;
- }
- if (rc_read_dictionary(namestr) == -1)
- {
- retcode = -1;
- break;
- }
- }
- }
- fclose (dictfd);
- return retcode;
-}
-
-/*
- * Function: rc_dict_getattr
- *
- * Purpose: Return the full attribute structure based on the
- * attribute id number and vendor code. If vendor code is VENDOR_NONE,
- * non-vendor-specific attributes are used
- *
- */
-
-DICT_ATTR *rc_dict_getattr (int attribute, int vendor)
-{
- DICT_ATTR *attr;
- VENDOR_DICT *dict;
-
- if (vendor == VENDOR_NONE) {
- attr = dictionary_attributes;
- while (attr != (DICT_ATTR *) NULL) {
- if (attr->value == attribute) {
- return (attr);
- }
- attr = attr->next;
- }
- } else {
- dict = rc_dict_getvendor(vendor);
- if (!dict) {
- return NULL;
- }
- attr = dict->attributes;
- while (attr) {
- if (attr->value == attribute) {
- return attr;
- }
- attr = attr->next;
- }
- }
- return NULL;
-}
-
-/*
- * Function: rc_dict_findattr
- *
- * Purpose: Return the full attribute structure based on the
- * attribute name.
- *
- */
-
-DICT_ATTR *rc_dict_findattr (char *attrname)
-{
- DICT_ATTR *attr;
- VENDOR_DICT *dict;
-
- attr = dictionary_attributes;
- while (attr != (DICT_ATTR *) NULL)
- {
- if (strcasecmp (attr->name, attrname) == 0)
- {
- return (attr);
- }
- attr = attr->next;
- }
-
- /* Search vendor-specific dictionaries */
- dict = vendor_dictionaries;
- while (dict) {
- attr = dict->attributes;
- while (attr) {
- if (strcasecmp (attr->name, attrname) == 0) {
- return (attr);
- }
- attr = attr->next;
- }
- dict = dict->next;
- }
- return ((DICT_ATTR *) NULL);
-}
-
-
-/*
- * Function: rc_dict_findval
- *
- * Purpose: Return the full value structure based on the
- * value name.
- *
- */
-
-DICT_VALUE *rc_dict_findval (char *valname)
-{
- DICT_VALUE *val;
-
- val = dictionary_values;
- while (val != (DICT_VALUE *) NULL)
- {
- if (strcasecmp (val->name, valname) == 0)
- {
- return (val);
- }
- val = val->next;
- }
- return ((DICT_VALUE *) NULL);
-}
-
-/*
- * Function: dict_getval
- *
- * Purpose: Return the full value structure based on the
- * actual value and the associated attribute name.
- *
- */
-
-DICT_VALUE * rc_dict_getval (UINT4 value, char *attrname)
-{
- DICT_VALUE *val;
-
- val = dictionary_values;
- while (val != (DICT_VALUE *) NULL)
- {
- if (strcmp (val->attrname, attrname) == 0 &&
- val->value == value)
- {
- return (val);
- }
- val = val->next;
- }
- return ((DICT_VALUE *) NULL);
-}
-
-/*
- * Function: rc_dict_findvendor
- *
- * Purpose: Return the vendor's dictionary given the vendor name.
- *
- */
-VENDOR_DICT * rc_dict_findvendor (char *vendorname)
-{
- VENDOR_DICT *dict;
-
- dict = vendor_dictionaries;
- while (dict) {
- if (!strcmp(vendorname, dict->vendorname)) {
- return dict;
- }
- dict = dict->next;
- }
- return NULL;
-}
-
-/*
- * Function: rc_dict_getvendor
- *
- * Purpose: Return the vendor's dictionary given the vendor ID
- *
- */
-VENDOR_DICT * rc_dict_getvendor (int id)
-{
- VENDOR_DICT *dict;
-
- dict = vendor_dictionaries;
- while (dict) {
- if (id == dict->vendorcode) {
- return dict;
- }
- dict = dict->next;
- }
- return NULL;
-}
+++ /dev/null
-/*
- * $Id: env.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-/*
- * Function: rc_new_env
- *
- * Purpose: allocate space for a new environment
- *
- */
-
-ENV *rc_new_env(int size)
-{
- ENV *p;
-
- if (size < 1)
- return NULL;
-
- if ((p = malloc(sizeof(*p))) == NULL)
- return NULL;
-
- if ((p->env = malloc(size * sizeof(char *))) == NULL)
- {
- rc_log(LOG_CRIT, "rc_new_env: out of memory");
- free(p);
- return NULL;
- }
-
- p->env[0] = NULL;
-
- p->size = 0;
- p->maxsize = size;
-
- return p;
-}
-
-/*
- * Function: rc_free_env
- *
- * Purpose: free the space used by an env structure
- *
- */
-
-void rc_free_env(ENV *env)
-{
- free(env->env);
- free(env);
-}
-
-/*
- * Function: rc_add_env
- *
- * Purpose: add an environment entry
- *
- */
-
-int rc_add_env(ENV *env, char *name, char *value)
-{
- int i;
- char *new_env;
-
- for (i = 0; env->env[i] != NULL; i++)
- {
- if (strncmp(env->env[i], name, MAX(strchr(env->env[i], '=') - env->env[i],strlen(name))) == 0)
- break;
- }
-
- if (env->env[i])
- {
- if ((new_env = realloc(env->env[i], strlen(name)+strlen(value)+2)) == NULL)
- return (-1);
-
- env->env[i] = new_env;
-
- sprintf(env->env[i],"%s=%s", name, value);
- } else {
- if (env->size == (env->maxsize-1)) {
- rc_log(LOG_CRIT, "rc_add_env: not enough space for environment (increase ENV_SIZE)");
- return (-1);
- }
-
- if ((env->env[env->size] = malloc(strlen(name)+strlen(value)+2)) == NULL) {
- rc_log(LOG_CRIT, "rc_add_env: out of memory");
- return (-1);
- }
-
- sprintf(env->env[env->size],"%s=%s", name, value);
-
- env->size++;
-
- env->env[env->size] = NULL;
- }
-
- return 0;
-}
-
-/*
- * Function: rc_import_env
- *
- * Purpose: imports an array of null-terminated strings
- *
- */
-
-int rc_import_env(ENV *env, char **import)
-{
- char *es;
-
- while (*import)
- {
- es = strchr(*import, '=');
-
- if (!es)
- {
- import++;
- continue;
- }
-
- /* ok, i grant thats not very clean... */
- *es = '\0';
-
- if (rc_add_env(env, *import, es+1) < 0)
- {
- *es = '=';
- return (-1);
- }
-
- *es = '=';
-
- import++;
- }
-
- return 0;
-}
+++ /dev/null
-/*
- * $Id: ip_util.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-/*
- * Function: rc_get_ipaddr
- *
- * Purpose: return an IP address in host long notation from a host
- * name or address in dot notation.
- *
- * Returns: 0 on failure
- */
-
-UINT4 rc_get_ipaddr (char *host)
-{
- struct hostent *hp;
-
- if (rc_good_ipaddr (host) == 0)
- {
- return ntohl(inet_addr (host));
- }
- else if ((hp = gethostbyname (host)) == (struct hostent *) NULL)
- {
- rc_log(LOG_ERR,"rc_get_ipaddr: couldn't resolve hostname: %s", host);
- return ((UINT4) 0);
- }
- return ntohl((*(UINT4 *) hp->h_addr));
-}
-
-/*
- * Function: rc_good_ipaddr
- *
- * Purpose: check for valid IP address in standard dot notation.
- *
- * Returns: 0 on success, -1 when failure
- *
- */
-
-int rc_good_ipaddr (char *addr)
-{
- int dot_count;
- int digit_count;
-
- if (addr == NULL)
- return (-1);
-
- dot_count = 0;
- digit_count = 0;
- while (*addr != '\0' && *addr != ' ')
- {
- if (*addr == '.')
- {
- dot_count++;
- digit_count = 0;
- }
- else if (!isdigit (*addr))
- {
- dot_count = 5;
- }
- else
- {
- digit_count++;
- if (digit_count > 3)
- {
- dot_count = 5;
- }
- }
- addr++;
- }
- if (dot_count != 3)
- {
- return (-1);
- }
- else
- {
- return (0);
- }
-}
-
-/*
- * Function: rc_ip_hostname
- *
- * Purpose: Return a printable host name (or IP address in dot notation)
- * for the supplied IP address.
- *
- */
-
-const char *rc_ip_hostname (UINT4 h_ipaddr)
-{
- struct hostent *hp;
- UINT4 n_ipaddr = htonl (h_ipaddr);
-
- if ((hp = gethostbyaddr ((char *) &n_ipaddr, sizeof (struct in_addr),
- AF_INET)) == NULL) {
- rc_log(LOG_ERR,"rc_ip_hostname: couldn't look up host by addr: %08lX", h_ipaddr);
- }
-
- return ((hp==NULL)?"unknown":hp->h_name);
-}
-
-/*
- * Function: rc_getport
- *
- * Purpose: get the port number for the supplied request type
- *
- */
-
-unsigned short rc_getport(int type)
-{
- struct servent *svp;
-
- if ((svp = getservbyname ((type==AUTH)?"radius":"radacct", "udp")) == NULL)
- {
- return ((type==AUTH)?PW_AUTH_UDP_PORT:PW_ACCT_UDP_PORT);
- } else {
- return ntohs ((unsigned short) svp->s_port);
- }
-}
-
-/*
- * Function: rc_own_hostname
- *
- * Purpose: get the hostname of this machine
- *
- * Returns -1 on failure, 0 on success
- *
- */
-
-int
-rc_own_hostname(char *hostname, int len)
-{
-#ifdef HAVE_UNAME
- struct utsname uts;
-#endif
-
-#if defined(HAVE_UNAME)
- if (uname(&uts) < 0)
- {
- rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname");
- return -1;
- }
- strncpy(hostname, uts.nodename, len);
-#elif defined(HAVE_GETHOSTNAME)
- if (gethostname(hostname, len) < 0)
- {
- rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname");
- return -1;
- }
-#elif defined(HAVE_SYSINFO)
- if (sysinfo(SI_HOSTNAME, hostname, len) < 0)
- {
- rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname");
- return -1;
- }
-#else
- return -1;
-#endif
-
- return 0;
-}
-
-/*
- * Function: rc_own_ipaddress
- *
- * Purpose: get the IP address of this host in host order
- *
- * Returns: IP address on success, 0 on failure
- *
- */
-
-UINT4 rc_own_ipaddress(void)
-{
- static UINT4 this_host_ipaddr = 0;
- char hostname[256];
-
- if (!this_host_ipaddr) {
- if (rc_own_hostname(hostname, sizeof(hostname)) < 0)
- return 0;
- if ((this_host_ipaddr = rc_get_ipaddr (hostname)) == 0) {
- rc_log(LOG_ERR, "rc_own_ipaddress: couldn't get own IP address");
- return 0;
- }
- }
-
- return this_host_ipaddr;
-}
+++ /dev/null
-/*
- * $Id: lock.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include "config.h"
-#include "includes.h"
-
-#if defined(HAVE_FLOCK)
-
-int do_lock_exclusive(int fd)
-{
- return flock(fd, LOCK_EX|LOCK_NB);
-}
-
-int do_unlock(int fd)
-{
- return flock(fd, LOCK_UN);
-}
-
-#elif defined(HAVE_FCNTL)
-
-int do_lock_exclusive(int fd)
-{
- flock_t fl;
- int res;
-
- memset((void *)&fl, 0, sizeof(fl));
-
- fl.l_type = F_WRLCK;
- fl.l_whence = fl.l_start = 0;
- fl.l_len = 0; /* 0 means "to end of file" */
-
- res = fcntl(fd, F_SETLK, &fl);
-
- if ((res == -1) && (errno == EAGAIN))
- errno = EWOULDBLOCK;
-
- return res;
-}
-
-int do_unlock(int fd)
-{
- flock_t fl;
-
- memset((void *)&fl, 0, sizeof(fl));
-
- fl.l_type = F_UNLCK;
- fl.l_whence = fl.l_start = 0;
- fl.l_len = 0; /* 0 means "to end of file" */
-
- return fcntl(fd, F_SETLK, &fl);
-}
-
-#else
-YOU_LOOSE "need either flock(2) or fcntl(2)"
-#endif
+++ /dev/null
-/*
- * $Id: log.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-/*
- * Function: rc_openlog
- *
- * Purpose: open log
- *
- * Arguments: identification string
- *
- * Returns: nothing
- *
- */
-
-void rc_openlog(char *ident)
-{
- openlog(ident, LOG_PID, RC_LOG_FACILITY);
-}
-
-/*
- * Function: rc_log
- *
- * Purpose: log information
- *
- * Arguments: priority (just like syslog), rest like printf
- *
- * Returns: nothing
- *
- */
-
-void rc_log(int prio, const char *format, ...)
-{
- char buff[1024];
- va_list ap;
-
- va_start(ap,format);
- vsnprintf(buff, sizeof(buff), format, ap);
- va_end(ap);
-
- syslog(prio, "%s", buff);
-}
+++ /dev/null
-/*
- * $Id: md5.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- */
-
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-#include <string.h>
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-typedef unsigned char *POINTER;
-
-/* MD5 context. */
-typedef struct
-{
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} MD5_CTX;
-
-static void MD5Init (MD5_CTX *);
-static void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
-static void MD5Final (unsigned char[16], MD5_CTX *);
-
-/* Constants for MD5Transform routine.
- */
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform (UINT4[4], unsigned char[64]);
-static void Encode (unsigned char *, UINT4 *, unsigned int);
-static void Decode (UINT4 *, unsigned char *, unsigned int);
-static void MD5_memcpy (POINTER, POINTER, unsigned int);
-static void MD5_memset (POINTER, int, unsigned int);
-
-static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-void rc_md5_calc (unsigned char *output, unsigned char *input, unsigned int inlen)
-{
- MD5_CTX context;
-
- MD5Init (&context);
- MD5Update (&context, input, inlen);
- MD5Final (output, &context);
-}
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-static void MD5Init (MD5_CTX *context)
-{
- context->count[0] = context->count[1] = 0;
-
- /*
- * Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-static void MD5Update (MD5_CTX *context, unsigned char *input, unsigned int inputLen)
-{
- unsigned int i,
- index,
- partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((UINT4) inputLen << 3))
- < ((UINT4) inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4) inputLen >> 29);
-
- partLen = 64 - index;
-
- /*
- * Transform as many times as possible.
- */
- if (inputLen >= partLen)
- {
- MD5_memcpy
- ((POINTER) & context->buffer[index], (POINTER) input, partLen);
- MD5Transform (context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform (context->state, &input[i]);
-
- index = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- MD5_memcpy
- ((POINTER) & context->buffer[index], (POINTER) & input[i],
- inputLen - i);
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-static void MD5Final (unsigned char *digest, MD5_CTX *context)
-{
- unsigned char bits[8];
- unsigned int index,
- padLen;
-
- /* Save number of bits */
- Encode (bits, context->count, 8);
-
- /*
- * Pad out to 56 mod 64.
- */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- MD5Update (context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD5Update (context, bits, 8);
-
- /* Store state in digest */
- Encode (digest, context->state, 16);
-
- /*
- * Zeroize sensitive information.
- */
- MD5_memset ((POINTER) context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform (UINT4 *state, unsigned char *block)
-{
- UINT4 a = state[0],
- b = state[1],
- c = state[2],
- d = state[3],
- x[16];
-
- Decode (x, block, 64);
-
- /* Round 1 */
- FF (a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF (d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF (c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF (b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF (a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF (d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF (c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF (b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF (a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF (d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG (a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG (d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG (b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG (a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG (b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG (a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG (c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
- GG (b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG (d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG (c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH (a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH (d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH (a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH (d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH (c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH (d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH (c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH (b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH (a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH (b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II (a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II (d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II (b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II (d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II (b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II (a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II (c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II (a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II (c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II (b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /*
- * Zeroize sensitive information.
- */
- MD5_memset ((POINTER) x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode (unsigned char *output, UINT4 *input, unsigned int len)
-{
- unsigned int i,
- j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- {
- output[j] = (unsigned char) (input[i] & 0xff);
- output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
- output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
- output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4.
- */
-static void Decode (UINT4 *output, unsigned char *input, unsigned int len)
-{
- unsigned int i,
- j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) |
- (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24);
-}
-
-static void MD5_memcpy (POINTER output, POINTER input, unsigned int len)
-{
- memcpy(output, input, len);
-}
-
-static void MD5_memset (POINTER output, int value, unsigned int len)
-{
- memset(output, value, len);
-}
+++ /dev/null
-/*
- * $Id: memcmp.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Taken from the Linux kernel. GPL applies.
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- */
-
-#include "config.h"
-#include "includes.h"
-
-int memcmp(const void * cs,const void * ct,size_t count)
-{
- const unsigned char *su1, *su2;
- signed char res = 0;
-
- for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
- if ((res = *su1 - *su2) != 0)
- break;
- return res;
-}
+++ /dev/null
-/*
- * $Id: options.h,v 1.2 2002/10/01 09:51:01 fcusack Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#define OPTION_LEN 64
-
-/* ids for different option types */
-#define OT_STR (1<<0) /* string */
-#define OT_INT (1<<1) /* integer */
-#define OT_SRV (1<<2) /* server list */
-#define OT_AUO (1<<3) /* authentication order */
-
-#define OT_ANY ((unsigned int)~0) /* used internally */
-
-/* status types */
-#define ST_UNDEF (1<<0) /* option is undefined */
-
-typedef struct _option {
- char name[OPTION_LEN]; /* name of the option */
- int type, status; /* type and status */
- void *val; /* pointer to option value */
-} OPTION;
-
-static SERVER acctserver = {0};
-static SERVER authserver = {0};
-
-int default_tries = 4;
-int default_timeout = 60;
-
-static OPTION config_options[] = {
-/* internally used options */
-{"config_file", OT_STR, ST_UNDEF, NULL},
-/* General options */
-{"auth_order", OT_AUO, ST_UNDEF, NULL},
-{"login_tries", OT_INT, ST_UNDEF, &default_tries},
-{"login_timeout", OT_INT, ST_UNDEF, &default_timeout},
-{"nologin", OT_STR, ST_UNDEF, "/etc/nologin"},
-{"issue", OT_STR, ST_UNDEF, "/etc/radiusclient/issue"},
-/* RADIUS specific options */
-{"authserver", OT_SRV, ST_UNDEF, &authserver},
-{"acctserver", OT_SRV, ST_UNDEF, &acctserver},
-{"servers", OT_STR, ST_UNDEF, NULL},
-{"dictionary", OT_STR, ST_UNDEF, NULL},
-{"login_radius", OT_STR, ST_UNDEF, "/usr/sbin/login.radius"},
-{"seqfile", OT_STR, ST_UNDEF, NULL},
-{"mapfile", OT_STR, ST_UNDEF, NULL},
-{"default_realm", OT_STR, ST_UNDEF, NULL},
-{"radius_timeout", OT_INT, ST_UNDEF, NULL},
-{"radius_retries", OT_INT, ST_UNDEF, NULL},
-{"nas_identifier", OT_STR, ST_UNDEF, ""},
-/* local options */
-{"login_local", OT_STR, ST_UNDEF, NULL},
-};
-
-static int num_options = ((sizeof(config_options))/(sizeof(config_options[0])));
+++ /dev/null
-/*
- * $Id: sendserver.c,v 1.4 2002/04/02 14:09:35 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <pathnames.h>
-
-static void rc_random_vector (unsigned char *);
-static int rc_check_reply (AUTH_HDR *, int, char *, unsigned char *, unsigned char);
-
-/*
- * Function: rc_pack_list
- *
- * Purpose: Packs an attribute value pair list into a buffer.
- *
- * Returns: Number of octets packed.
- *
- */
-
-static int rc_pack_list (VALUE_PAIR *vp, char *secret, AUTH_HDR *auth)
-{
- int length, i, pc, secretlen, padded_length;
- int total_length = 0;
- UINT4 lvalue;
- unsigned char passbuf[MAX(AUTH_PASS_LEN, CHAP_VALUE_LENGTH)];
- unsigned char md5buf[256];
- unsigned char *buf, *vector, *lenptr;
-
- buf = auth->data;
-
- while (vp != (VALUE_PAIR *) NULL)
- {
-
- if (vp->vendorcode != VENDOR_NONE) {
- *buf++ = PW_VENDOR_SPECIFIC;
-
- /* Place-holder for where to put length */
- lenptr = buf++;
-
- /* Insert vendor code */
- *buf++ = 0;
- *buf++ = (((unsigned int) vp->vendorcode) >> 16) & 255;
- *buf++ = (((unsigned int) vp->vendorcode) >> 8) & 255;
- *buf++ = ((unsigned int) vp->vendorcode) & 255;
-
- /* Insert vendor-type */
- *buf++ = vp->attribute;
-
- /* Insert value */
- switch(vp->type) {
- case PW_TYPE_STRING:
- length = vp->lvalue;
- *lenptr = length + 8;
- *buf++ = length+2;
- memcpy(buf, vp->strvalue, (size_t) length);
- buf += length;
- total_length += length+8;
- break;
- case PW_TYPE_INTEGER:
- case PW_TYPE_IPADDR:
- length = sizeof(UINT4);
- *lenptr = length + 8;
- *buf++ = length+2;
- lvalue = htonl(vp->lvalue);
- memcpy(buf, (char *) &lvalue, sizeof(UINT4));
- buf += length;
- total_length += length+8;
- break;
- default:
- break;
- }
- } else {
- *buf++ = vp->attribute;
- switch (vp->attribute) {
- case PW_USER_PASSWORD:
-
- /* Encrypt the password */
-
- /* Chop off password at AUTH_PASS_LEN */
- length = vp->lvalue;
- if (length > AUTH_PASS_LEN) length = AUTH_PASS_LEN;
-
- /* Calculate the padded length */
- padded_length = (length+(AUTH_VECTOR_LEN-1)) & ~(AUTH_VECTOR_LEN-1);
-
- /* Record the attribute length */
- *buf++ = padded_length + 2;
-
- /* Pad the password with zeros */
- memset ((char *) passbuf, '\0', AUTH_PASS_LEN);
- memcpy ((char *) passbuf, vp->strvalue, (size_t) length);
-
- secretlen = strlen (secret);
- vector = (char *)auth->vector;
- for(i = 0; i < padded_length; i += AUTH_VECTOR_LEN) {
- /* Calculate the MD5 digest*/
- strcpy ((char *) md5buf, secret);
- memcpy ((char *) md5buf + secretlen, vector,
- AUTH_VECTOR_LEN);
- rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN);
-
- /* Remeber the start of the digest */
- vector = buf;
-
- /* Xor the password into the MD5 digest */
- for (pc = i; pc < (i + AUTH_VECTOR_LEN); pc++) {
- *buf++ ^= passbuf[pc];
- }
- }
-
- total_length += padded_length + 2;
-
- break;
-#if 0
- case PW_CHAP_PASSWORD:
-
- *buf++ = CHAP_VALUE_LENGTH + 2;
-
- /* Encrypt the Password */
- length = vp->lvalue;
- if (length > CHAP_VALUE_LENGTH) {
- length = CHAP_VALUE_LENGTH;
- }
- memset ((char *) passbuf, '\0', CHAP_VALUE_LENGTH);
- memcpy ((char *) passbuf, vp->strvalue, (size_t) length);
-
- /* Calculate the MD5 Digest */
- secretlen = strlen (secret);
- strcpy ((char *) md5buf, secret);
- memcpy ((char *) md5buf + secretlen, (char *) auth->vector,
- AUTH_VECTOR_LEN);
- rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN);
-
- /* Xor the password into the MD5 digest */
- for (i = 0; i < CHAP_VALUE_LENGTH; i++) {
- *buf++ ^= passbuf[i];
- }
- total_length += CHAP_VALUE_LENGTH + 2;
-
- break;
-#endif
- default:
- switch (vp->type) {
- case PW_TYPE_STRING:
- length = vp->lvalue;
- *buf++ = length + 2;
- memcpy (buf, vp->strvalue, (size_t) length);
- buf += length;
- total_length += length + 2;
- break;
-
- case PW_TYPE_INTEGER:
- case PW_TYPE_IPADDR:
- *buf++ = sizeof (UINT4) + 2;
- lvalue = htonl (vp->lvalue);
- memcpy (buf, (char *) &lvalue, sizeof (UINT4));
- buf += sizeof (UINT4);
- total_length += sizeof (UINT4) + 2;
- break;
-
- default:
- break;
- }
- break;
- }
- }
- vp = vp->next;
- }
- return total_length;
-}
-
-/*
- * Function: rc_send_server
- *
- * Purpose: send a request to a RADIUS server and wait for the reply
- *
- */
-
-int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info)
-{
- int sockfd;
- struct sockaddr salocal;
- struct sockaddr saremote;
- struct sockaddr_in *sin;
- struct timeval authtime;
- fd_set readfds;
- AUTH_HDR *auth, *recv_auth;
- UINT4 auth_ipaddr;
- char *server_name; /* Name of server to query */
- int salen;
- int result;
- int total_length;
- int length;
- int retry_max;
- int secretlen;
- char secret[MAX_SECRET_LENGTH + 1];
- unsigned char vector[AUTH_VECTOR_LEN];
- char recv_buffer[BUFFER_LEN];
- char send_buffer[BUFFER_LEN];
- int retries;
- VALUE_PAIR *vp;
-
- server_name = data->server;
- if (server_name == (char *) NULL || server_name[0] == '\0')
- return (ERROR_RC);
-
- if ((vp = rc_avpair_get(data->send_pairs, PW_SERVICE_TYPE)) && \
- (vp->lvalue == PW_ADMINISTRATIVE))
- {
- strcpy(secret, MGMT_POLL_SECRET);
- if ((auth_ipaddr = rc_get_ipaddr(server_name)) == 0)
- return (ERROR_RC);
- }
- else
- {
- if (rc_find_server (server_name, &auth_ipaddr, secret) != 0)
- {
- return (ERROR_RC);
- }
- }
-
- sockfd = socket (AF_INET, SOCK_DGRAM, 0);
- if (sockfd < 0)
- {
- memset (secret, '\0', sizeof (secret));
- rc_log(LOG_ERR, "rc_send_server: socket: %s", strerror(errno));
- return (ERROR_RC);
- }
-
- length = sizeof (salocal);
- sin = (struct sockaddr_in *) & salocal;
- memset ((char *) sin, '\0', (size_t) length);
- sin->sin_family = AF_INET;
- sin->sin_addr.s_addr = htonl(INADDR_ANY);
- sin->sin_port = htons ((unsigned short) 0);
- if (bind (sockfd, (struct sockaddr *) sin, length) < 0 ||
- getsockname (sockfd, (struct sockaddr *) sin, &length) < 0)
- {
- close (sockfd);
- memset (secret, '\0', sizeof (secret));
- rc_log(LOG_ERR, "rc_send_server: bind: %s: %s", server_name, strerror(errno));
- return (ERROR_RC);
- }
-
- retry_max = data->retries; /* Max. numbers to try for reply */
- retries = 0; /* Init retry cnt for blocking call */
-
- /* Build a request */
- auth = (AUTH_HDR *) send_buffer;
- auth->code = data->code;
- auth->id = data->seq_nbr;
-
- if (data->code == PW_ACCOUNTING_REQUEST)
- {
- total_length = rc_pack_list(data->send_pairs, secret, auth) + AUTH_HDR_LEN;
-
- auth->length = htons ((unsigned short) total_length);
-
- memset((char *) auth->vector, 0, AUTH_VECTOR_LEN);
- secretlen = strlen (secret);
- memcpy ((char *) auth + total_length, secret, secretlen);
- rc_md5_calc (vector, (char *) auth, total_length + secretlen);
- memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN);
- }
- else
- {
- rc_random_vector (vector);
- memcpy (auth->vector, vector, AUTH_VECTOR_LEN);
-
- total_length = rc_pack_list(data->send_pairs, secret, auth) + AUTH_HDR_LEN;
-
- auth->length = htons ((unsigned short) total_length);
- }
-
- sin = (struct sockaddr_in *) & saremote;
- memset ((char *) sin, '\0', sizeof (saremote));
- sin->sin_family = AF_INET;
- sin->sin_addr.s_addr = htonl (auth_ipaddr);
- sin->sin_port = htons ((unsigned short) data->svc_port);
-
- for (;;)
- {
- sendto (sockfd, (char *) auth, (unsigned int) total_length, (int) 0,
- (struct sockaddr *) sin, sizeof (struct sockaddr_in));
-
- authtime.tv_usec = 0L;
- authtime.tv_sec = (long) data->timeout;
- FD_ZERO (&readfds);
- FD_SET (sockfd, &readfds);
- if (select (sockfd + 1, &readfds, NULL, NULL, &authtime) < 0)
- {
- if (errno == EINTR)
- continue;
- rc_log(LOG_ERR, "rc_send_server: select: %s", strerror(errno));
- memset (secret, '\0', sizeof (secret));
- close (sockfd);
- return (ERROR_RC);
- }
- if (FD_ISSET (sockfd, &readfds))
- break;
-
- /*
- * Timed out waiting for response. Retry "retry_max" times
- * before giving up. If retry_max = 0, don't retry at all.
- */
- if (++retries >= retry_max)
- {
- rc_log(LOG_ERR,
- "rc_send_server: no reply from RADIUS server %s:%u",
- rc_ip_hostname (auth_ipaddr), data->svc_port);
- close (sockfd);
- memset (secret, '\0', sizeof (secret));
- return (TIMEOUT_RC);
- }
- }
- salen = sizeof (saremote);
- length = recvfrom (sockfd, (char *) recv_buffer,
- (int) sizeof (recv_buffer),
- (int) 0, &saremote, &salen);
-
- if (length <= 0)
- {
- rc_log(LOG_ERR, "rc_send_server: recvfrom: %s:%d: %s", server_name,\
- data->svc_port, strerror(errno));
- close (sockfd);
- memset (secret, '\0', sizeof (secret));
- return (ERROR_RC);
- }
-
- recv_auth = (AUTH_HDR *)recv_buffer;
-
- result = rc_check_reply (recv_auth, BUFFER_LEN, secret, vector, data->seq_nbr);
-
- data->receive_pairs = rc_avpair_gen(recv_auth);
-
- close (sockfd);
- if (info)
- {
- memcpy(info->secret, secret, sizeof(info->secret));
- memcpy(info->request_vector, vector,
- sizeof(info->request_vector));
- }
- memset (secret, '\0', sizeof (secret));
-
- if (result != OK_RC) return (result);
-
- *msg = '\0';
- vp = data->receive_pairs;
- while (vp)
- {
- if ((vp = rc_avpair_get(vp, PW_REPLY_MESSAGE)))
- {
- strcat(msg, vp->strvalue);
- strcat(msg, "\n");
- vp = vp->next;
- }
- }
-
- if ((recv_auth->code == PW_ACCESS_ACCEPT) ||
- (recv_auth->code == PW_PASSWORD_ACK) ||
- (recv_auth->code == PW_ACCOUNTING_RESPONSE))
- {
- result = OK_RC;
- }
- else
- {
- result = BADRESP_RC;
- }
-
- return (result);
-}
-
-/*
- * Function: rc_check_reply
- *
- * Purpose: verify items in returned packet.
- *
- * Returns: OK_RC -- upon success,
- * BADRESP_RC -- if anything looks funny.
- *
- */
-
-static int rc_check_reply (AUTH_HDR *auth, int bufferlen, char *secret,
- unsigned char *vector, unsigned char seq_nbr)
-{
- int secretlen;
- int totallen;
- unsigned char calc_digest[AUTH_VECTOR_LEN];
- unsigned char reply_digest[AUTH_VECTOR_LEN];
-
- totallen = ntohs (auth->length);
-
- secretlen = strlen (secret);
-
- /* Do sanity checks on packet length */
- if ((totallen < 20) || (totallen > 4096))
- {
- rc_log(LOG_ERR, "rc_check_reply: received RADIUS server response with invalid length");
- return (BADRESP_RC);
- }
-
- /* Verify buffer space, should never trigger with current buffer size and check above */
- if ((totallen + secretlen) > bufferlen)
- {
- rc_log(LOG_ERR, "rc_check_reply: not enough buffer space to verify RADIUS server response");
- return (BADRESP_RC);
- }
- /* Verify that id (seq. number) matches what we sent */
- if (auth->id != seq_nbr)
- {
- rc_log(LOG_ERR, "rc_check_reply: received non-matching id in RADIUS server response");
- return (BADRESP_RC);
- }
-
- /* Verify the reply digest */
- memcpy ((char *) reply_digest, (char *) auth->vector, AUTH_VECTOR_LEN);
- memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN);
- memcpy ((char *) auth + totallen, secret, secretlen);
- rc_md5_calc (calc_digest, (char *) auth, totallen + secretlen);
-
-#ifdef DIGEST_DEBUG
- {
- int i;
-
- fputs("reply_digest: ", stderr);
- for (i = 0; i < AUTH_VECTOR_LEN; i++)
- {
- fprintf(stderr,"%.2x ", (int) reply_digest[i]);
- }
- fputs("\ncalc_digest: ", stderr);
- for (i = 0; i < AUTH_VECTOR_LEN; i++)
- {
- fprintf(stderr,"%.2x ", (int) calc_digest[i]);
- }
- fputs("\n", stderr);
- }
-#endif
-
- if (memcmp ((char *) reply_digest, (char *) calc_digest,
- AUTH_VECTOR_LEN) != 0)
- {
-#ifdef RADIUS_116
- /* the original Livingston radiusd v1.16 seems to have
- a bug in digest calculation with accounting requests,
- authentication request are ok. i looked at the code
- but couldn't find any bugs. any help to get this
- kludge out are welcome. preferably i want to
- reproduce the calculation bug here to be compatible
- to stock Livingston radiusd v1.16. -lf, 03/14/96
- */
- if (auth->code == PW_ACCOUNTING_RESPONSE)
- return (OK_RC);
-#endif
- rc_log(LOG_ERR, "rc_check_reply: received invalid reply digest from RADIUS server");
- return (BADRESP_RC);
- }
-
- return (OK_RC);
-
-}
-
-/*
- * Function: rc_random_vector
- *
- * Purpose: generates a random vector of AUTH_VECTOR_LEN octets.
- *
- * Returns: the vector (call by reference)
- *
- */
-
-static void rc_random_vector (unsigned char *vector)
-{
- int randno;
- int i;
-#if defined(HAVE_DEV_URANDOM)
- int fd;
-
-/* well, I added this to increase the security for user passwords.
- we use /dev/urandom here, as /dev/random might block and we don't
- need that much randomness. BTW, great idea, Ted! -lf, 03/18/95 */
-
- if ((fd = open(_PATH_DEV_URANDOM, O_RDONLY)) >= 0)
- {
- unsigned char *pos;
- int readcount;
-
- i = AUTH_VECTOR_LEN;
- pos = vector;
- while (i > 0)
- {
- readcount = read(fd, (char *)pos, i);
- pos += readcount;
- i -= readcount;
- }
-
- close(fd);
- return;
- } /* else fall through */
-#endif
- srand (time (0) + getppid() + getpid()); /* random enough :) */
- for (i = 0; i < AUTH_VECTOR_LEN;)
- {
- randno = rand ();
- memcpy ((char *) vector, (char *) &randno, sizeof (int));
- vector += sizeof (int);
- i += sizeof (int);
- }
-
- return;
-}
+++ /dev/null
-/*
- * $Id: strcasecmp.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg and Christian Graefe
- *
- * This file is provided under the terms and conditions of the GNU general
- * public license, version 2 or any later version, incorporated herein by
- * reference.
- *
- */
-
-#include "config.h"
-#include "includes.h"
-
-#ifdef HAVE_STRICMP
-# define strcasecmp(a,b) stricmp(a,b)
-#else
-
-/*
- * Function: strcasecmp
- *
- * Purpose: strcasecmp replacement for systems which lack strcasecmp and
- * stricmp
- */
-
-int strcasecmp(char *s1, char *s2)
-{
- while (*s1 && *s2 && toupper(*s1) == toupper(*s2))
- s1++, s2++;
-
- if (!*s1 && !*s2)
- return 0;
- else
- return (toupper(*s1) - toupper(*s2));
-}
-#endif
+++ /dev/null
-/*
- * $Id: strdup.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg and Christian Graefe
- *
- * This file is provided under the terms and conditions of the GNU general
- * public license, version 2 or any later version, incorporated herein by
- * reference.
- *
- */
-
-#include "config.h"
-#include "includes.h"
-
-/*
- * Function: strdup
- *
- * Purpose: strdup replacement for systems which lack it
- *
- */
-
-char *strdup(char *str)
-{
- char *p;
-
- if (str == NULL)
- return NULL;
-
- if ((p = (char *)malloc(strlen(str)+1)) == NULL)
- return p;
-
- return strcpy(p, str);
-}
+++ /dev/null
-/*
- * $Id: strerror.c,v 1.2 2002/02/27 15:51:20 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg and Christian Graefe
- *
- * This file is provided under the terms and conditions of the GNU general
- * public license, version 2 or any later version, incorporated herein by
- * reference.
- *
- */
-
-#include "config.h"
-#include "includes.h"
-
-/*
- * if we're missing strerror, these are mostly not defined either
- */
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-/*
- * Function: strerror
- *
- * Purpose: implements strerror for systems which lack it. if these
- * systems even lack sys_errlist, you loose...
- *
- */
-
-
-char *strerror(int err)
-{
- static char buf[32];
-
- if (err >= 0 && err < sys_nerr)
- return sys_errlist[err];
- else {
- sprintf(buf, "unknown error: %d", errno);
- return buf;
- }
-}
+++ /dev/null
-/*
- * $Id: util.c,v 1.3 2004/10/28 00:21:48 paulus Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * Copyright 1992 Livingston Enterprises, Inc.
- *
- * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
- * and Merit Network, Inc. All Rights Reserved
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-
-/*
- * Function: rc_str2tm
- *
- * Purpose: Turns printable string into correct tm struct entries.
- *
- */
-
-static const char * months[] =
- {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- };
-
-void rc_str2tm (char *valstr, struct tm *tm)
-{
- int i;
-
- /* Get the month */
- for (i = 0; i < 12; i++)
- {
- if (strncmp (months[i], valstr, 3) == 0)
- {
- tm->tm_mon = i;
- i = 13;
- }
- }
-
- /* Get the Day */
- tm->tm_mday = atoi (&valstr[4]);
-
- /* Now the year */
- tm->tm_year = atoi (&valstr[7]) - 1900;
-}
-
-/*
- * Function: rc_getifname
- *
- * Purpose: get the network interface name associated with this tty
- *
- */
-
-char *rc_getifname(char *tty)
-{
-#if defined(BSD4_4) || defined(linux)
- static char name[512];
- int fd;
-
- if ((fd = open(tty, O_RDWR|O_NDELAY)) < 0) {
- rc_log(LOG_ERR, "rc_getifname: can't open %s: %s", tty, strerror(errno));
- return NULL;
- }
-#endif
-
-#ifdef BSD4_4
- strcpy(name,ttyname(fd));
- if (strlen(name) < 1) {
- rc_log(LOG_ERR, "rc_getifname: can't get attached interface of %s: %s", tty, strerror(errno));
- close(fd);
- return NULL;
- }
-#elif linux
- if (ioctl(fd, SIOCGIFNAME, name) < 0) {
- rc_log(LOG_ERR, "rc_getifname: can't ioctl %s: %s", tty, strerror(errno));
- close(fd);
- return NULL;
- }
-#else
- return NULL;
-#endif
-
-#if defined(BSD4_4) || defined(linux)
- close(fd);
- return name;
-#endif
-}
-
-/*
- * Function: rc_getstr
- *
- * Purpose: Reads in a string from the user (with or witout echo)
- *
- */
-
-char *rc_getstr (char *prompt, int do_echo)
-{
- int in, out;
- char *p;
- sigset_t newset;
- sigset_t oldset;
- struct termios term_old, term_new;
- static char buf[GETSTR_LENGTH];
- int is_term, flags, old_flags;
- char c;
- int flushed = 0;
-
- in = fileno(stdin);
- out = fileno(stdout);
-
- (void) sigemptyset (&newset);
- (void) sigaddset (&newset, SIGINT);
- (void) sigaddset (&newset, SIGTSTP);
- (void) sigaddset (&newset, SIGQUIT);
-
- (void) sigprocmask (SIG_BLOCK, &newset, &oldset);
-
- if ((is_term = isatty(in)))
- {
-
- (void) tcgetattr (in, &term_old);
- term_new = term_old;
- if (do_echo)
- term_new.c_lflag |= ECHO;
- else
- term_new.c_lflag &= ~ECHO;
-
- if (tcsetattr (in, TCSAFLUSH, &term_new) == 0)
- flushed = 1;
-
- }
- else
- {
- is_term = 0;
- if ((flags = fcntl(in, F_GETFL, 0)) >= 0) {
- old_flags = flags;
- flags |= O_NONBLOCK;
-
- fcntl(in, F_SETFL, flags);
-
- while (read(in, &c, 1) > 0)
- /* nothing */;
-
- fcntl(in, F_SETFL, old_flags);
-
- flushed = 1;
- }
- }
-
- write(out, prompt, strlen(prompt));
-
- /* well, this looks ugly, but it handles the following end of line
- markers: \r \r\0 \r\n \n \n\r, at least at a second pass */
-
- p = buf;
- for (;;)
- {
- if (read(in, &c, 1) <= 0)
- return NULL;
-
- if (!flushed && ((c == '\0') || (c == '\r') || (c == '\n'))) {
- flushed = 1;
- continue;
- }
-
- if ((c == '\r') || (c == '\n'))
- break;
-
- flushed = 1;
-
- if (p < buf + GETSTR_LENGTH)
- {
- if (do_echo && !is_term)
- write(out, &c, 1);
- *p++ = c;
- }
- }
-
- *p = '\0';
-
- if (!do_echo || !is_term) write(out, "\r\n", 2);
-
- if (is_term)
- tcsetattr (in, TCSAFLUSH, &term_old);
- else {
- if ((flags = fcntl(in, F_GETFL, 0)) >= 0) {
- old_flags = flags;
- flags |= O_NONBLOCK;
-
- fcntl(in, F_SETFL, flags);
-
- while (read(in, &c, 1) > 0)
- /* nothing */;
-
- fcntl(in, F_SETFL, old_flags);
- }
- }
-
- (void) sigprocmask (SIG_SETMASK, &oldset, NULL);
-
- return (buf);
-}
-
-void rc_mdelay(int msecs)
-{
- struct timeval tv;
-
- tv.tv_sec = (int) msecs / 1000;
- tv.tv_usec = (msecs % 1000) * 1000;
-
- select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL, &tv);
-}
-
-/*
- * Function: rc_mksid
- *
- * Purpose: generate a quite unique string
- *
- * Remarks: not that unique at all...
- *
- */
-
-char *
-rc_mksid (void)
-{
- static char buf[15];
- static unsigned short int cnt = 0;
- sprintf (buf, "%08lX%04X%02hX",
- (unsigned long int) time (NULL),
- (unsigned int) getpid (),
- cnt & 0xFF);
- cnt++;
- return buf;
-}
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-SUBDIRS = migs
-
-EXTRA_DIST = README login.radius
-
-sbin_SCRIPTS = login.radius
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-SUBDIRS = migs
-
-EXTRA_DIST = README login.radius
-
-sbin_SCRIPTS = login.radius
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-SCRIPTS = $(sbin_SCRIPTS)
-
-DIST_COMMON = README Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: all-recursive all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps login.radius/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-install-sbinSCRIPTS: $(sbin_SCRIPTS)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(sbindir)
- @list='$(sbin_SCRIPTS)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \
- $(INSTALL_SCRIPT) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \
- else if test -f $(srcdir)/$$p; then \
- echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \
- $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \
- else :; fi; fi; \
- done
-
-uninstall-sbinSCRIPTS:
- @$(NORMAL_UNINSTALL)
- list='$(sbin_SCRIPTS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \
- done
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-
-@SET_MAKE@
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- target=`echo $@ | sed s/-recursive//`; \
- echo "Making $$target in $$subdir"; \
- (cd $$subdir && $(MAKE) $$target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done && test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
- @set fnord $(MAKEFLAGS); amf=$$2; \
- rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
- rev="$$subdir $$rev"; \
- done; \
- for subdir in $$rev; do \
- target=`echo $@ | sed s/-recursive//`; \
- echo "Making $$target in $$subdir"; \
- (cd $$subdir && $(MAKE) $$target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- (cd $$subdir && $(MAKE) tags); \
- done
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
- done; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = login.radius
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
- for subdir in $(SUBDIRS); do \
- test -d $(distdir)/$$subdir \
- || mkdir $(distdir)/$$subdir \
- || exit 1; \
- chmod 777 $(distdir)/$$subdir; \
- (cd $$subdir && $(MAKE) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
- || exit 1; \
- done
-info: info-recursive
-dvi: dvi-recursive
-check: all-am
- $(MAKE) check-recursive
-installcheck: installcheck-recursive
-all-am: Makefile $(SCRIPTS)
-
-install-exec-am: install-sbinSCRIPTS
-
-uninstall-am: uninstall-sbinSCRIPTS
-
-install-exec: install-exec-recursive install-exec-am
- @$(NORMAL_INSTALL)
-
-install-data: install-data-recursive
- @$(NORMAL_INSTALL)
-
-install: install-recursive install-exec-am
- @:
-
-uninstall: uninstall-recursive uninstall-am
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs: installdirs-recursive
- $(mkinstalldirs) $(DATADIR)$(sbindir)
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean-am: mostlyclean-tags mostlyclean-generic
-
-clean-am: clean-tags clean-generic mostlyclean-am
-
-distclean-am: distclean-tags distclean-generic clean-am
-
-maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
- distclean-am
-
-mostlyclean: mostlyclean-recursive mostlyclean-am
-
-clean: clean-recursive clean-am
-
-distclean: distclean-recursive distclean-am
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-recursive maintainer-clean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: uninstall-sbinSCRIPTS install-sbinSCRIPTS install-data-recursive \
-uninstall-data-recursive install-exec-recursive \
-uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
-all-recursive check-recursive installcheck-recursive info-recursive \
-dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info dvi \
-installcheck all-am install-exec-am uninstall-am install-exec \
-install-data install uninstall all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-You can find login.radius script examples here.
-
-login.radius
-
- Dummy script.
-
-migs
-
- Sample login.radius contributed by Miguel A.L. Paraz <map@iphil.net>.
+++ /dev/null
-#!/bin/sh
-#
-# $Id: login.radius,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-cat <<EOF
-This is the dummy login.radius script. If you want that this script
-does something useful you'll have to replace it.
-
-The following RADIUS environment variables are set:
-EOF
-
-set | egrep '^RADIUS_'
-
-echo
-echo "Bye, bye."
-
-exit 0
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-EXTRA_DIST = README ip-down ip-up login.radius
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ../..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-EXTRA_DIST = README ip-down ip-up login.radius
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES =
-DIST_COMMON = README Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps login.radius/migs/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-tags: TAGS
-TAGS:
-
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = login.radius/migs
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall:
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-generic
-
-clean: clean-generic mostlyclean
-
-distclean: distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-generic distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: tags distdir info dvi installcheck install-exec install-data \
-install uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-This sample login.radius was contributed by Miguel A.L. Paraz
-<map@iphil.net>. It implements PPP, Telnet and Rlogin connections.
-
-There currently is no documentation but the scripts are very clear and
-should provide a good starting point.
-
-The ip-up and ip-down scripts must be installed under /etc/ppp so that the
-pppd can find them.
-
-lf, 970524
+++ /dev/null
-#!/usr/bin/perl
-#
-# ip-down
-#
-# Script started when the PPP daemon disconnects.
-#
-
-use strict;
-use GDBM_File;
-
-
-#### RADIUS Begins
-
-my ($sessionid, $username, $port, $portid, $timeout) = split (/:/, $ARGV[5]);
-
-if ($sessionid)
-{
-# Code to inform the server that we're getting out.
-
-# Port information database.
- my $path_portinfo = "/var/ipoint/acct/portinfo";
-
-
-# Radius accounting record generator.
- my $prog_radacct = "/usr/local/lib/radiusclient/radacct";
-
-# The session ID, username, raw port and ID are given to this script
-# through the ipparam parameter of pppd 2.2.0e and above.
-
-# Generate the accounting entry, and hand it over to RADIUS.
-
-# Delete the port info entry since the user has logged off, but make use
-# of the starting time.
- my (%s, @e, $sessiontime);
- tie (%s, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600);
- @e = split (':', $s{$portid});
-
- if ($e[4])
- {
- $sessiontime = time() - $e[4];
- }
-
- delete $s{$portid};
- untie (%s);
-
-# Generate the accounting entry, and hand it over to RADIUS.
-
- open (H, "| $prog_radacct -i $port");
-
- my $cmd =
- "Acct-Session-ID = \"$sessionid\"\n" .
- "User-Name = \"$username\"\n" .
- "Acct-Status-Type = Stop\n" .
- "Acct-Authentic = RADIUS\n" .
- "Service-Type = Framed\n" .
- "Framed-Protocol = PPP\n" .
- "Framed-IP-Address = $ARGV[4]\n";
-
- if ($sessiontime)
- {
- $cmd .= "Acct-Session-Time = $sessiontime\n";
- }
-
- print H $cmd;
- close (H);
-}
-
-#### RADIUS Ends
-
+++ /dev/null
-#!/usr/bin/perl
-#
-# ip-up
-#
-# Script started when the PPP daemon makes a connection.
-#
-
-# This script is given:
-# interface-name tty-device speed local-IP-address remote-IP-address
-# Since this is a PPP server, local-IP-address does not change.
-
-# TODO: Clean up this file and make it really modular.
-
-use strict;
-use GDBM_File;
-
-#### RADIUS section Begins
-
-# Configuration section.
-
-# Port information database.
-my $path_portinfo = "/var/ipoint/acct/portinfo";
-
-
-# Radius accounting record generator.
- my $prog_radacct = "/usr/local/lib/radiusclient/radacct";
-
-sub netmask
-{
- my $count = int ($_[0] / 8);
-
- my $c1 = ("255." x $count);
- $c1 = substr ($c1, 0, -1) if ($count == 4);
- my $c2 = (256 - (1<<(8 - ($_[0] - $count * 8)))) || "0";
- $c2 .= '.' if ($count < 3);
- my $c3 = substr (("0." x (3-$count)), 0, -1);
- return $c1 . $c2. $c3;
-}
-
-my ($sessionid, $username, $port, $portid, $timeout, $routelist) =
- split (/:/, $ARGV[5]);
-
-if ($sessionid)
-{
-# I-Way code to inform the server that we're getting in.
-
-# If there was routing, add it. Format for $route, from the Framed-Route
-# parameter, is address/netmask gateway metric. If gateway is 0.0.0.0,
-# add the route here.
-
-# Unescape the route list.
- $routelist =~ s/%20/ /g;
-
- my $route;
-
- # Debug this.
- open (H, ">>/tmp/ip-up.log");
- print H "ROUTELIST: " . $routelist . "\n";
-
- foreach $route (split ("@", $routelist)) {
- # Split the route into the components.
- my @routevalue = split (' ', $route);
- my ($netmaskcmd, $gwcmd, $metriccmd);
- my @network = split ("/", $routevalue[0]);
-
- if ($network[1]) {
- $netmaskcmd = "netmask " . netmask($network[1]);
- }
-
- if ($routevalue[1] eq "0.0.0.0") {
- $gwcmd = "gw $ARGV[4]";
- }
- elsif ($routevalue[1]) {
- $gwcmd = "gw $routevalue[1]";
- }
-
- if ($routevalue[2]) {
- $metriccmd = "metric $routevalue[2]";
- }
-
- my $routecmd = "/sbin/route add -net $network[0] $netmaskcmd $gwcmd " .
- "$metriccmd";
-
- system ($routecmd);
- print H "COMMAND: " . $routecmd . "\n";
- }
- close (H);
-
-# The session ID, username, raw port and ID are given to this script
-# through the ipparam parameter of pppd 2.2.0e and above.
-
-# Generate the accounting entry, and hand it over to RADIUS.
-
- open (H, "| $prog_radacct -i $port");
-
- my $cmd =
- "Acct-Session-ID = \"$sessionid\"\n" .
- "User-Name = \"$username\"\n" .
- "Acct-Status-Type = Start\n" .
- "Acct-Authentic = RADIUS\n" .
- "Service-Type = Framed\n" .
- "Framed-Protocol = PPP\n" .
- "Framed-IP-Address = $ARGV[4]\n";
-
- print H $cmd;
- close (H);
-}
-
-# Store the username, the connection type, the IP address, the PID of pppd.
-# Index it on the port ID, since 'portman' makes use of this.
-
-my ($timenow, %s);
-$timenow = time();
-tie (%s, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600);
-$s{$portid} = join (':', $username, "Framed-User/PPP", $ARGV[4], getppid (),
- $timenow, $timeout);
-untie (%s);
-
-
-#### RADIUS ends
-
+++ /dev/null
-#!/usr/bin/perl
-#
-# login program to invoke PPP.
-# RADIUS accounting is NOT handled by this; it is handled by /etc/ppp/
-# ip-up and ip-down which are invoked when the TCP/IP connection is up.
-
-# version 0.1 November 5 1996
-# clean up the code, minor features.
-
-# version 0.02 May 8 1996
-#
-# start implementing other types of logins, not only Framed.
-# Also honor static IP addresses.
-#
-# version 0.01 April 1 1996
-#
-# - ignore RADIUS server requests for Framed-User, just
-# do PPP. Later, this should be honored. For now,
-# just use RADIUS for authentication; it's much simpler.
-# Always use dynamic addresses.
-#
-
-use strict;
-use GDBM_File;
-
-#### CONFIGURATION SECTION ##################################################
-
-# Local IP address for the PPP connection.
-my $ip_address_local = "203.176.0.3";
-
-# First IP address for this terminal server, if dynamic addressing
-# is requested, or if nothing is specified for Framed-IP-Address.
-my $ip_address_begin = "203.176.0.161";
-
-# IP translation factor; subtract this value from radclient before adding
-# the beginning IP address.
-my $ip_translate_factor = 32;
-
-# Debugging to screen?
-my $debug = 1;
-
-# PPP parameters:
-
-# Async map - this one escapes only XON and XOFF characters.
-my $asyncmap = "0x000A0000";
-
-# MTU and MRU. 296 is good for interactive performance,
-# but larger ones will lead to less overhead for file transfers.
-# Maximum is 1500.
-my ($mtu, $mru) = (296, 296);
-
-# If we're using proxy ARP, set this to "proxyarp", else leave it blank.
-# my $proxyarp = "proxyarp";
-my $proxyarp = "";
-
-# Login host for non-framed connections.
-# This should only be an IP address, since that's what
-# Login-IP-Host should be.
-my $login_host = "203.176.0.4"; # marikit.iphil.net
-
-# Programs and files.
-my $prog_pppd = "/usr/sbin/pppd";
-my $prog_radacct = "/usr/local/lib/radiusclient/radacct";
-my $prog_rlogin = "/usr/bin/rlogin";
-my $prog_telnet = "/bin/telnet";
-my $prog_tcpclear = "/bin/telnet -e ''";
-my $prog_tty = "/usr/bin/tty";
-my $prog_who = "/usr/bin/who";
-
-my $path_portinfo = "/var/ipoint/acct/portinfo";
-my $path_radiusclient_map = "/etc/radclient/port-id-map";
-
-#############################################################################
-
-# Main program.
-
-print "Starting.\n" if ($debug);
-
-# Run 'who am i' to determine the current port.
-my $port = `$prog_tty`;
-chomp ($port);
-
-# Translate port numbers to numbers for RADIUS.
-# This translation is done again by radacct, but it may be useful here.
-# Remove if CPU time is a problem.
-
-my ($portid, $line);
-open (H, $path_radiusclient_map);
-while (($line = <H>) && (!$portid))
-{
- my @info = split (/\s+/, $line);
- $portid = $info[1] if ($info[0] eq $port);
-}
-close (H);
-
-if ($debug)
-{
- # Print out all the RADIUS variables.
- my @el = grep (/^RADIUS/, keys (%ENV));
- my $e;
- foreach $e (@el)
- {
- print "$e = " . $ENV{$e} . "\n";
- }
-}
-
-# If the service type is Framed, then give them PPP.
-# SLIP is not implemented (and will probably never be).
-
-my $username = $ENV{"RADIUS_USER_NAME"};
-
-# Generate a "unique" string for the session ID.
-my $sessionid = "$$" . time ();
-
-if ($ENV{"RADIUS_SERVICE_TYPE"} =~ /^Framed$/)
-{
-
-# Use the specified IP address, or generate one if none is specified,
-# or a dynamic one requested. Or, let the user negotiate the address.
-
- my $ip_address = $ENV{"RADIUS_FRAMED_IP_ADDRESS"};
-
- if (!$ip_address || ($ip_address eq "255.255.255.254"))
- {
- my @ipn = split (/\./, $ip_address_begin);
- $ipn[3] += $portid - $ip_translate_factor;
- $ip_address = join ('.', @ipn);
-
- if ($debug)
- {
- print "port: $port\n";
- print "portid: $portid\n";
- print "ip_translate_factor: $ip_translate_factor\n";
- print "ip_address: $ip_address\n";
- print "mru: $mru\n";
- }
-
- }
- elsif ($ip_address eq "255.255.255.255")
- {
- # Clear it out so that pppd will let the remote end specify the
- # IP address.
- $ip_address = "";
- }
-
- # Override the specified MTU.
- $mtu = $ENV{"RADIUS_FRAMED_MTU"} if $ENV{"RADIUS_FRAMED_MTU"};
-
- # If no compression is specified, turn it off.
- my $compress;
- if (!$ENV{"RADIUS_FRAMED_COMPRESSION"})
- {
- $compress = "-vj";
- }
-
-# Fix up the parameters to be passed to ip-up. Include Framed-Route.
-# Escape spaces with %20's.
-
- # Split up the framed route into multiple parts.
- # Separate the different given routes with bars.
- my $routelist = join ("@", map {$ENV{$_}}
- grep {/^RADIUS_FRAMED_ROUTE/} keys (%ENV)
- );
- $routelist =~ s/ /%20/g;
-
- my $param = join (':', $sessionid, $username, $port, $portid,
- $ENV{"RADIUS_SESSION_TIMEOUT"}, $routelist);
-
-
-# Run pppd through exec, so that it grabs hold of the terminal
-# and catches disconnections.
-
- # Portmaster-style prompt.
- if ($ENV{"RADIUS_SESSION_TIMEOUT"})
- {
- print "Session timeout: " . $ENV{"RADIUS_SESSION_TIMEOUT"} .
- " seconds.\n";
- }
- print "PPP session from ($ip_address_local) to $ip_address beginning....";
- my $pppdcmd =
- "$prog_pppd $ip_address_local:$ip_address modem crtscts " .
- "asyncmap $asyncmap lock -detach $compress " .
- "ipparam $param mtu $mtu mru $mru $proxyarp";
-
- exec ($pppdcmd);
-}
-elsif ($ENV{"RADIUS_SERVICE_TYPE"} =~ /Login/)
-{
- # Warning: This code has not been tested as well as the PPP version,
- # as of now (19961107).
-
- # Determine what host to connect to.
- if (($ENV{"RADIUS_LOGIN_IP_HOST"} eq "0.0.0.0") ||
- !defined ($ENV{"RADIUS_LOGIN_IP_HOST"}))
- {
- # Do nothing, it's already specified above in the config section.
- }
- elsif ($ENV{"RADIUS_LOGIN_IP_HOST"} eq "255.255.255.255")
- {
- # The user should be able to choose. Prompt the user.
- print "Host to connect to? ";
- $login_host = <STDIN>;
- chomp ($login_host);
- }
- else
- {
- # Use what's specified by the RADIUS server.
- $login_host = $ENV{"RADIUS_LOGIN_IP_HOST"};
- }
-
- # Log into a host. Default to telnet. Do the accounting
- # now, since the target of the login wouldn't know how to
- # account for it.
-
- # Start accounting. Send the record.
- open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct");
-
- my $login_service = $ENV{"RADIUS_LOGIN_SERVICE"};
-
- my $cmd =
- "Acct-Session-ID = \"$sessionid\"\n" .
- "User-Name = \"$username\"\n" .
- "Acct-Status-Type = Start\n" .
- "Acct-Authentic = RADIUS\n" .
- "Service-Type = Login\n" .
- "Login-Service = " . $login_service . "\n" .
- "Login-IP-Host = $login_host\n";
-
- print H $cmd;
- close (H);
-
- # Time.
- my $timestart = time ();
-
- # What protocol are we running?
- my ($prog_run, $login_port);
-
- if ($login_service eq "Rlogin")
- {
- $prog_run = $prog_rlogin;
- }
- elsif ($login_service eq "Telnet")
- {
- $prog_run = $prog_telnet;
- $login_port = $ENV{"RADIUS_LOGIN_PORT"};
- }
- elsif ($login_service eq "TCP-Clear")
- {
- $prog_run = $prog_tcpclear;
- $login_port = $ENV{"RADIUS_LOGIN_PORT"};
- }
-
- # Store the user information into portinfo. We need to
- # manually fork, since we have to know the PID of the program.
-
- my $pid = fork ();
- if ($pid == 0)
- {
- # Child. Run the program.
- # print "Connecting to $login_host:\n";
- my $cmd = "$prog_run $login_host $login_port";
- exec ("$cmd");
- }
- else
- {
- # Parent.
- # Create the portinfo record, which needs the pid of the program
- # to kill.
- # The IP address is all zero, as it is not applicable here.
- # Store the time now, and the Session-Timeout.
-
- my %db_portinfo;
-
- tie (%db_portinfo, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600);
- $db_portinfo{$portid} =
- join (':', $username, "Login/$login_service",
- "0.0.0.0", $pid, $timestart, $ENV{"RADIUS_SESSION_TIMEOUT"});
- untie (%db_portinfo);
-
- # Wait for the session to finish.
- waitpid ($pid, 0);
- }
- # Stop. Send the record.
- open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct");
-
- my $timespent = time () - $timestart;
-
- my $cmd =
- "Acct-Session-ID = \"$sessionid\"\n" .
- "User-Name = \"$username\"\n" .
- "Acct-Status-Type = Stop\n" .
- "Acct-Authentic = RADIUS\n" .
- "Service-Type = Login\n" .
- "Login-Service = " . $login_service . "\n" .
- "Login-IP-Host = $login_host\n" .
- "Acct-Session-Time = $timespent\n";
-
- print H $cmd;
- close (H);
-
- # Remove the record from portinfo.
- my %db_portinfo;
- tie (%db_portinfo, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600);
- delete $db_portinfo{$portid};
- untie (%db_portinfo);
-}
-
-### END ####
-
-
-
-
+++ /dev/null
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# When updating this script, search for LINENUM and fix line number refs.
-# Generated automatically from ltconfig.in by configure.
-# Copyright (C) 1996, 1997, Free Software Foundation, Inc.
-# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# The name of this program.
-progname=`echo "$0" | sed 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.0
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking.
-enable_static=yes
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_RANLIB="$RANLIB"
-
-test -z "$AR" && AR=ar
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
- case "$option" in
- -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- eval "$prev=\$option"
- prev=
- continue
- fi
-
- case "$option" in
- --help) cat <<EOM
-Usage: $progname [OPTION]... LTMAIN [HOST]
-
-Generate a system-specific libtool script.
-
- --disable-shared do not build shared libraries
- --disable-static do not build static libraries
- --help display this help and exit
- --no-verify do not verify that HOST is a valid host type
- --quiet same as \`--silent'
- --silent don't print informational messages
- --srcdir=DIR find \`config.guess' in DIR
- --version output version information and exit
- --with-gcc assume that the GNU C compiler will be used
- --with-gnu-ld assume that the C compiler uses the GNU linker
-
-LTMAIN is the \`ltmain.sh' shell script fragment that provides basic libtool
-functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
- exit 0
- ;;
-
- --disable-shared) enable_shared=no ;;
-
- --disable-static) enable_static=no ;;
-
- --quiet | --silent) silent=yes ;;
-
- --srcdir) prev=srcdir ;;
- --srcdir=*) srcdir="$optarg" ;;
-
- --no-verify) verify_host=no ;;
-
- --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION"; exit 0 ;;
-
- --with-gcc) with_gcc=yes ;;
- --with-gnu-ld) with_gnu_ld=yes ;;
-
- -*)
- echo "$progname: unrecognized option \`$option'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- if test -z "$ltmain"; then
- ltmain="$option"
- elif test -z "$host"; then
-# FIXME This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-# echo "$progname: warning \`$option' is not a valid host type" 1>&2
-# fi
- host="$option"
- else
- echo "$progname: too many arguments" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
-done
-
-if test -z "$ltmain"; then
- echo "$progname: you must specify a LTMAIN file" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-if test -f "$ltmain"; then :
-else
- echo "$progname: warning: \`$ltmain' does not exist" 1>&2
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
- case "$arg" in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ltconfig_args="$ltconfig_args '$arg'" ;;
- *) ltconfig_args="$ltconfig_args $arg" ;;
- esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
- # Assume the source directory is the same one as the path to ltmain.sh.
- srcdir=`echo "$ltmain" | sed 's%/[^/]*$%%'`
- test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-if test "$verify_host" = yes; then
- # Check for config.guess and config.sub.
- ac_aux_dir=
- for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/config.guess; then
- ac_aux_dir=$ac_dir
- break
- fi
- done
- if test -z "$ac_aux_dir"; then
- echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
- echo "$help" 1>&2
- exit 1
- fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
-
- # Make sure we can run config.sub.
- if $ac_config_sub sun4 >/dev/null 2>&1; then :
- else
- echo "$progname: cannot run $ac_config_sub" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-
- host_alias=$host
- case "$host_alias" in
- "")
- if host_alias=`$ac_config_guess`; then :
- else
- echo "$progname: cannot guess host type; you must specify one" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
- host=`$ac_config_sub $host_alias`
- echo "$ac_t""$host" 1>&6
-
-elif test -z "$host"; then
- echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
- echo "$help" 1>&2
- exit 1
-else
- host_alias=$host
-fi
-
-# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host" in
-*-*-linux-gnu*) ;;
-*-*-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
- result=no
-
- echo $ac_n "checking for ranlib... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/ranlib; then
- RANLIB="ranlib"
- result="ranlib"
- break
- fi
- done
- IFS="$save_ifs"
-
- echo $ac_t "$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
- old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib"
- old_postinstall_cmds="$old_postinstall_cmds;\$RANLIB \$oldlib"
-fi
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
- # If CC is not set, then try to find GCC or a usable CC.
- if test -z "$CC"; then
- echo $ac_n "checking for gcc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
- for dir in $PATH; do
- IFS="$save_ifs"
- test -z "$dir" && dir=.
- if test -f $dir/gcc; then
- CC="gcc"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
- else
- echo "$ac_t""no" 1>&6
- fi
- fi
-
- # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
- if test -z "$CC"; then
- echo $ac_n "checking for cc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
- cc_rejected=no
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/cc; then
- if test "$dir/cc" = "/usr/ucb/cc"; then
- cc_rejected=yes
- continue
- fi
- CC="cc"
- break
- fi
- done
- IFS="$save_ifs"
- if test $cc_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same name, so the bogon will be chosen
- # first if we set CC to just the name; use the full file name.
- shift
- set dummy "$dir/cc" "$@"
- shift
- CC="$@"
- fi
- fi
-
- if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
- else
- echo "$ac_t""no" 1>&6
- fi
-
- if test -z "$CC"; then
- echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
- exit 1
- fi
- fi
-
- # Now see if the compiler is really GCC.
- with_gcc=no
- echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-
- trap "$rm conftest.c; exit 1" 1 2 15
- $rm conftest.c
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
- # LINENUM
- if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- with_gcc=yes
- fi
- $rm conftest.c
- echo $ac_t "$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-profile_flag_pattern=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-
-if test "$with_gcc" = yes; then
- pic_flag='-fPIC'
- profile_flag_pattern='-pg?'
- wl='-Wl,'
- link_static_flag='-static'
-else
- # PORTME Check for PIC flags for the system compiler.
- case "$host_os" in
- aix3* | aix4*)
- # FIXME All rs/6000 code is PIC, but is there any non-rs/6000 AIX platform?
- pic_flag=
- link_static_flag='-bnso -bI:/lib/syscalls.exp'
- ;;
-
- hpux9* | hpux10*)
- # FIXME is there a better link_static_flag that works with the bundled CC?
- wl='-Wl,'
- link_static_flag='${wl}-a ${wl}archive'
- pic_flag='+Z'
- ;;
-
- irix5* | irix6*)
- wl='-Wl,'
- link_static_flag='-non_shared'
- # PIC (with -KPIC) is the default.
- pic_flag=
- ;;
-
- osf3* | osf4*)
- # FIXME - pic_flag is probably required for hppa*-osf* and i860-osf*
- wl='-Wl,'
- link_static_flag='-non_shared'
- ;;
-
- sco3.2v5*)
- pic_flag='-Kpic'
- link_static_flag='-dn'
- special_shlib_compile_flags='-belf'
- ;;
-
- solaris2*)
- pic_flag='-KPIC'
- link_static_flag='-Bstatic'
- wl='-Wl,'
- ;;
-
- sunos4*)
- pic_flag='-PIC'
- link_static_flag='-Bstatic'
- wl='-Qoption ld '
- ;;
-
- *)
- can_build_shared=no
- ;;
- esac
-fi
-
-case "$host_cpu" in
-rs6000 | powerpc | powerpcle)
- # Yippee! All RS/6000 and PowerPC code is position-independent.
- pic_flag=
- ;;
-esac
-
-if test -n "$pic_flag"; then
- echo $ac_t "$pic_flag" 1>&6
- pic_flag=" $pic_flag"
-else
- echo $ac_t none 1>&6
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
- echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
- if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then :
- else
- echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
- can_build_shared=no
- fi
-fi
-
-# See if we are using a broken GCC collect2 program.
-if test "$with_gcc" = yes; then
- echo $ac_n "checking for broken GCC collect2... $ac_c" 1>&6
-
- # FIXME: Run a test here, instead of relying on the canonical system name.
- case "$host_os" in
- aix3*)
- can_build_shared=no
- echo $ac_t yes 1>&6
- echo "$progname: to build shared libraries, set the CC env variable to \`xlc' and reconfigure" 1>&2
- ;;
- *)
- echo $ac_t no 1>&6
- ;;
- esac
-fi
-
-echo $ac_n "checking for $compiler option to statically link programs... $ac_c" 1>&6
-if test -n "$link_static_flag"; then
- echo $ac_t "$link_static_flag" 1>&6
-else
- echo $ac_t none 1>&6
-fi
-
-if test -z "$LN_S"; then
- # Check to see if we can use ln -s, or we need hard links.
- echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
- rm -f conftestdata
- if ln -s X conftestdata 2>/dev/null; then
- rm -f conftestdata
- LN_S="ln -s"
- else
- LN_S=ln
- fi
- if test "$LN_S" = "ln -s"; then
- echo "$ac_t"yes 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-fi
-
-if test "$with_gnu_ld" != yes || test -z "$LD"; then
- if test -z "$LD"; then
- if test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld... $ac_c" 1>&6
- else
- echo $ac_n "checking for non-GNU ld... $ac_c" 1>&6
- fi
-
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/ld"; then
- LD="$ac_dir/ld"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$LD" -v 2>&1 < /dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then
- test "$with_gnu_ld" = yes && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-
- if test -n "$LD"; then
- echo "$ac_t""$LD" 1>&6
- else
- echo "$ac_t""no" 1>&6
- fi
-
- if test -z "$LD"; then
- echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
- exit 1
- fi
- fi
-
- echo $ac_n "checking whether we are using GNU ld... $ac_c" 1>&6
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
- if $LD -v 2>&1 </dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then
- with_gnu_ld=yes
- fi
- echo $ac_t "$with_gnu_ld" 1>&6
-fi
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-archive_cmds=
-export_dynamic_flag=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_runpath_var=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # See if GNU ld supports shared libraries.
-
- case "$host_os" in
- sunos4*)
- ld_shlibs=yes
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- archive_cmds='$cc -shared ${wl}-soname $wl$soname -o $lib$libobjs$deplibs'
- hardcode_libdir_flag_spec='${wl}-rpath $wl$libdir'
- export_dynamic_flag='${wl}-export-dynamic'
- fi
-else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case "$host_os" in
- aix3*)
- allow_undefined_flag=unsupported
- archive_cmds='/usr/ucb/nm$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE -lc$deplibs;$AR cru $lib $objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- ;;
-
- aix4*)
- allow_undefined_flag=unsupported
- archive_cmds='/bin/nm -B$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$cc -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry$deplibs;$AR cru $lib $objdir/$soname'
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # doesn't break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs /usr/lib/c++rt0.o'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 don't have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3, at last, uses gcc -shared to do shared libraries.
- freebsd3*)
- archive_cmds='$CC -shared -o $lib$libobjs$deplibs'
- hardcode_direct=yes
- hardcode_minusL=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs$deplibs;mv $objdir/$soname $lib'
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
-
- hpux10*)
- archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs$deplibs'
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
-
- irix5* | irix6*)
- archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- ;;
-
- netbsd* | openbsd*)
- # Tested with NetBSD 1.2 ld
- archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- osf3* | osf4*)
- allow_undefined_flag=' -expect_unresolved'
- archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -o $lib$libobjs$deplibs'
- hardcode_direct=yes
- ;;
-
- solaris2*)
- archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- can_build_shared=no
- ;;
- esac
-fi
-echo $ac_t "$ld_shlibs" 1>&6
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test "$hardcode_runpath_var" = yes; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no && \
- test "$hardcode_minus_L" != no && \
- test "$hardcode_shlibpath_var" != no; then
-
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-elif test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
- test "$hardcode_shlibpath_var" != yes; then
- # We can't hardcode anything.
- hardcode_action=unsupported
-else
- # We can only hardcode existing directories.
- hardcode_action=relink
-fi
-echo $ac_t "$hardcode_action" 1>&6
-test "$hardcode_action" = unsupported && can_build_shared=no
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linker may need a different reload flag.
-reload_flag='-r'
-echo $ac_t "$reload_flag"
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-soname_spec=
-postinstall_cmds=
-finish_cmds=
-shlibpath_var=
-version_type=none
-dynamic_linker="$host_os ld.so"
-
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3* | aix4*)
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX has no versioning support, so we append a major version to the name.
- soname_spec='$libname.so.$major'
- ;;
-
-freebsd2* | freebsd3*)
- version_type=sunos
- library_names_spec='$libname.so.$versuffix $libname.so'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-gnu*)
- version_type=sunos
- library_names_spec='$libname.so.$versuffix'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-hpux9* | hpux10*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- dynamic_linker="$host_os dld.sl"
- version_type=sunos
- shlibpath_var=SHLIB_PATH
- library_names_spec='$libname.sl.$versuffix $libname.sl.$major $libname.sl'
- soname_spec='$libname.sl.$major'
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6*)
- version_type=osf
- soname_spec='$libname.so'
- library_names_spec='$libname.so.$versuffix $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux-gnu*)
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
-
- if test -f /lib/ld.so.1; then
- dynamic_linker='GNU ld.so'
- else
- # Only the GNU ld.so supports shared libraries on MkLinux.
- case "$host_cpu" in
- powerpc*) dynamic_linker=no ;;
- *) dynamic_linker='Linux ld.so' ;;
- esac
- fi
- ;;
-
-netbsd* | openbsd*)
- version_type=sunos
- library_names_spec='$libname.so.$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-osf3* | osf4*)
- version_type=osf
- soname_spec='$libname.so'
- library_names_spec='$libname.so.$versuffix $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='$libname.so.$major'
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris2*)
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='$libname.so.$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$ac_t""$dynamic_linker"
-test "$dynamic_linker" = no && can_build_shared=no
-
-# FIXME need to add library stripping features
-# strip -x works for most platforms, though not for static libraries on NetBSD
-# HP-UX requires "-r" for library stripping
-striplib=
-old_striplib=
-
-#echo $ac_n "checking for static library strip program... $ac_c" 1>&6
-#if test -n "$old_striplib"; then
-# echo $ac_t "$old_striplib" 1>&6
-#else
-# echo $ac_t none 1>&6
-#fi
-
-#if test "$can_build_shared" = yes; then
-# echo $ac_n "checking for shared library strip program... $ac_c" 1>&6
-#
-# if test -n "$striplib"; then
-# echo $ac_t "$striplib" 1>&6
-# else
-# echo $ac_t none 1>&6
-# fi
-#fi
-
-# Report the consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace.
-case "$host_os" in
-aix*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds;\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-esac
-
-echo "$ac_t""$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-ofile=libtool
-trap "$rm $ofile; exit 1" 1 2 15
-echo creating $ofile
-rm -fr $ofile
-cat <<EOF > $ofile
-#! /bin/sh
-
-# libtool - Provide generalized library-building support services.
-#
-# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION
-# This program was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\
-# LD="$old_LD" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\
-# $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION="$VERSION"
-
-# Whether or not to build libtool libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build old-style libraries.
-build_old_libs=$enable_static
-
-# The host system.
-host_alias="$host_alias"
-host="$host"
-
-# The archiver.
-AR='$AR'
-
-# The linker used to build libraries.
-LD='$LD'
-
-# Whether we need hard or soft links.
-LN_S='$LN_S'
-
-# How to create reloadable object files.
-reload_flag='$reload_flag'
-reload_cmds='$reload_cmds'
-
-# How to pass a linker flag through the compiler.
-wl='$wl'
-
-# Additional compiler flags for building library objects.
-pic_flag='$pic_flag'
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag='$link_static_flag'
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag='$export_dynamic_flag'
-
-# Pattern to match compiler flags for creating libNAME_p libraries:
-profile_flag_pattern='$profile_flag_pattern'
-
-# Library versioning type.
-version_type=$version_type
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec='$library_names_spec'
-
-# The coded name of the library, if different from the real name.
-soname_spec='$soname_spec'
-
-# Commands used to build and install an old-style archive.
-RANLIB='$RANLIB'
-old_archive_cmds='$old_archive_cmds'
-old_postinstall_cmds='$old_postinstall_cmds'
-
-# Commands used to build and install a shared archive.
-archive_cmds='$archive_cmds'
-postinstall_cmds='$postinstall_cmds'
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag='$allow_undefined_flag'
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds='$finish_cmds'
-
-# How to strip a library file.
-striplib='$striplib'
-old_striplib='$old_striplib'
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec='$hardcode_libdir_flag_spec'
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator='$hardcode_libdir_separator'
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using RUNPATH_VAR=DIR during linking hardcodes DIR into the
-# resulting binary.
-hardcode_runpath_var=$hardcode_runpath_var
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-EOF
-
-# Detect if we are using a relative or absolute path to ltmain.sh.
-case "$ltmain" in
-/*) cat <<EOF2 >> $ofile
-# Execute the libtool backend.
-. $ltmain
-EOF2
- ;;
-*) cat <<EOF3 >> $ofile
-# Find the path to this script.
-thisdir=\`echo "\$0" | sed -e 's%/[^/]*\$%%'\`
-test "X\$0" = "X\$thisdir" && thisdir=.
-
-# Execute the libtool backend.
-. \$thisdir/$ltmain
-EOF3
- ;;
-esac
-
-echo 'exit 1' >> $ofile
-
-chmod +x $ofile
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
+++ /dev/null
-# ltmain.sh - Provide generalized library-building support services.
-# Generated automatically from ltmain.sh.in by configure.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# The name of this program.
-progname=`echo "$0" | sed 's%^.*/%%'`
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.0
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-objdir=.libs
-rm="rm -f"
-
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
- echo "$progname: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-#
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$progname: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show=echo
-show_help=
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
- arg="$1"
- shift
-
- case "$arg" in
- -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- eval "$prev=\$arg"
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case "$arg" in
- --help)
- show_help=yes
- ;;
-
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION"
- exit 0
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
- else
- echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- echo "enable static libraries"
- else
- echo "disable static libraries"
- fi
- exit 0
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- -*)
- echo "$progname: unrecognized option \`$arg'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-
-if test -n "$prevopt"; then
- echo "$progname: option \`$prevopt' requires an argument" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- case "$nonopt" in
- *cc)
- mode=link
- for arg
- do
- case "$arg" in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *install*|cp)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *.la)
- mode=dlname
- ;;
- *)
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- echo "$progname: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- echo "$progname: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$progname --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case "$mode" in
- # libtool compile mode
- compile)
- progname="$progname: compile"
- # Get the compilation command and the source file.
- base_compile="$nonopt"
- lastarg=
- srcfile=
-
- for arg
- do
- # Quote any args containing shell metacharacters.
- case "$arg" in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*|*\"*)
- quote_arg="'$arg'" ;;
- *) quote_arg="$arg" ;;
- esac
-
- base_compile="$base_compile$lastarg"
- srcfile="$quote_arg"
- lastarg=" $srcfile"
- done
-
- # Get the name of the library object.
- libobj=`echo "$srcfile" | sed -e 's%^.*/%%'`
-
- # Recognize several different file suffixes.
- xform='[cCFSf]'
- case "$libobj" in
- *.c++) xform='c++' ;;
- *.cc) xform=cc ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
- *.for) xform='for' ;;
- esac
-
- libobj=`echo "$libobj" | sed -e "s/\.$xform$/.lo/"`
-
- case "$libobj" in
- *.lo) obj=`echo "$libobj" | sed -e 's/\.lo$/.o/'` ;;
- *)
- echo "$progname: cannot determine name of library object from \`$srcfile'" 1>&2
- exit 1
- ;;
- esac
-
- if test -z "$base_compile"; then
- echo "$progname: you must specify a compilation command" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- $run $rm $obj $libobj
- trap "$run $rm $obj $libobj; exit 1" 1 2 15
- else
- $run $rm $libobj
- trap "$run $rm $libobj; exit 1" 1 2 15
- fi
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # All platforms use -DPIC, to notify preprocessed assembler code.
- $show "$base_compile$pic_flag -DPIC $srcfile"
- if $run eval "$base_compile$pic_flag -DPIC $srcfile"; then :
- else
- test -n "$obj" && $run $rm $obj
- exit 1
- fi
-
- # If we have no pic_flag, then copy the object into place and finish.
- if test -z "$pic_flag"; then
- $show "$LN_S $obj $libobj"
- $run $LN_S $obj $libobj
- exit $?
- fi
-
- # Just move the object, then go on to compile the next one
- $show "$mv $obj $libobj"
- $run $mv $obj $libobj || exit 1
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- $show "$base_compile $srcfile"
- if $run eval "$base_compile $srcfile"; then :
- else
- $run $rm $obj $libobj
- exit 1
- fi
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't accidentally
- # link it into a program.
- if test "$build_libtool_libs" != yes; then
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
- fi
-
- exit 0
- ;;
-
- # libtool link mode
- link)
- progname="$progname: link"
- # Go through the arguments, transforming them on the way.
- cc="$nonopt"
- args="$cc"
- allow_undefined=no
- compile_command="$cc"
- finalize_command="$cc"
- compile_shlibpath=
- finalize_shlibpath=
- deplibs=
- export_dynamic=no
- hardcode_libdirs=
- install_libdir=
- libobjs=
- link_against_libtool_libs=
- link_static=
- ltlibs=
- objs=
- prev=
- prevarg=
- perm_rpath=
- temp_rpath=
- vinfo=
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case "$arg" in
- -static)
- build_libtool_libs=no
- build_old_libs=yes
- break
- ;;
- esac
- done
-
- for arg
- do
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case "$prev" in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- args="$args $arg"
- ;;
- esac
-
- eval "$prev=\$arg"
- prev=
-
- continue
- fi
-
- args="$args $arg"
- prevarg="$arg"
-
- case "$arg" in
- -allow-undefined) allow_undefined=yes ;;
-
- -export-dynamic)
- export_dynamic=yes
- compile_command="$compile_command $export_dynamic_flag"
- finalize_command="$finalize_command $export_dynamic_flag"
- continue
- ;;
-
- -L*)
- dir=`echo "$arg" | sed 's%^-L\(.*\)$%\1%'`
- case "$dir" in
- /*)
- ;;
- *)
- echo "$progname: \`-L$dir' cannot specify a relative directory" 1>&2
- exit 1
- ;;
- esac
- deplibs="$deplibs $arg"
- ;;
-
- -l*) deplibs="$deplibs $arg" ;;
-
- -o) prev=output ;;
-
- -rpath)
- prev=install_libdir
- continue
- ;;
-
- -static)
- link_static="`eval echo \"$link_static_flag\"`"
- compile_command="$compile_command $link_static"
- continue
- ;;
-
- -version-file)
- echo "$progname: \`-version-file' has been replaced by \`-version-info'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- -*) cc="$cc $arg" ;; # Some other compiler flag.
-
- *.o)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.a)
- # Find the relevant object directory and library name.
- file=`echo "$arg" | sed 's%^.*/%%'`
- dir=`echo "$arg" | sed 's%/[^/]*$%/%'`
- test "$dir" = "$arg" && dir=
-
- # Standard archive.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A library object.
- libobjs="$libobjs $arg"
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- libdir=
- library_names=
- old_library=
-
- # Check to see that this really is a libtool archive.
- if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then :
- else
- echo "$progname: \`$arg' is not a valid libtool archive" 1>&2
- exit 1
- fi
-
- # If there is no directory component, then add one.
- case "$arg" in
- */*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$libdir"; then
- echo "$progname: \`$arg' contains no -rpath information" 1>&2
- exit 1
- fi
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
-
- if test -z "$linklib"; then
- echo "$progname: cannot find name of link library for \`$arg'" 1>&2
- exit 1
- fi
-
- # Find the relevant object directory and library name.
- name=`echo "$arg" | sed 's%^.*/%%; s/\.la$//; s/^lib//'`
- dir=`echo "$arg" | sed 's%/[^/]*$%%'`
- if test "$dir" = "$arg"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
-
- if test "$build_libtool_libs" = yes && test -n "$library_names"; then
- link_against_libtool_libs="$link_against_libtool_libs $arg"
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- "* $dir *") ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
-
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- # Put the magic libdir with the hardcode flag.
- hardcode_libdirs="$libdir"
- libdir="@HARDCODE_LIBDIRS@"
- else
- # Just accumulate the libdirs.
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- libdir=
- fi
- fi
-
- if test -n "$libdir"; then
- hardcode_libdir_flag=`eval echo \"$hardcode_libdir_flag_spec\"`
- compile_command="$compile_command $hardcode_libdir_flag"
- finalize_command="$finalize_command $hardcode_libdir_flag"
- fi
- elif test "$hardcode_runpath_var" = yes; then
- # Do the same for the permanent run path.
- case "$perm_rpath " in
- "* $libdir *") ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
-
-
- case "$hardcode_action" in
- immediate)
- if test "$hardcode_direct" = no; then
- compile_command="$compile_command $dir/$linklib"
- elif test "$hardcode_minus_L" = no; then
- compile_command="$compile_command -L$dir -l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- compile_shlibpath="$compile_shlibpath$dir:"
- compile_command="$compile_command -l$name"
- fi
- ;;
-
- relink)
- # We need an absolute path.
- case "$dir" in
- /*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- echo "$progname: cannot determine absolute directory name of \`$dir'" 1>&2
- exit 1
- fi
- dir="$absdir"
- ;;
- esac
-
- if test "$hardcode_direct" = yes; then
- compile_command="$compile_command $dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- compile_command="$compile_command -L$dir -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- compile_shlibpath="$compile_shlibpath$dir:"
- compile_command="$compile_command -l$name"
- fi
- ;;
-
- *)
- echo "$progname: \`$hardcode_action' is an unknown hardcode action" 1>&2
- exit 1
- ;;
- esac
-
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- finalize_command="$finalize_command $libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- finalize_command="$finalize_command -L$libdir -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- finalize_shlibpath="$finalize_shlibpath$libdir:"
- finalize_command="$finalize_command -l$name"
- else
- # We can't seem to hardcode it, guess we'll fake it.
- finalize_command="$finalize_command -L$libdir -l$name"
- fi
- else
- # Transform directly to old archives if we don't build new libraries.
- if test -n "$pic_flag" && test -z "$old_library"; then
- echo "$progname: cannot find static library for \`$arg'" 1>&2
- exit 1
- fi
- test -n "$old_library" && linklib="$old_library"
- compile_command="$compile_command $dir/$linklib"
- finalize_command="$finalize_command $dir/$linklib"
- fi
- continue
- ;;
-
- *)
- echo "$progname: unknown file suffix for \`$arg'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- done
-
- if test -n "$prev"; then
- echo "$progname: the \`$prevarg' option requires an argument" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- # Substitute the hardcoded libdirs into the compile commands.
- if test "$hardcode_libdir_colon_separated" = yes; then
- compile_command=`echo "$compile_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"`
- finalize_command=`echo "$finalize_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"`
- fi
-
- oldlib=
- oldobjs=
- case "$output" in
- "")
- echo "$progname: you must specify an output file" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- */*)
- echo "$progname: output file \`$output' must have no directory components" 1>&2
- exit 1
- ;;
-
- *.la)
- libname=`echo "$output" | sed 's/\.la$//'`
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
- current=0
- revision=0
- age=0
-
- if test -n "$objs"; then
- echo "$progname: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- exit 1
- fi
-
- # How the heck are we supposed to write a wrapper for a shared library?
- if test -n "$link_against_libtool_libs"; then
- echo "$progname: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2
- exit 1
- fi
-
- if test -z "$install_libdir"; then
- echo "$progname: you must specify an installation directory with \`-rpath'" 1>&2
- exit 1
- fi
-
- # Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
- set dummy $vinfo
- IFS="$save_ifs"
-
- if test -n "$5"; then
- echo "$progname: too many parameters to \`-version-info'" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- test -n "$2" && current="$2"
- test -n "$3" && revision="$3"
- test -n "$4" && age="$4"
-
- # Check that each of the things are valid numbers.
- case "$current" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- echo "$progname: CURRENT \`$current' is not a nonnegative integer" 1>&2
- echo "$progname: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case "$revision" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- echo "$progname: REVISION \`$revision' is not a nonnegative integer" 1>&2
- echo "$progname: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case "$age" in
- 0 | [1-9] | [1-9][0-9]*) ;;
- *)
- echo "$progname: AGE \`$age' is not a nonnegative integer" 1>&2
- echo "$progname: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- if test $age -gt $current; then
- echo "$progname: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- echo "$progname: \`$vinfo' is not valid version information" 1>&2
- exit 1
- fi
-
- # Calculate the version variables.
- version_vars="version_type current age revision"
- case "$version_type" in
- none) ;;
-
- linux)
- version_vars="$version_vars major versuffix"
- major=`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- version_vars="$version_vars versuffix verstring"
- major=`expr $current - $age`
- versuffix="$current.$age.$revision"
- verstring="$versuffix"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test $loop != 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- version_vars="$version_vars major versuffix"
- major="$current"
- versuffix="$current.$revision"
- ;;
-
- *)
- echo "$progname: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
- ;;
- esac
-
- # Create the output directory, or remove our outputs if we need to.
- if test -d $objdir; then
- $show "$rm $objdir/$libname.*"
- $run $rm $objdir/$libname.*
- else
- $show "$mkdir $objdir"
- $run $mkdir $objdir || exit $?
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- echo "$progname: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- fi
- else
- # Clear the flag.
- allow_undefined_flag=
- fi
-
- if test "$build_libtool_libs" = yes; then
- # Get the real and link names of the library.
- library_names=`eval echo \"$library_names_spec\"`
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- soname=`eval echo \"$soname_spec\"`
- else
- soname="$realname"
- fi
-
- lib="$objdir/$realname"
- linknames=
- for link
- do
- linknames="$linknames $link"
- done
-
- # Use standard objects if they are PIC.
- test -z "$pic_flag" && libobjs=`echo "$libobjs " | sed 's/\.lo /.o /g; s/ $//g'`
-
- # Do each of the archive commands.
- cmds=`eval echo \"$archive_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Create links to the real library.
- for link in $linknames; do
- $show "(cd $objdir && $LN_S $realname $link)"
- $run eval "(cd $objdir && $LN_S $realname $link)" || exit $?
- done
-
- # If -export-dynamic was specified, set the dlname.
- if test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- *.lo | *.o)
- if test -n "$link_against_libtool_libs"; then
- echo "$progname: error: cannot link libtool libraries into reloadable objects" 1>&2
- exit 1
- fi
-
- if test -n "$deplibs"; then
- echo "$progname: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2
- fi
-
- if test -n "$install_libdir"; then
- echo "$progname: warning: \`-rpath' is ignored while creating objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- echo "$progname: warning: \`-version-info' is ignored while creating objects" 1>&2
- fi
-
- case "$output" in
- *.lo)
- if test -n "$objs"; then
- echo "$progname: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit 1
- fi
- libobj="$output"
- obj=`echo "$output" | sed 's/\.lo$/.o/'`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Create the old-style object.
- reload_objs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'`
-
- output="$obj"
- cmds=`eval echo \"$reload_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- test -z "$libobj" && exit 0
-
- if test "$build_libtool_libs" != yes; then
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
- exit 0
- fi
-
- if test -n "$pic_flag"; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs"
- output="$libobj"
- cmds=`eval echo \"$reload_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- else
- # Just create a symlink.
- $show "$LN_S $obj $libobj"
- $run $LN_S $obj $libobj || exit 1
- fi
-
- exit 0
- ;;
-
- *)
- if test -n "$install_libdir"; then
- echo "$progname: warning: \`-rpath' is ignored while linking programs" 1>&2
- fi
-
- if test -n "$vinfo"; then
- echo "$progname: warning: \`-version-info' is ignored while linking programs" 1>&2
- fi
-
- if test -n "$libobjs"; then
- # Transform all the library objects into standard objects.
- compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'`
- finalize_command=`echo "$finalize_command " | sed 's/\.lo /.o /g; s/ $//'`
- fi
-
- if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$output"'%g'`
- finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$output"'%g'`
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$compile_command"
- $run $compile_command
- status=$?
-
- # If we failed to link statically, then try again.
- if test $status -ne 0 && test -n "$link_static"; then
- echo "$progname: cannot link \`$output' statically; retrying semi-dynamically" 1>&2
- compile_command=`echo "$compile_command " | sed "s% $link_static % %;s/ $//"`
- $show "$finalize_command"
- $run $finalize_command
- status=$?
- fi
- exit $status
- fi
-
- # Replace the output file specification.
- compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$objdir/$output"'%g'`
- finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$objdir/$output"'T%g'`
-
- # Create the binary in the object directory, then wrap it.
- if test -d $objdir; then :
- else
- $show "$mkdir $objdir"
- $run $mkdir $objdir || exit $?
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case "$dir" in
- /*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- # Delete the old output file.
- $run $rm $output
-
- if test -n "$compile_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command"
- finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command"
- fi
-
- case "$hardcode_action" in
- relink)
- # AGH! Flame the AIX and HP-UX people for me, will ya?
- echo "$progname: warning: using a buggy system linker" 1>&2
- echo "$progname: relinking will be required before \`$output' can be installed" 1>&2
- ;;
- esac
-
- $show "$compile_command"
- $run eval "$compile_command" || exit $?
-
- # Now create the wrapper script.
- echo "creating $output"
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- $rm $output
- trap "$rm $output; exit 1" 1 2 15
-
- cat > $output <<EOF
-#! /bin/sh
-
-# $output - temporary wrapper script for $objdir/$output
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of \``pwd`'.
-# If it is, it will not operate correctly.
-
-# This environment variable determines our operation mode.
-if test "\$libtool_install_magic" = "$magic"; then
- # install mode needs the following variables:
- link_against_libtool_libs='$link_against_libtool_libs'
- finalize_command='$finalize_command'
-else
- # Find the directory that this script lives in.
- thisdir=\`echo \$0 | sed 's%/[^/]*$%%'\`
- test "x\$thisdir" = "x\$0" && thisdir=.
-
- # Try to get the absolute directory name.
- absdir=\`cd "\$thisdir" && pwd\`
- test -n "\$absdir" && thisdir="\$absdir"
-
- progdir="\$thisdir/$objdir"
- program="$output"
-
- if test -f "\$progdir/\$program"; then
- # Run the actual program with our arguments.
- args=
- for arg
- do
- # Quote arguments (to preserve shell metacharacters).
- args="\$args '\$arg'"
- done
-
- # Export the path to the program.
- PATH="\$progdir:\$PATH"
- export PATH
-EOF
-
- # Export our shlibpath_var if we have one.
- if test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- cat >> $output <<EOF
-
- # Add our own library path to $shlibpath_var
- $shlibpath_var="$temp_rpath\$$shlibpath_var"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- $shlibpath_var=\`echo \$$shlibpath_var | sed -e 's/:*\$//'\`
-
- export $shlibpath_var
-EOF
- fi
-
- cat >> $output <<EOF
-
- eval "exec \$program \$args"
-
- echo "\$0: cannot exec \$program \$args"
- exit 1
- else
- # The program doesn't exist.
- echo "\$0: error: \$progdir/\$program does not exist" 1>&2
- echo "This script is just a wrapper for \$program." 1>&2
- echo "See the $PACKAGE documentation for more information." 1>&2
- exit 1
- fi
-fi
-EOF
- chmod +x $output
- fi
- exit 0
- ;;
- esac
-
-
- # See if we need to build an old-fashioned archive.
- if test "$build_old_libs" = "yes"; then
- # Now set the variables for building old libraries.
- oldlib="$objdir/$libname.a"
-
- # Transform .lo files to .o files.
- oldobjs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'`
-
- if test -d "$objdir"; then
- $show "$rm $oldlib"
- $run $rm $oldlib
- else
- $show "$mkdir $objdir"
- $run $mkdir $objdir
- fi
-
- # Do each command in the archive commands.
- cmds=`eval echo \"$old_archive_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Now create the libtool archive.
- case "$output" in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.a"
-
- echo "creating $output"
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- cat > $output <<EOF
-# $output - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION
-
-# The name that we can dlopen(3).
-dlname='$dlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'
-EOF
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $objdir && $LN_S ../$output $output)"
- $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1
- ;;
- esac
- exit 0
- ;;
-
- # libtool install mode
- install)
- progname="$progname: install"
-
- # The first argument is the name of the installation program.
- install_prog="$nonopt"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case "$arg" in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- echo "$progname: you must specify an install program" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- if test -n "$prev"; then
- echo "$progname: the \`$prev' option requires an argument" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- echo "$progname: no file or destination specified" 1>&2
- else
- echo "$progname: you must specify a destination" 1>&2
- fi
- echo "$help" 1>&2
- exit 1
- fi
-
- # Strip any trailing slash from the destination.
- dest=`echo "$dest" | sed 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test -n "$isdir"; then
- destdir="$dest"
- destname=
- else
- destdir=`echo "$dest" | sed 's%/[^/]*$%%'`
- test "$destdir" = "$dest" && destdir=.
- destname=`echo "$dest" | sed 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test $# -gt 2; then
- echo "$progname: \`$dest' is not a directory" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
- fi
- case "$destdir" in
- /*) ;;
- *)
- for file in $files; do
- case "$file" in
- *.lo) ;;
- *)
- echo "$progname: \`$destdir' must be an absolute directory name" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- esac
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case "$file" in
- *.a)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then :
- else
- echo "$progname: \`$file' is not a valid libtool archive" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- library_names=
- old_library=
- # If there is no directory component, then add one.
- case "$file" in
- */*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "$destdir" = "$libdir"; then
- case "$current_libdirs " in
- "* $libdir *") ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- "* $libdir *") ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir="`echo "$file" | sed 's%/[^/]*$%%'`/"
- test "$dir" = "$file/" && dir=
- dir="$dir$objdir"
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$realname $destdir/$realname"
- $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
- test "X$dlname" = "X$realname" && dlname=
-
- # Support stripping libraries.
- if test -n "$stripme"; then
- if test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run $striplib $destdir/$realname || exit $?
- else
- echo "$progname: warning: no library stripping program" 1>&2
- fi
- fi
-
- if test $# -gt 0; then
- # Delete the old symlinks.
- rmcmd="$rm"
- for linkname
- do
- rmcmd="$rmcmd $destdir/$linkname"
- done
- $show "$rmcmd"
- $run $rmcmd
-
- # ... and create new ones.
- for linkname
- do
- test "X$dlname" = "X$linkname" && dlname=
- $show "(cd $destdir && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $LN_S $realname $linkname)"
- done
- fi
-
- if test -n "$dlname"; then
- # Install the dynamically-loadable library.
- $show "$install_prog $dir/$dlname $destdir/$dlname"
- $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- cmds=`eval echo \"$postinstall_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`echo "$file" | sed 's%^.*/%%'`
- $show "$install_prog $file $destdir/$name"
- $run $install_prog $file $destdir/$name || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`echo "$file" | sed 's%^.*/%%;'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case "$destfile" in
- *.lo)
- staticdest=`echo "$destfile" | sed 's/\.lo$/\.o/;'`
- ;;
- *.o)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- echo "$progname: cannot copy a libtool object to \`$destfile'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run $install_prog $file $destfile || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`echo "$file" | sed 's/\.lo$/\.o/;'`
-
- $show "$install_prog $staticobj $staticdest"
- $run $install_prog $staticobj $staticdest || exit $?
- fi
- exit 0
- ;;
-
- *)
- # Do a test to see if this is really a libtool program.
- if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
- link_against_libtool_libs=
- finalize_command=
-
- # If there is no directory component, then add one.
- case "$file" in
- */*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then
- echo "$progname: invalid libtool wrapper script \`$file'" 1>&2
- exit 1
- fi
-
- finalize=yes
- for lib in $link_against_libtool_libs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case "$lib" in
- */*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/`echo "$lib" | sed 's%^.*/%%g'`"
- if test -z "$libdir"; then
- echo "$progname: warning: \`$lib' contains no -rpath information" 1>&2
- elif test -f "$libfile"; then :
- else
- echo "$progname: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- if test "$hardcode_action" = relink; then
- if test "$finalize" = yes; then
- echo "$progname: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2
- $show "$finalize_command"
- if $run $finalize_command; then :
- else
- echo "$progname: error: relink \`$file' with the above command before installing it" 1>&2
- continue
- fi
- file="$objdir/$file"T
- else
- echo "$progname: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- dir=`echo "$file" | sed 's%/[^/]*$%%'`
- if test "$file" = "$dir"; then
- file="$objdir/$file"
- else
- file="$dir/$objdir/`echo "$file" | sed 's%^.*/%%'`"
- fi
- fi
- fi
-
- $show "$install_prog$stripme $file $dest"
- $run $install_prog$stripme $file $dest || exit $?
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`echo "$file" | sed 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run $install_prog $file $oldlib || exit $?
-
- # Support stripping libraries.
- if test -n "$stripme"; then
- if test -n "$old_striplib"; then
- $show "$old_striplib $oldlib"
- $run $old_striplib $oldlib || exit $?
- else
- echo "$progname: warning: no static library stripping program" 1>&2
- fi
- fi
-
- # Do each command in the postinstall commands.
- cmds=`eval echo \"$old_postinstall_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- echo "$progname: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec $0 --finish$current_libdirs
- exit 1
- fi
-
- exit 0
- ;;
-
- # libtool dlname mode
- dlname)
- progname="$progname: dlname"
- ltlibs="$nonopt"
- for lib
- do
- ltlibs="$ltlibs $lib"
- done
-
- if test -z "$ltlibs"; then
- echo "$progname: you must specify at least one LTLIBRARY" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- # Now check to make sure each one is a valid libtool library.
- status=0
- for lib in $ltlibs; do
- dlname=
- libdir=
- library_names=
-
- # Check to see that this really is a libtool archive.
- if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then :
- else
- echo "$progname: \`$arg' is not a valid libtool archive" 1>&2
- status=1
- continue
- fi
-
- # If there is no directory component, then add one.
- case "$arg" in
- */*) . $arg ;;
- *) . ./$arg ;;
- esac
-
- if test -z "$libdir"; then
- echo "$progname: \`$arg' contains no -rpath information" 1>&2
- status=1
- elif test -n "$dlname"; then
- echo "$libdir/$dlname"
- elif test -z "$library_names"; then
- echo "$progname: \`$arg' is not a shared library" 1>&2
- status=1
- else
- echo "$progname: \`$arg' was not linked with \`-export-dynamic'" 1>&2
- status=1
- fi
- done
- exit $status
- ;;
-
- # libtool finish mode
- finish)
- progname="$progname: finish"
- libdirs="$nonopt"
-
- if test -n "$finish_cmds" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- # Do each command in the postinstall commands.
- cmds=`eval echo \"$finish_cmds\"`
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=';'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
- done
- fi
-
- echo "To link against installed libraries in LIBDIR, users may have to:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to their \`$shlibpath_var' environment variable"
- fi
- echo " - use the \`-LLIBDIR' linker flag"
- exit 0
- ;;
-
- # libtool uninstall mode
- uninstall)
- progname="$progname: uninstall"
- rm="$nonopt"
- files=
-
- for arg
- do
- case "$arg" in
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- echo "$progname: you must specify an RM program" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- for file in $files; do
- dir=`echo "$file" | sed -e 's%/[^/]*$%%'`
- test "$dir" = "$file" && dir=.
- name=`echo "$file" | sed -e 's%^.*/%%'`
-
- rmfiles="$file"
-
- case "$name" in
- *.la)
- # Possibly a libtool archive, so verify it.
- if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $dir/$n"
- test "X$n" = "X$dlname" && dlname=
- done
- test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname"
- test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
-
- # FIXME: should reinstall the best remaining shared library.
- fi
- ;;
-
- *.lo)
- if test "$build_old_libs" = yes; then
- oldobj=`echo "$name" | sed 's/\.lo$/\.o/'`
- rmfiles="$rmfiles $dir/$oldobj"
- fi
- ;;
- esac
-
- $show "$rm $rmfiles"
- $run $rm $rmfiles
- done
- exit 0
- ;;
-
- NONE)
- echo "$progname: you must specify a MODE" 1>&2
- echo "$generic_help" 1>&2
- exit 1
- ;;
- esac
-
- echo "$progname: invalid operation mode \`$mode'" 1>&2
- echo "$generic_help" 1>&2
- exit 1
-fi # test -z "$show_help"
-
-# We need to display help for each of the modes.
-case "$mode" in
-NONE) cat <<EOF
-Usage: $progname [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
--n, --dry-run display commands without modifying any files
- --features display configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --version print version information
-
-MODE must be one of the following:
-
- compile compile a source file into a libtool object
- dlname print filenames to use to \`dlopen' libtool libraries
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$progname --help --mode=MODE' for
-a more detailed description of MODE.
-EOF
- ;;
-
-compile)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'.
-EOF
- ;;
-
-dlname)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=dlname LTLIBRARY...
-
-Print filenames to use to \`dlopen' libtool libraries.
-
-Each LTLIBRARY is the name of a dynamically loadable libtool library (one that
-was linked using the \`-export-dynamic' option).
-
-The names to use are printed to standard output, one per line.
-EOF
- ;;
-
-finish)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed.
-EOF
- ;;
-
-install)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized).
-EOF
- ;;
-
-link)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -allow-undefined allow a libtool library to reference undefined symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -static do not do any dynamic linking or shared library creation
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only
-library objects (\`.lo' files) may be specified, and \`-rpath' is required.
-
-If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar'
-and \`ranlib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is
-created, otherwise an executable program is created.
-EOF
- ;;
-
-uninstall)
- cat <<EOF
-Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM.
-EOF
- ;;
-
-*)
- echo "$progname: invalid operation mode \`$mode'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-esac
-
-case "$mode" in
-archive|compile)
- echo
- echo "Try \`$progname --help' for more information about other modes."
- ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1995 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:02 dfs Exp $
-#
-# Copyright (C) 1995 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps man/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-tags: TAGS
-TAGS:
-
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = man
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall:
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-generic
-
-clean: clean-generic mostlyclean
-
-distclean: distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-generic distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: tags distdir info dvi installcheck install-exec install-data \
-install uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 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, 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., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-case "$1" in
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- automake touch all \`Makefile.in' files
- bison touch file \`y.tab.c'
- makeinfo touch the output file
- yacc touch file \`y.tab.c'"
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing - GNU libit 0.0"
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
- aclocal)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acinclude.m4' or \`configure.in'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`configure.in'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acconfig.h' or \`configure.in'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- touch config.h.in
- ;;
-
- automake)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print \
- | sed 's/^\(.*\).am$/touch \1.in/' \
- | sh
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- touch y.tab.c
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
- fi
- touch $file
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
- system. You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequirements for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
+++ /dev/null
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-
-errstatus=0
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
- fi
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:03 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
-
-EXTRA_DIST = README merit-2.4.21-CHAP.diff radiusd-1.16.shadow.diff \
- radiusd-1.16.accounting.diff
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:03 dfs Exp $
-#
-# Copyright (C) 1997 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-pkgsysconfdir = @pkgsysconfdir@
-
-AUTOMAKE_OPTIONS = foreign
-
-CLEANFILES = *~
-
-EXTRA_DIST = README merit-2.4.21-CHAP.diff radiusd-1.16.shadow.diff \
- radiusd-1.16.accounting.diff
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-DIST_COMMON = README Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-all: Makefile
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps patches/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-tags: TAGS
-TAGS:
-
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = patches
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec:
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall:
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-generic
-
-clean: clean-generic mostlyclean
-
-distclean: distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-generic distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: tags distdir info dvi installcheck install-exec install-data \
-install uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-$Id: README,v 1.1 2002/01/22 16:03:03 dfs Exp $
-
-ppp-2.2.0f-radclient.diff
-
- NOW LONGER INCLUDED. For pppd patches see:
-
- http://www.gams.net/~mla/radius.html
- http://www.iphil.net/~map/radius/
- http://linux.slovenija.net/radius/
-
-merit-2.4.21-CHAP.diff
-
- Patch to the Merit radiusd 2.4.21 to support the CHAP-Challenge
- attribute. Doesn't work with earlier version of Merit radiusd. I sent
- this patch to Merit, so hopefully it'll be included in the next release.
- Apply this patch from the "src" directory of the radiusd sources.
-
-radiusd-1.16.shadow.diff
-
- Patch to the original radiusd by Livingston to recognize "*"
- as a special password to look for shadow passwords.
- Apply this patch from the "src" directory of the radiusd sources.
-
-
-radiusd-1.16.accounting.diff
-
- The patch for Livingston's (now Lucent's) radiusd 1.16 fixes the
- accounting reply digest bug. When you've applied this patch to your
- RADIUS server you no longer need to compile radiusclient with
- --enable-radius-116. This patch was contributed by Tilman
- Mueller-Gerbes <tmg@suse.de>. Thanks, Tilman!
+++ /dev/null
---- funcs.c.dist Mon May 13 00:37:37 1996
-+++ funcs.c Mon May 13 00:58:33 1996
-@@ -830,11 +830,12 @@
- /* reply.*/
-
- {
-- VALUE_PAIR *item;
-+ VALUE_PAIR *item, *chall;
- u_char buffer[AUTH_PASS_LEN + AUTH_VECTOR_LEN + 1];
- int i;
- int secretlen;
- int result;
-+ int chall_len;
- u_char digest[CHAP_VALUE_LENGTH];
- u_char *ptr;
- char *crypt ();
-@@ -896,10 +897,21 @@
-
- secretlen = strlen ((char *) ptr);
- ptr += secretlen;
-- memcpy ((char *) ptr, (char *) authreq->vector,
-- AUTH_VECTOR_LEN);
-+
-+ /* this uses CHAP-Challenge as the challenge if it exists */
-+ /* lf, 5/13/96 */
-+ if ((chall = get_vp (authreq->request, PW_CHAP_CHALLENGE))
-+ != (VALUE_PAIR *) NULL) {
-+ memcpy ((char *) ptr, chall->strvalue, chall->lvalue);
-+ chall_len = chall->lvalue;
-+ } else {
-+ memcpy ((char *) ptr, (char *) authreq->vector,
-+ AUTH_VECTOR_LEN);
-+ chall_len = AUTH_VECTOR_LEN;
-+ }
-+
- md5_calc (digest, buffer,
-- 1 + CHAP_VALUE_LENGTH + secretlen);
-+ 1 + chall_len + secretlen);
- /* Compare them */
- if ((result = memcmp ((char *) digest, item->strvalue + 1,
- CHAP_VALUE_LENGTH)) != 0)
+++ /dev/null
-Message-ID: <19980211151522.51612@Galerkin.fs100.suse.de>
-Date: Wed, 11 Feb 1998 15:15:22 +0100
-From: Tilman Mueller-Gerbes <tmg@suse.de>
-To: Lars Fenneberg <lf@elemental.net>
-Subject: Re: Radiusclient-0.3-alpha
-
-Hi!
-
-Das mit der spec-Datei dauert noch ein bisschen, allerdings habe
-ich einen Bug-Fix fuer den Radiusd, d.h. dein Problem mit
-den Radius-Accounting-Requests geloest:
-
-Es ist so, dass bei Radius-Accounting Requests im Response-MD5-Digest
-der radiusd 1.16 schlicht und einfach das secret nicht mit
-einrechnet. Das secret wird mehr oder weniger zufaellig gesetzt
-(d.h. gar nicht erst initialisiert :(.
-
-Ich habe einen Patch fuer den Radiusd 1.16.1 (unten angehaengt).
-
-Der Radiusd Berechnet die Digests bei Accounting Requests nicht -
-ob das so i.O. ist sei mal dahingestellt, andere Implementationen
-werden es wohl auch nicht tun.
-
-
-****
-
---- src/Makefile
-+++ src/Makefile 1998/02/11 14:09:51
-@@ -14,7 +14,7 @@
- # unixware: add -Dunixware to CFLAGS, use LIBS= -lucb -lnsl -lsocket
- #
- SRCDIR=.
--CFLAGS= -O -DNOSHADOW
-+CFLAGS= -O -DFIX_ACCOUNTING_BUG
- LDFLAGS=
- CC= cc
- LIBS=
---- src/acct.c
-+++ src/acct.c 1998/02/11 14:09:10
-@@ -70,6 +70,31 @@
- char buffer[512];
- VALUE_PAIR *pair;
- long curtime;
-+ char pw_digest[16];
-+ /*
-+ * fix accounting bug: when receiving an accounting request
-+ * the digest is not checked at all and a wrong
-+ * reply digest is calculated, as authreq->secret is not
-+ * initialized
-+ * this fix should not break any existing code, as the
-+ * reply digest was random anyway (and may be never checked
-+ * by anyone) -tmg@suse.de-
-+ */
-+#if defined(FIX_ACCOUNTING_BUG)
-+ /* Verify the client and Calculate the MD5 Password Digest */
-+ if(calc_digest(pw_digest, authreq) != 0) {
-+ char msg[512];
-+ /* We dont respond when this fails */
-+ sprintf(msg, "Authenticate: from %s - Security Breach Accounting\n",
-+ ip_hostname(authreq->ipaddr));
-+ msg[127] = '\0';
-+ log_err(msg);
-+ pairfree(authreq->request);
-+ memset(authreq, 0, sizeof(AUTH_REQ));
-+ free(authreq);
-+ return;
-+ }
-+#endif
-
- strncpy(clientname, ip_hostname(authreq->ipaddr), 128);
- clientname[127] = '\0';
-
-
-
-
---
- Tilman Mueller-Gerbes, S.u.S.E. GmbH, Gebhardtstr. 2, 90762 Fuerth, Germany
- Tel: +49-911-7405330, Fax: +49-911-7417755, Email: tmg@suse.de
-+-------------------------------------------------------------------------+
-| S.u.S.E. auf der CeBIT '98! -- Besuchen Sie uns in Halle 5, Stand A61 |
-+-------------------------------------------------------------------------+
-
+++ /dev/null
---- radiusd.c~ Fri Jan 6 22:58:16 1995
-+++ radiusd.c Thu Apr 4 22:43:31 1996
-@@ -1426,7 +1426,8 @@
- encrypted_pass = pwd->pw_passwd;
-
- #if !defined(NOSHADOW)
-- if(strcmp(pwd->pw_passwd, "x") == 0) {
-+ if ((strcmp(pwd->pw_passwd, "x") == 0) ||
-+ (strcmp(pwd->pw_passwd, "*") == 0)) {
- if((spwd = getspnam(name)) == NULL) {
- return(-1);
- }
+++ /dev/null
-#
-# $Id: Makefile.am,v 1.1 2002/01/22 16:03:04 dfs Exp $
-#
-# Copyright (C) 1995,1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-AUTOMAKE_OPTIONS = foreign
-
-pkgsysconfdir=@pkgsysconfdir@
-
-DEFS = @DEFS@ -DRC_CONFIG_FILE=\"${pkgsysconfdir}/radiusclient.conf\" \
- -DRC_SECURE_PATH=\"@RC_SECURE_PATH@\"
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir)
-LDADD = ../lib/libradiusclient.la
-
-CLEANFILES = *~
-
-noinst_HEADERS = radlogin.h
-
-sbin_PROGRAMS = radlogin radstatus radacct radexample
-radlogin_SOURCES = radlogin.c radius.c local.c
-radacct_SOURCES = radacct.c
-radstatus_SOURCES = radstatus.c
-radexample_SOURCES = radexample.c
+++ /dev/null
-# Makefile.in generated automatically by automake 1.3 from Makefile.am
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-#
-# $Id: Makefile.in,v 1.1 2002/01/22 16:03:04 dfs Exp $
-#
-# Copyright (C) 1995,1997,1998 Lars Fenneberg
-#
-# See the file COPYRIGHT for the respective terms and conditions.
-# If the file is missing contact me at lf@elemental.net
-# and I'll send you a copy.
-#
-
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DISTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-CC = @CC@
-LD = @LD@
-LIBTOOL = @LIBTOOL@
-LIBVERSION = @LIBVERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NM = @NM@
-PACKAGE = @PACKAGE@
-RANLIB = @RANLIB@
-RC_LOG_FACILITY = @RC_LOG_FACILITY@
-RC_SECURE_PATH = @RC_SECURE_PATH@
-VERSION = @VERSION@
-
-AUTOMAKE_OPTIONS = foreign
-
-pkgsysconfdir=@pkgsysconfdir@
-
-DEFS = @DEFS@ -DRC_CONFIG_FILE=\"${pkgsysconfdir}/radiusclient.conf\" \
- -DRC_SECURE_PATH=\"@RC_SECURE_PATH@\"
-INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir)
-LDADD = ../lib/libradiusclient.la
-
-CLEANFILES = *~
-
-noinst_HEADERS = radlogin.h
-
-sbin_PROGRAMS = radlogin radstatus radacct radexample
-radlogin_SOURCES = radlogin.c radius.c local.c
-radacct_SOURCES = radacct.c
-radstatus_SOURCES = radstatus.c
-radexample_SOURCES = radexample.c
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-PROGRAMS = $(sbin_PROGRAMS)
-
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-radlogin_OBJECTS = radlogin.o radius.o local.o
-radlogin_LDADD = $(LDADD)
-radlogin_DEPENDENCIES = ../lib/libradiusclient.la
-radlogin_LDFLAGS =
-radstatus_OBJECTS = radstatus.o
-radstatus_LDADD = $(LDADD)
-radstatus_DEPENDENCIES = ../lib/libradiusclient.la
-radstatus_LDFLAGS =
-radacct_OBJECTS = radacct.o
-radacct_LDADD = $(LDADD)
-radacct_DEPENDENCIES = ../lib/libradiusclient.la
-radacct_LDFLAGS =
-radexample_OBJECTS = radexample.o
-radexample_LDADD = $(LDADD)
-radexample_DEPENDENCIES = ../lib/libradiusclient.la
-radexample_LDFLAGS =
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
-HEADERS = $(noinst_HEADERS)
-
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP = --best
-SOURCES = $(radlogin_SOURCES) $(radstatus_SOURCES) $(radacct_SOURCES) $(radexample_SOURCES)
-OBJECTS = $(radlogin_OBJECTS) $(radstatus_OBJECTS) $(radacct_OBJECTS) $(radexample_OBJECTS)
-
-all: Makefile $(PROGRAMS) $(HEADERS)
-
-.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps src/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-sbinPROGRAMS:
-
-clean-sbinPROGRAMS:
- -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
-
-distclean-sbinPROGRAMS:
-
-maintainer-clean-sbinPROGRAMS:
-
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(sbindir)
- @list='$(sbin_PROGRAMS)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \
- else :; fi; \
- done
-
-uninstall-sbinPROGRAMS:
- @$(NORMAL_UNINSTALL)
- list='$(sbin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \
- done
-
-.c.o:
- $(COMPILE) -c $<
-
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
-mostlyclean-compile:
- -rm -f *.o core *.core
-
-clean-compile:
-
-distclean-compile:
- -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.s.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-radlogin: $(radlogin_OBJECTS) $(radlogin_DEPENDENCIES)
- @rm -f radlogin
- $(LINK) $(radlogin_LDFLAGS) $(radlogin_OBJECTS) $(radlogin_LDADD) $(LIBS)
-
-radstatus: $(radstatus_OBJECTS) $(radstatus_DEPENDENCIES)
- @rm -f radstatus
- $(LINK) $(radstatus_LDFLAGS) $(radstatus_OBJECTS) $(radstatus_LDADD) $(LIBS)
-
-radacct: $(radacct_OBJECTS) $(radacct_DEPENDENCIES)
- @rm -f radacct
- $(LINK) $(radacct_LDFLAGS) $(radacct_OBJECTS) $(radacct_LDADD) $(LIBS)
-
-radexample: $(radexample_OBJECTS) $(radexample_DEPENDENCIES)
- @rm -f radexample
- $(LINK) $(radexample_LDFLAGS) $(radexample_OBJECTS) $(radexample_LDADD) $(LIBS)
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = src
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file; \
- done
-local.o: local.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/messages.h radlogin.h
-radacct.o: radacct.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/messages.h \
- ../include/pathnames.h
-radexample.o: radexample.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/pathnames.h
-radius.o: radius.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/messages.h radlogin.h
-radlogin.o: radlogin.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/messages.h \
- ../include/pathnames.h radlogin.h
-radstatus.o: radstatus.c ../config.h ../include/includes.h \
- ../include/radiusclient.h ../include/pathnames.h \
- ../include/messages.h
-
-info:
-dvi:
-check: all
- $(MAKE)
-installcheck:
-install-exec: install-sbinPROGRAMS
- @$(NORMAL_INSTALL)
-
-install-data:
- @$(NORMAL_INSTALL)
-
-install: install-exec install-data all
- @:
-
-uninstall: uninstall-sbinPROGRAMS
-
-install-strip:
- $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
-installdirs:
- $(mkinstalldirs) $(DATADIR)$(sbindir)
-
-
-mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -rm -f Makefile $(DISTCLEANFILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
-
-clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \
- clean-generic mostlyclean
-
-distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \
- distclean-tags distclean-generic clean
- -rm -f config.status
- -rm -f libtool
-
-maintainer-clean: maintainer-clean-sbinPROGRAMS \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \
-clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \
-install-sbinPROGRAMS mostlyclean-compile distclean-compile \
-clean-compile maintainer-clean-compile mostlyclean-libtool \
-distclean-libtool clean-libtool maintainer-clean-libtool tags \
-mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \
-distdir info dvi installcheck install-exec install-data install \
-uninstall all installdirs mostlyclean-generic distclean-generic \
-clean-generic maintainer-clean-generic clean mostlyclean distclean \
-maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+++ /dev/null
-/*
- * $Id: local.c,v 1.1 2002/01/22 16:03:04 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <messages.h>
-#include <radlogin.h>
-
-extern ENV *env;
-
-LFUNC auth_local(char *username, char *passwd)
-{
- struct passwd *pw;
- char *xpasswd;
-#ifdef SHADOW_PASSWORD
- struct spwd *spw;
-#endif
-
- if ((pw = getpwnam(username)) == NULL) {
- endpwent();
- rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username);
- printf(SC_LOCAL_FAILED);
- return NULL;
- }
- endpwent();
-
-#ifdef SHADOW_PASSWORD
- if((spw = getspnam(pw->pw_name)) == NULL) {
- endspent();
- rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username);
- printf(SC_LOCAL_FAILED);
- return NULL;
- }
- else
- {
- pw->pw_passwd = spw->sp_pwdp;
- }
- endspent();
-#endif /* SHADOW_PASSWORD */
-
- xpasswd = crypt(passwd, pw->pw_passwd);
-
- if (*pw->pw_passwd == '\0' || strcmp(xpasswd, pw->pw_passwd)) {
- rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username);
- printf(SC_LOCAL_FAILED);
- return NULL;
- }
-
- rc_log(LOG_NOTICE, "authentication OK, type local, username %s", username);
- printf(SC_LOCAL_OK);
-
- return local_login;
-}
-
-void
-local_login(char *username)
-{
- char *login_local = rc_conf_str("login_local");
-
- /* login should spot this... but who knows what old /bin/logins
- * may be still around
- */
- if (*username == '-') {
- rc_log(LOG_WARNING, "username can't start with a dash");
- exit(ERROR_RC);
- }
- /* the new shadow login seems to require either a -r or a -h
- * flag for -f to work (so source code, lmain.c) so we supply
- * it here. shouldn't hurt on other systems, -lf, 03/13/96
- */
- execle(login_local, login_local, "-h", "localhost", "-f", username, NULL, env->env);
- rc_log(LOG_ERR, "couldn't execute %s: %s", login_local, strerror(errno));
- sleep(1); /* give the user time to read */
- exit(ERROR_RC);
-}
+++ /dev/null
-/*
- * $Id: radacct.c,v 1.1 2002/01/22 16:03:04 dfs Exp $
- *
- * Copyright (C) 1995,1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-static char rcsid[] =
- "$Id: radacct.c,v 1.1 2002/01/22 16:03:04 dfs Exp $";
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <messages.h>
-#include <pathnames.h>
-
-static char *pname;
-
-void usage(void)
-{
- fprintf(stderr,"Usage: %s [-Vh] [-f <config_file>] [-i <client_port>]\n\n", pname);
- fprintf(stderr," -V output version information\n");
- fprintf(stderr," -h output this text\n");
- fprintf(stderr," -f filename of alternate config file\n");
- fprintf(stderr," -i ttyname to send to the server\n");
- exit(ERROR_RC);
-}
-
-void version(void)
-{
- fprintf(stderr,"%s: %s\n", pname ,rcsid);
- exit(ERROR_RC);
-}
-
-int
-main (int argc, char **argv)
-{
- int result = ERROR_RC;
- VALUE_PAIR *send = NULL;
- UINT4 client_port;
- int c;
- VALUE_PAIR *vp;
- DICT_VALUE *dval;
- char *username, *service, *fproto, *type;
- char *path_radiusclient_conf = RC_CONFIG_FILE;
- char *ttyn = NULL;
-
- extern char *optarg;
-
- pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0];
-
- rc_openlog(pname);
-
- while ((c = getopt(argc,argv,"f:i:hV")) > 0)
- {
- switch(c)
- {
- case 'f':
- path_radiusclient_conf = optarg;
- break;
- case 'i':
- ttyn = optarg;
- break;
- case 'V':
- version();
- break;
- case 'h':
- usage();
- break;
- default:
- exit(ERROR_RC);
- break;
- }
- }
-
- if (rc_read_config(path_radiusclient_conf) != 0)
- exit(ERROR_RC);
-
- if (rc_read_dictionary(rc_conf_str("dictionary")) != 0)
- exit (ERROR_RC);
-
- if (rc_read_mapfile(rc_conf_str("mapfile")) != 0)
- exit (ERROR_RC);
-
- if (ttyn != NULL)
- {
- client_port = rc_map2id(ttyn);
- }
- else
- {
- /* we take stdout here, because stdin is usually connected
- * to our input file
- */
- if ((ttyn = ttyname(1)) != NULL)
- {
- client_port = rc_map2id(ttyn);
- }
- else
- {
- client_port = 0;
- }
- }
-
- if ((send = rc_avpair_readin(stdin))) {
-
- username = service = type = "(unknown)";
- fproto = NULL;
-
- if ((vp = rc_avpair_get(send, PW_ACCT_STATUS_TYPE)) != NULL)
- if ((dval = rc_dict_getval(vp->lvalue, vp->name)) != NULL) {
- type = dval->name;
- }
-
- if ((vp = rc_avpair_get(send, PW_USER_NAME)) != NULL)
- username = vp->strvalue;
-
- if ((vp = rc_avpair_get(send, PW_SERVICE_TYPE)) != NULL)
- if ((dval = rc_dict_getval(vp->lvalue, vp->name)) != NULL) {
- service = dval->name;
- }
-
- if (vp && (vp->lvalue == PW_FRAMED) &&
- ((vp = rc_avpair_get(send, PW_FRAMED_PROTOCOL)) != NULL))
- if ((dval = rc_dict_getval(vp->lvalue, vp->name)) != NULL) {
- fproto = dval->name;
- }
-
- result = rc_acct(client_port, send);
- if (result == OK_RC)
- {
- fprintf(stderr, SC_ACCT_OK);
- rc_log(LOG_NOTICE, "accounting OK, type %s, username %s, service %s%s%s",
- type, username, service,(fproto)?"/":"", (fproto)?fproto:"");
- }
- else
- {
- fprintf(stderr, SC_ACCT_FAILED, result);
- rc_log(LOG_NOTICE, "accounting FAILED, type %s, username %s, service %s%s%s",
- type, username, service,(fproto)?"/":"", (fproto)?fproto:"");
- }
- rc_avpair_free(send);
- }
-
- exit (result);
-}
+++ /dev/null
-#! /bin/sh
-
-# radexample - temporary wrapper script for .libs/radexample
-# Generated by ltmain.sh - GNU libtool 1.0
-#
-# The radexample program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of `/home/dfs/Servpoet/radiusclient-0.3.1/src'.
-# If it is, it will not operate correctly.
-
-# This environment variable determines our operation mode.
-if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
- # install mode needs the following variables:
- link_against_libtool_libs=' ../lib/libradiusclient.la'
- finalize_command='gcc -g -O2 -o .libs/radexampleT radexample.o -Wl,-rpath -Wl,/usr/lib -L/usr/lib -lradiusclient -lcrypt -lnsl'
-else
- # Find the directory that this script lives in.
- thisdir=`echo $0 | sed 's%/[^/]*$%%'`
- test "x$thisdir" = "x$0" && thisdir=.
-
- # Try to get the absolute directory name.
- absdir=`cd "$thisdir" && pwd`
- test -n "$absdir" && thisdir="$absdir"
-
- progdir="$thisdir/.libs"
- program="radexample"
-
- if test -f "$progdir/$program"; then
- # Run the actual program with our arguments.
- args=
- for arg
- do
- # Quote arguments (to preserve shell metacharacters).
- args="$args '$arg'"
- done
-
- # Export the path to the program.
- PATH="$progdir:$PATH"
- export PATH
-
- # Add our own library path to LD_LIBRARY_PATH
- LD_LIBRARY_PATH="$thisdir/../lib/.libs:$LD_LIBRARY_PATH"
-
- # Some systems cannot cope with colon-terminated LD_LIBRARY_PATH
- LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed -e 's/:*$//'`
-
- export LD_LIBRARY_PATH
-
- eval "exec ddd ./.libs/$program $args"
-
- echo "$0: cannot exec $program $args"
- exit 1
- else
- # The program doesn't exist.
- echo "$0: error: $progdir/$program does not exist" 1>&2
- echo "This script is just a wrapper for $program." 1>&2
- echo "See the libtool documentation for more information." 1>&2
- exit 1
- fi
-fi
+++ /dev/null
-/*
- * $Id: radexample.c,v 1.2 2002/04/02 14:09:35 dfs Exp $
- *
- * Copyright (C) 1995,1996,1997 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-
-static char rcsid[] =
- "$Id: radexample.c,v 1.2 2002/04/02 14:09:35 dfs Exp $";
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <pathnames.h>
-
-static char *pname = NULL;
-
-int
-main (int argc, char **argv)
-{
- int result;
- char username[128];
- char passwd[AUTH_PASS_LEN + 1];
- VALUE_PAIR *send, *received;
- UINT4 service;
- char msg[4096], username_realm[256];
- char *default_realm = rc_conf_str("default_realm");
- char name[2048];
- char value[2048]; /* more than enough */
- char *cfile;
-
- pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0];
-
- rc_openlog(pname);
-
-
- if (argc >= 2) {
- cfile = argv[1];
- } else {
- cfile = RC_CONFIG_FILE;
- }
- if (rc_read_config(cfile) != 0)
- return(ERROR_RC);
-
- if (rc_read_dictionary(rc_conf_str("dictionary")) != 0)
- return(ERROR_RC);
-
- strncpy(username, rc_getstr ("login: ",1), sizeof(username));
- strncpy (passwd, rc_getstr("Password: ",0), sizeof (passwd));
-
- send = NULL;
-
- /*
- * Fill in User-Name
- */
-
- strncpy(username_realm, username, sizeof(username_realm));
-
- /* Append default realm */
- if ((strchr(username_realm, '@') == NULL) && default_realm &&
- (*default_realm != '\0'))
- {
- strncat(username_realm, "@", sizeof(username_realm));
- strncat(username_realm, default_realm, sizeof(username_realm));
- }
-
- if (rc_avpair_add(&send, PW_USER_NAME, username_realm, 0, VENDOR_NONE) == NULL)
- return(ERROR_RC);
-
- /*
- * Fill in User-Password
- */
-
- if (rc_avpair_add(&send, PW_USER_PASSWORD, passwd, 0, VENDOR_NONE) == NULL)
- return (ERROR_RC);
-
- /*
- * Fill in Service-Type
- */
-
- service = PW_AUTHENTICATE_ONLY;
- if (rc_avpair_add(&send, PW_SERVICE_TYPE, &service, 0, VENDOR_NONE) == NULL)
- return (ERROR_RC);
-
- result = rc_auth(0, send, &received, msg, NULL);
-
- if (result == OK_RC)
- {
- fprintf(stderr, "\"%s\" RADIUS Authentication OK\n", username);
- }
- else
- {
- fprintf(stderr, "\"%s\" RADIUS Authentication failure (RC=%i)\n", username, result);
- }
-
- /* Print returned attributes */
- for( ; received ; received = received->next) {
- if (rc_avpair_tostr(received, name, sizeof(name), value,
- sizeof(value)) < 0) {
- continue;
- }
- printf("Attr '%s' ==> Val '%s'\n",
- name, value);
- }
-
- return result;
-}
+++ /dev/null
-/*
- * $Id: radius.c,v 1.2 2002/04/02 14:09:35 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <messages.h>
-#include <radlogin.h>
-
-extern ENV *env;
-
-LFUNC auth_radius(UINT4 client_port, char *username, char *passwd)
-{
-
- VALUE_PAIR *send, *received, *vp, *service_vp;
- UINT4 service, ftype, ctype;
- char msg[4096], *p, username_realm[256];
- char name[2048], value[2048]; /* more than enough */
- int result;
- char *default_realm, *service_str, *ftype_str;
- DICT_VALUE *dval;
-
- send = received = NULL;
-
- /*
- * Determine and fill in Service-Type
- */
-
-#ifdef SCP
- /* determine based on the username what kind of service is requested.
- this allows you to use one password for all accounts, but the
- Merit radiusd supplies you just with the right information you
- need for the specified service type -lf, 03/15/96 */
-
- switch (*username)
- {
- case 'S':
- service = PW_FRAMED;
- ftype = PW_SLIP;
- ctype = 0;
- username++;
- break;
- case 'C':
- service = PW_FRAMED;
- ftype = PW_SLIP;
- ctype = PW_VAN_JACOBSON_TCP_IP;
- username++;
- break;
- case 'P':
- service = PW_FRAMED;
- ftype = PW_PPP;
- ctype = 0;
- username++;
- break;
- default:
- service = PW_LOGIN;
- ftype = 0;
- ctype = 0;
- break;
- }
-#else
- service = PW_LOGIN;
- ftype = 0;
- ctype = 0;
-#endif
-
- if (rc_avpair_add(&send, PW_SERVICE_TYPE, &service, 0, VENDOR_NONE) == NULL)
- return (LFUNC) NULL;
-
- /* Fill in Framed-Protocol, if neccessary */
-
- if (ftype != 0)
- {
- if (rc_avpair_add(&send, PW_FRAMED_PROTOCOL, &ftype, 0, VENDOR_NONE) == NULL)
- return (LFUNC) NULL;
- }
-
- /* Fill in Framed-Compression, if neccessary */
-
- if (ctype != 0)
- {
- if (rc_avpair_add(&send, PW_FRAMED_COMPRESSION, &ctype, 0, VENDOR_NONE) == NULL)
- return (LFUNC) NULL;
- }
-
- /*
- * Fill in User-Name
- */
-
- strncpy(username_realm, username, sizeof(username_realm));
-
- /* Append default realm */
- default_realm = rc_conf_str("default_realm");
-
- if ((strchr(username_realm, '@') == NULL) && default_realm &&
- ((*default_realm) != '\0'))
- {
- strncat(username_realm, "@", sizeof(username_realm));
- strncat(username_realm, default_realm, sizeof(username_realm));
- }
-
- if (rc_avpair_add(&send, PW_USER_NAME, username_realm, 0, VENDOR_NONE) == NULL)
- return (LFUNC) NULL;
-
- /*
- * Fill in User-Password
- */
-
- if (rc_avpair_add(&send, PW_USER_PASSWORD, passwd, 0, VENDOR_NONE) == NULL)
- return (LFUNC) NULL;
-
- result = rc_auth(client_port, send, &received, msg, NULL);
-
- if (result == OK_RC)
- {
- /* Set up a running count of attributes saved. */
- int acount[256], attr;
-
- memset(acount, 0, sizeof(acount));
-
- rc_add_env(env, "RADIUS_USER_NAME", username);
-
- vp = received;
-
- /* map-- keep track of the attributes so that we know
- when to add the delimiters. Note that we can only
- handle attributes < 256, which is the standard anyway. */
-
- while (vp)
- {
- strcpy(name, "RADIUS_");
- if (rc_avpair_tostr(vp, name+7, sizeof(name)-7, value, sizeof(value)) < 0) {
- rc_avpair_free(send);
- rc_avpair_free(received);
- return (LFUNC) NULL;
- }
-
- /* Translate "-" => "_" and uppercase*/
- for(p = name; *p; p++) {
- *p = toupper(*p);
- if (*p == '-') *p = '_';
- }
-
- /* Add to the attribute count and append the var
- if necessary. */
- if ((attr = vp->attribute) < 256)
- {
- int count;
- if ((count = acount[attr]++) > 0) {
- char buf[10];
- sprintf(buf, "_%d", count);
- strcat(name,buf);
- }
- }
-
- if (rc_add_env(env, name, value) < 0)
- {
- rc_avpair_free(send);
- rc_avpair_free(received);
- return (LFUNC) NULL;
- }
-
- vp = vp->next;
- }
-
- service_str = "(unknown)";
- ftype_str = NULL;
-
- if ((service_vp = rc_avpair_get(received, PW_SERVICE_TYPE)) != NULL)
- if ((dval = rc_dict_getval(service_vp->lvalue, service_vp->name)) != NULL) {
- service_str = dval->name;
- }
-
- if (service_vp && (service_vp->lvalue == PW_FRAMED) &&
- ((vp = rc_avpair_get(received, PW_FRAMED_PROTOCOL)) != NULL))
- if ((dval = rc_dict_getval(vp->lvalue, vp->name)) != NULL) {
- ftype_str = dval->name;
- }
-
- rc_log(LOG_NOTICE, "authentication OK, username %s, service %s%s%s",
- username, service_str,(ftype_str)?"/":"", (ftype_str)?ftype_str:"");
-
- if (msg && (*msg != '\0'))
- printf(SC_SERVER_REPLY, msg);
- else
- printf(SC_RADIUS_OK);
-
- rc_avpair_free(send);
- rc_avpair_free(received);
-
- return radius_login;
- }
- else
- {
- rc_log(LOG_NOTICE, "authentication FAILED, type RADIUS, username %s",
- username_realm);
- if (msg && (*msg != '\0'))
- printf(SC_SERVER_REPLY, msg);
- else
- printf(SC_RADIUS_FAILED);
- }
-
- rc_avpair_free(send);
- if (received)
- rc_avpair_free(received);
-
- return (LFUNC) NULL;
-}
-
-void
-radius_login(char *username)
-{
- char *login_radius = rc_conf_str("login_radius");
-
- execle(login_radius, login_radius, NULL, env->env);
-
- rc_log(LOG_ERR, "couldn't execute %s: %s", login_radius, strerror(errno));
- fprintf(stderr, "couldn't execute %s: %s", login_radius, strerror(errno));
-
- sleep(1); /* give the user time to read */
- exit(ERROR_RC);
-}
+++ /dev/null
-/*
- * $Id: radlogin.c,v 1.1 2002/01/22 16:03:04 dfs Exp $
- *
- * Copyright (C) 1995,1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-static char rcsid[] =
- "$Id: radlogin.c,v 1.1 2002/01/22 16:03:04 dfs Exp $";
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <messages.h>
-#include <pathnames.h>
-#include <radlogin.h>
-
-ENV *env = NULL;
-static char *pname = NULL;
-
-static RETSIGTYPE
-alarm_handler(int sn)
-{
- fprintf(stderr, SC_TIMEOUT, rc_conf_int("login_timeout"));
- sleep(1);
- exit(ERROR_RC);
-}
-
-static int
-login_allowed(char *tty)
-{
- FILE *fp;
- char fname[PATH_MAX];
- int c;
-
- strcpy(fname, rc_conf_str("nologin"));
- if (access(fname, F_OK) < 0) {
- if (tty) {
- sprintf(fname, "%s.%s", rc_conf_str("nologin"), tty);
- if (access(fname, F_OK) < 0)
- return 1;
- } else {
- return 1;
- }
- }
-
- if ((fp = fopen(fname, "r")) != NULL)
- {
- while ((c = fgetc(fp)) != EOF)
- {
- if (c == '\n')
- fputc('\r', stdout);
- fputc(c, stdout);
- }
- fflush(stdout);
- fclose(fp);
- } else {
- printf(SC_NOLOGIN);
- }
- return (0);
-}
-
-static char *
-subst_placeholders(char *str, char *tty)
-{
- char *p,*q;
- static char buf[4096];
-#if defined(HAVE_UNAME)
- struct utsname uts;
-#endif
-#if !defined(HAVE_STRUCT_UTSNAME_DOMAINNAME) && defined(HAVE_GETDOMAINNAME)
- char domainname[256];
-#endif
-
-#if defined(HAVE_UNAME)
- uname(&uts);
-#endif
-
- p = str;
- q = buf;
-
- while (*p != '\0') {
- switch (*p) {
- case '\\':
- if (*(p+1) == '\0')
- break;
- p++;
- switch (*p) {
- case 'I':
- strcpy(q, rcsid);
- q += strlen(rcsid);
- break;
- case 'L':
- case 'P':
- strcpy(q, tty);
- q += strlen(tty);
- break;
-#if defined(HAVE_UNAME)
- case 'S':
- strcpy(q, uts.sysname);
- q += strlen(uts.sysname);
- break;
- case 'N':
- strcpy(q, uts.nodename);
- q += strlen(uts.nodename);
- break;
- case 'R':
- strcpy(q, uts.release);
- q += strlen(uts.release);
- break;
- case 'V':
- strcpy(q, uts.version);
- q += strlen(uts.version);
- break;
- case 'M':
- strcpy(q, uts.machine);
- q += strlen(uts.machine);
- break;
-#endif
- case 'D':
-#if defined(HAVE_STRUCT_UTSNAME_DOMAINNAME)
- strcpy(q, uts.domainname);
- q += strlen(uts.domainname);
-#elif defined(HAVE_GETDOMAINNAME)
- getdomainname(domainname, sizeof(domainname));
- strcpy(q, domainname);
- q += strlen(domainname);
-#endif
- break;
- case '\\':
- *q = '\\';
- q++;
- break;
- }
- break;
-#if defined(HAVE_UNAME)
- case '@':
- strcpy(q, uts.nodename);
- q += strlen(uts.nodename);
- break;
-#endif
- case '\n':
- strcpy(q,"\r\n");
- q += 2;
- break;
- default:
- *q = *p;
- q++;
- break;
- }
-
- p++;
- }
- *q = '\0';
-
- return buf;
-}
-
-static void
-usage(void)
-{
- fprintf(stderr,"Usage: %s [-Vhnd] [-f <config_file>] [-i <client_port>] [-m <login_tries>]\n\n", pname);
- fprintf(stderr," -V output version information\n");
- fprintf(stderr," -h output this text\n");
- fprintf(stderr," -n don't display issue file\n");
- fprintf(stderr," -f filename of alternate config file\n");
- fprintf(stderr," -i ttyname to send to the server\n");
- fprintf(stderr," -m maximum login tries (overrides value in config file)\n");
- exit(ERROR_RC);
-}
-
-static void
-version(void)
-{
- fprintf(stderr,"%s: %s\n", pname ,rcsid);
- exit(ERROR_RC);
-}
-
-int
-main (int argc, char **argv)
-{
- char username[128];
- char passwd[AUTH_PASS_LEN + 1];
- int tries, remaining, c;
- UINT4 client_port;
- void (*login_func)(char *);
- FILE *fp;
- char buf[4096];
- char tty[1024], *p;
- int noissue = 0;
- int maxtries = 0;
- char *ttyn = NULL;
- char *path_radiusclient_conf = RC_CONFIG_FILE;
-
- extern char *optarg;
- extern int optind;
-
- pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0];
-
- rc_openlog(pname);
-
- while ((c = getopt(argc,argv,"f:m:i:nhV")) > 0)
- {
- switch(c) {
- case 'f':
- path_radiusclient_conf = optarg;
- break;
- case 'i':
- ttyn = optarg;
- break;
- case 'n':
- noissue = 1;
- break;
- case 'm':
- maxtries = atoi(optarg);
- break;
- case 'V':
- version();
- break;
- case 'h':
- usage();
- break;
- default:
- exit(ERROR_RC);
- break;
- }
- }
-
- if (rc_read_config(path_radiusclient_conf) != 0)
- exit(ERROR_RC);
-
- if (rc_read_dictionary(rc_conf_str("dictionary")) != 0)
- exit (ERROR_RC);
-
- if (rc_read_mapfile(rc_conf_str("mapfile")) != 0)
- exit (ERROR_RC);
-
- if (ttyn != NULL)
- {
- client_port = rc_map2id(ttyn);
-
- if ((p = strrchr(ttyn, '/')) == NULL)
- strncpy(tty, ttyn, sizeof(tty));
- else
- strncpy(tty, p+1, sizeof(tty));
- }
- else
- {
- ttyn = ttyname(0);
- if (ttyn)
- {
- if ((p = strrchr(ttyn, '/')) == NULL)
- strncpy(tty, ttyn, sizeof(tty));
- else
- strncpy(tty, p+1, sizeof(tty));
-
- client_port = rc_map2id(ttyn);
- }
- else
- {
- *tty = '\0';
- client_port = 0;
- }
- }
-
-#ifdef SETVBUF_REVERSED
- setvbuf(stdout, _IONBF, NULL, 0);
-#else
- setvbuf(stdout, NULL, _IONBF, 0);
-#endif
-
- if ((argc - optind) == 1)
- {
- strncpy(username,argv[optind], sizeof(username));
- }
- else
- {
- *username = '\0';
-
- if (!noissue) {
- if (rc_conf_str("issue") && ((fp = fopen(rc_conf_str("issue"), "r")) != NULL))
- {
- while (fgets(buf, sizeof(buf), fp) != NULL)
- fputs(subst_placeholders(buf, tty), stdout);
-
- fflush(stdout);
- fclose(fp);
- } else {
- fputs(subst_placeholders(SC_DEFAULT_ISSUE, tty), stdout);
- fflush(stdout);
- }
- }
- }
-
- if ((env = rc_new_env(ENV_SIZE)) == NULL)
- {
- rc_log(LOG_CRIT, "rc_new_env: FATAL: out of memory");
- abort();
- }
-
-#ifdef SECURITY_DISABLED
- if (rc_import_env(env,environ) < 0)
- {
- rc_log(LOG_CRIT, "rc_import_env: FATAL: not enough space for environment (increase ENV_SIZE)");
- abort();
- }
-#else
- rc_add_env(env, "IFS", " ");
- rc_add_env(env, "PATH", RC_SECURE_PATH);
-#endif
-
- signal(SIGALRM, alarm_handler);
-
- remaining = rc_conf_int("login_timeout");
-
- if (!maxtries)
- maxtries = rc_conf_int("login_tries");
-
- tries = 1;
- while (tries <= maxtries)
- {
- alarm(remaining);
-
- while (!*username) {
- p = rc_getstr (SC_LOGIN, 1);
- if (p)
- strncpy(username, p, sizeof(username));
- else
- exit (ERROR_RC);
- }
- p = rc_getstr(SC_PASSWORD,0);
- if (p)
- strncpy (passwd, p, sizeof (passwd));
- else
- exit (ERROR_RC);
-
- remaining = alarm(0);
-
- login_func = NULL;
-
- if (rc_conf_int("auth_order") & AUTH_LOCAL_FST)
- {
- login_func = auth_local(username, passwd);
-
- if (!login_func)
- if (rc_conf_int("auth_order") & AUTH_RADIUS_SND)
- login_func = auth_radius(client_port, username, passwd);
- }
- else
- {
- login_func = auth_radius(client_port, username, passwd);
- if (!login_func)
- if (rc_conf_int("auth_order") & AUTH_LOCAL_SND)
- login_func = auth_local(username, passwd);
- }
-
- memset(passwd, '\0', sizeof(passwd));
-
- if (login_func != NULL)
- if (login_allowed(tty)) {
- (*login_func)(username);
- } else {
- sleep(1);
- exit (ERROR_RC);
- }
-
- *username = '\0';
-
- if ((++tries) <= maxtries) {
- alarm(remaining);
- sleep(tries * 2);
- remaining = alarm(0);
- }
-
- }
-
- fprintf(stderr, SC_EXCEEDED);
- sleep(1);
-
- exit (ERROR_RC);
-}
+++ /dev/null
-/*
- * $Id: radlogin.h,v 1.1 2002/01/22 16:03:05 dfs Exp $
- *
- * Copyright (C) 1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-#ifndef RADLOGIN_H
-#define RADLOGIN_H
-
-#undef __P
-#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
-# define __P(protos) protos
-#else
-# define __P(protos) ()
-#endif
-
-typedef void (*LFUNC)(char *);
-
-/* radius.c */
-LFUNC auth_radius(UINT4, char *, char *);
-void radius_login(char *);
-
-/* local.c */
-LFUNC auth_local __P((char *, char *));
-void local_login __P((char *));
-
-#endif /* RADLOGIN_H */
+++ /dev/null
-/*
- * $Id: radstatus.c,v 1.1 2002/01/22 16:03:05 dfs Exp $
- *
- * Copyright (C) 1995,1996 Lars Fenneberg
- *
- * See the file COPYRIGHT for the respective terms and conditions.
- * If the file is missing contact me at lf@elemental.net
- * and I'll send you a copy.
- *
- */
-
-static char rcsid[] =
- "$Id: radstatus.c,v 1.1 2002/01/22 16:03:05 dfs Exp $";
-
-#include <config.h>
-#include <includes.h>
-#include <radiusclient.h>
-#include <pathnames.h>
-#include <messages.h>
-
-static char *pname;
-
-void usage(void)
-{
- fprintf(stderr,"Usage: %s [-Vh] [-f <config_file>] [server[:port]]...\n\n", pname);
- fprintf(stderr," -V output version information\n");
- fprintf(stderr," -h output this text\n");
- fprintf(stderr," -f filename of alternate config file\n");
- exit(ERROR_RC);
-}
-
-void version(void)
-{
- fprintf(stderr,"%s: %s\n", pname ,rcsid);
- exit(ERROR_RC);
-}
-
-int main (int argc, char **argv)
-{
- int result = ERROR_RC;
- int c,i;
- char *p, msg[4096];
- SERVER *srv;
- char *path_radiusclient_conf = RC_CONFIG_FILE;
-
- extern int optind;
-
- pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0];
-
- rc_openlog(pname);
-
- while ((c = getopt(argc,argv,"hVf:")) > 0)
- {
- switch(c) {
- case 'f':
- path_radiusclient_conf = optarg;
- break;
- case 'V':
- version();
- break;
- case 'h':
- usage();
- break;
- default:
- exit(ERROR_RC);
- break;
- }
- }
-
- argc -= optind;
- argv += optind;
-
- if (rc_read_config(path_radiusclient_conf) != 0)
- exit(ERROR_RC);
-
- if (rc_read_dictionary(rc_conf_str("dictionary")) != 0)
- exit (ERROR_RC);
-
- if (argc > 0) {
- for (i = 0; i < argc; i++) {
- if ((p = strchr(argv[i], ':')) == NULL) {
- result = rc_check(argv[i],rc_getport(AUTH), msg);
- } else if (!strcmp(p+1, "auth")) {
- *p = '\0';
- result = rc_check(argv[i],rc_getport(AUTH), msg);
- } else if (!strcmp(p+1, "acct")) {
- *p = '\0';
- result = rc_check(argv[i],rc_getport(ACCT), msg);
- } else {
- *p = '\0';
- result = rc_check(argv[i], atoi(p+1), msg);
- }
- if (result == OK_RC)
- fputs(msg, stdout);
- else
- printf(SC_STATUS_FAILED);
- }
- } else {
- srv = rc_conf_srv("authserver");
- for(i=0; i<srv->max ; i++)
- {
- result = rc_check(srv->name[i], srv->port[i], msg);
- fputs(msg, stdout);
- }
-
- srv = rc_conf_srv("acctserver");
- for(i=0; i<srv->max ; i++)
- {
- result = rc_check(srv->name[i], srv->port[i], msg);
- fputs(msg, stdout);
- }
- }
- return 0;
-}
*/
static char const RCSID[] =
- "$Id: radrealms.c,v 1.1 2002/10/05 04:35:24 fcusack Exp $";
+ "$Id: radrealms.c,v 1.2 2004/11/14 07:26:26 paulus Exp $";
#include "pppd.h"
#include "radiusclient.h"
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
char pppd_version[] = VERSION;
FILE *fd;
SERVER *accts, *auths, *s;
char buffer[512], *p;
- int line, pos;
+ int line = 0;
auths = (SERVER *) malloc(sizeof(SERVER));
auths->max = 0;
--- /dev/null
+/*
+ * $Id: sendserver.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+#include <pathnames.h>
+
+static void rc_random_vector (unsigned char *);
+static int rc_check_reply (AUTH_HDR *, int, char *, unsigned char *, unsigned char);
+
+/*
+ * Function: rc_pack_list
+ *
+ * Purpose: Packs an attribute value pair list into a buffer.
+ *
+ * Returns: Number of octets packed.
+ *
+ */
+
+static int rc_pack_list (VALUE_PAIR *vp, char *secret, AUTH_HDR *auth)
+{
+ int length, i, pc, secretlen, padded_length;
+ int total_length = 0;
+ UINT4 lvalue;
+ unsigned char passbuf[MAX(AUTH_PASS_LEN, CHAP_VALUE_LENGTH)];
+ unsigned char md5buf[256];
+ unsigned char *buf, *vector, *lenptr;
+
+ buf = auth->data;
+
+ while (vp != (VALUE_PAIR *) NULL)
+ {
+
+ if (vp->vendorcode != VENDOR_NONE) {
+ *buf++ = PW_VENDOR_SPECIFIC;
+
+ /* Place-holder for where to put length */
+ lenptr = buf++;
+
+ /* Insert vendor code */
+ *buf++ = 0;
+ *buf++ = (((unsigned int) vp->vendorcode) >> 16) & 255;
+ *buf++ = (((unsigned int) vp->vendorcode) >> 8) & 255;
+ *buf++ = ((unsigned int) vp->vendorcode) & 255;
+
+ /* Insert vendor-type */
+ *buf++ = vp->attribute;
+
+ /* Insert value */
+ switch(vp->type) {
+ case PW_TYPE_STRING:
+ length = vp->lvalue;
+ *lenptr = length + 8;
+ *buf++ = length+2;
+ memcpy(buf, vp->strvalue, (size_t) length);
+ buf += length;
+ total_length += length+8;
+ break;
+ case PW_TYPE_INTEGER:
+ case PW_TYPE_IPADDR:
+ length = sizeof(UINT4);
+ *lenptr = length + 8;
+ *buf++ = length+2;
+ lvalue = htonl(vp->lvalue);
+ memcpy(buf, (char *) &lvalue, sizeof(UINT4));
+ buf += length;
+ total_length += length+8;
+ break;
+ default:
+ break;
+ }
+ } else {
+ *buf++ = vp->attribute;
+ switch (vp->attribute) {
+ case PW_USER_PASSWORD:
+
+ /* Encrypt the password */
+
+ /* Chop off password at AUTH_PASS_LEN */
+ length = vp->lvalue;
+ if (length > AUTH_PASS_LEN) length = AUTH_PASS_LEN;
+
+ /* Calculate the padded length */
+ padded_length = (length+(AUTH_VECTOR_LEN-1)) & ~(AUTH_VECTOR_LEN-1);
+
+ /* Record the attribute length */
+ *buf++ = padded_length + 2;
+
+ /* Pad the password with zeros */
+ memset ((char *) passbuf, '\0', AUTH_PASS_LEN);
+ memcpy ((char *) passbuf, vp->strvalue, (size_t) length);
+
+ secretlen = strlen (secret);
+ vector = (char *)auth->vector;
+ for(i = 0; i < padded_length; i += AUTH_VECTOR_LEN) {
+ /* Calculate the MD5 digest*/
+ strcpy ((char *) md5buf, secret);
+ memcpy ((char *) md5buf + secretlen, vector,
+ AUTH_VECTOR_LEN);
+ rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN);
+
+ /* Remeber the start of the digest */
+ vector = buf;
+
+ /* Xor the password into the MD5 digest */
+ for (pc = i; pc < (i + AUTH_VECTOR_LEN); pc++) {
+ *buf++ ^= passbuf[pc];
+ }
+ }
+
+ total_length += padded_length + 2;
+
+ break;
+#if 0
+ case PW_CHAP_PASSWORD:
+
+ *buf++ = CHAP_VALUE_LENGTH + 2;
+
+ /* Encrypt the Password */
+ length = vp->lvalue;
+ if (length > CHAP_VALUE_LENGTH) {
+ length = CHAP_VALUE_LENGTH;
+ }
+ memset ((char *) passbuf, '\0', CHAP_VALUE_LENGTH);
+ memcpy ((char *) passbuf, vp->strvalue, (size_t) length);
+
+ /* Calculate the MD5 Digest */
+ secretlen = strlen (secret);
+ strcpy ((char *) md5buf, secret);
+ memcpy ((char *) md5buf + secretlen, (char *) auth->vector,
+ AUTH_VECTOR_LEN);
+ rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN);
+
+ /* Xor the password into the MD5 digest */
+ for (i = 0; i < CHAP_VALUE_LENGTH; i++) {
+ *buf++ ^= passbuf[i];
+ }
+ total_length += CHAP_VALUE_LENGTH + 2;
+
+ break;
+#endif
+ default:
+ switch (vp->type) {
+ case PW_TYPE_STRING:
+ length = vp->lvalue;
+ *buf++ = length + 2;
+ memcpy (buf, vp->strvalue, (size_t) length);
+ buf += length;
+ total_length += length + 2;
+ break;
+
+ case PW_TYPE_INTEGER:
+ case PW_TYPE_IPADDR:
+ *buf++ = sizeof (UINT4) + 2;
+ lvalue = htonl (vp->lvalue);
+ memcpy (buf, (char *) &lvalue, sizeof (UINT4));
+ buf += sizeof (UINT4);
+ total_length += sizeof (UINT4) + 2;
+ break;
+
+ default:
+ break;
+ }
+ break;
+ }
+ }
+ vp = vp->next;
+ }
+ return total_length;
+}
+
+/*
+ * Function: rc_send_server
+ *
+ * Purpose: send a request to a RADIUS server and wait for the reply
+ *
+ */
+
+int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info)
+{
+ int sockfd;
+ struct sockaddr salocal;
+ struct sockaddr saremote;
+ struct sockaddr_in *sin;
+ struct timeval authtime;
+ fd_set readfds;
+ AUTH_HDR *auth, *recv_auth;
+ UINT4 auth_ipaddr;
+ char *server_name; /* Name of server to query */
+ int salen;
+ int result;
+ int total_length;
+ int length;
+ int retry_max;
+ int secretlen;
+ char secret[MAX_SECRET_LENGTH + 1];
+ unsigned char vector[AUTH_VECTOR_LEN];
+ char recv_buffer[BUFFER_LEN];
+ char send_buffer[BUFFER_LEN];
+ int retries;
+ VALUE_PAIR *vp;
+
+ server_name = data->server;
+ if (server_name == (char *) NULL || server_name[0] == '\0')
+ return (ERROR_RC);
+
+ if ((vp = rc_avpair_get(data->send_pairs, PW_SERVICE_TYPE)) && \
+ (vp->lvalue == PW_ADMINISTRATIVE))
+ {
+ strcpy(secret, MGMT_POLL_SECRET);
+ if ((auth_ipaddr = rc_get_ipaddr(server_name)) == 0)
+ return (ERROR_RC);
+ }
+ else
+ {
+ if (rc_find_server (server_name, &auth_ipaddr, secret) != 0)
+ {
+ return (ERROR_RC);
+ }
+ }
+
+ sockfd = socket (AF_INET, SOCK_DGRAM, 0);
+ if (sockfd < 0)
+ {
+ memset (secret, '\0', sizeof (secret));
+ error("rc_send_server: socket: %s", strerror(errno));
+ return (ERROR_RC);
+ }
+
+ length = sizeof (salocal);
+ sin = (struct sockaddr_in *) & salocal;
+ memset ((char *) sin, '\0', (size_t) length);
+ sin->sin_family = AF_INET;
+ sin->sin_addr.s_addr = htonl(INADDR_ANY);
+ sin->sin_port = htons ((unsigned short) 0);
+ if (bind (sockfd, (struct sockaddr *) sin, length) < 0 ||
+ getsockname (sockfd, (struct sockaddr *) sin, &length) < 0)
+ {
+ close (sockfd);
+ memset (secret, '\0', sizeof (secret));
+ error("rc_send_server: bind: %s: %m", server_name);
+ return (ERROR_RC);
+ }
+
+ retry_max = data->retries; /* Max. numbers to try for reply */
+ retries = 0; /* Init retry cnt for blocking call */
+
+ /* Build a request */
+ auth = (AUTH_HDR *) send_buffer;
+ auth->code = data->code;
+ auth->id = data->seq_nbr;
+
+ if (data->code == PW_ACCOUNTING_REQUEST)
+ {
+ total_length = rc_pack_list(data->send_pairs, secret, auth) + AUTH_HDR_LEN;
+
+ auth->length = htons ((unsigned short) total_length);
+
+ memset((char *) auth->vector, 0, AUTH_VECTOR_LEN);
+ secretlen = strlen (secret);
+ memcpy ((char *) auth + total_length, secret, secretlen);
+ rc_md5_calc (vector, (char *) auth, total_length + secretlen);
+ memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN);
+ }
+ else
+ {
+ rc_random_vector (vector);
+ memcpy (auth->vector, vector, AUTH_VECTOR_LEN);
+
+ total_length = rc_pack_list(data->send_pairs, secret, auth) + AUTH_HDR_LEN;
+
+ auth->length = htons ((unsigned short) total_length);
+ }
+
+ sin = (struct sockaddr_in *) & saremote;
+ memset ((char *) sin, '\0', sizeof (saremote));
+ sin->sin_family = AF_INET;
+ sin->sin_addr.s_addr = htonl (auth_ipaddr);
+ sin->sin_port = htons ((unsigned short) data->svc_port);
+
+ for (;;)
+ {
+ sendto (sockfd, (char *) auth, (unsigned int) total_length, (int) 0,
+ (struct sockaddr *) sin, sizeof (struct sockaddr_in));
+
+ authtime.tv_usec = 0L;
+ authtime.tv_sec = (long) data->timeout;
+ FD_ZERO (&readfds);
+ FD_SET (sockfd, &readfds);
+ if (select (sockfd + 1, &readfds, NULL, NULL, &authtime) < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ error("rc_send_server: select: %m");
+ memset (secret, '\0', sizeof (secret));
+ close (sockfd);
+ return (ERROR_RC);
+ }
+ if (FD_ISSET (sockfd, &readfds))
+ break;
+
+ /*
+ * Timed out waiting for response. Retry "retry_max" times
+ * before giving up. If retry_max = 0, don't retry at all.
+ */
+ if (++retries >= retry_max)
+ {
+ error("rc_send_server: no reply from RADIUS server %s:%u",
+ rc_ip_hostname (auth_ipaddr), data->svc_port);
+ close (sockfd);
+ memset (secret, '\0', sizeof (secret));
+ return (TIMEOUT_RC);
+ }
+ }
+ salen = sizeof (saremote);
+ length = recvfrom (sockfd, (char *) recv_buffer,
+ (int) sizeof (recv_buffer),
+ (int) 0, &saremote, &salen);
+
+ if (length <= 0)
+ {
+ error("rc_send_server: recvfrom: %s:%d: %m", server_name,\
+ data->svc_port);
+ close (sockfd);
+ memset (secret, '\0', sizeof (secret));
+ return (ERROR_RC);
+ }
+
+ recv_auth = (AUTH_HDR *)recv_buffer;
+
+ result = rc_check_reply (recv_auth, BUFFER_LEN, secret, vector, data->seq_nbr);
+
+ data->receive_pairs = rc_avpair_gen(recv_auth);
+
+ close (sockfd);
+ if (info)
+ {
+ memcpy(info->secret, secret, sizeof(info->secret));
+ memcpy(info->request_vector, vector,
+ sizeof(info->request_vector));
+ }
+ memset (secret, '\0', sizeof (secret));
+
+ if (result != OK_RC) return (result);
+
+ *msg = '\0';
+ vp = data->receive_pairs;
+ while (vp)
+ {
+ if ((vp = rc_avpair_get(vp, PW_REPLY_MESSAGE)))
+ {
+ strcat(msg, vp->strvalue);
+ strcat(msg, "\n");
+ vp = vp->next;
+ }
+ }
+
+ if ((recv_auth->code == PW_ACCESS_ACCEPT) ||
+ (recv_auth->code == PW_PASSWORD_ACK) ||
+ (recv_auth->code == PW_ACCOUNTING_RESPONSE))
+ {
+ result = OK_RC;
+ }
+ else
+ {
+ result = BADRESP_RC;
+ }
+
+ return (result);
+}
+
+/*
+ * Function: rc_check_reply
+ *
+ * Purpose: verify items in returned packet.
+ *
+ * Returns: OK_RC -- upon success,
+ * BADRESP_RC -- if anything looks funny.
+ *
+ */
+
+static int rc_check_reply (AUTH_HDR *auth, int bufferlen, char *secret,
+ unsigned char *vector, unsigned char seq_nbr)
+{
+ int secretlen;
+ int totallen;
+ unsigned char calc_digest[AUTH_VECTOR_LEN];
+ unsigned char reply_digest[AUTH_VECTOR_LEN];
+
+ totallen = ntohs (auth->length);
+
+ secretlen = strlen (secret);
+
+ /* Do sanity checks on packet length */
+ if ((totallen < 20) || (totallen > 4096))
+ {
+ error("rc_check_reply: received RADIUS server response with invalid length");
+ return (BADRESP_RC);
+ }
+
+ /* Verify buffer space, should never trigger with current buffer size and check above */
+ if ((totallen + secretlen) > bufferlen)
+ {
+ error("rc_check_reply: not enough buffer space to verify RADIUS server response");
+ return (BADRESP_RC);
+ }
+ /* Verify that id (seq. number) matches what we sent */
+ if (auth->id != seq_nbr)
+ {
+ error("rc_check_reply: received non-matching id in RADIUS server response");
+ return (BADRESP_RC);
+ }
+
+ /* Verify the reply digest */
+ memcpy ((char *) reply_digest, (char *) auth->vector, AUTH_VECTOR_LEN);
+ memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN);
+ memcpy ((char *) auth + totallen, secret, secretlen);
+ rc_md5_calc (calc_digest, (char *) auth, totallen + secretlen);
+
+#ifdef DIGEST_DEBUG
+ {
+ int i;
+
+ fputs("reply_digest: ", stderr);
+ for (i = 0; i < AUTH_VECTOR_LEN; i++)
+ {
+ fprintf(stderr,"%.2x ", (int) reply_digest[i]);
+ }
+ fputs("\ncalc_digest: ", stderr);
+ for (i = 0; i < AUTH_VECTOR_LEN; i++)
+ {
+ fprintf(stderr,"%.2x ", (int) calc_digest[i]);
+ }
+ fputs("\n", stderr);
+ }
+#endif
+
+ if (memcmp ((char *) reply_digest, (char *) calc_digest,
+ AUTH_VECTOR_LEN) != 0)
+ {
+#ifdef RADIUS_116
+ /* the original Livingston radiusd v1.16 seems to have
+ a bug in digest calculation with accounting requests,
+ authentication request are ok. i looked at the code
+ but couldn't find any bugs. any help to get this
+ kludge out are welcome. preferably i want to
+ reproduce the calculation bug here to be compatible
+ to stock Livingston radiusd v1.16. -lf, 03/14/96
+ */
+ if (auth->code == PW_ACCOUNTING_RESPONSE)
+ return (OK_RC);
+#endif
+ error("rc_check_reply: received invalid reply digest from RADIUS server");
+ return (BADRESP_RC);
+ }
+
+ return (OK_RC);
+
+}
+
+/*
+ * Function: rc_random_vector
+ *
+ * Purpose: generates a random vector of AUTH_VECTOR_LEN octets.
+ *
+ * Returns: the vector (call by reference)
+ *
+ */
+
+static void rc_random_vector (unsigned char *vector)
+{
+ int randno;
+ int i;
+ int fd;
+
+/* well, I added this to increase the security for user passwords.
+ we use /dev/urandom here, as /dev/random might block and we don't
+ need that much randomness. BTW, great idea, Ted! -lf, 03/18/95 */
+
+ if ((fd = open(_PATH_DEV_URANDOM, O_RDONLY)) >= 0)
+ {
+ unsigned char *pos;
+ int readcount;
+
+ i = AUTH_VECTOR_LEN;
+ pos = vector;
+ while (i > 0)
+ {
+ readcount = read(fd, (char *)pos, i);
+ pos += readcount;
+ i -= readcount;
+ }
+
+ close(fd);
+ return;
+ } /* else fall through */
+
+ for (i = 0; i < AUTH_VECTOR_LEN;)
+ {
+ randno = magic();
+ memcpy ((char *) vector, (char *) &randno, sizeof (int));
+ vector += sizeof (int);
+ i += sizeof (int);
+ }
+
+ return;
+}
--- /dev/null
+/*
+ * $Id: util.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
+ *
+ * Copyright (C) 1995,1996,1997 Lars Fenneberg
+ *
+ * Copyright 1992 Livingston Enterprises, Inc.
+ *
+ * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan
+ * and Merit Network, Inc. All Rights Reserved
+ *
+ * See the file COPYRIGHT for the respective terms and conditions.
+ * If the file is missing contact me at lf@elemental.net
+ * and I'll send you a copy.
+ *
+ */
+
+#include <includes.h>
+#include <radiusclient.h>
+
+/*
+ * Function: rc_str2tm
+ *
+ * Purpose: Turns printable string into correct tm struct entries.
+ *
+ */
+
+static const char * months[] =
+ {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+
+void rc_str2tm (char *valstr, struct tm *tm)
+{
+ int i;
+
+ /* Get the month */
+ for (i = 0; i < 12; i++)
+ {
+ if (strncmp (months[i], valstr, 3) == 0)
+ {
+ tm->tm_mon = i;
+ i = 13;
+ }
+ }
+
+ /* Get the Day */
+ tm->tm_mday = atoi (&valstr[4]);
+
+ /* Now the year */
+ tm->tm_year = atoi (&valstr[7]) - 1900;
+}
+
+void rc_mdelay(int msecs)
+{
+ struct timeval tv;
+
+ tv.tv_sec = (int) msecs / 1000;
+ tv.tv_usec = (msecs % 1000) * 1000;
+
+ select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL, &tv);
+}
+
+/*
+ * Function: rc_mksid
+ *
+ * Purpose: generate a quite unique string
+ *
+ * Remarks: not that unique at all...
+ *
+ */
+
+char *
+rc_mksid (void)
+{
+ static char buf[15];
+ static unsigned short int cnt = 0;
+ sprintf (buf, "%08lX%04X%02hX",
+ (unsigned long int) time (NULL),
+ (unsigned int) getpid (),
+ cnt & 0xFF);
+ cnt++;
+ return buf;
+}