summaryrefslogtreecommitdiffstats
path: root/contrib/opie/libopie/passwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/opie/libopie/passwd.c')
-rw-r--r--contrib/opie/libopie/passwd.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/contrib/opie/libopie/passwd.c b/contrib/opie/libopie/passwd.c
new file mode 100644
index 0000000..e50bf17
--- /dev/null
+++ b/contrib/opie/libopie/passwd.c
@@ -0,0 +1,74 @@
+/* passwd.c: The opiepasswd() library function.
+
+%%% copyright-cmetz
+This software is Copyright 1996 by Craig Metz, All Rights Reserved.
+The Inner Net License Version 2 applies to this software.
+You should have received a copy of the license with this software. If
+you didn't get a copy, you may request one from <license@inner.net>.
+
+ History:
+
+ Modified by cmetz for OPIE 2.3. Split most of the function off
+ and turned this into a front-end for the new __opiewriterec().
+ Added code to compute the key from the secret. Use the opie_
+ prefix. Use new opieatob8() and opiebtoa8() return values.
+ Created by cmetz for OPIE 2.22.
+*/
+
+#include "opie_cfg.h"
+#include "opie.h"
+
+int opiepasswd FUNCTION((old, mode, principal, n, seed, ks), struct opie *old AND int mode AND char *principal AND int n AND char *seed AND char *ks)
+{
+ int i;
+ struct opie opie;
+
+ if ((mode & 1) && opieinsecure())
+ return -1;
+
+ memset(&opie, 0, sizeof(struct opie));
+
+ if (old) {
+ opie.opie_flags = old->opie_flags;
+ opie.opie_recstart = old->opie_recstart;
+ opie.opie_extrecstart = old->opie_extrecstart;
+ }
+
+ opie.opie_principal = principal;
+ opie.opie_n = n;
+ opie.opie_seed = seed;
+
+ if (ks) {
+ char key[8];
+
+ if (mode & 1) {
+ if (opiekeycrunch(MDX, key, seed, ks))
+ return -1;
+ for (i = n; i; i--)
+ opiehash(key, MDX);
+ if (!(opie.opie_val = opiebtoa8(opie.opie_buf, key)))
+ return -1;
+
+ if (opiekeycrunch(MDX | 0x10, key, seed, ks))
+ return -1;
+
+ if (!(opie.opie_reinitkey = opiebtoa8(opie.opie_extbuf, key)))
+ return -1;
+ } else {
+ if ((opieetob(key, ks) != 1) && !opieatob8(key, ks))
+ return 1;
+ if (!(opie.opie_val = opiebtoa8(opie.opie_buf, key)))
+ return 1;
+ }
+ }
+
+ if (opielock(principal))
+ return -1;
+
+ i = __opiewriterec(&opie);
+
+ if (opieunlock())
+ return -1;
+
+ return i;
+}
OpenPOWER on IntegriCloud