summaryrefslogtreecommitdiffstats
path: root/addr.h
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2010-08-27 17:05:18 +0300
committerTimo Teräs <timo.teras@iki.fi>2010-08-27 17:05:18 +0300
commitb8944ab71ccdc9951c6b74ef8ed8686d0329f99c (patch)
treea44327faefdfb99bf61d1249c044bfef66419267 /addr.h
parent29331f1c5e940499f282aea8155b89fae69f3fb8 (diff)
downloadsquark-b8944ab71ccdc9951c6b74ef8ed8686d0329f99c.tar.bz2
squark-b8944ab71ccdc9951c6b74ef8ed8686d0329f99c.tar.xz
authdb: implement basics
Implement a shared memory based authentication cache. It's a simple local cache indexed by IP-address, and keeps track of that IP's auth info such as username, allowed categories and timeouts. This provides basis for captive portal, per-user definable category restrictions and implementation of soft blocks (block which can be overridden by user by clicking a button on the blocked page).
Diffstat (limited to 'addr.h')
-rw-r--r--addr.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/addr.h b/addr.h
new file mode 100644
index 0000000..00e1833
--- /dev/null
+++ b/addr.h
@@ -0,0 +1,31 @@
+#ifndef ADDR_H
+#define ADDR_H
+
+#include <arpa/inet.h>
+#include "blob.h"
+
+typedef union {
+ struct sockaddr any;
+ struct sockaddr_in ipv4;
+} sockaddr_any;
+
+int addr_len(const sockaddr_any *addr);
+sockaddr_any *addr_parse(blob_t text, sockaddr_any *addr);
+unsigned long addr_hash(const sockaddr_any *addr);
+const char *addr_print(const sockaddr_any *addr);
+blob_t addr_get_hostaddr_blob(const sockaddr_any *addr);
+
+static inline void addr_copy(sockaddr_any *dst, const sockaddr_any *src)
+{
+ memcpy(dst, src, addr_len(src));
+}
+
+static inline int addr_cmp(const sockaddr_any *a, const sockaddr_any *b)
+{
+ if (a->any.sa_family != b->any.sa_family)
+ return -1;
+ return memcmp(a, b, addr_len(a));
+}
+
+#endif
+