DTS Application Library  0.2.3
Application library containing referenced objects and interfaces to common libraries
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
dtsapp.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2012 Gregory Nietsky <gregory@distrotetch.co.za>
3  http://www.distrotech.co.za
4 
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 /*
20  * Acknowledgments [MD5 HMAC http://www.ietf.org/rfc/rfc2104.txt]
21  * Pau-Chen Cheng, Jeff Kraemer, and Michael Oehler, have provided
22  * useful comments on early drafts, and ran the first interoperability
23  * tests of this specification. Jeff and Pau-Chen kindly provided the
24  * sample code and test vectors that appear in the appendix. Burt
25  * Kaliski, Bart Preneel, Matt Robshaw, Adi Shamir, and Paul van
26  * Oorschot have provided useful comments and suggestions during the
27  * investigation of the HMAC construction.
28  */
29 
30 /*
31  * User password crypt function from the freeradius project (addattrpasswd)
32  * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The FreeRADIUS Server Project
33  */
34 
58 #ifndef _INCLUDE_DTSAPP_H
59 #define _INCLUDE_DTSAPP_H
60 
61 #include <signal.h>
62 #ifdef __WIN32__
63 #include <winsock2.h>
64 #include <ws2ipdef.h>
65 #include <iphlpapi.h>
66 #include <ws2tcpip.h>
67 #else
68 #include <arpa/inet.h>
69 #include <linux/un.h>
70 #endif
71 
72 #ifdef __cplusplus
73 extern "C" {
74 #endif
75 
76 
80 union sockstruct {
82  struct sockaddr sa;
83 #ifndef __WIN32
84 
85  struct sockaddr_un un;
86 #endif
87 
88  struct sockaddr_in sa4;
90  struct sockaddr_in6 sa6;
92  struct sockaddr_storage ss;
93 };
94 
97 typedef struct ssldata ssldata;
98 
104  SOCK_FLAG_BIND = 1 << 0,
106  SOCK_FLAG_CLOSE = 1 << 1,
108  SOCK_FLAG_SSL = 1 << 2,
110  SOCK_FLAG_UNIX = 1 << 3,
113 };
114 
125 };
126 
127 
131 struct fwsocket {
133  int sock;
135  int proto;
137  int type;
146  struct ssldata *ssl;
148  struct fwsocket *parent;
151 };
152 
155 struct config_entry {
157  const char *item;
159  const char *value;
160 };
161 
164 struct zobj {
166  uint8_t *buff;
168  uint16_t olen;
170  uint16_t zlen;
171 };
172 
176 struct ifinfo {
178  int idx;
180  const char *ifaddr;
182  const char *ipv4addr;
184  const char *ipv6addr;
185 };
186 
189 typedef struct natmap natmap;
190 
194 
197 typedef struct nfq_queue nfq_queue;
198 
201 typedef struct nfq_data nfq_data;
202 
205 typedef struct nfct_struct nfct_struct;
206 
210 
211 /*callback function type def's*/
212 
219 typedef int (*frameworkfunc)(int, char **);
220 
227 #ifndef __WIN32__
228 typedef void (*syssighandler)(int, siginfo_t *, void *);
229 #else
230 typedef void (*syssighandler)(int, void*, void*);
231 #endif
232 
238 typedef void (*threadcleanup)(void *);
239 
245 typedef void *(*threadfunc)(void *);
246 
252 typedef int (*threadsighandler)(int, void *);
253 
259 typedef void (*socketrecv)(struct fwsocket *, void *);
260 
264 typedef void (*objdestroy)(void *);
265 
271 typedef int32_t (*blisthash)(const void *, int);
272 
278 typedef void (*blist_cb)(void *, void *);
279 
285 typedef void (*config_filecb)(struct bucket_list *, const char *, const char *);
286 
291 typedef void (*config_catcb)(struct bucket_list *, const char *);
292 
297 typedef void (*config_entrycb)(const char *, const char *);
298 
300 typedef uint32_t (*nfqueue_cb)(struct nfq_data *, struct nfqnl_msg_packet_hdr *, char *, uint32_t, void *, uint32_t *, void **);
301 
306 typedef void (*radius_cb)(struct radius_packet *, void *);
307 
320 };
321 
328  const char *developer;
330  const char *email;
332  const char *www;
334  const char *runfile;
336  const char *progname;
338  int year;
340  int flock;
342  struct sigaction *sa;
348  int flags;
349 };
350 
351 void framework_mkcore(char *progname, char *name, char *email, char *web, int year, char *runfile, int flags, syssighandler sigfunc);
352 extern int framework_init(int argc, char *argv[], frameworkfunc callback);
353 void printgnu(const char *pname, int year, const char *dev, const char *email, const char *www);
354 void daemonize();
355 int lockpidfile(const char *runfile);
357 /* UNIX Socket*/
358 extern struct fwsocket *unixsocket_server(const char *sock, int protocol, int mask, socketrecv read, void *data);
359 extern struct fwsocket *unixsocket_client(const char *sock, int protocol, socketrecv read, void *data);
360 /* Test if the thread is running when passed data from thread */
361 extern int framework_threadok(void);
362 extern int startthreads(void);
363 extern void stopthreads(int join);
364 int thread_signal(int sig);
365 
366 /*
367  * ref counted objects
368  */
369 extern int objlock(void *data);
370 extern int objtrylock(void *data);
371 extern int objunlock(void *data);
372 extern int objcnt(void *data);
373 extern int objsize(void *data);
374 extern int objunref(void *data);
375 extern int objref(void *data);
376 extern void *objalloc(int size, objdestroy);
377 void *objchar(const char *orig);
378 
379 /*
380  * hashed bucket lists
381  */
382 extern void *create_bucketlist(int bitmask, blisthash hash_function);
383 extern int addtobucket(struct bucket_list *blist, void *data);
384 extern void remove_bucket_item(struct bucket_list *blist, void *data);
385 extern int bucket_list_cnt(struct bucket_list *blist);
386 extern void *bucket_list_find_key(struct bucket_list *list, const void *key);
387 extern void bucketlist_callback(struct bucket_list *blist, blist_cb callback, void *data2);
388 
389 /*
390  * iteration through buckets
391  */
392 extern struct bucket_loop *init_bucket_loop(struct bucket_list *blist);
393 extern void *next_bucket_loop(struct bucket_loop *bloop);
394 extern void remove_bucket_loop(struct bucket_loop *bloop);
395 
396 /*include jenkins hash burttlebob*/
397 extern uint32_t hashlittle(const void *key, size_t length, uint32_t initval);
398 
399 
400 /*
401  * Utilities RNG/MD5 used from the openssl library
402  */
403 extern void seedrand(void);
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);
421 extern int strlenzero(const char *str);
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);
427 extern uint16_t checksum_add(const uint16_t checksum, const void *data, int len);
428 extern uint16_t verifysum(const void *data, int len, const uint16_t check);
429 extern struct zobj *zcompress(uint8_t *buff, uint16_t len, uint8_t level);
430 extern void zuncompress(struct zobj *buff, uint8_t *obuff);
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);
433 #ifdef __WIN32__
434 extern void touch(const char *filename);
435 #else
436 extern void touch(const char *filename, uid_t user, gid_t group);
437 #endif
438 extern char *b64enc(const char *message, int nonl);
439 extern char *b64enc_buf(const char *message, uint32_t len, int nonl);
440 
441 /*IP Utilities*/
442 extern struct fwsocket *make_socket(int family, int type, int proto, void *ssl);
443 extern struct fwsocket *accept_socket(struct fwsocket *sock);
444 extern struct fwsocket *sockconnect(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl);
445 extern struct fwsocket *udpconnect(const char *ipaddr, const char *port, void *ssl);
446 extern struct fwsocket *tcpconnect(const char *ipaddr, const char *port, void *ssl);
447 extern struct fwsocket *sockbind(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl, int backlog);
448 extern struct fwsocket *udpbind(const char *ipaddr, const char *port, void *ssl);
449 extern struct fwsocket *tcpbind(const char *ipaddr, const char *port, void *ssl, int backlog);
450 extern void close_socket(struct fwsocket *sock);
451 
452 int score_ipv4(struct sockaddr_in *sa4, char *ipaddr, int iplen);
453 int score_ipv6(struct sockaddr_in6 *sa6, char *ipaddr, int iplen);
454 
455 #ifdef __WIN32
456 const char *inet_ntop(int af, const void *src, char *dest, socklen_t size);
457 struct ifinfo *get_ifinfo(const char *iface);
458 #endif
459 
460 int inet_lookup(int family, const char *host, void *addr, socklen_t len);
461 
462 extern void socketclient(struct fwsocket *sock, void *data, socketrecv read, threadcleanup cleanup);
463 extern void socketserver(struct fwsocket *sock, socketrecv connectfunc, socketrecv acceptfunc, threadcleanup cleanup, void *data);
464 struct fwsocket *mcast_socket(const char *iface, int family, const char *mcastip, const char *port, int flags);
465 const char *sockaddr2ip(union sockstruct *addr, char *buf, int len);
466 
467 /*IP Utilities*/
468 extern int checkipv6mask(const char *ipaddr, const char *network, uint8_t bits);
469 extern void ipv4tcpchecksum(uint8_t *pkt);
470 extern void ipv4udpchecksum(uint8_t *pkt);
471 extern void ipv4icmpchecksum(uint8_t *pkt);
472 extern void ipv4checksum(uint8_t *pkt);
473 extern int packetchecksumv4(uint8_t *pkt);
474 extern int packetchecksumv6(uint8_t *pkt);
475 extern int packetchecksum(uint8_t *pkt);
476 extern void rfc6296_map(struct natmap *map, struct in6_addr *ipaddr, int out);
477 extern int rfc6296_map_add(char *intaddr, char *extaddr);
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);
483 uint32_t cidrcnt(int bitlen);
484 int reservedip(const char *ipaddr);
485 char* ipv6to4prefix(const char *ipaddr);
486 int check_ipv4(const char* ip, int cidr, const char *test);
487 void mcast4_ip(struct in_addr *addr);
488 void mcast6_ip(struct in6_addr *addr);
489 
490 /*netfilter queue*/
491 extern struct nfq_queue *nfqueue_attach(uint16_t pf, uint16_t num, uint8_t mode, uint32_t range, nfqueue_cb cb, void *data);
492 extern uint16_t snprintf_pkt(struct nfq_data *tb, struct nfqnl_msg_packet_hdr *ph, uint8_t *pkt, char *buff, uint16_t len);
493 extern struct nf_conntrack *nf_ctrack_buildct(uint8_t *pkt);
494 extern uint8_t nf_ctrack_delete(uint8_t *pkt);
495 extern uint8_t nf_ctrack_nat(uint8_t *pkt, uint32_t addr, uint16_t port, uint8_t dnat);
496 extern void nf_ctrack_dump(void);
497 extern struct nfct_struct *nf_ctrack_trace(void);
498 extern void nf_ctrack_endtrace(struct nfct_struct *nfct);
499 extern uint8_t nf_ctrack_init(void);
500 extern void nf_ctrack_close(void);
501 
502 /*interface functions*/
503 extern int delete_kernvlan(char *ifname, int vid);
504 extern int create_kernvlan(char *ifname, unsigned short vid);
505 extern int delete_kernmac(char *macdev);
506 extern int create_kernmac(char *ifname, char *macdev, unsigned char *mac);
507 extern int interface_bind(char *iface, int protocol);
508 extern void randhwaddr(unsigned char *addr);
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);
514 extern int set_interface_flags(int ifindex, int set, int clear);
515 extern int get_iface_index(const char *ifname);
516 extern int set_interface_addr(int ifindex, const unsigned char *hwaddr);
517 extern int set_interface_name(int ifindex, const char *name);
518 extern int set_interface_ipaddr(char *ifname, char *ipaddr);
519 extern int get_ip6_addrprefix(const char *iface, unsigned char *prefix);
520 extern void eui48to64(unsigned char *mac48, unsigned char *eui64);
521 extern void closenetlink(void);
522 extern int ifrename(const char *oldname, const char *newname);
523 const char *get_ifipaddr(const char *iface, int family);
524 
525 /*Radius utilities*/
529 #define RAD_AUTH_HDR_LEN 20
530 
532 #define RAD_AUTH_PACKET_LEN 4096
533 
535 #define RAD_AUTH_TOKEN_LEN 16
536 
538 #define RAD_MAX_PASS_LEN 128
539 
541 #define RAD_ATTR_USER_NAME 1 /*string*/
542 
544 #define RAD_ATTR_USER_PASSWORD 2 /*passwd*/
545 
547 #define RAD_ATTR_NAS_IP_ADDR 4 /*ip*/
548 
550 #define RAD_ATTR_NAS_PORT 5 /*int*/
551 
553 #define RAD_ATTR_SERVICE_TYPE 6 /*int*/
554 
556 #define RAD_ATTR_ACCTID 44
557 
559 #define RAD_ATTR_PORT_TYPE 61 /*int*/
560 
562 #define RAD_ATTR_EAP 79 /*oct*/
563 
565 #define RAD_ATTR_MESSAGE 80 /*oct*/
566 
581 };
584 extern void addradattrint(struct radius_packet *packet, char type, unsigned int val);
585 extern void addradattrip(struct radius_packet *packet, char type, char *ipaddr);
586 extern void addradattrstr(struct radius_packet *packet, char type, char *str);
587 extern struct radius_packet *new_radpacket(unsigned char code);
588 extern int send_radpacket(struct radius_packet *packet, const char *userpass, radius_cb read_cb, void *cb_data);
589 extern void add_radserver(const char *ipaddr, const char *auth, const char *acct, const char *secret, int timeout);
590 extern unsigned char *radius_attr_first(struct radius_packet *packet);
591 extern unsigned char *radius_attr_next(struct radius_packet *packet, unsigned char *attr);
592 
593 /*SSL Socket utilities*/
594 extern void sslstartup(void);
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);
599 
600 extern int socketread(struct fwsocket *sock, void *buf, int num);
601 extern int socketwrite(struct fwsocket *sock, const void *buf, int num);
602 /*the following are only needed on server side of a dgram connection*/
603 extern int socketread_d(struct fwsocket *sock, void *buf, int num, union sockstruct *addr);
604 extern int socketwrite_d(struct fwsocket *sock, const void *buf, int num, union sockstruct *addr);
605 
606 extern void ssl_shutdown(void *ssl, int sock);
607 extern void tlsaccept(struct fwsocket *sock, struct ssldata *orig);
608 extern struct fwsocket *dtls_listenssl(struct fwsocket *sock);
609 extern void startsslclient(struct fwsocket *sock);
610 
611 /*config file parsing functions*/
612 extern void unrefconfigfiles(void);
613 extern int process_config(const char *configname, const char *configfile);
614 extern struct bucket_loop *get_category_loop(const char *configname);
615 extern struct bucket_list *get_category_next(struct bucket_loop *cloop, char *name, int len);
616 extern struct bucket_list *get_config_category(const char *configname, const char *category);
617 extern struct config_entry *get_config_entry(struct bucket_list *categories, const char *item);
618 extern void config_file_callback(config_filecb file_cb);
619 extern void config_cat_callback(struct bucket_list *categories, config_catcb entry_cb);
620 extern void config_entry_callback(struct bucket_list *entries, config_entrycb entry_cb);
621 
622 /*Forward Decl*/
625 typedef struct xml_node xml_node;
628 typedef struct xml_search xml_search;
631 typedef struct xml_doc xml_doc;
634 typedef struct xslt_doc xslt_doc;
635 
636 /*XML*/
639 struct xml_attr {
641  const char *name;
643  const char *value;
644 };
645 
648 struct xml_node {
650  const char *name;
652  const char *value;
654  const char *key;
658  void *nodeptr;
659 };
660 
661 extern struct xml_doc *xml_loaddoc(const char *docfile, int validate);
662 extern struct xml_doc *xml_loadbuf(const uint8_t *buffer, uint32_t len, int validate);
663 extern struct xml_node *xml_getfirstnode(struct xml_search *xpsearch, void **iter);
664 extern struct xml_node *xml_getnextnode(void *iter);
665 extern struct bucket_list *xml_getnodes(struct xml_search *xpsearch);
666 extern struct xml_search *xml_xpath(struct xml_doc *xmldata, const char *xpath, const char *attrkey);
667 extern int xml_nodecount(struct xml_search *xsearch);
668 extern struct xml_node *xml_getnode(struct xml_search *xsearch, const char *key);
669 extern const char *xml_getattr(struct xml_node *xnode, const char *attr);
670 extern void xml_modify(struct xml_doc *xmldoc, struct xml_node *xnode, const char *value);
671 extern void xml_setattr(struct xml_doc *xmldoc, struct xml_node *xnode, const char *name, const char *value);
672 extern struct xml_node *xml_addnode(struct xml_doc *xmldoc, const char *xpath, const char *name, const char *value, const char *attrkey, const char *keyval);
673 void xml_appendnode(struct xml_doc *xmldoc, const char *xpath, struct xml_node *child);
674 void xml_unlink(struct xml_node *xnode);
675 extern void xml_delete(struct xml_node *xnode);
676 extern char *xml_getbuffer(void *buffer);
677 extern void *xml_doctobuffer(struct xml_doc *xmldoc);
678 extern const char *xml_getrootname(struct xml_doc *xmldoc);
679 extern struct xml_node *xml_getrootnode(struct xml_doc *xmldoc);
680 extern void xml_savefile(struct xml_doc *xmldoc, const char *file, int format, int compress);
681 extern void xml_createpath(struct xml_doc *xmldoc, const char *xpath);
682 extern void xml_init();
683 extern void xml_close();
684 
685 /*XSLT*/
686 struct xslt_doc *xslt_open(const char *xsltfile);
687 void xslt_addparam(struct xslt_doc *xsltdoc, const char *param, const char *value);
688 void xslt_apply(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc, const char *filename, int comp);
689 void *xslt_apply_buffer(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc);
690 void xslt_init();
691 void xslt_close();
692 
693 /* LDAP */
704 };
705 
714 };
715 
717 struct ldap_rdn {
719  const char *name;
721  const char *value;
723  struct ldap_rdn *next;
725  struct ldap_rdn *prev;
726 };
727 
729 struct ldap_attrval {
731  int len;
735  char *buffer;
736 };
737 
739 struct ldap_attr {
741  const char *name;
743  int count;
745  struct ldap_attrval **vals;
747  struct ldap_attr *next;
749  struct ldap_attr *prev;
750 };
751 
753 struct ldap_entry {
755  const char *dn;
757  const char *dnufn;
759  int rdncnt;
761  struct ldap_rdn **rdn;
763  struct ldap_attr *list;
769  struct ldap_entry *next;
771  struct ldap_entry *prev;
772 };
773 
775 struct ldap_results {
777  int count;
782 };
783 
785 typedef struct ldap_conn ldap_conn;
787 typedef struct ldap_modify ldap_modify;
789 typedef struct ldap_add ldap_add;
792 extern struct ldap_conn *ldap_connect(const char *uri, enum ldap_starttls starttls,int timelimit, int limit, int debug, int *err);
793 extern int ldap_simplebind(struct ldap_conn *ld, const char *dn, const char *passwd);
794 extern int ldap_saslbind(struct ldap_conn *ld, const char *mech, const char *realm, const char *authcid,
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);
798 extern const char *ldap_errmsg(int res);
799 
800 extern struct ldap_results *ldap_search_sub(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res, ...);
801 extern struct ldap_results *ldap_search_one(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res, ...);
802 extern struct ldap_results *ldap_search_base(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res, ...);
803 
804 extern void ldap_unref_entry(struct ldap_results *results, struct ldap_entry *entry);
805 extern void ldap_unref_attr(struct ldap_entry *entry, struct ldap_attr *attr);
806 extern struct ldap_entry *ldap_getentry(struct ldap_results *results, const char *dn);
807 extern struct ldap_attr *ldap_getattr(struct ldap_entry *entry, const char *attr);
808 
809 extern struct ldap_modify *ldap_modifyinit(const char *dn);
810 extern int ldap_mod_del(struct ldap_modify *lmod, const char *attr, ...);
811 extern int ldap_mod_add(struct ldap_modify *lmod, const char *attr, ...);
812 extern int ldap_mod_rep(struct ldap_modify *lmod, const char *attr, ...);
813 extern int ldap_domodify(struct ldap_conn *ld, struct ldap_modify *lmod);
814 
815 extern int ldap_mod_remattr(struct ldap_conn *ldap, const char *dn, const char *attr);
816 extern int ldap_mod_delattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value);
817 extern int ldap_mod_addattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value);
818 extern int ldap_mod_repattr(struct ldap_conn *ldap, const char *dn, const char *attr, const char *value);
819 
824 struct basic_auth {
826  const char *user;
828  const char *passwd;
829 };
830 
832 struct curlbuf {
834  uint8_t *header;
836  uint8_t *body;
838  char *c_type;
840  size_t hsize;
842  size_t bsize;
843 };
844 
846 typedef struct curl_post curl_post;
847 
853 typedef struct basic_auth *(*curl_authcb)(const char*, const char*, void*);
854 
862 typedef int (*curl_progress_func)(void*, double, double, double, double);
863 
867 typedef void(*curl_progress_pause)(void*, int);
868 
876 typedef void *(*curl_progress_newdata)(void*);
877 
880 int curlinit(void);
881 void curlclose(void);
882 struct basic_auth *curl_newauth(const char *user, const char *passwd);
883 struct curlbuf *curl_geturl(const char *def_url, struct basic_auth *bauth, curl_authcb authcb,void *data);
885 void curl_setauth_cb(curl_authcb auth_cb, void *data);
886 struct curl_post *curl_newpost(void);
887 void curl_postitem(struct curl_post *post, const char *name, const char *item);
888 struct curlbuf *curl_posturl(const char *def_url, struct basic_auth *bauth, struct curl_post *post, curl_authcb authcb,void *data);
889 struct curlbuf *curl_ungzip(struct curlbuf *cbuf);
890 extern struct xml_doc *curl_buf2xml(struct curlbuf *cbuf);
891 char *url_escape(char *url);
892 char *url_unescape(char *url);
893 
894 
895 /*File Utils*/
896 int is_file(const char *path);
897 int is_dir(const char *path);
898 int is_exec(const char *path);
899 #ifdef __WIN32__
900 int mk_dir(const char *dir);
901 #else
902 int mk_dir(const char *dir, mode_t mode, uid_t user, gid_t group);
903 #endif
904 
909 #define JHASH_INITVAL 0xdeadbeef
910 
914 #define jenhash(key, length, initval) hashlittle(key, length, (initval) ? initval : JHASH_INITVAL);
915 
918 #define clearflag(obj, flag) \
919 objlock(obj);\
920 obj->flags &= ~flag;\
921 objunlock(obj)
922 
925 #define setflag(obj, flag) \
926 objlock(obj);\
927 obj->flags |= flag; \
928 objunlock(obj)
929 
932 #define testflag(obj, flag) \
933 (objlock(obj) | (obj->flags & flag) | objunlock(obj))
934 
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)); \
954 } \
955 static int framework_main(int argc, char *argv[])
956 
959 #define ALLOC_CONST(const_var, val) { \
960  char *tmp_char; \
961  if (val) { \
962  tmp_char = (char*)malloc(strlen(val) + 1); \
963  strcpy(tmp_char, val); \
964  const_var = (const char*)tmp_char; \
965  } else { \
966  const_var = NULL; \
967  } \
968  }
969 
976 #define DTS_OJBREF_CLASS(classtype) \
977 void *operator new(size_t sz) {\
978  return objalloc(sz, &classtype::dts_unref_classtype);\
979 }\
980 void operator delete(void *obj) {\
981 }\
982 static void dts_unref_classtype(void *data) {\
983  delete (classtype*)data;\
984 }\
985 ~classtype()
986 
987 #ifdef __cplusplus
988 }
989 #endif
990 #endif
uint8_t nf_ctrack_delete(uint8_t *pkt)
Definition: nf_ctrack.c:133
struct xslt_doc * xslt_open(const char *xsltfile)
Open a XSLT file returning reference to it.
Definition: libxslt.c:67
int ldap_mod_remattr(struct ldap_conn *ldap, const char *dn, const char *attr)
Delete a attribute from a DN.
Definition: openldap.c:1406
SSL not attempted at all.
Definition: dtsapp.h:699
uint64_t tvtontp64(struct timeval *tv)
Convert a timeval struct to 64bit NTP time.
Definition: util.c:405
void ldap_unref_attr(struct ldap_entry *entry, struct ldap_attr *attr)
Remove a attribute from a entry.
Definition: openldap.c:1059
int md5cmp(unsigned char *digest1, unsigned char *digest2)
Compare two md5 hashes.
Definition: util.c:223
const char * ldap_errmsg(int res)
Return LDAP error for a ldap error.
Definition: openldap.c:576
SSL data structure for enabling encryption on sockets.
Definition: sslutil.c:66
int strlenzero(const char *str)
Check if a string is zero length.
Definition: util.c:341
Bucket iterator.
Definition: refobj.c:97
Basic authentification structure.
Definition: dtsapp.h:824
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.
Definition: openldap.c:1384
thread struct used to create threads data needs to be first element
Definition: thread.c:58
uint16_t checksum(const void *data, int len)
Obtain the checksum for a buffer.
Definition: util.c:452
const char * email
Email address of copyright holder.
Definition: dtsapp.h:330
struct ldap_rdn * next
Next RDN element.
Definition: dtsapp.h:723
void * data
Definition: nf_queue.c:58
struct radius_packet * new_radpacket(unsigned char code)
Create a new radius packet.
Definition: radius.c:221
struct fwsocket * sockbind(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl, int backlog)
Generic server socket.
Definition: socket.c:290
union sockstruct addr
system socket data structure.
Definition: dtsapp.h:143
const char * item
Definition: dtsapp.h:157
void curl_setauth_cb(curl_authcb auth_cb, void *data)
Set global password callback.
Definition: curl.c:470
void xml_modify(struct xml_doc *xmldoc, struct xml_node *xnode, const char *value)
Modify a XML node.
Definition: libxml2.c:469
void * create_bucketlist(int bitmask, blisthash hash_function)
Definition: refobj.c:356
const char * sockaddr2ip(union sockstruct *addr, char *buf, int len)
Return the ip address of a sockstruct addr.
Definition: socket.c:504
const char * key
Attribute key for searching and indexing.
Definition: dtsapp.h:654
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.
Definition: openldap.c:478
int ifrename(const char *oldname, const char *newname)
Rename interface helper.
Definition: interface.c:571
const char * dn
LDAP distiguished name.
Definition: dtsapp.h:755
void * sslv3_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for SSLv3.
Definition: sslutil.c:311
void ssl_shutdown(void *ssl, int sock)
Shutdown the SSL connection.
Definition: sslutil.c:179
int is_exec(const char *path)
Determine if a file is executable.
Definition: fileutil.c:67
void ipv4tcpchecksum(uint8_t *pkt)
Update the TCP checksum of a IPv4 packet.
Definition: iputil.c:101
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.
Definition: openldap.c:434
void(* syssighandler)(int, siginfo_t *, void *)
Callback to user supplied signal handler.
Definition: dtsapp.h:228
struct sockaddr_un un
Unix sockets.
Definition: dtsapp.h:85
struct basic_auth * curl_newauth(const char *user, const char *passwd)
Create a new auth structure with initial vallues.
Definition: curl.c:328
void zuncompress(struct zobj *buff, uint8_t *obuff)
Uncompress zobj buffer to buffer.
Definition: zlib.c:71
const char * progname
Detailed application name.
Definition: dtsapp.h:336
int ldap_domodify(struct ldap_conn *ld, struct ldap_modify *lmod)
Apply the modification to the server.
Definition: openldap.c:1339
int objref(void *data)
Reference a object.
Definition: refobj.c:153
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. ...
Definition: config.c:365
struct xml_node * xml_getnextnode(void *iter)
Return the next node.
Definition: libxml2.c:322
struct xml_doc xml_doc
Forward decleration of structure.
Definition: dtsapp.h:631
Create the the thread joinable only do this if you will be joining it cancelable threads are best det...
Definition: dtsapp.h:122
uint16_t zlen
Compressed size of data.
Definition: dtsapp.h:170
Radius Packet.
Definition: radius.c:45
struct ldap_results * ldap_search_base(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res,...)
Search LDAP connection base.
Definition: openldap.c:669
struct ldap_attr * first_attr
First attr (head of list).
Definition: dtsapp.h:767
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.
Definition: main.c:221
void sha256sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-256 hash.
Definition: util.c:144
struct xml_node * xml_getrootnode(struct xml_doc *xmldoc)
Return reference to the root node.
Definition: libxml2.c:276
struct fwsocket * dtls_listenssl(struct fwsocket *sock)
Implementation of &quot;listen&quot; for DTLSv1.
Definition: sslutil.c:731
LDAP results.
Definition: dtsapp.h:775
void addradattrip(struct radius_packet *packet, char type, char *ipaddr)
Add a integer attribute too the packet.
Definition: radius.c:160
void *(* threadfunc)(void *)
Thread function.
Definition: dtsapp.h:245
struct sigaction * sa
sigaction structure allocated on execution
Definition: dtsapp.h:342
struct nf_conntrack * nf_ctrack_buildct(uint8_t *pkt)
Definition: nf_ctrack.c:97
void mcast6_ip(struct in6_addr *addr)
Randomally assign a SSM Multicast address.param addr Ip address structure to fill out...
Definition: iputil.c:480
int inet_lookup(int family, const char *host, void *addr, socklen_t len)
Perform DNS lookup on a host/ip retun the IP address.
Definition: iputil.c:523
sock_flags
Socket flags controling a socket.
Definition: dtsapp.h:102
uint32_t hashlittle(const void *key, size_t length, uint32_t initval)
hash a variable-length key into a 32-bit value (Little Endian)
Definition: lookup3.c:298
const char * getbcaddr(const char *ipaddr, int cidr, char *buf, int size)
Return broadcast address.
Definition: iputil.c:319
const char * developer
Developer/Copyright holder.
Definition: dtsapp.h:328
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)
Definition: curl.c:276
uint8_t nf_ctrack_init(void)
Definition: nf_ctrack.c:90
void stopthreads(int join)
Signal manager to stop and cancel all running threads.
Definition: thread.c:303
int socketread(struct fwsocket *sock, void *buf, int num)
Read from a socket into a buffer.
Definition: sslutil.c:489
struct ldap_entry * ldap_getentry(struct ldap_results *results, const char *dn)
Find and return the entry from the results for a specific dn.
Definition: openldap.c:1096
void config_file_callback(config_filecb file_cb)
Callback wrapper to iterate over all configfiles calling a callback on each file. ...
Definition: config.c:400
void xml_unlink(struct xml_node *xnode)
Unlink a node from the document.
Definition: libxml2.c:693
char * buffer
Value buffer.
Definition: dtsapp.h:735
int objlock(void *data)
Lock the reference.
Definition: refobj.c:269
const char * cidrtosn(int bitlen, char *buf, int size)
Return the dotted quad notation subnet mask from a CIDR.
Definition: iputil.c:228
struct fwsocket * unixsocket_client(const char *sock, int protocol, socketrecv read, void *data)
Create a client thread on the socket.
Definition: unixsock.c:310
struct fwsocket * parent
Parent socket if we connected to a server and were spawned.
Definition: dtsapp.h:148
const char * name
Name of the node.
Definition: dtsapp.h:650
framework_flags
Application control flags.
Definition: dtsapp.h:310
void * objchar(const char *orig)
Return a reference to copy of a buffer.
Definition: refobj.c:330
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.
Definition: libxml2.c:651
void addradattrstr(struct radius_packet *packet, char type, char *str)
Add a integer attribute too the packet.
Definition: radius.c:171
int packetchecksum(uint8_t *pkt)
Generic IPv4 and IPv6 Checksum.
Definition: iputil.c:208
XML xpath search result.
Definition: libxml2.c:33
void xml_createpath(struct xml_doc *xmldoc, const char *xpath)
Create a path in XML document.
Definition: libxml2.c:507
Buffer containing the result of a curl transaction.
Definition: dtsapp.h:832
const char * value
Definition: dtsapp.h:159
XML attribute name value pair.
Definition: dtsapp.h:639
HTTP post data structure.
Definition: curl.c:40
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.
Definition: util.c:127
Socket data structure.
Definition: dtsapp.h:131
int set_interface_addr(int ifindex, const unsigned char *hwaddr)
Set interface MAC addr.
Definition: interface.c:388
struct fwsocket * tcpbind(const char *ipaddr, const char *port, void *ssl, int backlog)
Generic server socket.
Definition: socket.c:315
int(* curl_progress_func)(void *, double, double, double, double)
CURL callback function called when there is progress (CURLOPT_PROGRESSFUNCTION).
Definition: dtsapp.h:862
void * xslt_apply_buffer(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc)
Apply XSLT document to a XML document returning result in buffer.
Definition: libxslt.c:198
Radius auth challenge.
Definition: dtsapp.h:580
struct xml_doc * xml_loadbuf(const uint8_t *buffer, uint32_t len, int validate)
Load a buffer into XML document returning refereence.
Definition: libxml2.c:168
const char * user
Username.
Definition: dtsapp.h:826
Multicast Socket.
Definition: dtsapp.h:112
void sha256hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-256.
Definition: util.c:314
ldap_starttls
SSL connection requirements.
Definition: dtsapp.h:697
uint8_t * gzinflatebuf(uint8_t *buf_in, int buf_size, uint32_t *len)
Ungzip a buffer.
Definition: zlib.c:101
uint8_t nf_ctrack_nat(uint8_t *pkt, uint32_t addr, uint16_t port, uint8_t dnat)
Definition: nf_ctrack.c:160
struct bucket_list * attrs
Bucket list of attributes.
Definition: dtsapp.h:656
const char * ifaddr
MAC address of interface.
Definition: dtsapp.h:180
int flock
if there is a file locked this is the FD that will be unlocked and unlinked
Definition: dtsapp.h:340
uint8_t * body
Body buffer.
Definition: dtsapp.h:836
struct xml_node * xml_getnode(struct xml_search *xsearch, const char *key)
Return a node in the search matching key.
Definition: libxml2.c:429
Plain text.
Definition: dtsapp.h:709
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.
Definition: openldap.c:1441
int interface_bind(char *iface, int protocol)
Bind to device fd may be a existing socket.
Definition: interface.c:453
struct zobj * zcompress(uint8_t *buff, uint16_t len, uint8_t level)
Allocate a buffer and return it with compressed data.
Definition: zlib.c:47
uint32_t(* nfqueue_cb)(struct nfq_data *, struct nfqnl_msg_packet_hdr *, char *, uint32_t, void *, uint32_t *, void **)
Definition: dtsapp.h:300
void * objalloc(int size, objdestroy)
Allocate a referenced lockable object.
Definition: refobj.c:129
const char * www
URL displayed (use full URL ie with http://)
Definition: dtsapp.h:332
struct config_entry * get_config_entry(struct bucket_list *categories, const char *item)
Find the entry in a config file.
Definition: config.c:408
int socketwrite(struct fwsocket *sock, const void *buf, int num)
Write a buffer to a socket.
Definition: sslutil.c:629
RADIUS_CODE
Radius packet codes.
Definition: dtsapp.h:568
struct xml_doc * xml_loaddoc(const char *docfile, int validate)
Load a XML file into XML document and return reference.
Definition: libxml2.c:146
LDAP attribute value.
Definition: dtsapp.h:729
int count
Number of entries.
Definition: dtsapp.h:777
void nf_ctrack_endtrace(struct nfct_struct *nfct)
Definition: nf_ctrack.c:278
uint16_t checksum_add(const uint16_t checksum, const void *data, int len)
Obtain the checksum for a buffer adding a checksum.
Definition: util.c:463
int limit
Results limit.
Definition: openldap.c:58
int mk_dir(const char *dir, mode_t mode, uid_t user, gid_t group)
Create a directory.
Definition: fileutil.c:87
void sslstartup(void)
Initialise SSL support this should be called at startup.
Definition: sslutil.c:639
size_t hsize
Header size.
Definition: dtsapp.h:840
void curlclose(void)
Un reference CURL. This is required for each call to curlinit().
Definition: curl.c:122
int framework_init(int argc, char *argv[], frameworkfunc callback)
Initilise the application daemonise and join the manager thread.
Definition: main.c:260
void * sslv2_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for SSLv2 (If available)
Definition: sslutil.c:299
void closenetlink(void)
Close netlink socket on application termination.
Definition: interface.c:130
SSL attempted but not required.
Definition: dtsapp.h:701
Data structure containing interface information.
Definition: dtsapp.h:176
int startthreads(void)
Initialise the threadlist and start manager thread.
Definition: thread.c:268
struct nfq_data nfq_data
Forward decleration of structure.
Definition: dtsapp.h:201
Configuration category entry.
Definition: dtsapp.h:155
int sha1cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA1 hashes.
Definition: util.c:233
int bucket_list_cnt(struct bucket_list *blist)
Return number of items in the list.
Definition: refobj.c:552
void md5hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) MD5.
Definition: util.c:290
void sha512sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-512 hash.
Definition: util.c:114
const char * name
RDN element name.
Definition: dtsapp.h:719
struct ldap_attrval ** vals
Attribute value array.
Definition: dtsapp.h:745
void ipv4checksum(uint8_t *pkt)
Set the checksup of a IPv4 Packet.
Definition: iputil.c:154
void xml_appendnode(struct xml_doc *xmldoc, const char *xpath, struct xml_node *child)
Append a node to a path.
Definition: libxml2.c:625
int flags
Application Options.
Definition: dtsapp.h:348
uint16_t verifysum(const void *data, int len, const uint16_t check)
Verify a checksum.
Definition: util.c:473
void * dtlsv1_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for DTLSv1.
Definition: sslutil.c:325
int lockpidfile(const char *runfile)
Lock the run file in the framework application info.
Definition: main.c:135
int score_ipv6(struct sockaddr_in6 *sa6, char *ipaddr, int iplen)
Return a score for a IPv6 addrress.
Definition: interface.c:746
int idx
Interface index required for at least IPv6 multicast support.
Definition: dtsapp.h:178
const char * xml_getattr(struct xml_node *xnode, const char *attr)
Return value of attribute.
Definition: libxml2.c:440
struct ifinfo * get_ifinfo(const char *iface)
Return interface info for a specified interface.
Definition: winiface.cpp:83
void curl_postitem(struct curl_post *post, const char *name, const char *value)
Add a item value pair to post structure.
Definition: curl.c:370
void * tlsv1_init(const char *cacert, const char *cert, const char *key, int verify)
Create a SSL structure for TLSv1.
Definition: sslutil.c:287
void ldap_unref_entry(struct ldap_results *results, struct ldap_entry *entry)
Remove a entry from a result.
Definition: openldap.c:1077
struct curlbuf * curl_ungzip(struct curlbuf *cbuf)
If the buffer contains GZIP data uncompress it.
Definition: curl.c:295
void * xml_doctobuffer(struct xml_doc *xmldoc)
Return a dump of a XML document.
Definition: libxml2.c:726
int create_kernmac(char *ifname, char *macdev, unsigned char *mac)
Create a kernal MAC VLAN.
Definition: interface.c:282
int ifhwaddr(const char *ifname, unsigned char *hwaddr)
Get MAC addr for interface.
Definition: interface.c:588
int year
Copyright year.
Definition: dtsapp.h:338
void unrefconfigfiles(void)
Empty out and unreference config files.
Definition: config.c:78
int objcnt(void *data)
Return current reference count.
Definition: refobj.c:222
void * next_bucket_loop(struct bucket_loop *bloop)
Return a reference to the next item in the list this could be the first item.
Definition: refobj.c:662
int sock
Socket FD.
Definition: dtsapp.h:133
void randhwaddr(unsigned char *addr)
create random MAC address
Definition: interface.c:485
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.
Definition: radius.c:289
void close_socket(struct fwsocket *sock)
Mark the socket for closure and release the reference.
Definition: socket.c:79
const char * get_ifipaddr(const char *iface, int family)
Find best IP adress for a interface.
Definition: interface.c:783
int curlinit(void)
Initilise the CURL library.
Definition: curl.c:92
void addradattrint(struct radius_packet *packet, char type, unsigned int val)
Add a integer attribute too the packet.
Definition: radius.c:149
int socketread_d(struct fwsocket *sock, void *buf, int num, union sockstruct *addr)
Read from a socket into a buffer.
Definition: sslutil.c:406
void xslt_init()
Reference the XSLT parser.
Definition: libxslt.c:230
int set_interface_ipaddr(char *ifname, char *ipaddr)
Set IP addr on interface.
Definition: interface.c:611
LDAP entry.
Definition: dtsapp.h:753
int checkipv6mask(const char *ipaddr, const char *network, uint8_t bits)
Check if ipaddr is in a network.
Definition: iputil.c:47
char * rtrim(const char *str)
Trim white space at the end of a string.
Definition: util.c:372
struct ldap_modify * ldap_modifyinit(const char *dn)
Create a modification reference for a DN.
Definition: openldap.c:1118
void(* objdestroy)(void *)
Callback used to clean data of a reference object when it is to be freed.
Definition: dtsapp.h:264
int score_ipv4(struct sockaddr_in *sa4, char *ipaddr, int iplen)
Return a score for a IPv4 addrress.
Definition: interface.c:718
void ipv4icmpchecksum(uint8_t *pkt)
Set the checksup of a IPv4 ICMP packet.
Definition: iputil.c:143
struct ldap_rdn * prev
Previous RDN element.
Definition: dtsapp.h:725
Base64 encoded.
Definition: dtsapp.h:711
Radius auth accept.
Definition: dtsapp.h:572
char * c_type
Mime Type.
Definition: dtsapp.h:838
unsigned char code
Radius packet code.
Definition: radius.c:48
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.
Definition: util.c:156
void(* socketrecv)(struct fwsocket *, void *)
Callback function to register with a socket that will be called when there is data available...
Definition: dtsapp.h:259
int packetchecksumv6(uint8_t *pkt)
Prototype to check checksup on packet.
Definition: iputil.c:189
int xml_nodecount(struct xml_search *xsearch)
Return the number of nodes in the search path.
Definition: libxml2.c:413
int ldap_mod_rep(struct ldap_modify *lmod, const char *attr,...)
Replace a attribute.
Definition: openldap.c:1265
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.
Definition: util.c:185
const char * name
Name of attribute.
Definition: dtsapp.h:641
int get_iface_index(const char *ifname)
Get the netlink interface for a named interface.
Definition: interface.c:139
Radius auth reject.
Definition: dtsapp.h:574
const char * xml_getrootname(struct xml_doc *xmldoc)
Return the name of the root node.
Definition: libxml2.c:458
uint16_t snprintf_pkt(struct nfq_data *tb, struct nfqnl_msg_packet_hdr *ph, uint8_t *pkt, char *buff, uint16_t len)
Definition: nf_queue.c:265
LDAP Relative distingushed name linked list.
Definition: dtsapp.h:717
const char * ipv6addr
IPv6 address priorised by Local/6in4.
Definition: dtsapp.h:184
void sha1sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA1 hash.
Definition: util.c:173
void tlsaccept(struct fwsocket *sock, struct ssldata *orig)
Create SSL session for new connection.
Definition: sslutil.c:382
struct curl_post * curl_newpost(void)
Create a HTTP Post data structure.
Definition: curl.c:356
SSL has been requested on this socket dont allow clear read/send.
Definition: dtsapp.h:108
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.
Definition: openldap.c:1416
char * trim(const char *str)
Trim whitesapce from the beggining and end of a string.
Definition: util.c:393
struct ldap_entry * first_entry
Linked list of entries.
Definition: dtsapp.h:779
void(* config_filecb)(struct bucket_list *, const char *, const char *)
Calback used when processing config files.
Definition: dtsapp.h:285
int rdncnt
RDN element count.
Definition: dtsapp.h:759
int(* frameworkfunc)(int, char **)
Framework callback function.
Definition: dtsapp.h:219
void startsslclient(struct fwsocket *sock)
Start SSL on a client socket.
Definition: sslutil.c:811
struct ldap_entry * prev
Previous entry.
Definition: dtsapp.h:771
void *(* curl_progress_newdata)(void *)
Create a new progress data structure.
Definition: dtsapp.h:876
The socket has been bound and awaiting connections.
Definition: dtsapp.h:104
void xslt_close()
Release reference to XSLT parser.
Definition: libxslt.c:241
int create_tun(const char *ifname, const unsigned char *hwaddr, int flags)
Create a tunnel device.
Definition: interface.c:496
const char * ipv4addr
IPv4 address priorotised by Routed/Reserved/Zeroconf.
Definition: dtsapp.h:182
int objtrylock(void *data)
Try lock a reference.
Definition: refobj.c:285
struct thread_pvt * framework_mkthread(threadfunc, threadcleanup, threadsighandler, void *data, int flags)
create a thread result must be unreferenced
Definition: thread.c:387
int set_interface_flags(int ifindex, int set, int clear)
Alter interface flags.
Definition: interface.c:348
struct bucket_list * children
We are the parent this is a list of spawn.
Definition: dtsapp.h:150
Return reference to thread this must be unreferenced.
Definition: dtsapp.h:124
int is_file(const char *path)
Determine if a file exists.
Definition: fileutil.c:43
void * data
Reference to data held on thread creation.
Definition: thread.c:60
int proto
Socket protocol.
Definition: dtsapp.h:135
char * url_escape(char *url)
Escape and return the url.
Definition: curl.c:385
void nf_ctrack_close(void)
Definition: nf_ctrack.c:285
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.
Definition: openldap.c:524
char * url_unescape(char *url)
UN escape and return the url.
Definition: curl.c:407
int count
Value count.
Definition: dtsapp.h:743
int ldap_mod_del(struct ldap_modify *lmod, const char *attr,...)
Delete values from a attribute.
Definition: openldap.c:1211
void rfc6296_map(struct natmap *map, struct in6_addr *ipaddr, int out)
Lookup and process a NAT transform as per RFC 6296.
Definition: rfc6296.c:62
uint8_t * header
Header buffer.
Definition: dtsapp.h:834
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)
Definition: curl.c:288
int reservedip(const char *ipaddr)
Check IP against list of reserved IP&#39;s.
Definition: iputil.c:384
Zlib buffer used for compression and decompression.
Definition: dtsapp.h:164
int sha256cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-256 hashes.
Definition: util.c:243
SSL is required.
Definition: dtsapp.h:703
void eui48to64(unsigned char *mac48, unsigned char *eui64)
Generate IPv6 address from mac address.
Definition: interface.c:668
int create_kernvlan(char *ifname, unsigned short vid)
Create a VLAN on a interface.
Definition: interface.c:214
int set_interface_name(int ifindex, const char *name)
Rename interface.
Definition: interface.c:421
uint8_t * buff
Buffer with compressed/uncompressed data.
Definition: dtsapp.h:166
struct ssldata * ssl
SSL structure for encryption.
Definition: dtsapp.h:146
int ldap_mod_add(struct ldap_modify *lmod, const char *attr,...)
Add values to a attribute.
Definition: openldap.c:1238
int genrand(void *buf, int len)
Generate random sequence.
Definition: util.c:82
int get_ip6_addrprefix(const char *iface, unsigned char *prefix)
Generate Unique Local IPv6 Unicast Addresses RFC 4193.
Definition: interface.c:687
struct ldap_attr * ldap_getattr(struct ldap_entry *entry, const char *attr)
Find and return attribute in a entry.
Definition: openldap.c:1108
int delete_kernvlan(char *ifname, int vid)
Delete a VLAN.
Definition: interface.c:201
int rfc6296_map_add(char *intaddr, char *extaddr)
Calculate and add a NAT map.
Definition: rfc6296.c:111
void touch(const char *filename, uid_t user, gid_t group)
Create a file and set user and group.
Definition: util.c:484
int is_dir(const char *path)
Determine if a path is a directory.
Definition: fileutil.c:55
int thread_signal(int sig)
Handle signal if its for me.
Definition: thread.c:496
void xml_close()
Unreference the XML library.
Definition: libxml2.c:758
struct fwsocket * udpconnect(const char *ipaddr, const char *port, void *ssl)
UDP Socket client.
Definition: socket.c:262
void(* curl_progress_pause)(void *, int)
Callback function to control the progress bar.
Definition: dtsapp.h:867
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.
Definition: openldap.c:635
LDAP Add structure.
Definition: openldap.c:76
const char * value
Value of the node.
Definition: dtsapp.h:652
Create lockfile on daemonize latter.
Definition: dtsapp.h:319
struct sockaddr_in sa4
IPv4 socket addr structure.
Definition: dtsapp.h:88
char * ltrim(char *str)
Trim white space at the begining of a string.
Definition: util.c:353
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...
Definition: socket.c:463
ldap_attrtype
LDAP attribute types.
Definition: dtsapp.h:707
const char * name
Name of attribute.
Definition: dtsapp.h:741
int socketwrite_d(struct fwsocket *sock, const void *buf, int num, union sockstruct *addr)
Write a buffer to a socket.
Definition: sslutil.c:508
struct ldap_entry * next
Next entry.
Definition: dtsapp.h:769
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.
Definition: openldap.c:335
thread_option_flags
Options supplied to framework_mkthread all defaults are unset.
Definition: dtsapp.h:118
struct fwsocket * make_socket(int family, int type, int proto, void *ssl)
Allocate a socket structure and return reference.
Definition: socket.c:120
enum threadopt flags
thread options
Definition: thread.c:74
struct basic_auth *(* curl_authcb)(const char *, const char *, void *)
Callback to set the authentification ie on error 401.
Definition: dtsapp.h:853
struct nfqnl_msg_packet_hdr nfqnl_msg_packet_hdr
Forward decleration of structure.
Definition: dtsapp.h:209
int objunlock(void *data)
Unlock a reference.
Definition: refobj.c:301
void seedrand(void)
Seed openssl random number generator.
Definition: util.c:68
struct nfct_struct * nf_ctrack_trace(void)
Definition: nf_ctrack.c:261
struct nfct_struct nfct_struct
Forward decleration of structure.
Definition: dtsapp.h:205
void xml_init()
Initialise/Reference the XML library.
Definition: libxml2.c:742
struct bucket_list * attrs
Bucket list of attributes.
Definition: dtsapp.h:765
struct sockaddr_storage ss
Sockaddr storage is a &quot;magic&quot; struct been able to hold IPv4 or IPv6.
Definition: dtsapp.h:92
int framework_threadok(void)
let threads check there status.
Definition: thread.c:143
struct fwsocket * udpbind(const char *ipaddr, const char *port, void *ssl)
UDP server socket.
Definition: socket.c:302
void ipv4udpchecksum(uint8_t *pkt)
Update the UDP checksum of a IPv4 packet.
Definition: iputil.c:122
void xml_setattr(struct xml_doc *xmldoc, struct xml_node *xnode, const char *name, const char *value)
Modify a XML node attribute.
Definition: libxml2.c:493
int len
Size of buffer.
Definition: dtsapp.h:731
void xslt_addparam(struct xslt_doc *xsltdoc, const char *param, const char *value)
Add a parameter to the XSLT document.
Definition: libxslt.c:94
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...
Definition: socket.c:493
struct fwsocket * mcast_socket(const char *iface, int family, const char *mcastip, const char *port, int flags)
Create a multicast socket.
Definition: socket.c:536
Radius auth request.
Definition: dtsapp.h:570
const char * value
RDN element value.
Definition: dtsapp.h:721
char * uri
Address.
Definition: openldap.c:54
Flag to enable pthread_cancel calls this is not recomended and can lead to memory leaks...
Definition: dtsapp.h:120
enum ldap_attrtype type
Data type stored in buffer.
Definition: dtsapp.h:733
void(* threadcleanup)(void *)
Function called after thread termination.
Definition: dtsapp.h:238
char * xml_getbuffer(void *buffer)
Return the buffer of a xml_buffer structure.
Definition: libxml2.c:712
struct ldap_results * ldap_search_sub(struct ldap_conn *ld, const char *base, const char *filter, int b64enc, int *res,...)
Search LDAP connection subtree.
Definition: openldap.c:601
const char * dn
Distingushed name.
Definition: openldap.c:70
int sha512cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-512 hashes.
Definition: util.c:253
struct ldap_attr * list
Linked list of attributes.
Definition: dtsapp.h:763
struct xml_search * xml_xpath(struct xml_doc *xmldata, const char *xpath, const char *attrkey)
Return a reference to a xpath search result.
Definition: libxml2.c:381
const char * getnetaddr(const char *ipaddr, int cidr, char *buf, int size)
Return the network address.
Definition: iputil.c:254
struct bucket_loop * get_category_loop(const char *configname)
Return a bucket loop to allow iterating over categories.
Definition: config.c:341
uint32_t cidrcnt(int bitlen)
Return the number of IP addresses in a given bitmask.
Definition: iputil.c:372
Application framework data.
Definition: dtsapp.h:326
unsigned char * radius_attr_first(struct radius_packet *packet)
Return first packet attribute.
Definition: radius.c:627
Dont print GNU copyright.
Definition: dtsapp.h:314
void nf_ctrack_dump(void)
Definition: nf_ctrack.c:204
int(* threadsighandler)(int, void *)
Thread signal handler function.
Definition: dtsapp.h:252
void(* blist_cb)(void *, void *)
This callback is run on each entry in a list.
Definition: dtsapp.h:278
const char * passwd
Password.
Definition: dtsapp.h:828
struct fwsocket * sockconnect(int family, int stype, int proto, const char *ipaddr, const char *port, void *ssl)
Generic client socket.
Definition: socket.c:250
void * nodeptr
Internal libxml2 node pointer.
Definition: dtsapp.h:658
void xml_delete(struct xml_node *xnode)
Delete a node from document it is not unrefd and should be.
Definition: libxml2.c:701
struct bucket_list * get_category_next(struct bucket_loop *cloop, char *name, int len)
Iterate through categories returning the entries bucket.
Definition: config.c:317
void bucketlist_callback(struct bucket_list *blist, blist_cb callback, void *data2)
Run a callback function on all items in the list.
Definition: refobj.c:613
struct sockaddr sa
Base socket addr structure.
Definition: dtsapp.h:82
void sha512hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-512.
Definition: util.c:326
uint16_t olen
Original size of data.
Definition: dtsapp.h:168
int type
Socket type.
Definition: dtsapp.h:137
void curl_setprogress(curl_progress_func cb, curl_progress_pause p_cb, curl_progress_newdata d_cb, void *data)
Configure global progress handling.
Definition: curl.c:442
void mcast4_ip(struct in_addr *addr)
Randomally assign a SSM Multicast address.
Definition: iputil.c:504
Binary data.
Definition: dtsapp.h:713
void(* config_entrycb)(const char *, const char *)
Callback used when processing a entry.
Definition: dtsapp.h:297
char * b64enc(const char *message, int nonl)
Base 64 encode a string.
Definition: util.c:539
void daemonize()
Daemonise the application using fork/exit.
Definition: main.c:94
struct bucket_list * blist
Referenece to the bucket been itereated.
Definition: refobj.c:99
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.
Definition: util.c:97
void(* config_catcb)(struct bucket_list *, const char *)
Calback used when processing a category.
Definition: dtsapp.h:291
struct ldap_attr * next
Next attribute.
Definition: dtsapp.h:747
struct fwsocket * unixsocket_server(const char *sock, int protocol, int mask, socketrecv read, void *data)
Create and run UNIX server socket thread.
Definition: unixsock.c:277
void(* radius_cb)(struct radius_packet *, void *)
Callback to call when response arrives.
Definition: dtsapp.h:306
void remove_bucket_loop(struct bucket_loop *bloop)
Safely remove a item from a list while iterating in a loop.
Definition: refobj.c:710
Radius accounting request.
Definition: dtsapp.h:576
void md5sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the MD5 hash.
Definition: util.c:202
const char * value
Value of attribute.
Definition: dtsapp.h:643
int is_gzip(uint8_t *buf, int buf_size)
check a buffer if it contains gzip magic
Definition: zlib.c:85
LDAP connection.
Definition: openldap.c:50
RFC6296 Nat map.
Definition: rfc6296.c:33
size_t bsize
Body size.
Definition: dtsapp.h:842
Reference to a XML Node.
Definition: dtsapp.h:648
int packetchecksumv4(uint8_t *pkt)
Update the checksum of a IPv4 packet.
Definition: iputil.c:165
const char * runfile
File to write PID too and lock.
Definition: dtsapp.h:334
struct fwsocket * accept_socket(struct fwsocket *sock)
Create and return a socket structure from accept()
Definition: socket.c:144
int objsize(void *data)
Size requested for data.
Definition: refobj.c:246
Radius accounting response.
Definition: dtsapp.h:578
int check_ipv4(const char *ip, int cidr, const char *test)
Check if a IP address is in a network.
Definition: iputil.c:456
void sha1hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA1.
Definition: util.c:302
void config_cat_callback(struct bucket_list *categories, config_catcb cat_cb)
Callback wrapper that iterates through categories calling a callback on each category.
Definition: config.c:383
const char * dnufn
LDAP user format distingushed name.
Definition: dtsapp.h:757
void printgnu(const char *pname, int year, const char *dev, const char *email, const char *www)
Print a brief GNU copyright notice on console.
Definition: main.c:78
struct bucket_list * entries
Bucket list of entries.
Definition: dtsapp.h:781
const char * inet_ntop(int af, const void *src, char *dest, socklen_t size)
Win32 implementation of inet_ntop.
Definition: winiface.cpp:43
int addtobucket(struct bucket_list *blist, void *data)
Add a reference to the bucketlist.
Definition: refobj.c:428
char * ipv6to4prefix(const char *ipaddr)
Return IPv6 to IPv4 Prefix fot the address.
Definition: iputil.c:427
void * bucket_list_find_key(struct bucket_list *list, const void *key)
Find and return a reference to a item matching supplied key.
Definition: refobj.c:572
int delete_kernmac(char *macdev)
Delete Kernel MAC VLAN.
Definition: interface.c:272
void remove_bucket_item(struct bucket_list *blist, void *data)
Remove and unreference a item from the list.
Definition: refobj.c:517
struct sockaddr_in6 sa6
IPv6 socket addr structure.
Definition: dtsapp.h:90
Socket union describing all address types.
Definition: dtsapp.h:80
int send_radpacket(struct radius_packet *packet, const char *userpass, radius_cb read_cb, void *cb_data)
Send radius packet.
Definition: radius.c:452
struct ldap_rdn ** rdn
RDN element array.
Definition: dtsapp.h:761
enum sock_flags flags
Socket control flags.
Definition: dtsapp.h:140
int objunref(void *data)
Drop reference held.
Definition: refobj.c:184
const char * getfirstaddr(const char *ipaddr, int cidr, char *buf, int size)
Get the first usable address.
Definition: iputil.c:286
struct fwsocket * tcpconnect(const char *ipaddr, const char *port, void *ssl)
TCP Socket client.
Definition: socket.c:274
struct xml_doc * curl_buf2xml(struct curlbuf *cbuf)
Create a XML document from from buffer (application/xml)
Definition: curl.c:489
LDAP Modify structure.
Definition: openldap.c:68
struct bucket_list * get_config_category(const char *configname, const char *category)
Return a single category.
Definition: config.c:286
struct xml_node * xml_getfirstnode(struct xml_search *xpsearch, void **iter)
Return reference to the first node optionally creating a iterator.
Definition: libxml2.c:295
syssighandler sig_handler
Signal handler to pass signals too.
Definition: dtsapp.h:345
unsigned char * radius_attr_next(struct radius_packet *packet, unsigned char *attr)
Return next packet attribute.
Definition: radius.c:635
int32_t(* blisthash)(const void *, int)
Callback used to calculate the hash of a structure.
Definition: dtsapp.h:271
LDAP attirbute.
Definition: dtsapp.h:739
XSLT Document.
Definition: libxslt.c:21
int process_config(const char *configname, const char *configfile)
Process a configfile into buckets.
Definition: config.c:197
int ifup(const char *ifname, int flags)
Set interface up.
Definition: interface.c:553
nfqueue_cb cb
Definition: nf_queue.c:57
const char * getlastaddr(const char *ipaddr, int cidr, char *buf, int size)
Get the last usable address.
Definition: iputil.c:347
char * b64enc_buf(const char *message, uint32_t len, int nonl)
Base 64 encode a buffer.
Definition: util.c:506
uint16_t num
Definition: nf_queue.c:59
struct bucket_loop * init_bucket_loop(struct bucket_list *blist)
Create a bucket list iterator to safely iterate the list.
Definition: refobj.c:640
UNIX Domain Socket.
Definition: dtsapp.h:110
int ifdown(const char *ifname, int flags)
Set interface down.
Definition: interface.c:535
void xml_savefile(struct xml_doc *xmldoc, const char *file, int format, int compress)
Save XML document to a file.
Definition: libxml2.c:769
Allow application daemonization.
Definition: dtsapp.h:312
struct ldap_attr * prev
Previous attribute.
Definition: dtsapp.h:749
The socket is going away stop processing in its thread.
Definition: dtsapp.h:106
Bucket list, hold hashed objects in buckets.
Definition: refobj.c:75
void xslt_apply(struct xml_doc *xmldoc, struct xslt_doc *xsltdoc, const char *filename, int comp)
Apply XSLT document to a XML document.
Definition: libxslt.c:167
struct bucket_list * xml_getnodes(struct xml_search *xpsearch)
Return reference to bucket list containing nodes.
Definition: libxml2.c:349
struct nfq_queue * nfqueue_attach(uint16_t pf, uint16_t num, uint8_t mode, uint32_t range, nfqueue_cb cb, void *data)
Definition: nf_queue.c:231