From: yasuoka Date: Sun, 14 Jul 2024 15:31:49 +0000 (+0000) Subject: Move radius_attr_{,un}hide() to radius_subr.c. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=a6eb37b5e75184a1a31c763aaedf5fd0ca69ea1f;p=openbsd Move radius_attr_{,un}hide() to radius_subr.c. --- diff --git a/usr.sbin/radiusd/radius_subr.c b/usr.sbin/radiusd/radius_subr.c new file mode 100644 index 00000000000..eae99e396f1 --- /dev/null +++ b/usr.sbin/radiusd/radius_subr.c @@ -0,0 +1,75 @@ +/* $OpenBSD: radius_subr.c,v 1.1 2024/07/14 15:31:49 yasuoka Exp $ */ + +/* + * Copyright (c) 2013, 2023 Internet Initiative Japan Inc. + * + * 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 + +#include +#include + +#include "radius_subr.h" + +void +radius_attr_hide(const char *secret, const char *authenticator, + const u_char *salt, u_char *plain, int plainlen) +{ + int i, j; + u_char b[16]; + MD5_CTX md5ctx; + + i = 0; + do { + MD5Init(&md5ctx); + MD5Update(&md5ctx, secret, strlen(secret)); + if (i == 0) { + MD5Update(&md5ctx, authenticator, 16); + if (salt != NULL) + MD5Update(&md5ctx, salt, 2); + } else + MD5Update(&md5ctx, plain + i - 16, 16); + MD5Final(b, &md5ctx); + + for (j = 0; j < 16 && i < plainlen; i++, j++) + plain[i] ^= b[j]; + } while (i < plainlen); +} + +void +radius_attr_unhide(const char *secret, const char *authenticator, + const u_char *salt, u_char *crypt0, int crypt0len) +{ + int i, j; + u_char b[16]; + MD5_CTX md5ctx; + + i = 16 * ((crypt0len - 1) / 16); + while (i >= 0) { + MD5Init(&md5ctx); + MD5Update(&md5ctx, secret, strlen(secret)); + if (i == 0) { + MD5Update(&md5ctx, authenticator, 16); + if (salt != NULL) + MD5Update(&md5ctx, salt, 2); + } else + MD5Update(&md5ctx, crypt0 + i - 16, 16); + MD5Final(b, &md5ctx); + + for (j = 0; j < 16 && i + j < crypt0len; j++) + crypt0[i + j] ^= b[j]; + i -= 16; + } +} diff --git a/usr.sbin/radiusd/radius_subr.h b/usr.sbin/radiusd/radius_subr.h new file mode 100644 index 00000000000..b3260d14174 --- /dev/null +++ b/usr.sbin/radiusd/radius_subr.h @@ -0,0 +1,30 @@ +/* $OpenBSD: radius_subr.h,v 1.1 2024/07/14 15:31:49 yasuoka Exp $ */ + +/* + * Copyright (c) 2013, 2023 Internet Initiative Japan Inc. + * + * 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. + */ +#ifndef RADIUS_UTIL_H +#define RADIUS_UTIL_H 1 + +#include + +__BEGIN_DECLS +void radius_attr_hide(const char *, const char *, const u_char *, u_char *, + int); +void radius_attr_unhide(const char *, const char *, const u_char *, + u_char *, int); + +__END_DECLS +#endif diff --git a/usr.sbin/radiusd/radiusd.c b/usr.sbin/radiusd/radiusd.c index c3e8382d559..31afc0e2795 100644 --- a/usr.sbin/radiusd/radiusd.c +++ b/usr.sbin/radiusd/radiusd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: radiusd.c,v 1.49 2024/07/14 15:27:57 yasuoka Exp $ */ +/* $OpenBSD: radiusd.c,v 1.50 2024/07/14 15:31:49 yasuoka Exp $ */ /* * Copyright (c) 2013, 2023 Internet Initiative Japan Inc. @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -47,6 +46,7 @@ #include "radiusd.h" #include "radiusd_local.h" +#include "radius_subr.h" #include "log.h" #include "util.h" #include "imsg_subr.h" @@ -1126,57 +1126,6 @@ radiusd_access_response_fixup(struct radius_query *q, struct radius_query *q0, return (0); } -void -radius_attr_hide(const char *secret, const char *authenticator, - const u_char *salt, u_char *plain, int plainlen) -{ - int i, j; - u_char b[16]; - MD5_CTX md5ctx; - - i = 0; - do { - MD5Init(&md5ctx); - MD5Update(&md5ctx, secret, strlen(secret)); - if (i == 0) { - MD5Update(&md5ctx, authenticator, 16); - if (salt != NULL) - MD5Update(&md5ctx, salt, 2); - } else - MD5Update(&md5ctx, plain + i - 16, 16); - MD5Final(b, &md5ctx); - - for (j = 0; j < 16 && i < plainlen; i++, j++) - plain[i] ^= b[j]; - } while (i < plainlen); -} - -void -radius_attr_unhide(const char *secret, const char *authenticator, - const u_char *salt, u_char *crypt0, int crypt0len) -{ - int i, j; - u_char b[16]; - MD5_CTX md5ctx; - - i = 16 * ((crypt0len - 1) / 16); - while (i >= 0) { - MD5Init(&md5ctx); - MD5Update(&md5ctx, secret, strlen(secret)); - if (i == 0) { - MD5Update(&md5ctx, authenticator, 16); - if (salt != NULL) - MD5Update(&md5ctx, salt, 2); - } else - MD5Update(&md5ctx, crypt0 + i - 16, 16); - MD5Final(b, &md5ctx); - - for (j = 0; j < 16 && i + j < crypt0len; j++) - crypt0[i + j] ^= b[j]; - i -= 16; - } -} - static struct radius_query * radiusd_find_query(struct radiusd *radiusd, u_int q_id) { diff --git a/usr.sbin/radiusd/radiusd/Makefile b/usr.sbin/radiusd/radiusd/Makefile index 1598e9ed314..e2cf0be2eb7 100644 --- a/usr.sbin/radiusd/radiusd/Makefile +++ b/usr.sbin/radiusd/radiusd/Makefile @@ -1,8 +1,9 @@ -# $OpenBSD: Makefile,v 1.2 2024/07/09 17:26:14 yasuoka Exp $ +# $OpenBSD: Makefile,v 1.3 2024/07/14 15:31:49 yasuoka Exp $ PROG= radiusd BINDIR= /usr/sbin MAN= radiusd.8 radiusd.conf.5 -SRCS= radiusd.c parse.y log.c util.c imsg_subr.c control.c +SRCS= radiusd.c radius_subr.c parse.y log.c util.c imsg_subr.c +SRCS+= control.c LDADD+= -lradius -lcrypto -levent -lutil DPADD= ${LIBRADIUS} ${LIBCRYPTO} ${LIBEVENT} ${LIBUTIL} diff --git a/usr.sbin/radiusd/radiusd_local.h b/usr.sbin/radiusd/radiusd_local.h index 32feca0ca40..b4ce9b15a9f 100644 --- a/usr.sbin/radiusd/radiusd_local.h +++ b/usr.sbin/radiusd/radiusd_local.h @@ -1,4 +1,4 @@ -/* $OpenBSD: radiusd_local.h,v 1.14 2024/07/14 15:27:57 yasuoka Exp $ */ +/* $OpenBSD: radiusd_local.h,v 1.15 2024/07/14 15:31:49 yasuoka Exp $ */ /* * Copyright (c) 2013 Internet Initiative Japan Inc. @@ -205,10 +205,6 @@ void radiusd_access_request_next(struct radius_query *, RADIUS_PACKET *); void radiusd_access_request_aborted(struct radius_query *); int radiusd_imsg_compose_module(struct radiusd *, const char *, uint32_t, uint32_t, pid_t, int, void *, size_t); -void radius_attr_hide(const char *, const char *, const u_char *, - u_char *, int); -void radius_attr_unhide(const char *, const char *, const u_char *, - u_char *, int); int radiusd_module_set(struct radiusd_module *, const char *, int, char * const *);