Add support so using autoheader to generate autoconf.h, and add
[freeradius.git] / src / include / libradius.h
index 28781bf..245bd58 100644 (file)
@@ -8,7 +8,6 @@
  * Version:    $Id$
  *
  */
-
 #include "autoconf.h"
 
 #ifdef HAVE_SYS_TYPES_H
 #endif
 
 typedef struct attr_flags {
-       char                    addport;        /* Add port to IP address */
-       char                    has_tag;        /* attribute allows tags */
-       signed char             tag;
-       uint8_t                 encrypt;        /* encryption method */
-       signed char             len_disp;       /* length displacement */
-       char                    do_xlat;
+       unsigned int            addport : 1;  /* add NAS-Port to IP address */
+       unsigned int            has_tag : 1;  /* tagged attribute */
+       unsigned int            do_xlat : 1;  /* strvalue is dynamic */
+       unsigned int            caseless : 1; /* case insensitive compares */
+       int8_t                  tag;          /* tag for tunneled attributes */
+       uint8_t                 encrypt;      /* encryption method */
 } ATTR_FLAGS;
 
 /*
@@ -184,6 +183,7 @@ int         dict_addvendor(const char *name, int value);
 int            dict_addattr(const char *name, int vendor, int type, int value, ATTR_FLAGS flags);
 int            dict_addvalue(const char *namestr, char *attrstr, int value);
 int            dict_init(const char *dir, const char *fn);
+void           dict_free(void);
 DICT_ATTR      *dict_attrbyvalue(int attr);
 DICT_ATTR      *dict_attrbyname(const char *attr);
 DICT_VALUE     *dict_valbyattr(int attr, int val);
@@ -287,11 +287,11 @@ extern int        librad_max_attributes; /* per incoming packet */
  */
 char *         ip_hostname (char *buf, size_t buflen, uint32_t ipaddr);
 uint32_t       ip_getaddr (const char *);
-char *         ip_ntoa(char *, uint32_t);
+const char *   ip_ntoa(char *, uint32_t);
 uint32_t       ip_addr(const char *);
 char           *ifid_ntoa(char *buffer, size_t size, uint8_t *ifid);
 uint8_t                *ifid_aton(const char *ifid_str, uint8_t *ifid);
-char           *ipv6_ntoa(char *buffer, size_t size, void *ip6addr);
+const char     *ipv6_ntoa(char *buffer, size_t size, void *ip6addr);
 int            ipv6_addr(const char *ip6_str, void *ip6addr);
 char           *strNcpy(char *dest, const char *src, int n);
 void           rad_lowercase(char *str);
@@ -306,6 +306,16 @@ int                ascend_parse_filter(VALUE_PAIR *pair);
 void           print_abinary(VALUE_PAIR *vp, u_char *buffer, int len);
 #endif /*ASCEND_BINARY*/
 
+#ifndef HAVE_SNPRINTF
+#define HAVE_LOCAL_SNPRINTF
+#define snprintf lrad_snprintf
+#endif
+
+#ifndef HAVE_VSNPRINTF
+#define HAVE_LOCAL_SNPRINTF
+#define vsnprintf lrad_vsnprintf
+#endif
+
 #ifdef HAVE_LOCAL_SNPRINTF
 #include <stdarg.h>
 int snprintf(char *str, size_t count, const char *fmt, ...);
@@ -327,11 +337,6 @@ void lrad_isaac(lrad_randctx *ctx);
 void lrad_randinit(lrad_randctx *ctx, int flag);
 uint32_t lrad_rand(void);      /* like rand(), but better. */
 
-void lrad_lmpwdhash(const unsigned char *password,unsigned char *lmhash);
-void lrad_mschap(const unsigned char *win_password,
-                const unsigned char *challenge, unsigned char *response);
-
-
 /* crypt wrapper from crypt.c */
 int lrad_crypt_check(const char *key, const char *salt);
 
@@ -343,15 +348,28 @@ rbtree_t       *rbtree_create(int (*Compare)(const void *, const void *),
                               void (*freeNode)(void *),
                               int replace_flag);
 void           rbtree_free(rbtree_t *tree);
-int            rbtree_insert(rbtree_t *tree, void *Data);
+int            rbtree_insert(rbtree_t *tree, const void *Data);
 void           rbtree_delete(rbtree_t *tree, rbnode_t *Z);
-rbnode_t       *rbtree_find(rbtree_t *tree, void *Data);
-void          *rbtree_finddata(rbtree_t *tree, void *Data);
+int            rbtree_deletebydata(rbtree_t *tree, const void *data);
+rbnode_t       *rbtree_find(rbtree_t *tree, const void *Data);
+void          *rbtree_finddata(rbtree_t *tree, const void *Data);
 int            rbtree_num_elements(rbtree_t *tree);
 void          *rbtree_node2data(rbtree_t *tree, rbnode_t *node);
 
 /* callback order for walking  */
 typedef enum { PreOrder, InOrder, PostOrder } RBTREE_ORDER;
-int rbtree_walk(rbtree_t *tree, int (*callback)(void *), RBTREE_ORDER order);
+
+/*
+ *     The callback should be declared as:
+ *     int callback(void *context, void *data)
+ *
+ *     The "context" is some user-defined context.
+ *     The "data" is the pointer to the user data in the node,
+ *       NOT the node itself.
+ *
+ *     It should return 0 if all is OK, and !0 for any error.
+ *     The walking will stop on any error.
+ */
+int rbtree_walk(rbtree_t *tree, RBTREE_ORDER order, int (*callback)(void *, void *), void *context); 
 
 #endif /*LIBRADIUS_H*/