58 #ifndef _INCLUDE_DTSAPP_H
59 #define _INCLUDE_DTSAPP_H
68 #include <arpa/inet.h>
85 struct sockaddr_un
un;
88 struct sockaddr_in
sa4;
90 struct sockaddr_in6
sa6;
92 struct sockaddr_storage
ss;
245 typedef void *(*threadfunc)(
void *);
342 struct sigaction *
sa;
353 void printgnu(
const char *pname,
int year,
const char *dev,
const char *email,
const char *www);
369 extern int objlock(
void *data);
372 extern int objcnt(
void *data);
373 extern int objsize(
void *data);
375 extern int objref(
void *data);
377 void *
objchar(
const char *orig);
397 extern uint32_t
hashlittle(
const void *key,
size_t length, uint32_t initval);
404 extern int genrand(
void *buf,
int len);
405 extern void sha512sum(
unsigned char *buff,
const void *data,
unsigned long len);
406 extern void sha256sum(
unsigned char *buff,
const void *data,
unsigned long len);
407 extern void sha1sum(
unsigned char *buff,
const void *data,
unsigned long len);
408 extern void md5sum(
unsigned char *buff,
const void *data,
unsigned long len);
409 extern void sha512sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2);
410 extern void sha256sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2);
411 extern void sha1sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2);
412 extern void md5sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2);
413 extern int sha512cmp(
unsigned char *digest1,
unsigned char *digest2);
414 extern int sha256cmp(
unsigned char *digest1,
unsigned char *digest2);
415 extern int sha1cmp(
unsigned char *digest1,
unsigned char *digest2);
416 extern int md5cmp(
unsigned char *digest1,
unsigned char *digest2);
417 extern void sha512hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen);
418 extern void sha256hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen);
419 extern void sha1hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen);
420 extern void md5hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen);
422 extern char *
ltrim(
char *str);
423 extern char *
rtrim(
const char *str);
424 extern char *
trim(
const char *str);
425 extern uint64_t
tvtontp64(
struct timeval *tv);
426 extern uint16_t
checksum(
const void *data,
int len);
428 extern uint16_t
verifysum(
const void *data,
int len,
const uint16_t check);
431 extern uint8_t *
gzinflatebuf(uint8_t *buf_in,
int buf_size, uint32_t *len);
432 extern int is_gzip(uint8_t *buf,
int buf_size);
434 extern void touch(
const char *filename);
436 extern void touch(
const char *filename, uid_t user, gid_t group);
438 extern char *
b64enc(
const char *message,
int nonl);
439 extern char *
b64enc_buf(
const char *message, uint32_t len,
int nonl);
447 extern struct fwsocket *
sockbind(
int family,
int stype,
int proto,
const char *ipaddr,
const char *port,
void *
ssl,
int backlog);
449 extern struct fwsocket *
tcpbind(
const char *ipaddr,
const char *port,
void *
ssl,
int backlog);
452 int score_ipv4(
struct sockaddr_in *sa4,
char *ipaddr,
int iplen);
453 int score_ipv6(
struct sockaddr_in6 *sa6,
char *ipaddr,
int iplen);
456 const char *
inet_ntop(
int af,
const void *src,
char *dest, socklen_t size);
460 int inet_lookup(
int family,
const char *host,
void *addr, socklen_t len);
468 extern int checkipv6mask(
const char *ipaddr,
const char *network, uint8_t bits);
478 const char *
cidrtosn(
int bitlen,
char *buf,
int size);
479 const char *
getnetaddr(
const char *ipaddr,
int cidr,
char *buf,
int size);
480 const char *
getbcaddr(
const char *ipaddr,
int cidr,
char *buf,
int size);
481 const char *
getfirstaddr(
const char *ipaddr,
int cidr,
char *buf,
int size);
482 const char *
getlastaddr(
const char *ipaddr,
int cidr,
char *buf,
int size);
486 int check_ipv4(
const char* ip,
int cidr,
const char *test);
495 extern uint8_t
nf_ctrack_nat(uint8_t *pkt, uint32_t addr, uint16_t port, uint8_t dnat);
506 extern int create_kernmac(
char *ifname,
char *macdev,
unsigned char *mac);
509 extern int create_tun(
const char *ifname,
const unsigned char *hwaddr,
int flags);
510 extern int ifrename(
const char *oldname,
const char *newname);
511 extern int ifdown(
const char *ifname,
int flags);
512 extern int ifup(
const char *ifname,
int flags);
513 extern int ifhwaddr(
const char *ifname,
unsigned char *hwaddr);
520 extern void eui48to64(
unsigned char *mac48,
unsigned char *eui64);
522 extern int ifrename(
const char *oldname,
const char *newname);
523 const char *
get_ifipaddr(
const char *iface,
int family);
529 #define RAD_AUTH_HDR_LEN 20
532 #define RAD_AUTH_PACKET_LEN 4096
535 #define RAD_AUTH_TOKEN_LEN 16
538 #define RAD_MAX_PASS_LEN 128
541 #define RAD_ATTR_USER_NAME 1
544 #define RAD_ATTR_USER_PASSWORD 2
547 #define RAD_ATTR_NAS_IP_ADDR 4
550 #define RAD_ATTR_NAS_PORT 5
553 #define RAD_ATTR_SERVICE_TYPE 6
556 #define RAD_ATTR_ACCTID 44
559 #define RAD_ATTR_PORT_TYPE 61
562 #define RAD_ATTR_EAP 79
565 #define RAD_ATTR_MESSAGE 80
589 extern void add_radserver(
const char *ipaddr,
const char *auth,
const char *acct,
const char *secret,
int timeout);
595 extern void *
tlsv1_init(
const char *cacert,
const char *cert,
const char *key,
int verify);
596 extern void *
sslv2_init(
const char *cacert,
const char *cert,
const char *key,
int verify);
597 extern void *
sslv3_init(
const char *cacert,
const char *cert,
const char *key,
int verify);
598 extern void *
dtlsv1_init(
const char *cacert,
const char *cert,
const char *key,
int verify);
613 extern int process_config(
const char *configname,
const char *configfile);
662 extern struct xml_doc *
xml_loadbuf(
const uint8_t *buffer, uint32_t len,
int validate);
680 extern void xml_savefile(
struct xml_doc *xmldoc,
const char *file,
int format,
int compress);
795 const char *passwd,
const char *authzid);
796 extern int ldap_simplerebind(
struct ldap_conn *ld,
const char *initialdn,
const char *initialpw,
const char *base,
const char *filter,
797 const char *uidrdn,
const char *uid,
const char *passwd);
853 typedef struct basic_auth *(*curl_authcb)(
const char*,
const char*,
void*);
876 typedef void *(*curl_progress_newdata)(
void*);
897 int is_dir(
const char *path);
900 int mk_dir(
const char *dir);
902 int mk_dir(
const char *dir, mode_t mode, uid_t user, gid_t group);
909 #define JHASH_INITVAL 0xdeadbeef
914 #define jenhash(key, length, initval) hashlittle(key, length, (initval) ? initval : JHASH_INITVAL);
918 #define clearflag(obj, flag) \
920 obj->flags &= ~flag;\
925 #define setflag(obj, flag) \
927 obj->flags |= flag; \
932 #define testflag(obj, flag) \
933 (objlock(obj) | (obj->flags & flag) | objunlock(obj))
949 #define FRAMEWORK_MAIN(progname, name, email, www, year, runfile, flags, sighfunc) \
950 static int framework_main(int argc, char *argv[]); \
951 int main(int argc, char *argv[]) { \
952 framework_mkcore(progname, name, email, www, year, runfile, flags, sighfunc); \
953 return (framework_init(argc, argv, framework_main)); \
955 static int framework_main(int argc, char *argv[])
959 #define ALLOC_CONST(const_var, val) { \
962 tmp_char = (char*)malloc(strlen(val) + 1); \
963 strcpy(tmp_char, val); \
964 const_var = (const char*)tmp_char; \
976 #define DTS_OJBREF_CLASS(classtype) \
977 void *operator new(size_t sz) {\
978 return objalloc(sz, &classtype::dts_unref_classtype);\
980 void operator delete(void *obj) {\
982 static void dts_unref_classtype(void *data) {\
983 delete (classtype*)data;\
uint8_t nf_ctrack_delete(uint8_t *pkt)
struct xslt_doc * xslt_open(const char *xsltfile)
Open a XSLT file returning reference to it.
int ldap_mod_remattr(struct ldap_conn *ldap, const char *dn, const char *attr)
Delete a attribute from a DN.
SSL not attempted at all.
uint64_t tvtontp64(struct timeval *tv)
Convert a timeval struct to 64bit NTP time.
void ldap_unref_attr(struct ldap_entry *entry, struct ldap_attr *attr)
Remove a attribute from a entry.
int md5cmp(unsigned char *digest1, unsigned char *digest2)
Compare two md5 hashes.
const char * ldap_errmsg(int res)
Return LDAP error for a ldap error.
SSL data structure for enabling encryption on sockets.
int strlenzero(const char *str)
Check if a string is zero length.
Basic authentification structure.
int ldap_mod_delattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value)
Delete a value from a attribute in a DN.
thread struct used to create threads data needs to be first element
uint16_t checksum(const void *data, int len)
Obtain the checksum for a buffer.
const char * email
Email address of copyright holder.
struct ldap_rdn * next
Next RDN element.
struct radius_packet * new_radpacket(unsigned char code)
Create a new radius packet.
struct fwsocket * sockbind(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl, int backlog)
Generic server socket.
union sockstruct addr
system socket data structure.
void curl_setauth_cb(curl_authcb auth_cb, void *data)
Set global password callback.
void xml_modify(struct xml_doc *xmldoc, struct xml_node *xnode, const char *value)
Modify a XML node.
void * create_bucketlist(int bitmask, blisthash hash_function)
const char * sockaddr2ip(union sockstruct *addr, char *buf, int len)
Return the ip address of a sockstruct addr.
const char * key
Attribute key for searching and indexing.
int ldap_simplerebind(struct ldap_conn *ld, const char *initialdn, const char *initialpw, const char *base, const char *filter, const char *uidrdn, const char *uid, const char *passwd)
Bind to LDAP connection using rebind.
int ifrename(const char *oldname, const char *newname)
Rename interface helper.
const char * dn
LDAP distiguished name.
void * sslv3_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for SSLv3.
void ssl_shutdown(void *ssl, int sock)
Shutdown the SSL connection.
int is_exec(const char *path)
Determine if a file is executable.
void ipv4tcpchecksum(uint8_t *pkt)
Update the TCP checksum of a IPv4 packet.
int ldap_simplebind(struct ldap_conn *ld, const char *dn, const char *passwd)
Bind to the connection with simple bind requireing a distingushed name and password.
void(* syssighandler)(int, siginfo_t *, void *)
Callback to user supplied signal handler.
struct sockaddr_un un
Unix sockets.
struct basic_auth * curl_newauth(const char *user, const char *passwd)
Create a new auth structure with initial vallues.
void zuncompress(struct zobj *buff, uint8_t *obuff)
Uncompress zobj buffer to buffer.
const char * progname
Detailed application name.
int ldap_domodify(struct ldap_conn *ld, struct ldap_modify *lmod)
Apply the modification to the server.
int objref(void *data)
Reference a object.
void config_entry_callback(struct bucket_list *entries, config_entrycb entry_cb)
Callback Wraper that iterates through all items calling a callback for each item. ...
struct xml_node * xml_getnextnode(void *iter)
Return the next node.
struct xml_doc xml_doc
Forward decleration of structure.
Create the the thread joinable only do this if you will be joining it cancelable threads are best det...
uint16_t zlen
Compressed size of data.
struct ldap_results * ldap_search_base(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res,...)
Search LDAP connection base.
struct ldap_attr * first_attr
First attr (head of list).
void framework_mkcore(char *progname, char *name, char *email, char *web, int year, char *runfile, int flags, syssighandler sigfunc)
Initilise application data structure and return a reference.
void sha256sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-256 hash.
struct xml_node * xml_getrootnode(struct xml_doc *xmldoc)
Return reference to the root node.
struct fwsocket * dtls_listenssl(struct fwsocket *sock)
Implementation of "listen" for DTLSv1.
void addradattrip(struct radius_packet *packet, char type, char *ipaddr)
Add a integer attribute too the packet.
void *(* threadfunc)(void *)
Thread function.
struct sigaction * sa
sigaction structure allocated on execution
struct nf_conntrack * nf_ctrack_buildct(uint8_t *pkt)
void mcast6_ip(struct in6_addr *addr)
Randomally assign a SSM Multicast address.param addr Ip address structure to fill out...
int inet_lookup(int family, const char *host, void *addr, socklen_t len)
Perform DNS lookup on a host/ip retun the IP address.
sock_flags
Socket flags controling a socket.
uint32_t hashlittle(const void *key, size_t length, uint32_t initval)
hash a variable-length key into a 32-bit value (Little Endian)
const char * getbcaddr(const char *ipaddr, int cidr, char *buf, int size)
Return broadcast address.
const char * developer
Developer/Copyright holder.
struct curlbuf * curl_geturl(const char *def_url, struct basic_auth *bauth, curl_authcb authcb, void *auth_data)
Fetch the URL using CURL (HTTP GET)
uint8_t nf_ctrack_init(void)
void stopthreads(int join)
Signal manager to stop and cancel all running threads.
int socketread(struct fwsocket *sock, void *buf, int num)
Read from a socket into a buffer.
struct ldap_entry * ldap_getentry(struct ldap_results *results, const char *dn)
Find and return the entry from the results for a specific dn.
void config_file_callback(config_filecb file_cb)
Callback wrapper to iterate over all configfiles calling a callback on each file. ...
void xml_unlink(struct xml_node *xnode)
Unlink a node from the document.
char * buffer
Value buffer.
int objlock(void *data)
Lock the reference.
const char * cidrtosn(int bitlen, char *buf, int size)
Return the dotted quad notation subnet mask from a CIDR.
struct fwsocket * unixsocket_client(const char *sock, int protocol, socketrecv read, void *data)
Create a client thread on the socket.
struct fwsocket * parent
Parent socket if we connected to a server and were spawned.
const char * name
Name of the node.
framework_flags
Application control flags.
void * objchar(const char *orig)
Return a reference to copy of a buffer.
struct xml_node * xml_addnode(struct xml_doc *xmldoc, const char *xpath, const char *name, const char *value, const char *attrkey, const char *keyval)
Append a node to a path.
void addradattrstr(struct radius_packet *packet, char type, char *str)
Add a integer attribute too the packet.
int packetchecksum(uint8_t *pkt)
Generic IPv4 and IPv6 Checksum.
void xml_createpath(struct xml_doc *xmldoc, const char *xpath)
Create a path in XML document.
Buffer containing the result of a curl transaction.
XML attribute name value pair.
HTTP post data structure.
void sha256sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA2-256 hash accross 2 data chunks.
int set_interface_addr(int ifindex, const unsigned char *hwaddr)
Set interface MAC addr.
struct fwsocket * tcpbind(const char *ipaddr, const char *port, void *ssl, int backlog)
Generic server socket.
int(* curl_progress_func)(void *, double, double, double, double)
CURL callback function called when there is progress (CURLOPT_PROGRESSFUNCTION).
void * xslt_apply_buffer(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc)
Apply XSLT document to a XML document returning result in buffer.
struct xml_doc * xml_loadbuf(const uint8_t *buffer, uint32_t len, int validate)
Load a buffer into XML document returning refereence.
const char * user
Username.
void sha256hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-256.
ldap_starttls
SSL connection requirements.
uint8_t * gzinflatebuf(uint8_t *buf_in, int buf_size, uint32_t *len)
Ungzip a buffer.
uint8_t nf_ctrack_nat(uint8_t *pkt, uint32_t addr, uint16_t port, uint8_t dnat)
struct bucket_list * attrs
Bucket list of attributes.
const char * ifaddr
MAC address of interface.
int flock
if there is a file locked this is the FD that will be unlocked and unlinked
uint8_t * body
Body buffer.
struct xml_node * xml_getnode(struct xml_search *xsearch, const char *key)
Return a node in the search matching key.
int ldap_mod_repattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value)
Replace the value of a attribute in a DN.
int interface_bind(char *iface, int protocol)
Bind to device fd may be a existing socket.
struct zobj * zcompress(uint8_t *buff, uint16_t len, uint8_t level)
Allocate a buffer and return it with compressed data.
uint32_t(* nfqueue_cb)(struct nfq_data *, struct nfqnl_msg_packet_hdr *, char *, uint32_t, void *, uint32_t *, void **)
void * objalloc(int size, objdestroy)
Allocate a referenced lockable object.
const char * www
URL displayed (use full URL ie with http://)
struct config_entry * get_config_entry(struct bucket_list *categories, const char *item)
Find the entry in a config file.
int socketwrite(struct fwsocket *sock, const void *buf, int num)
Write a buffer to a socket.
RADIUS_CODE
Radius packet codes.
struct xml_doc * xml_loaddoc(const char *docfile, int validate)
Load a XML file into XML document and return reference.
int count
Number of entries.
void nf_ctrack_endtrace(struct nfct_struct *nfct)
uint16_t checksum_add(const uint16_t checksum, const void *data, int len)
Obtain the checksum for a buffer adding a checksum.
int mk_dir(const char *dir, mode_t mode, uid_t user, gid_t group)
Create a directory.
void sslstartup(void)
Initialise SSL support this should be called at startup.
void curlclose(void)
Un reference CURL. This is required for each call to curlinit().
int framework_init(int argc, char *argv[], frameworkfunc callback)
Initilise the application daemonise and join the manager thread.
void * sslv2_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for SSLv2 (If available)
void closenetlink(void)
Close netlink socket on application termination.
SSL attempted but not required.
Data structure containing interface information.
int startthreads(void)
Initialise the threadlist and start manager thread.
struct nfq_data nfq_data
Forward decleration of structure.
Configuration category entry.
int sha1cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA1 hashes.
int bucket_list_cnt(struct bucket_list *blist)
Return number of items in the list.
void md5hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) MD5.
void sha512sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-512 hash.
const char * name
RDN element name.
struct ldap_attrval ** vals
Attribute value array.
void ipv4checksum(uint8_t *pkt)
Set the checksup of a IPv4 Packet.
void xml_appendnode(struct xml_doc *xmldoc, const char *xpath, struct xml_node *child)
Append a node to a path.
int flags
Application Options.
uint16_t verifysum(const void *data, int len, const uint16_t check)
Verify a checksum.
void * dtlsv1_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for DTLSv1.
int lockpidfile(const char *runfile)
Lock the run file in the framework application info.
int score_ipv6(struct sockaddr_in6 *sa6, char *ipaddr, int iplen)
Return a score for a IPv6 addrress.
int idx
Interface index required for at least IPv6 multicast support.
const char * xml_getattr(struct xml_node *xnode, const char *attr)
Return value of attribute.
struct ifinfo * get_ifinfo(const char *iface)
Return interface info for a specified interface.
void curl_postitem(struct curl_post *post, const char *name, const char *value)
Add a item value pair to post structure.
void * tlsv1_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for TLSv1.
void ldap_unref_entry(struct ldap_results *results, struct ldap_entry *entry)
Remove a entry from a result.
struct curlbuf * curl_ungzip(struct curlbuf *cbuf)
If the buffer contains GZIP data uncompress it.
void * xml_doctobuffer(struct xml_doc *xmldoc)
Return a dump of a XML document.
int create_kernmac(char *ifname, char *macdev, unsigned char *mac)
Create a kernal MAC VLAN.
int ifhwaddr(const char *ifname, unsigned char *hwaddr)
Get MAC addr for interface.
void unrefconfigfiles(void)
Empty out and unreference config files.
int objcnt(void *data)
Return current reference count.
void * next_bucket_loop(struct bucket_loop *bloop)
Return a reference to the next item in the list this could be the first item.
void randhwaddr(unsigned char *addr)
create random MAC address
void add_radserver(const char *ipaddr, const char *auth, const char *acct, const char *secret, int timeout)
Add new radius server to list of servers.
void close_socket(struct fwsocket *sock)
Mark the socket for closure and release the reference.
const char * get_ifipaddr(const char *iface, int family)
Find best IP adress for a interface.
int curlinit(void)
Initilise the CURL library.
void addradattrint(struct radius_packet *packet, char type, unsigned int val)
Add a integer attribute too the packet.
int socketread_d(struct fwsocket *sock, void *buf, int num, union sockstruct *addr)
Read from a socket into a buffer.
void xslt_init()
Reference the XSLT parser.
int set_interface_ipaddr(char *ifname, char *ipaddr)
Set IP addr on interface.
int checkipv6mask(const char *ipaddr, const char *network, uint8_t bits)
Check if ipaddr is in a network.
char * rtrim(const char *str)
Trim white space at the end of a string.
struct ldap_modify * ldap_modifyinit(const char *dn)
Create a modification reference for a DN.
void(* objdestroy)(void *)
Callback used to clean data of a reference object when it is to be freed.
int score_ipv4(struct sockaddr_in *sa4, char *ipaddr, int iplen)
Return a score for a IPv4 addrress.
void ipv4icmpchecksum(uint8_t *pkt)
Set the checksup of a IPv4 ICMP packet.
struct ldap_rdn * prev
Previous RDN element.
unsigned char code
Radius packet code.
void sha1sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA1 hash accross 2 data chunks.
void(* socketrecv)(struct fwsocket *, void *)
Callback function to register with a socket that will be called when there is data available...
int packetchecksumv6(uint8_t *pkt)
Prototype to check checksup on packet.
int xml_nodecount(struct xml_search *xsearch)
Return the number of nodes in the search path.
int ldap_mod_rep(struct ldap_modify *lmod, const char *attr,...)
Replace a attribute.
void md5sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the MD5 hash accross 2 data chunks.
const char * name
Name of attribute.
int get_iface_index(const char *ifname)
Get the netlink interface for a named interface.
const char * xml_getrootname(struct xml_doc *xmldoc)
Return the name of the root node.
uint16_t snprintf_pkt(struct nfq_data *tb, struct nfqnl_msg_packet_hdr *ph, uint8_t *pkt, char *buff, uint16_t len)
LDAP Relative distingushed name linked list.
const char * ipv6addr
IPv6 address priorised by Local/6in4.
void sha1sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA1 hash.
void tlsaccept(struct fwsocket *sock, struct ssldata *orig)
Create SSL session for new connection.
struct curl_post * curl_newpost(void)
Create a HTTP Post data structure.
SSL has been requested on this socket dont allow clear read/send.
int ldap_mod_addattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value)
Add a value for a attribute in a DN.
char * trim(const char *str)
Trim whitesapce from the beggining and end of a string.
struct ldap_entry * first_entry
Linked list of entries.
void(* config_filecb)(struct bucket_list *, const char *, const char *)
Calback used when processing config files.
int rdncnt
RDN element count.
int(* frameworkfunc)(int, char **)
Framework callback function.
void startsslclient(struct fwsocket *sock)
Start SSL on a client socket.
struct ldap_entry * prev
Previous entry.
void *(* curl_progress_newdata)(void *)
Create a new progress data structure.
The socket has been bound and awaiting connections.
void xslt_close()
Release reference to XSLT parser.
int create_tun(const char *ifname, const unsigned char *hwaddr, int flags)
Create a tunnel device.
const char * ipv4addr
IPv4 address priorotised by Routed/Reserved/Zeroconf.
int objtrylock(void *data)
Try lock a reference.
struct thread_pvt * framework_mkthread(threadfunc, threadcleanup, threadsighandler, void *data, int flags)
create a thread result must be unreferenced
int set_interface_flags(int ifindex, int set, int clear)
Alter interface flags.
struct bucket_list * children
We are the parent this is a list of spawn.
Return reference to thread this must be unreferenced.
int is_file(const char *path)
Determine if a file exists.
void * data
Reference to data held on thread creation.
int proto
Socket protocol.
char * url_escape(char *url)
Escape and return the url.
void nf_ctrack_close(void)
int ldap_saslbind(struct ldap_conn *ld, const char *mech, const char *realm, const char *authcid, const char *passwd, const char *authzid)
Bind to the server with SASL.
char * url_unescape(char *url)
UN escape and return the url.
int ldap_mod_del(struct ldap_modify *lmod, const char *attr,...)
Delete values from a attribute.
void rfc6296_map(struct natmap *map, struct in6_addr *ipaddr, int out)
Lookup and process a NAT transform as per RFC 6296.
uint8_t * header
Header buffer.
struct curlbuf * curl_posturl(const char *def_url, struct basic_auth *bauth, struct curl_post *post, curl_authcb authcb, void *auth_data)
Fetch the URL using CURL (HTTP POST)
int reservedip(const char *ipaddr)
Check IP against list of reserved IP's.
Zlib buffer used for compression and decompression.
int sha256cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-256 hashes.
void eui48to64(unsigned char *mac48, unsigned char *eui64)
Generate IPv6 address from mac address.
int create_kernvlan(char *ifname, unsigned short vid)
Create a VLAN on a interface.
int set_interface_name(int ifindex, const char *name)
Rename interface.
uint8_t * buff
Buffer with compressed/uncompressed data.
struct ssldata * ssl
SSL structure for encryption.
int ldap_mod_add(struct ldap_modify *lmod, const char *attr,...)
Add values to a attribute.
int genrand(void *buf, int len)
Generate random sequence.
int get_ip6_addrprefix(const char *iface, unsigned char *prefix)
Generate Unique Local IPv6 Unicast Addresses RFC 4193.
struct ldap_attr * ldap_getattr(struct ldap_entry *entry, const char *attr)
Find and return attribute in a entry.
int delete_kernvlan(char *ifname, int vid)
Delete a VLAN.
int rfc6296_map_add(char *intaddr, char *extaddr)
Calculate and add a NAT map.
void touch(const char *filename, uid_t user, gid_t group)
Create a file and set user and group.
int is_dir(const char *path)
Determine if a path is a directory.
int thread_signal(int sig)
Handle signal if its for me.
void xml_close()
Unreference the XML library.
struct fwsocket * udpconnect(const char *ipaddr, const char *port, void *ssl)
UDP Socket client.
void(* curl_progress_pause)(void *, int)
Callback function to control the progress bar.
struct ldap_results * ldap_search_one(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res,...)
Search LDAP connection one level.
const char * value
Value of the node.
Create lockfile on daemonize latter.
struct sockaddr_in sa4
IPv4 socket addr structure.
char * ltrim(char *str)
Trim white space at the begining of a string.
void socketserver(struct fwsocket *sock, socketrecv connectfunc, socketrecv acceptfunc, threadcleanup cleanup, void *data)
Create a server thread with a socket that has been created with sockbind udpbind or tcpbind...
ldap_attrtype
LDAP attribute types.
const char * name
Name of attribute.
int socketwrite_d(struct fwsocket *sock, const void *buf, int num, union sockstruct *addr)
Write a buffer to a socket.
struct ldap_entry * next
Next entry.
struct ldap_conn * ldap_connect(const char *uri, enum ldap_starttls starttls, int timelimit, int limit, int debug, int *err)
Connect to a LDAP server.
thread_option_flags
Options supplied to framework_mkthread all defaults are unset.
struct fwsocket * make_socket(int family, int type, int proto, void *ssl)
Allocate a socket structure and return reference.
enum threadopt flags
thread options
struct basic_auth *(* curl_authcb)(const char *, const char *, void *)
Callback to set the authentification ie on error 401.
struct nfqnl_msg_packet_hdr nfqnl_msg_packet_hdr
Forward decleration of structure.
int objunlock(void *data)
Unlock a reference.
void seedrand(void)
Seed openssl random number generator.
struct nfct_struct * nf_ctrack_trace(void)
struct nfct_struct nfct_struct
Forward decleration of structure.
void xml_init()
Initialise/Reference the XML library.
struct bucket_list * attrs
Bucket list of attributes.
struct sockaddr_storage ss
Sockaddr storage is a "magic" struct been able to hold IPv4 or IPv6.
int framework_threadok(void)
let threads check there status.
struct fwsocket * udpbind(const char *ipaddr, const char *port, void *ssl)
UDP server socket.
void ipv4udpchecksum(uint8_t *pkt)
Update the UDP checksum of a IPv4 packet.
void xml_setattr(struct xml_doc *xmldoc, struct xml_node *xnode, const char *name, const char *value)
Modify a XML node attribute.
void xslt_addparam(struct xslt_doc *xsltdoc, const char *param, const char *value)
Add a parameter to the XSLT document.
void socketclient(struct fwsocket *sock, void *data, socketrecv read, threadcleanup cleanup)
Create a server thread with a socket that has been created with sockbind udpbind or tcpbind...
struct fwsocket * mcast_socket(const char *iface, int family, const char *mcastip, const char *port, int flags)
Create a multicast socket.
const char * value
RDN element value.
Flag to enable pthread_cancel calls this is not recomended and can lead to memory leaks...
enum ldap_attrtype type
Data type stored in buffer.
void(* threadcleanup)(void *)
Function called after thread termination.
char * xml_getbuffer(void *buffer)
Return the buffer of a xml_buffer structure.
struct ldap_results * ldap_search_sub(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res,...)
Search LDAP connection subtree.
const char * dn
Distingushed name.
int sha512cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-512 hashes.
struct ldap_attr * list
Linked list of attributes.
struct xml_search * xml_xpath(struct xml_doc *xmldata, const char *xpath, const char *attrkey)
Return a reference to a xpath search result.
const char * getnetaddr(const char *ipaddr, int cidr, char *buf, int size)
Return the network address.
struct bucket_loop * get_category_loop(const char *configname)
Return a bucket loop to allow iterating over categories.
uint32_t cidrcnt(int bitlen)
Return the number of IP addresses in a given bitmask.
Application framework data.
unsigned char * radius_attr_first(struct radius_packet *packet)
Return first packet attribute.
Dont print GNU copyright.
void nf_ctrack_dump(void)
int(* threadsighandler)(int, void *)
Thread signal handler function.
void(* blist_cb)(void *, void *)
This callback is run on each entry in a list.
const char * passwd
Password.
struct fwsocket * sockconnect(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl)
Generic client socket.
void * nodeptr
Internal libxml2 node pointer.
void xml_delete(struct xml_node *xnode)
Delete a node from document it is not unrefd and should be.
struct bucket_list * get_category_next(struct bucket_loop *cloop, char *name, int len)
Iterate through categories returning the entries bucket.
void bucketlist_callback(struct bucket_list *blist, blist_cb callback, void *data2)
Run a callback function on all items in the list.
struct sockaddr sa
Base socket addr structure.
void sha512hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-512.
uint16_t olen
Original size of data.
void curl_setprogress(curl_progress_func cb, curl_progress_pause p_cb, curl_progress_newdata d_cb, void *data)
Configure global progress handling.
void mcast4_ip(struct in_addr *addr)
Randomally assign a SSM Multicast address.
void(* config_entrycb)(const char *, const char *)
Callback used when processing a entry.
char * b64enc(const char *message, int nonl)
Base 64 encode a string.
void daemonize()
Daemonise the application using fork/exit.
struct bucket_list * blist
Referenece to the bucket been itereated.
void sha512sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA2-512 hash accross 2 data chunks.
void(* config_catcb)(struct bucket_list *, const char *)
Calback used when processing a category.
struct ldap_attr * next
Next attribute.
struct fwsocket * unixsocket_server(const char *sock, int protocol, int mask, socketrecv read, void *data)
Create and run UNIX server socket thread.
void(* radius_cb)(struct radius_packet *, void *)
Callback to call when response arrives.
void remove_bucket_loop(struct bucket_loop *bloop)
Safely remove a item from a list while iterating in a loop.
Radius accounting request.
void md5sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the MD5 hash.
const char * value
Value of attribute.
int is_gzip(uint8_t *buf, int buf_size)
check a buffer if it contains gzip magic
int packetchecksumv4(uint8_t *pkt)
Update the checksum of a IPv4 packet.
const char * runfile
File to write PID too and lock.
struct fwsocket * accept_socket(struct fwsocket *sock)
Create and return a socket structure from accept()
int objsize(void *data)
Size requested for data.
Radius accounting response.
int check_ipv4(const char *ip, int cidr, const char *test)
Check if a IP address is in a network.
void sha1hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA1.
void config_cat_callback(struct bucket_list *categories, config_catcb cat_cb)
Callback wrapper that iterates through categories calling a callback on each category.
const char * dnufn
LDAP user format distingushed name.
void printgnu(const char *pname, int year, const char *dev, const char *email, const char *www)
Print a brief GNU copyright notice on console.
struct bucket_list * entries
Bucket list of entries.
const char * inet_ntop(int af, const void *src, char *dest, socklen_t size)
Win32 implementation of inet_ntop.
int addtobucket(struct bucket_list *blist, void *data)
Add a reference to the bucketlist.
char * ipv6to4prefix(const char *ipaddr)
Return IPv6 to IPv4 Prefix fot the address.
void * bucket_list_find_key(struct bucket_list *list, const void *key)
Find and return a reference to a item matching supplied key.
int delete_kernmac(char *macdev)
Delete Kernel MAC VLAN.
void remove_bucket_item(struct bucket_list *blist, void *data)
Remove and unreference a item from the list.
struct sockaddr_in6 sa6
IPv6 socket addr structure.
Socket union describing all address types.
int send_radpacket(struct radius_packet *packet, const char *userpass, radius_cb read_cb, void *cb_data)
Send radius packet.
struct ldap_rdn ** rdn
RDN element array.
enum sock_flags flags
Socket control flags.
int objunref(void *data)
Drop reference held.
const char * getfirstaddr(const char *ipaddr, int cidr, char *buf, int size)
Get the first usable address.
struct fwsocket * tcpconnect(const char *ipaddr, const char *port, void *ssl)
TCP Socket client.
struct xml_doc * curl_buf2xml(struct curlbuf *cbuf)
Create a XML document from from buffer (application/xml)
struct bucket_list * get_config_category(const char *configname, const char *category)
Return a single category.
struct xml_node * xml_getfirstnode(struct xml_search *xpsearch, void **iter)
Return reference to the first node optionally creating a iterator.
syssighandler sig_handler
Signal handler to pass signals too.
unsigned char * radius_attr_next(struct radius_packet *packet, unsigned char *attr)
Return next packet attribute.
int32_t(* blisthash)(const void *, int)
Callback used to calculate the hash of a structure.
int process_config(const char *configname, const char *configfile)
Process a configfile into buckets.
int ifup(const char *ifname, int flags)
Set interface up.
const char * getlastaddr(const char *ipaddr, int cidr, char *buf, int size)
Get the last usable address.
char * b64enc_buf(const char *message, uint32_t len, int nonl)
Base 64 encode a buffer.
struct bucket_loop * init_bucket_loop(struct bucket_list *blist)
Create a bucket list iterator to safely iterate the list.
int ifdown(const char *ifname, int flags)
Set interface down.
void xml_savefile(struct xml_doc *xmldoc, const char *file, int format, int compress)
Save XML document to a file.
Allow application daemonization.
struct ldap_attr * prev
Previous attribute.
The socket is going away stop processing in its thread.
Bucket list, hold hashed objects in buckets.
void xslt_apply(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc, const char *filename, int comp)
Apply XSLT document to a XML document.
struct bucket_list * xml_getnodes(struct xml_search *xpsearch)
Return reference to bucket list containing nodes.
struct nfq_queue * nfqueue_attach(uint16_t pf, uint16_t num, uint8_t mode, uint32_t range, nfqueue_cb cb, void *data)