aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorSunil Nimmagadda <sunil@sunilnimmagadda.com>2013-10-24 21:09:56 +0530
committerSunil Nimmagadda <sunil@sunilnimmagadda.com>2013-10-24 21:09:56 +0530
commited159c336bae47c862324ff86dd7938c98dda8b7 (patch)
tree83059a6918711e3c2d7f178ac715dc1a2211b4aa /contrib
parentMerge branch 'master' into portable (diff)
downloadOpenSMTPD-ed159c336bae47c862324ff86dd7938c98dda8b7.tar.xz
OpenSMTPD-ed159c336bae47c862324ff86dd7938c98dda8b7.zip
Implement simple encrypt utility.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/libexec/Makefile.am2
-rw-r--r--contrib/libexec/encrypt/Makefile.am7
-rw-r--r--contrib/libexec/encrypt/encrypt.c57
3 files changed, 65 insertions, 1 deletions
diff --git a/contrib/libexec/Makefile.am b/contrib/libexec/Makefile.am
index 0ee645e2..6079ae6a 100644
--- a/contrib/libexec/Makefile.am
+++ b/contrib/libexec/Makefile.am
@@ -1 +1 @@
-SUBDIRS = mail.local
+SUBDIRS = mail.local encrypt
diff --git a/contrib/libexec/encrypt/Makefile.am b/contrib/libexec/encrypt/Makefile.am
new file mode 100644
index 00000000..7d7062f4
--- /dev/null
+++ b/contrib/libexec/encrypt/Makefile.am
@@ -0,0 +1,7 @@
+pkglibexec_PROGRAMS = encrypt
+
+encrypt_SOURCES = encrypt.c
+
+CFLAGS += -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
+uninstall-hook:
+ rmdir $(DESTDIR)$(pkglibexecdir) 2> /dev/null || /bin/true
diff --git a/contrib/libexec/encrypt/encrypt.c b/contrib/libexec/encrypt/encrypt.c
new file mode 100644
index 00000000..743b4474
--- /dev/null
+++ b/contrib/libexec/encrypt/encrypt.c
@@ -0,0 +1,57 @@
+
+/*
+ * Copyright (c) 2013 Sunil Nimmagadda <sunil@sunilnimmagadda.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define PASSWORD_LEN 128
+
+static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */
+ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+static void to64(char *, long int, int);
+
+int
+main(int argc, char *argv[])
+{
+ char *c, salt[PASSWORD_LEN];
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: encrypt string");
+ return (1);
+ }
+
+ to64(&salt[0], random(), 2);
+ salt[2] = '\0';
+ if ((c = crypt(argv[1], salt)) == NULL) {
+ fprintf(stderr, "crypt failed");
+ return (1);
+ }
+
+ printf("%s\n", c);
+ return (0);
+}
+
+void
+to64(char *s, long int v, int n)
+{
+ while (--n >= 0) {
+ *s++ = itoa64[v&0x3f];
+ v >>= 6;
+ }
+}