summaryrefslogtreecommitdiff
path: root/src/include/srs2.h
diff options
context:
space:
mode:
authorJannis Hoffmann <jannis@fehcom.de>2024-07-03 15:48:04 +0200
committerJannis Hoffmann <jannis@fehcom.de>2024-07-03 15:48:04 +0200
commit89b7b67a13ebb7965cc7f13ad0595e2194a2d34c (patch)
tree25efd77a90ae87236e6730d8ea3846bbe0fd126f /src/include/srs2.h
add sqmail-4.2.29asqmail-4.2
Diffstat (limited to 'src/include/srs2.h')
-rw-r--r--src/include/srs2.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/include/srs2.h b/src/include/srs2.h
new file mode 100644
index 0000000..e993928
--- /dev/null
+++ b/src/include/srs2.h
@@ -0,0 +1,126 @@
+#ifndef SRS2_H
+#define SRS2_H
+#include <stdint.h>
+#include <time.h>
+
+/* Adjusted to s/qmail (feh) */
+
+/* Copyright (c) 2004 Shevek (srs@anarres.org)
+ * All rights reserved.
+ *
+ * This file is a part of libsrs2 from http://www.libsrs2.org/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, under the terms of either the GNU General Public
+ * License version 2 or the BSD license, at the discretion of the
+ * user. Copies of these licenses have been included in the libsrs2
+ * distribution. See the the file called LICENSE for more
+ * information.
+ */
+
+/* This is ugly, but reasonably safe. */
+#undef TRUE
+#define TRUE 1
+#undef FALSE
+#define FALSE 0
+
+#define SRSSEP '='
+#define SRS0TAG "SRS0"
+#define SRS1TAG "SRS1"
+
+/* Error codes */
+
+#define SRS_ERRTYPE_MASK 0xf000
+#define SRS_ERRTYPE_NONE 0x0000
+#define SRS_ERRTYPE_CONFIG 0x1000
+#define SRS_ERRTYPE_INPUT 0x2000
+#define SRS_ERRTYPE_SYNTAX 0x4000
+#define SRS_ERRTYPE_SRS 0x8000
+
+#define SRS_SUCCESS (0)
+#define SRS_ENOTSRSADDRESS (1)
+#define SRS_ENOTREWRITTEN (2)
+
+#define SRS_ENOSECRETS (SRS_ERRTYPE_CONFIG | 1)
+#define SRS_ESEPARATORINVALID (SRS_ERRTYPE_CONFIG | 2)
+
+#define SRS_ENOSENDERATSIGN (SRS_ERRTYPE_INPUT | 1)
+#define SRS_EBUFTOOSMALL (SRS_ERRTYPE_INPUT | 2)
+
+#define SRS_ENOSRS0HOST (SRS_ERRTYPE_SYNTAX | 1)
+#define SRS_ENOSRS0USER (SRS_ERRTYPE_SYNTAX | 2)
+#define SRS_ENOSRS0HASH (SRS_ERRTYPE_SYNTAX | 3)
+#define SRS_ENOSRS0STAMP (SRS_ERRTYPE_SYNTAX | 4)
+#define SRS_ENOSRS1HOST (SRS_ERRTYPE_SYNTAX | 5)
+#define SRS_ENOSRS1USER (SRS_ERRTYPE_SYNTAX | 6)
+#define SRS_ENOSRS1HASH (SRS_ERRTYPE_SYNTAX | 7)
+#define SRS_EBADTIMESTAMPCHAR (SRS_ERRTYPE_SYNTAX | 8)
+#define SRS_EHASHTOOSHORT (SRS_ERRTYPE_SYNTAX | 9)
+
+#define SRS_ETIMESTAMPOUTOFDATE (SRS_ERRTYPE_SRS | 1)
+#define SRS_EHASHINVALID (SRS_ERRTYPE_SRS | 2)
+
+#define SRS_ERROR_TYPE(x) ((x) & SRS_ERRTYPE_MASK)
+
+/* SRS implementation */
+
+#define SRS_IS_SRS_ADDRESS(x) ( \
+ (strncasecmp((x),"SRS",3) == 0) && \
+ (strchr("01", (x)[3]) != NULL) && \
+ (strchr("-+=", (x)[4]) != NULL) \
+)
+
+typedef void *(*srs_malloc_t)(size_t);
+typedef void *(*srs_realloc_t)(void *,size_t);
+typedef void (*srs_free_t)(void *);
+
+typedef int srs_bool;
+
+typedef struct _srs_t {
+ /* Rewriting parameters */
+// stralloc cookies;
+ char **secrets;
+ int numsecrets;
+ char separator;
+
+ /* Security parameters */
+ int maxage; /* Maximum allowed age in seconds */
+ int hashlen;
+ int hashmin;
+
+ /* Behaviour parameters */
+ srs_bool alwaysrewrite; /* Rewrite even into same domain? */
+ srs_bool noforward; /* Never perform forwards rewriting */
+ srs_bool noreverse; /* Never perform reverse rewriting */
+ char **neverrewrite; /* A list of non-rewritten domains */
+} srs_t;
+
+/* Interface */
+int srs_set_malloc(srs_malloc_t m,srs_realloc_t r,srs_free_t f);
+srs_t *srs_new();
+void srs_init(srs_t *);
+void srs_free(srs_t *);
+int srs_forward(srs_t *,char *,int,const char *,const char *);
+int srs_forward_alloc(srs_t *,char **,const char *,const char *);
+int srs_reverse(srs_t *,char *,int, const char *);
+int srs_reverse_alloc(srs_t *,char **,const char *);
+const char *srs_strerror(int);
+int srs_add_secret(srs_t *,const char *);
+const char * srs_get_secret(srs_t *,int);
+ /* You probably shouldn't call these. */
+int srs_timestamp_create(srs_t *,char *,time_t);
+int srs_timestamp_check(srs_t *,const char *);
+
+#define SRS_PARAM_DECLARE(n, t) \
+ int srs_set_ ## n (srs_t *srs, t value); \
+ t srs_get_ ## n (srs_t *srs);
+
+SRS_PARAM_DECLARE(alwaysrewrite,srs_bool)
+SRS_PARAM_DECLARE(separator,char)
+SRS_PARAM_DECLARE(maxage,int)
+SRS_PARAM_DECLARE(hashlen,int)
+SRS_PARAM_DECLARE(hashmin,int)
+SRS_PARAM_DECLARE(noforward,srs_bool)
+SRS_PARAM_DECLARE(noreverse,srs_bool)
+
+#endif /* SRS2_H */