From 8b47781ec303572e966335fb31890f1fc3607950 Mon Sep 17 00:00:00 2001
From: Dante Catalfamo
Date: Wed, 23 Dec 2020 15:07:26 -0500
Subject: bsd-auth: experiment with embedding source code in blog post
---
.../WIP-how-bsd-authentication-works/index.org | 70 ++++++++++++++++++++++
1 file changed, 70 insertions(+)
(limited to 'content/posts/WIP-how-bsd-authentication-works')
diff --git a/content/posts/WIP-how-bsd-authentication-works/index.org b/content/posts/WIP-how-bsd-authentication-works/index.org
index dfdc3a3..34e7aa6 100644
--- a/content/posts/WIP-how-bsd-authentication-works/index.org
+++ b/content/posts/WIP-how-bsd-authentication-works/index.org
@@ -8,6 +8,18 @@
#+SLUG:
#+SUMMARY:
+#+begin_export html
+
+#+end_export
+
[[https://web.archive.org/web/20170327150148/http://www.penzin.net/bsdauth/]]
* History
:PROPERTIES:
@@ -954,10 +966,68 @@
:CUSTOM_ID: auth_userresponse
:END:
+ @@html: @@
#+begin_src c
int auth_userresponse(auth_session_t *as, char *response, int more)
#+end_src
+ @@html:
@@
+
+ #+begin_src c
+ {
+ char path[PATH_MAX];
+ char *style, *name, *challenge, *class;
+ int len;
+
+ if (as == NULL)
+ return (0);
+
+ auth_setstate(as, 0);
+
+ if ((style = auth_getitem(as, AUTHV_STYLE)) == NULL ||
+ (name = auth_getitem(as, AUTHV_NAME)) == NULL ||
+ !_auth_validuser(name)) {
+ if (more == 0)
+ return (auth_close(as));
+ return(0);
+ }
+
+ len = snprintf(path, sizeof(path), _PATH_AUTHPROG "%s", style);
+ if (len < 0 || len >= sizeof(path)) {
+ if (more == 0)
+ return (auth_close(as));
+ return (0);
+ }
+
+ challenge = auth_getitem(as, AUTHV_CHALLENGE);
+ class = auth_getitem(as, AUTHV_CLASS);
+
+ if (challenge)
+ auth_setdata(as, challenge, strlen(challenge) + 1);
+ else
+ auth_setdata(as, "", 1);
+ if (response) {
+ auth_setdata(as, response, strlen(response) + 1);
+ explicit_bzero(response, strlen(response));
+ } else
+ auth_setdata(as, "", 1);
+
+ auth_call(as, path, style, "-s", "response", "--", name,
+ class, (char *)NULL);
+
+ /*
+ * If they authenticated then make sure they did not expire
+ */
+ if (auth_getstate(as) & AUTH_ALLOW)
+ auth_check_expire(as);
+ if (more == 0)
+ return (auth_close(as));
+ return (auth_getstate(as) & AUTH_ALLOW);
+ }
+ #+end_src
+ @@html: @@
+ =auth_userresponse= is used to pass the user's response from
+ [[#auth_userchallenge][=auth_userchallenge=]] back to the authentication module.
* COMMENT note :noexport:
--
cgit v1.2.3