sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-09-04 18:18:44 +00:00
parent ac79c66a3f
commit 8ed89093e5
Signed by: purplerain
GPG Key ID: F42C07F07E2E35B7
49 changed files with 259 additions and 746 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cmll_ecb.c,v 1.5 2022/11/26 16:08:51 tb Exp $ */
/* $OpenBSD: cmll_ecb.c,v 1.7 2023/09/04 08:43:41 tb Exp $ */
/* ====================================================================
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
*
@ -50,6 +50,7 @@
*/
#include <openssl/camellia.h>
#include "cmll_local.h"
void

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cmll_local.h,v 1.2 2022/11/26 17:23:17 tb Exp $ */
/* $OpenBSD: cmll_local.h,v 1.3 2023/09/04 08:43:41 tb Exp $ */
/* ====================================================================
* Copyright 2006 NTT (Nippon Telegraph and Telephone Corporation) .
* ALL RIGHTS RESERVED.
@ -68,6 +68,8 @@
#ifndef HEADER_CAMELLIA_LOCAL_H
#define HEADER_CAMELLIA_LOCAL_H
#include <sys/types.h>
__BEGIN_HIDDEN_DECLS
typedef unsigned int u32;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: wp_dgst.c,v 1.5 2022/11/26 16:08:54 tb Exp $ */
/* $OpenBSD: wp_dgst.c,v 1.7 2023/09/04 08:43:41 tb Exp $ */
/**
* The Whirlpool hashing function.
*
@ -52,10 +52,12 @@
* input. This is done for performance.
*/
#include "wp_local.h"
#include <openssl/crypto.h>
#include <string.h>
#include <openssl/crypto.h>
#include "wp_local.h"
int WHIRLPOOL_Init(WHIRLPOOL_CTX *c)
{
memset (c,0,sizeof(*c));

View File

@ -1,4 +1,6 @@
/* $OpenBSD: wp_local.h,v 1.1 2022/11/26 16:08:54 tb Exp $ */
/* $OpenBSD: wp_local.h,v 1.2 2023/09/04 08:43:41 tb Exp $ */
#include <sys/types.h>
#include <openssl/whrlpool.h>

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: bsd.port.mk.5,v 1.585 2023/09/03 12:24:16 espie Exp $
.\" $OpenBSD: bsd.port.mk.5,v 1.586 2023/09/04 12:40:44 espie Exp $
.\"
.\" Copyright (c) 2000-2008 Marc Espie
.\"
@ -24,7 +24,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd $Mdocdate: September 3 2023 $
.Dd $Mdocdate: September 4 2023 $
.Dt BSD.PORT.MK 5
.Os
.Sh NAME
@ -302,7 +302,7 @@ ${FETCH_CMD} retrieve from
.Ev MASTER_SITES0
to
.Ev MASTER_SITES9
instead.
instead (deprecated).
.Pp
Preferably, adding a suffix to
.Ev DISTFILES ,
@ -327,6 +327,14 @@ Transfers in progress are stored as
.Ar filenamesufx.part
and moved after completion.
.Pp
The actual filesystem paths to all distfiles (resp. patchfiles) after
url/filename substitution, including suffixed sources, is conveniently
stored as
.Ev ALL_DISTFILES
.Po
resp.
.Ev ALL_PATCHFILES
.Pc .
The ports framework uses
.Pa ${DISTDIR}/${DIST_SUBDIR}
(aliased to
@ -343,6 +351,8 @@ Use of
hooks is forbidden, as this would make mirroring of distfiles very complicated.
.Pp
See
.Ev ALL_DISTFILES ,
.Ev ALL_PATCHFILES ,
.Ev CHECKSUMFILES ,
.Ev DISTDIR ,
.Ev DISTFILES* ,
@ -926,6 +936,7 @@ setting, after applying the
conversion, occasionally useful for setting
.Ev EXTRACT_ONLY
manually.
Read-only.
.It Ev ALL_FAKE_FLAGS
Flags passed to ${MAKE} invocations during the fake process.
Equals
@ -937,6 +948,7 @@ List of all actual files coming from every
setting, after applying the
.Sq Ar filename Ns { Ns Ar url Ns } Ns Ar sufx
conversion.
Read-only.
.It Ev ALL_TEST_ENV
Environment passed to test.
Equals
@ -4382,6 +4394,10 @@ somewhere, or it runs strips during fake anyway.
It can also occur if
.Ev DEBUG_PACKAGES
includes subpackages with no files holding debug info.
.It "Warning: old style distfiles <files>... found"
See
.Cm fetch
for the newer way.
.It "Warning: symlink(s) point to non existent file."
Warning message comes from
.Xr pkg_create 1 .

View File

@ -1,4 +1,4 @@
/* $OpenBSD: kern_exit.c,v 1.212 2023/08/29 16:19:34 claudio Exp $ */
/* $OpenBSD: kern_exit.c,v 1.213 2023/09/04 13:18:41 claudio Exp $ */
/* $NetBSD: kern_exit.c,v 1.39 1996/04/22 01:38:25 christos Exp $ */
/*
@ -119,7 +119,7 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
struct process *pr, *qr, *nqr;
struct rusage *rup;
struct timespec ts;
int s;
int s, wake;
atomic_setbits_int(&p->p_flag, P_WEXIT);
@ -161,9 +161,17 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
TAILQ_REMOVE(&pr->ps_threads, p, p_thr_link);
SCHED_UNLOCK(s);
mtx_enter(&pr->ps_mtx);
pr->ps_threadcnt--;
wake = (pr->ps_single && pr->ps_singlecnt == pr->ps_threadcnt);
mtx_leave(&pr->ps_mtx);
if (wake)
wakeup(&pr->ps_singlecnt);
if ((p->p_flag & P_THREAD) == 0) {
/* main thread gotta wait because it has the pid, et al */
while (pr->ps_threadcnt > 1)
/* XXX locking depends on kernel lock here. */
while (pr->ps_threadcnt > 0)
tsleep_nsec(&pr->ps_threads, PWAIT, "thrdeath", INFSLP);
if (pr->ps_flags & PS_PROFIL)
stopprofclock(pr);
@ -337,9 +345,8 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
/* just a thread? detach it from its process */
if (p->p_flag & P_THREAD) {
/* scheduler_wait_hook(pr->ps_mainproc, p); XXX */
if (--pr->ps_threadcnt == 1)
if (pr->ps_threadcnt == 0)
wakeup(&pr->ps_threads);
KASSERT(pr->ps_threadcnt > 0);
}
/* Release the thread's read reference of resource limit structure. */
@ -823,7 +830,7 @@ process_zap(struct process *pr)
if (otvp)
vrele(otvp);
KASSERT(pr->ps_threadcnt == 1);
KASSERT(pr->ps_threadcnt == 0);
if (pr->ps_ptstat != NULL)
free(pr->ps_ptstat, M_SUBPROC, sizeof(*pr->ps_ptstat));
pool_put(&rusage_pool, pr->ps_ru);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: kern_fork.c,v 1.249 2023/08/14 08:33:24 mpi Exp $ */
/* $OpenBSD: kern_fork.c,v 1.250 2023/09/04 13:18:41 claudio Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@ -543,7 +543,6 @@ thread_fork(struct proc *curp, void *stack, void *tcb, pid_t *tidptr,
/* other links */
p->p_p = pr;
pr->ps_threadcnt++;
/* local copies */
p->p_fd = pr->ps_fd;
@ -564,16 +563,18 @@ thread_fork(struct proc *curp, void *stack, void *tcb, pid_t *tidptr,
SCHED_LOCK(s);
TAILQ_INSERT_TAIL(&pr->ps_threads, p, p_thr_link);
SCHED_UNLOCK(s);
mtx_enter(&pr->ps_mtx);
pr->ps_threadcnt++;
/*
* if somebody else wants to take us to single threaded mode,
* count ourselves in.
*/
if (pr->ps_single) {
atomic_inc_int(&pr->ps_singlecount);
if (pr->ps_single)
atomic_setbits_int(&p->p_flag, P_SUSPSINGLE);
}
SCHED_UNLOCK(s);
mtx_leave(&pr->ps_mtx);
/*
* Return tid to parent thread and copy it out to userspace

View File

@ -1,4 +1,4 @@
/* $OpenBSD: kern_sig.c,v 1.313 2023/08/16 07:55:52 claudio Exp $ */
/* $OpenBSD: kern_sig.c,v 1.314 2023/09/04 13:18:41 claudio Exp $ */
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
/*
@ -2008,11 +2008,12 @@ userret(struct proc *p)
}
int
single_thread_check_locked(struct proc *p, int deep, int s)
single_thread_check_locked(struct proc *p, int deep)
{
struct process *pr = p->p_p;
int s, wake;
SCHED_ASSERT_LOCKED();
MUTEX_ASSERT_LOCKED(&pr->ps_mtx);
if (pr->ps_single == NULL || pr->ps_single == p)
return (0);
@ -2026,19 +2027,24 @@ single_thread_check_locked(struct proc *p, int deep, int s)
return (EINTR);
}
if (atomic_dec_int_nv(&pr->ps_singlecount) == 0)
wakeup(&pr->ps_singlecount);
if (pr->ps_flags & PS_SINGLEEXIT) {
SCHED_UNLOCK(s);
mtx_leave(&pr->ps_mtx);
KERNEL_LOCK();
exit1(p, 0, 0, EXIT_THREAD_NOCHECK);
/* NOTREACHED */
}
/* not exiting and don't need to unwind, so suspend */
wake = (++pr->ps_singlecnt == pr->ps_threadcnt);
mtx_leave(&pr->ps_mtx);
if (wake)
wakeup(&pr->ps_singlecnt);
SCHED_LOCK(s);
p->p_stat = SSTOP;
mi_switch();
SCHED_UNLOCK(s);
mtx_enter(&pr->ps_mtx);
} while (pr->ps_single != NULL);
return (0);
@ -2047,11 +2053,11 @@ single_thread_check_locked(struct proc *p, int deep, int s)
int
single_thread_check(struct proc *p, int deep)
{
int s, error;
int error;
SCHED_LOCK(s);
error = single_thread_check_locked(p, deep, s);
SCHED_UNLOCK(s);
mtx_enter(&p->p_p->ps_mtx);
error = single_thread_check_locked(p, deep);
mtx_leave(&p->p_p->ps_mtx);
return error;
}
@ -2071,13 +2077,14 @@ single_thread_set(struct proc *p, enum single_thread_mode mode, int wait)
struct process *pr = p->p_p;
struct proc *q;
int error, s;
u_int count = 0;
KASSERT(curproc == p);
SCHED_LOCK(s);
error = single_thread_check_locked(p, (mode == SINGLE_UNWIND), s);
mtx_enter(&pr->ps_mtx);
error = single_thread_check_locked(p, (mode == SINGLE_UNWIND));
if (error) {
SCHED_UNLOCK(s);
mtx_leave(&pr->ps_mtx);
return error;
}
@ -2096,26 +2103,24 @@ single_thread_set(struct proc *p, enum single_thread_mode mode, int wait)
panic("single_thread_mode = %d", mode);
#endif
}
pr->ps_singlecount = 0;
membar_producer();
pr->ps_singlecnt = 1; /* count ourselfs in already */
pr->ps_single = p;
mtx_leave(&pr->ps_mtx);
SCHED_LOCK(s);
TAILQ_FOREACH(q, &pr->ps_threads, p_thr_link) {
if (q == p)
continue;
if (q->p_flag & P_WEXIT) {
if (mode == SINGLE_EXIT) {
if (q->p_stat == SSTOP) {
setrunnable(q);
atomic_inc_int(&pr->ps_singlecount);
}
}
if (mode == SINGLE_EXIT && q->p_stat == SSTOP)
setrunnable(q);
continue;
}
atomic_setbits_int(&q->p_flag, P_SUSPSINGLE);
switch (q->p_stat) {
case SIDL:
case SDEAD:
case SRUN:
atomic_inc_int(&pr->ps_singlecount);
break;
case SSLEEP:
/* if it's not interruptible, then just have to wait */
@ -2123,29 +2128,31 @@ single_thread_set(struct proc *p, enum single_thread_mode mode, int wait)
/* merely need to suspend? just stop it */
if (mode == SINGLE_SUSPEND) {
q->p_stat = SSTOP;
count++;
break;
}
/* need to unwind or exit, so wake it */
setrunnable(q);
}
atomic_inc_int(&pr->ps_singlecount);
break;
case SSTOP:
if (mode == SINGLE_EXIT) {
setrunnable(q);
atomic_inc_int(&pr->ps_singlecount);
break;
}
break;
case SDEAD:
count++;
break;
case SONPROC:
atomic_inc_int(&pr->ps_singlecount);
signotify(q);
break;
}
}
SCHED_UNLOCK(s);
mtx_enter(&pr->ps_mtx);
pr->ps_singlecnt += count;
mtx_leave(&pr->ps_mtx);
if (wait)
single_thread_wait(pr, 1);
@ -2163,14 +2170,16 @@ single_thread_wait(struct process *pr, int recheck)
int wait;
/* wait until they're all suspended */
wait = pr->ps_singlecount > 0;
mtx_enter(&pr->ps_mtx);
wait = pr->ps_singlecnt < pr->ps_threadcnt;
while (wait) {
sleep_setup(&pr->ps_singlecount, PWAIT, "suspend");
wait = pr->ps_singlecount > 0;
sleep_finish(0, wait);
msleep_nsec(&pr->ps_singlecnt, &pr->ps_mtx, PWAIT, "suspend",
INFSLP);
if (!recheck)
break;
wait = pr->ps_singlecnt < pr->ps_threadcnt;
}
mtx_leave(&pr->ps_mtx);
return wait;
}
@ -2185,9 +2194,11 @@ single_thread_clear(struct proc *p, int flag)
KASSERT(pr->ps_single == p);
KASSERT(curproc == p);
SCHED_LOCK(s);
/* can do this without holding pr->ps_mtx since no concurrency */
pr->ps_single = NULL;
atomic_clearbits_int(&pr->ps_flags, PS_SINGLEUNWIND | PS_SINGLEEXIT);
SCHED_LOCK(s);
TAILQ_FOREACH(q, &pr->ps_threads, p_thr_link) {
if (q == p || (q->p_flag & P_SUSPSINGLE) == 0)
continue;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: proc.h,v 1.348 2023/08/29 16:19:34 claudio Exp $ */
/* $OpenBSD: proc.h,v 1.349 2023/09/04 13:18:41 claudio Exp $ */
/* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */
/*-
@ -173,8 +173,8 @@ struct process {
u_int ps_flags; /* [a] PS_* flags. */
int ps_siglist; /* Signals pending for the process. */
struct proc *ps_single; /* [S] Thread for single-threading. */
u_int ps_singlecount; /* [a] Not yet suspended threads. */
struct proc *ps_single; /* [m] Thread for single-threading. */
u_int ps_singlecnt; /* [m] Number of suspended threads. */
int ps_traceflag; /* Kernel trace points. */
struct vnode *ps_tracevp; /* Trace to vnode. */
@ -242,7 +242,7 @@ struct process {
/* End area that is copied on creation. */
#define ps_endcopy ps_threadcnt
u_int ps_threadcnt; /* Number of threads. */
u_int ps_threadcnt; /* [m] Number of threads. */
struct timespec ps_start; /* starting uptime. */
struct timeout ps_realit_to; /* [m] ITIMER_REAL timeout */

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.64 2020/01/13 15:41:53 espie Exp $
# $OpenBSD: Makefile,v 1.65 2023/09/04 11:35:11 espie Exp $
PROG= make
CFLAGS+= -I${.OBJDIR} -I${.CURDIR}
@ -6,8 +6,7 @@ HOSTCFLAGS+= -I${.OBJDIR} -I${.CURDIR}
CDIAGFLAGS=-Wall -W -Wno-char-subscripts -Wstrict-prototypes -pedantic \
-Wmissing-prototypes -Wdeclaration-after-statement -std=c99
CDEFS+=-DHAS_PATHS_H
CDEFS+=-DHAS_EXTENDED_GETCWD
CDEFS+=-DMAKE_BSIZE=256 -DDEFMAXJOBS=4
#CDEFS+=-DHAS_STATS
DPADD += ${LIBUTIL}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: arch.c,v 1.93 2023/02/17 17:59:36 miod Exp $ */
/* $OpenBSD: arch.c,v 1.94 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: arch.c,v 1.17 1996/11/06 17:58:59 christos Exp $ */
/*
@ -82,7 +82,6 @@
#include <string.h>
#include <unistd.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "dir.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: buf.c,v 1.29 2020/01/13 13:54:44 espie Exp $ */
/* $OpenBSD: buf.c,v 1.30 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: buf.c,v 1.9 1996/12/31 17:53:21 christos Exp $ */
/*
@ -75,7 +75,6 @@
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "stats.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cmd_exec.c,v 1.12 2023/08/31 06:53:28 espie Exp $ */
/* $OpenBSD: cmd_exec.c,v 1.13 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
*
@ -30,7 +30,6 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "cmd_exec.h"
#include "buf.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: compat.c,v 1.93 2020/01/26 12:41:21 espie Exp $ */
/* $OpenBSD: compat.c,v 1.94 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: compat.c,v 1.14 1996/11/06 17:59:01 christos Exp $ */
/*
@ -40,7 +40,6 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "engine.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cond.c,v 1.54 2019/12/21 15:29:25 espie Exp $ */
/* $OpenBSD: cond.c,v 1.55 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: cond.c,v 1.7 1996/11/06 17:59:02 christos Exp $ */
/*
@ -42,7 +42,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "buf.h"

View File

@ -1,120 +0,0 @@
#ifndef CONFIG_H
#define CONFIG_H
/* $OpenBSD: config.h,v 1.21 2022/01/05 02:00:55 jsg Exp $ */
/* $NetBSD: config.h,v 1.7 1996/11/06 17:59:03 christos Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
* Copyright (c) 1988, 1989 by Adam de Boor
* Copyright (c) 1989 by Berkeley Softworks
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Adam de Boor.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)config.h 8.1 (Berkeley) 6/6/93
*/
#define DEFSHELL 1 /* Bourne shell */
/*
* DEFMAXJOBS
* This controls the default concurrency. On no occasion will more
* than DEFMAXJOBS targets be created at once.
*/
#define DEFMAXJOBS 4
/*
* SYSVINCLUDE
* Recognize system V like include directives [include "filename"]
* SYSVVARSUB
* Recognize system V like ${VAR:x=y} variable substitutions
*/
#define SYSVINCLUDE
#define SYSVVARSUB
/*
* SUNSHCMD
* Recognize SunOS and Solaris:
* VAR :sh= CMD # Assign VAR to the command substitution of CMD
* ${VAR:sh} # Return the command substitution of the value
* # of ${VAR}
*/
#define SUNSHCMD
#ifdef HAS_EXTENDED_GETCWD
#define dogetcwd() getcwd(NULL, 0)
#else
#define dogetcwd() getcwd(emalloc(PATH_MAX), PATH_MAX)
#endif
#ifdef SYSVINCLUDE
#define DOFEATURE_SYSVINCLUDE FEATURE_SYSVINCLUDE
#else
#define DOFEATURE_SYSVINCLUDE 0
#endif
#ifdef SYSVVARSUB
#define DOFEATURE_SYSVVARSUB FEATURE_SYSVVARSUB
#else
#define DOFEATURE_SYSVVARSUB 0
#endif
#ifdef SUNSHCMD
#define DOFEATURE_SUNSHCMD FEATURE_SUNSHCMD
#else
#define DOFEATURE_SUNSHCMD 0
#endif
#ifndef DEFAULT_FEATURES
#define DEFAULT_FEATURES (FEATURE_UPPERLOWER | DOFEATURE_SYSVVARSUB | DOFEATURE_SYSVINCLUDE | DOFEATURE_SUNSHCMD | FEATURE_RECVARS | FEATURE_CONDINCLUDE)
#endif
#define FEATURES(x) ((DEFAULT_FEATURES & (x)) != 0)
#define FEATURE_ODE 1
#define FEATURE_UNIQ 2
#define FEATURE_SORT 4
#define FEATURE_UPPERLOWER 8
#define FEATURE_SYSVVARSUB 16
#define FEATURE_SYSVINCLUDE 32
#define FEATURE_SUNSHCMD 64
#define FEATURE_RECVARS 128
#define FEATURE_CONDINCLUDE 256
#define FEATURE_ASSIGN 512
#define FEATURE_EXECMOD 1024
/*
* There are several places where expandable buffers are used (parse.c and
* var.c). This constant is merely the starting point for those buffers. If
* lines tend to be much shorter than this, it would be best to reduce BSIZE.
* If longer, it should be increased. Reducing it will cause more copying to
* be done for longer lines, but will save space for shorter ones. In any
* case, it ought to be a power of two simply because most storage allocation
* schemes allocate in powers of two.
*/
#define MAKE_BSIZE 256 /* starting size for expandable buffers */
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: dir.c,v 1.68 2016/10/21 16:12:38 espie Exp $ */
/* $OpenBSD: dir.c,v 1.69 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: dir.c,v 1.14 1997/03/29 16:51:26 christos Exp $ */
/*
@ -70,7 +70,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "lst.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: direxpand.c,v 1.8 2016/10/21 16:12:38 espie Exp $ */
/* $OpenBSD: direxpand.c,v 1.9 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 1999,2007 Marc Espie.
*
@ -62,7 +62,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "lst.h"
#include "dir.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: engine.c,v 1.72 2023/08/31 06:53:28 espie Exp $ */
/* $OpenBSD: engine.c,v 1.73 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2012 Marc Espie.
*
@ -73,7 +73,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "cmd_exec.h"
#include "dir.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: enginechoice.c,v 1.3 2021/03/04 09:34:30 espie Exp $ */
/* $OpenBSD: enginechoice.c,v 1.4 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2020 Marc Espie.
*
@ -23,7 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "defines.h"
#include "compat.h"
#include "make.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: error.c,v 1.25 2015/09/27 16:58:16 guenther Exp $ */
/* $OpenBSD: error.c,v 1.26 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
@ -31,7 +31,6 @@
#include <sys/types.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "error.h"
#include "job.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: expandchildren.c,v 1.2 2020/01/26 12:41:21 espie Exp $ */
/* $OpenBSD: expandchildren.c,v 1.3 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: suff.c,v 1.13 1996/11/06 17:59:25 christos Exp $ */
/*
@ -44,7 +44,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "direxpand.h"
#include "engine.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: for.c,v 1.47 2017/12/05 17:47:09 millert Exp $ */
/* $OpenBSD: for.c,v 1.48 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: for.c,v 1.4 1996/11/06 17:59:05 christos Exp $ */
/*
@ -63,7 +63,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "for.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: init.c,v 1.9 2023/08/31 06:53:28 espie Exp $ */
/* $OpenBSD: init.c,v 1.10 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
@ -26,7 +26,6 @@
*/
#include <stdio.h>
#include "defines.h"
#include "config.h"
#include "init.h"
#include "timestamp.h"
#include "stats.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: job.c,v 1.164 2023/03/08 04:43:11 guenther Exp $ */
/* $OpenBSD: job.c,v 1.165 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: job.c,v 1.16 1996/11/06 17:59:08 christos Exp $ */
/*
@ -93,7 +93,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "job.h"
#include "engine.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: lowparse.c,v 1.35 2016/10/21 16:12:38 espie Exp $ */
/* $OpenBSD: lowparse.c,v 1.36 2023/09/04 11:35:11 espie Exp $ */
/* low-level parsing functions. */
@ -35,7 +35,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "lowparse.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: lstInt.h,v 1.15 2010/07/19 19:46:44 espie Exp $ */
/* $OpenBSD: lstInt.h,v 1.16 2023/09/04 11:35:12 espie Exp $ */
/* $NetBSD: lstInt.h,v 1.7 1996/11/06 17:59:44 christos Exp $ */
/*
@ -42,7 +42,6 @@
#ifndef _LSTINT_H_
#define _LSTINT_H_
#include "config.h"
#include "defines.h"
#include "lst.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: main.c,v 1.131 2023/07/08 21:51:45 jmc Exp $ */
/* $OpenBSD: main.c,v 1.132 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: main.c,v 1.34 1997/03/24 20:56:36 gwr Exp $ */
/*
@ -45,7 +45,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "config.h"
#include "defines.h"
#include "var.h"
#include "lowparse.h"
@ -517,7 +516,7 @@ figure_out_CURDIR()
struct stat sa, sb;
/* curdir is cwd... */
cwd = dogetcwd();
cwd = getcwd(NULL, 0);
if (cwd == NULL)
err(2, "getcwd");

View File

@ -1,4 +1,4 @@
/* $OpenBSD: make.c,v 1.83 2023/07/08 18:42:27 espie Exp $ */
/* $OpenBSD: make.c,v 1.84 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: make.c,v 1.10 1996/11/06 17:59:15 christos Exp $ */
/*
@ -64,7 +64,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "job.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: parse.c,v 1.135 2023/05/30 04:42:21 espie Exp $ */
/* $OpenBSD: parse.c,v 1.136 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: parse.c,v 1.29 1997/03/10 21:20:04 christos Exp $ */
/*
@ -68,7 +68,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "direxpand.h"
@ -1555,23 +1554,20 @@ parse_as_special_line(Buffer buf, Buffer copy, const char *line)
{
if (*line == '.' && handle_bsd_command(buf, copy, line+1))
return true;
if (FEATURES(FEATURE_SYSVINCLUDE) &&
strncmp(line, "include", 7) == 0 &&
if (strncmp(line, "include", 7) == 0 &&
ISSPACE(line[7]) &&
strchr(line, ':') == NULL) {
/* It's an S3/S5-style "include". */
lookup_sysv_include(line + 7, "include");
return true;
}
if (FEATURES(FEATURE_CONDINCLUDE) &&
strncmp(line, "sinclude", 8) == 0 &&
if (strncmp(line, "sinclude", 8) == 0 &&
ISSPACE(line[8]) &&
strchr(line, ':') == NULL) {
lookup_conditional_include(line+8, "sinclude");
return true;
}
if (FEATURES(FEATURE_CONDINCLUDE) &&
strncmp(line, "-include", 8) == 0 &&
if (strncmp(line, "-include", 8) == 0 &&
ISSPACE(line[8]) &&
strchr(line, ':') == NULL) {
lookup_conditional_include(line+8, "-include");

View File

@ -1,4 +1,4 @@
/* $OpenBSD: parsevar.c,v 1.16 2016/10/23 14:54:14 espie Exp $ */
/* $OpenBSD: parsevar.c,v 1.17 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: parse.c,v 1.29 1997/03/10 21:20:04 christos Exp $ */
/*
@ -30,7 +30,6 @@
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "var.h"
#include "varname.h"
@ -84,8 +83,7 @@ parse_variable_assignment(const char *line, int ctxt)
int type;
struct Name name;
arg = VarName_Get(line, &name, NULL, true,
FEATURES(FEATURE_SUNSHCMD) ? find_op1 : find_op2);
arg = VarName_Get(line, &name, NULL, true, find_op1);
while (ISSPACE(*arg))
arg++;
@ -113,8 +111,7 @@ parse_variable_assignment(const char *line, int ctxt)
break;
case ':':
if (FEATURES(FEATURE_SUNSHCMD) &&
strncmp(arg, "sh", 2) == 0) {
if (strncmp(arg, "sh", 2) == 0) {
type = VAR_SUNSHELL;
arg += 2;
while (*arg != '=' && *arg != '\0')

View File

@ -1,4 +1,4 @@
/* $OpenBSD: stats.c,v 1.11 2014/04/22 12:21:17 espie Exp $ */
/* $OpenBSD: stats.c,v 1.12 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 1999 Marc Espie.
@ -34,7 +34,6 @@
to allow for concurrent adjustment to variables.
*/
#include "config.h"
#include "defines.h"
#include "stats.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: str.c,v 1.32 2019/05/21 17:21:02 espie Exp $ */
/* $OpenBSD: str.c,v 1.33 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: str.c,v 1.13 1996/11/06 17:59:23 christos Exp $ */
/*-
@ -37,7 +37,6 @@
#include <ctype.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "str.h"
#include "memory.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: suff.c,v 1.102 2020/01/13 15:41:53 espie Exp $ */
/* $OpenBSD: suff.c,v 1.103 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: suff.c,v 1.13 1996/11/06 17:59:25 christos Exp $ */
/*
@ -48,7 +48,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "dir.h"
#include "engine.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: targ.c,v 1.85 2020/01/26 12:41:21 espie Exp $ */
/* $OpenBSD: targ.c,v 1.86 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: targ.c,v 1.11 1997/02/20 16:51:50 christos Exp $ */
/*
@ -102,7 +102,6 @@
#include <stdlib.h>
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "stats.h"
#include "suff.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: targequiv.c,v 1.9 2019/12/21 15:29:25 espie Exp $ */
/* $OpenBSD: targequiv.c,v 1.10 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2007-2008 Marc Espie.
*
@ -37,7 +37,6 @@
#include <string.h>
#include <ohash.h>
#include <limits.h>
#include "config.h"
#include "defines.h"
#include "memory.h"
#include "gnode.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: timestamp.c,v 1.10 2013/05/22 12:14:08 espie Exp $ */
/* $OpenBSD: timestamp.c,v 1.11 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
@ -27,7 +27,6 @@
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "timestamp.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: var.c,v 1.105 2023/08/10 10:52:43 espie Exp $ */
/* $OpenBSD: var.c,v 1.106 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: var.c,v 1.18 1997/03/18 19:24:46 christos Exp $ */
/*
@ -69,7 +69,6 @@
#include <string.h>
#include <ohash.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "cmd_exec.h"

View File

@ -1,4 +1,4 @@
/* $OpenBSD: varmodifiers.c,v 1.48 2020/08/30 12:16:04 tb Exp $ */
/* $OpenBSD: varmodifiers.c,v 1.49 2023/09/04 11:35:11 espie Exp $ */
/* $NetBSD: var.c,v 1.18 1997/03/18 19:24:46 christos Exp $ */
/*
@ -65,6 +65,7 @@
* is also called directly by Var_SubstVar. */
#include <assert.h>
#include <ctype.h>
#include <sys/types.h>
#include <regex.h>
@ -72,7 +73,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "defines.h"
#include "buf.h"
#include "var.h"
@ -100,7 +100,7 @@
#define VAR_BANG_EQUAL 0x100
typedef struct {
char *lbuffer; /* left string to free */
char *lbuffer; /* Left string to free */
char *lhs; /* String to match */
size_t leftLen; /* Length of string */
char *rhs; /* Replacement string (w/ &'s removed) */
@ -108,12 +108,6 @@ typedef struct {
int flags;
} VarPattern;
struct LoopStuff {
struct LoopVar *var;
char *expand;
bool err;
};
static bool VarHead(struct Name *, bool, Buffer, void *);
static bool VarTail(struct Name *, bool, Buffer, void *);
static bool VarSuffix(struct Name *, bool, Buffer, void *);
@ -121,8 +115,6 @@ static bool VarRoot(struct Name *, bool, Buffer, void *);
static bool VarMatch(struct Name *, bool, Buffer, void *);
static bool VarSYSVMatch(struct Name *, bool, Buffer, void *);
static bool VarNoMatch(struct Name *, bool, Buffer, void *);
static bool VarUniq(struct Name *, bool, Buffer, void *);
static bool VarLoop(struct Name *, bool, Buffer, void *);
static void VarREError(int, regex_t *, const char *);
@ -149,62 +141,36 @@ static char *do_upper(const char *, const struct Name *, void *);
static char *do_lower(const char *, const struct Name *, void *);
static void *check_shcmd(const char **, SymTable *, bool, int);
static char *do_shcmd(const char *, const struct Name *, void *);
static char *do_sort(const char *, const struct Name *, void *);
static char *finish_loop(const char *, const struct Name *, void *);
static int NameCompare(const void *, const void *);
static char *do_label(const char *, const struct Name *, void *);
static char *do_path(const char *, const struct Name *, void *);
static char *do_def(const char *, const struct Name *, void *);
static char *do_undef(const char *, const struct Name *, void *);
static char *do_assign(const char *, const struct Name *, void *);
static char *do_exec(const char *, const struct Name *, void *);
static void *assign_get_value(const char **, SymTable *, bool, int);
static void *get_cmd(const char **, SymTable *, bool, int);
static void *get_value(const char **, SymTable *, bool, int);
static void *get_stringarg(const char **, SymTable *, bool, int);
static void free_stringarg(void *);
static void *get_patternarg(const char **, SymTable *, bool, int);
static void *get_spatternarg(const char **, SymTable *, bool, int);
static void *common_get_patternarg(const char **, SymTable *, bool, int, bool);
static void free_patternarg(void *);
static void free_looparg(void *);
static void *get_sysvpattern(const char **, SymTable *, bool, int);
static void *get_loop(const char **, SymTable *, bool, int);
static char *LoopGrab(const char **);
static struct Name dummy;
static struct Name *dummy_arg = &dummy;
static struct modifier {
bool atstart;
void * (*getarg)(const char **, SymTable *, bool, int);
char * (*apply)(const char *, const struct Name *, void *);
bool (*word_apply)(struct Name *, bool, Buffer, void *);
void (*freearg)(void *);
} *choose_mod[256],
match_mod = {false, get_stringarg, NULL, VarMatch, free_stringarg},
nomatch_mod = {false, get_stringarg, NULL, VarNoMatch, free_stringarg},
subst_mod = {false, get_spatternarg, NULL, VarSubstitute, free_patternarg},
resubst_mod = {false, get_patternarg, do_regex, NULL, free_patternarg},
quote_mod = {false, check_quote, VarQuote, NULL , free},
tail_mod = {false, check_empty, NULL, VarTail, NULL},
head_mod = {false, check_empty, NULL, VarHead, NULL},
suffix_mod = {false, check_empty, NULL, VarSuffix, NULL},
root_mod = {false, check_empty, NULL, VarRoot, NULL},
upper_mod = {false, check_empty, do_upper, NULL, NULL},
lower_mod = {false, check_empty, do_lower, NULL, NULL},
shcmd_mod = {false, check_shcmd, do_shcmd, NULL, NULL},
sysv_mod = {false, get_sysvpattern, NULL, VarSYSVMatch, free_patternarg},
uniq_mod = {false, check_empty, NULL, VarUniq, NULL},
sort_mod = {false, check_empty, do_sort, NULL, NULL},
loop_mod = {false, get_loop, finish_loop, VarLoop, free_looparg},
undef_mod = {true, get_value, do_undef, NULL, NULL},
def_mod = {true, get_value, do_def, NULL, NULL},
label_mod = {true, check_empty, do_label, NULL, NULL},
path_mod = {true, check_empty, do_path, NULL, NULL},
assign_mod = {true, assign_get_value, do_assign, NULL, free_patternarg},
exec_mod = {true, get_cmd, do_exec, NULL, free_patternarg}
match_mod = {get_stringarg, NULL, VarMatch, free_stringarg},
nomatch_mod = {get_stringarg, NULL, VarNoMatch, free_stringarg},
subst_mod = {get_spatternarg, NULL, VarSubstitute, free_patternarg},
resubst_mod = {get_patternarg, do_regex, NULL, free_patternarg},
quote_mod = {check_quote, VarQuote, NULL , free},
tail_mod = {check_empty, NULL, VarTail, NULL},
head_mod = {check_empty, NULL, VarHead, NULL},
suffix_mod = {check_empty, NULL, VarSuffix, NULL},
root_mod = {check_empty, NULL, VarRoot, NULL},
upper_mod = {check_empty, do_upper, NULL, NULL},
lower_mod = {check_empty, do_lower, NULL, NULL},
shcmd_mod = {check_shcmd, do_shcmd, NULL, NULL},
sysv_mod = {get_sysvpattern, NULL, VarSYSVMatch, free_patternarg}
;
void
@ -219,27 +185,9 @@ VarModifiers_Init()
choose_mod['H'] = &head_mod;
choose_mod['E'] = &suffix_mod;
choose_mod['R'] = &root_mod;
if (FEATURES(FEATURE_UPPERLOWER)) {
choose_mod['U'] = &upper_mod;
choose_mod['L'] = &lower_mod;
}
if (FEATURES(FEATURE_SUNSHCMD))
choose_mod['s'] = &shcmd_mod;
if (FEATURES(FEATURE_UNIQ))
choose_mod['u'] = &uniq_mod;
if (FEATURES(FEATURE_SORT))
choose_mod['O'] = &sort_mod;
if (FEATURES(FEATURE_ODE)) {
choose_mod['@'] = &loop_mod;
choose_mod['D'] = &def_mod;
choose_mod['U'] = &undef_mod;
choose_mod['L'] = &label_mod;
choose_mod['P'] = &path_mod;
}
if (FEATURES(FEATURE_ASSIGN))
choose_mod[':'] = &assign_mod;
if (FEATURES(FEATURE_EXECMOD))
choose_mod['!'] = &exec_mod;
choose_mod['U'] = &upper_mod;
choose_mod['L'] = &lower_mod;
choose_mod['s'] = &shcmd_mod;
}
/* All modifiers handle addSpace (need to add a space before placing the
@ -345,8 +293,7 @@ VarRoot(struct Name *word, bool addSpace, Buffer buf, void *dummy UNUSED)
*-----------------------------------------------------------------------
*/
static bool
VarMatch(struct Name *word, bool addSpace, Buffer buf,
void *pattern) /* Pattern the word must match */
VarMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern)
{
const char *pat = pattern;
@ -366,8 +313,7 @@ VarMatch(struct Name *word, bool addSpace, Buffer buf,
*-----------------------------------------------------------------------
*/
static bool
VarNoMatch(struct Name *word, bool addSpace, Buffer buf,
void *pattern) /* Pattern the word must not match */
VarNoMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern)
{
const char *pat = pattern;
@ -380,198 +326,6 @@ VarNoMatch(struct Name *word, bool addSpace, Buffer buf,
return addSpace;
}
static bool
VarUniq(struct Name *word, bool addSpace, Buffer buf, void *lastp)
{
struct Name *last = lastp;
/* does not match */
if (last->s == NULL || last->e - last->s != word->e - word->s ||
strncmp(word->s, last->s, word->e - word->s) != 0) {
if (addSpace)
Buf_AddSpace(buf);
Buf_Addi(buf, word->s, word->e);
addSpace = true;
}
last->s = word->s;
last->e = word->e;
return addSpace;
}
static bool
VarLoop(struct Name *word, bool addSpace, Buffer buf, void *vp)
{
struct LoopStuff *v = vp;
if (addSpace)
Buf_AddSpace(buf);
Var_SubstVar(buf, v->expand, v->var, word->s);
return true;
}
static char *
finish_loop(const char *s, const struct Name *n UNUSED , void *p)
{
struct LoopStuff *l = p;
return Var_Subst(s, NULL, l->err);
}
static int
NameCompare(const void *ap, const void *bp)
{
const struct Name *a, *b;
size_t n, m;
int c;
a = ap;
b = bp;
n = a->e - a->s;
m = b->e - b->s;
if (n < m) {
c = strncmp(a->s, b->s, n);
if (c != 0)
return c;
else
return -1;
} else if (m < n) {
c = strncmp(a->s, b->s, m);
if (c != 0)
return c;
else
return 1;
} else
return strncmp(a->s, b->s, n);
}
static char *
do_sort(const char *s, const struct Name *dummy UNUSED, void *arg UNUSED)
{
struct Name *t;
unsigned long n, i, j;
const char *start, *end;
n = 1024; /* start at 1024 words */
t = ereallocarray(NULL, n, sizeof(struct Name));
start = s;
end = start;
for (i = 0;; i++) {
if (i == n) {
n *= 2;
t = ereallocarray(t, n, sizeof(struct Name));
}
start = iterate_words(&end);
if (start == NULL)
break;
t[i].s = start;
t[i].e = end;
}
if (i > 0) {
BUFFER buf;
Buf_Init(&buf, end - s);
qsort(t, i, sizeof(struct Name), NameCompare);
Buf_Addi(&buf, t[0].s, t[0].e);
for (j = 1; j < i; j++) {
Buf_AddSpace(&buf);
Buf_Addi(&buf, t[j].s, t[j].e);
}
free(t);
return Buf_Retrieve(&buf);
} else {
free(t);
return "";
}
}
static char *
do_label(const char *s UNUSED, const struct Name *n, void *arg UNUSED)
{
return Str_dupi(n->s, n->e);
}
static char *
do_path(const char *s UNUSED, const struct Name *n, void *arg UNUSED)
{
GNode *gn;
gn = Targ_FindNodei(n->s, n->e, TARG_NOCREATE);
if (gn == NULL)
return Str_dupi(n->s, n->e);
else
return strdup(gn->path);
}
static char *
do_def(const char *s, const struct Name *n UNUSED, void *arg)
{
VarPattern *v = arg;
if (s == NULL) {
free_patternarg(v);
return NULL;
} else
return v->lbuffer;
}
static char *
do_undef(const char *s, const struct Name *n UNUSED, void *arg)
{
VarPattern *v = arg;
if (s != NULL) {
free_patternarg(v);
return NULL;
} else
return v->lbuffer;
}
static char *
do_assign(const char *s, const struct Name *n, void *arg)
{
VarPattern *v = arg;
char *msg;
char *result;
switch (v->flags) {
case VAR_EQUAL:
Var_Seti(n->s, n->e, v->lbuffer);
break;
case VAR_MAY_EQUAL:
if (s == NULL)
Var_Seti(n->s, n->e, v->lbuffer);
break;
case VAR_ADD_EQUAL:
if (s == NULL)
Var_Seti(n->s, n->e, v->lbuffer);
else
Var_Appendi(n->s, n->e, v->lbuffer);
break;
case VAR_BANG_EQUAL:
result = Cmd_Exec(v->lbuffer, &msg);
if (result != NULL) {
Var_Seti(n->s, n->e, result);
free(result);
} else
Error(msg, v->lbuffer);
break;
}
return NULL;
}
static char *
do_exec(const char *s UNUSED, const struct Name *n UNUSED, void *arg)
{
VarPattern *v = arg;
char *msg;
char *result;
result = Cmd_Exec(v->lbuffer, &msg);
if (result == NULL)
Error(msg, v->lbuffer);
return result;
}
/*-
*-----------------------------------------------------------------------
* VarSYSVMatch --
@ -958,7 +712,7 @@ VarRESubstitute(struct Name *word, bool addSpace, Buffer buf, void *patternp)
*-----------------------------------------------------------------------
* VarModify --
* Modify each of the words of the passed string using the given
* function. Used to implement all modifiers.
* function. Used to implement most modifiers.
*
* Results:
* A string of all the words modified appropriately.
@ -1218,56 +972,6 @@ get_spatternarg(const char **p, SymTable *ctxt, bool err, int endc)
return common_get_patternarg(p, ctxt, err, endc, true);
}
static void
free_looparg(void *arg)
{
struct LoopStuff *l = arg;
Var_DeleteLoopVar(l->var);
free(l->expand);
}
static char *
LoopGrab(const char **s)
{
const char *p, *start;
start = *s;
for (p = start; *p != '@'; p++) {
if (*p == '\\')
p++;
if (*p == 0)
return NULL;
}
*s = p+1;
return escape_dupi(start, p, "@\\");
}
static void *
get_loop(const char **p, SymTable *ctxt UNUSED, bool err, int endc)
{
static struct LoopStuff loop;
const char *s;
const char *var;
s = *p +1;
loop.var = NULL;
loop.expand = NULL;
loop.err = err;
var = LoopGrab(&s);
if (var != NULL) {
loop.expand = LoopGrab(&s);
if (*s == endc || *s == ':') {
*p = s;
loop.var = Var_NewLoopVar(var, NULL);
return &loop;
}
}
free_looparg(&loop);
return NULL;
}
static void *
common_get_patternarg(const char **p, SymTable *ctxt, bool err, int endc,
bool dosubst)
@ -1328,71 +1032,6 @@ common_get_patternarg(const char **p, SymTable *ctxt, bool err, int endc,
return NULL;
}
static void *
assign_get_value(const char **p, SymTable *ctxt, bool err, int endc)
{
const char *s;
int flags;
VarPattern *arg;
s = *p + 1;
if (s[0] == '=')
flags = VAR_EQUAL;
else if (s[0] == '?' && s[1] == '=')
flags = VAR_MAY_EQUAL;
else if (s[0] == '+' && s[1] == '=')
flags = VAR_ADD_EQUAL;
else if (s[0] == '!' && s[1] == '=')
flags = VAR_BANG_EQUAL;
else
return NULL;
arg = get_value(&s, ctxt, err, endc);
if (arg != NULL) {
*p = s;
arg->flags = flags;
}
return arg;
}
static void *
get_value(const char **p, SymTable *ctxt, bool err, int endc)
{
VarPattern *pattern;
const char *s;
pattern = emalloc(sizeof(VarPattern));
s = *p + 1;
pattern->rhs = NULL;
pattern->lbuffer = VarGetPattern(ctxt, err, &s, ':', endc,
&pattern->leftLen, NULL);
if (s[-1] == endc || s[-1] == ':') {
*p = s-1;
return pattern;
}
free_patternarg(pattern);
return NULL;
}
static void *
get_cmd(const char **p, SymTable *ctxt, bool err, int endc UNUSED)
{
VarPattern *pattern;
const char *s;
pattern = emalloc(sizeof(VarPattern));
s = *p + 1;
pattern->rhs = NULL;
pattern->lbuffer = VarGetPattern(ctxt, err, &s, '!', '!',
&pattern->leftLen, NULL);
if (s[-1] == '!') {
*p = s-1;
return pattern;
}
free_patternarg(pattern);
return NULL;
}
static void
free_patternarg(void *p)
{
@ -1435,7 +1074,6 @@ VarModifiers_Apply(char *str, const struct Name *name, SymTable *ctxt,
bool err, bool *freePtr, const char **pscan, int paren)
{
const char *tstr;
bool atstart; /* Some ODE modifiers only make sense at start */
char endc = paren == '(' ? ')' : '}';
const char *start = *pscan;
@ -1462,7 +1100,6 @@ VarModifiers_Apply(char *str, const struct Name *name, SymTable *ctxt,
* the invocation.
*/
atstart = true;
while (*tstr != endc && *tstr != '\0') {
struct modifier *mod;
void *arg;
@ -1479,26 +1116,18 @@ VarModifiers_Apply(char *str, const struct Name *name, SymTable *ctxt,
mod = choose_mod[(unsigned char)*tstr];
arg = NULL;
if (mod != NULL && (!mod->atstart || atstart))
if (mod != NULL)
arg = mod->getarg(&tstr, ctxt, err, endc);
if (FEATURES(FEATURE_SYSVVARSUB) && arg == NULL) {
if (arg == NULL) {
mod = &sysv_mod;
arg = mod->getarg(&tstr, ctxt, err, endc);
}
atstart = false;
if (arg != NULL) {
if (str != NULL || (mod->atstart && name != NULL)) {
if (str != NULL) {
if (mod->word_apply != NULL) {
newStr = VarModify(str,
mod->word_apply, arg);
if (mod->apply != NULL) {
char *newStr2;
newStr2 = mod->apply(newStr,
name, arg);
free(newStr);
newStr = newStr2;
}
assert(mod->apply == NULL);
} else
newStr = mod->apply(str, name, arg);
if (*freePtr)

View File

@ -1,4 +1,4 @@
/* $OpenBSD: varname.c,v 1.6 2012/08/25 08:12:56 espie Exp $ */
/* $OpenBSD: varname.c,v 1.7 2023/09/04 11:35:11 espie Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
*
@ -25,7 +25,6 @@
*/
#include <stdlib.h>
#include "config.h"
#include "defines.h"
#include "var.h"
#include "buf.h"
@ -39,11 +38,6 @@ VarName_Get(const char *start, struct Name *name, SymTable *ctxt, bool err,
size_t len;
p = cont(start);
/* If we don't want recursive variables, we skip over '$' */
if (!FEATURES(FEATURE_RECVARS)) {
while (*p == '$')
p = cont(p+1);
}
if (*p != '$') {
name->s = start;
name->e = p;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: main.c,v 1.262 2021/10/04 21:28:50 schwarze Exp $ */
/* $OpenBSD: main.c,v 1.263 2023/09/04 13:08:11 schwarze Exp $ */
/*
* Copyright (c) 2010-2012, 2014-2021 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
@ -504,7 +504,8 @@ main(int argc, char *argv[])
best_prio = 40;
for (ib = i = 0; i < resnsz; i++) {
sec = resn[i].file;
sec = resn[i].file +
strlen(conf.manpath.paths[resn[i].ipath]);
sec += strcspn(sec, "123456789");
if (sec[0] == '\0')
continue; /* No section at all. */

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: ssh-keygen.1,v 1.229 2023/07/23 20:04:45 naddy Exp $
.\" $OpenBSD: ssh-keygen.1,v 1.230 2023/09/04 10:29:58 job Exp $
.\"
.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -35,7 +35,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd $Mdocdate: July 23 2023 $
.Dd $Mdocdate: September 4 2023 $
.Dt SSH-KEYGEN 1
.Os
.Sh NAME
@ -185,7 +185,7 @@ The type of key to be generated is specified with the
option.
If invoked without any arguments,
.Nm
will generate an RSA key.
will generate an Ed25519 key.
.Pp
.Nm
is also used to generate groups for use in Diffie-Hellman group

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssh-keygen.c,v 1.470 2023/07/17 04:01:10 djm Exp $ */
/* $OpenBSD: ssh-keygen.c,v 1.471 2023/09/04 10:29:58 job Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -61,11 +61,7 @@
#include "ssh-pkcs11.h"
#endif
#ifdef WITH_OPENSSL
# define DEFAULT_KEY_TYPE_NAME "rsa"
#else
# define DEFAULT_KEY_TYPE_NAME "ed25519"
#endif
#define DEFAULT_KEY_TYPE_NAME "ed25519"
/*
* Default number of bits in the RSA, DSA and ECDSA keys. These value can be
@ -252,7 +248,7 @@ ask_filename(struct passwd *pw, const char *prompt)
char *name = NULL;
if (key_type_name == NULL)
name = _PATH_SSH_CLIENT_ID_RSA;
name = _PATH_SSH_CLIENT_ID_ED25519;
else {
switch (sshkey_type_from_name(key_type_name)) {
case KEY_DSA_CERT:

View File

@ -1,4 +1,4 @@
/* $OpenBSD: window-copy.c,v 1.343 2023/09/01 14:29:11 nicm Exp $ */
/* $OpenBSD: window-copy.c,v 1.344 2023/09/04 08:01:43 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@ -295,6 +295,7 @@ struct window_copy_mode_data {
int timeout; /* search has timed out */
#define WINDOW_COPY_SEARCH_TIMEOUT 10000
#define WINDOW_COPY_SEARCH_ALL_TIMEOUT 200
#define WINDOW_COPY_SEARCH_MAX_LINE 2000
int jumptype;
struct utf8_data *jumpchar;
@ -3205,7 +3206,9 @@ window_copy_search_lr_regex(struct grid *gd, u_int *ppx, u_int *psx, u_int py,
len = gd->sx - first;
endline = gd->hsize + gd->sy - 1;
pywrap = py;
while (buf != NULL && pywrap <= endline) {
while (buf != NULL &&
pywrap <= endline &&
len < WINDOW_COPY_SEARCH_MAX_LINE) {
gl = grid_get_line(gd, pywrap);
if (~gl->flags & GRID_LINE_WRAPPED)
break;
@ -3262,7 +3265,9 @@ window_copy_search_rl_regex(struct grid *gd, u_int *ppx, u_int *psx, u_int py,
len = gd->sx - first;
endline = gd->hsize + gd->sy - 1;
pywrap = py;
while (buf != NULL && (pywrap <= endline)) {
while (buf != NULL &&
pywrap <= endline &&
len < WINDOW_COPY_SEARCH_MAX_LINE) {
gl = grid_get_line(gd, pywrap);
if (~gl->flags & GRID_LINE_WRAPPED)
break;
@ -3601,10 +3606,11 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd,
struct grid *sgd, u_int fx, u_int fy, u_int endline, int cis, int wrap,
int direction, int regex)
{
u_int i, px, sx, ssize = 1;
int found = 0, cflags = REG_EXTENDED;
char *sbuf;
regex_t reg;
u_int i, px, sx, ssize = 1;
int found = 0, cflags = REG_EXTENDED;
char *sbuf;
regex_t reg;
struct grid_line *gl;
if (regex) {
sbuf = xmalloc(ssize);
@ -3621,6 +3627,9 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd,
if (direction) {
for (i = fy; i <= endline; i++) {
gl = grid_get_line(gd, i);
if (i != endline && gl->flags & GRID_LINE_WRAPPED)
continue;
if (regex) {
found = window_copy_search_lr_regex(gd,
&px, &sx, i, fx, gd->sx, &reg);
@ -3634,6 +3643,9 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd,
}
} else {
for (i = fy + 1; endline < i; i--) {
gl = grid_get_line(gd, i - 1);
if (i != endline && gl->flags & GRID_LINE_WRAPPED)
continue;
if (regex) {
found = window_copy_search_rl_regex(gd,
&px, &sx, i - 1, 0, fx + 1, &reg);

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: dhcpd.8,v 1.32 2023/09/03 20:19:13 stsp Exp $
.\" $OpenBSD: dhcpd.8,v 1.33 2023/09/04 16:11:00 jmc Exp $
.\"
.\" Copyright (c) 1995, 1996 The Internet Software Consortium.
.\" All rights reserved.
@ -36,7 +36,7 @@
.\" see ``http://www.isc.org/''. To learn more about Vixie
.\" Enterprises, see ``http://www.vix.com''.
.\"
.Dd $Mdocdate: September 3 2023 $
.Dd $Mdocdate: September 4 2023 $
.Dt DHCPD 8
.Os
.Sh NAME
@ -92,6 +92,12 @@ to renew them in order to continue to use the addresses.
Once a lease has expired, the client to which that lease was assigned is no
longer permitted to use the leased IP address.
.Pp
Whenever changes are made to the
.Pa dhcpd.conf
file,
.Nm
must be restarted.
.Pp
In order to keep track of leases across system reboots and server restarts,
.Nm
keeps a list of leases it has assigned in the
@ -112,60 +118,34 @@ reads the
.Pa dhcpd.leases
file to refresh its memory about what leases have been assigned.
.Pp
BOOTP support is also provided by this server.
Unlike DHCP, the BOOTP protocol does not provide a protocol for recovering
dynamically-assigned addresses once they are no longer needed.
It is still possible to dynamically assign addresses to BOOTP clients, but
some administrative process for reclaiming addresses is required.
By default, leases are granted to BOOTP clients in perpetuity, although
the network administrator may set an earlier cutoff date or a shorter
lease length for BOOTP leases if that makes sense.
.Pp
BOOTP clients may also be served in the old standard way, which is
simply to provide a declaration in the
.Pa dhcpd.conf
file for each BOOTP client, permanently assigning an address to each client.
.Pp
Whenever changes are made to the
.Pa dhcpd.conf
file,
When
.Nm
must be restarted.
Because the DHCP server database is not as lightweight as a BOOTP database,
starts up, it
identifies all network interfaces in all routing domains,
eliminating non-broadcast interfaces if possible,
and listens for DHCP broadcasts on each interface.
The names of the network interfaces on which
.Nm
does not automatically restart itself when it sees a change to the
.Pa dhcpd.conf
file.
should listen for broadcasts may also be specified on the command line
on systems where
.Nm
is unable to identify non-broadcast interfaces.
.Pp
.Nm
normally runs in routing domain 0.
In order to run in another
.Xr rdomain 4 ,
.Nm
needs to be started with a list of interfaces
which share the same routing domain,
which allows
.Nm
to set its own routing domain accordingly.
.Pp
DHCP traffic always bypasses IPsec.
Otherwise there could be situations when a server has an IPsec SA for the
client and sends replies over that,
which a newly booted client would not be able to grasp.
.Sh COMMAND LINE
The names of the network interfaces on which
.Nm
should listen for broadcasts may be specified on the command line.
Listing interfaces on the command line is usually optional but is required
for running
.Nm
in an
.Xr rdomain 4
other than 0, or on systems where
.Nm
is unable to identify non-broadcast interfaces.
All specified interfaces must share the same routing domain and
.Nm
will set its own routing domain accordingly.
.Pp
If no interface names are specified on the command line,
.Nm
will run in routing domain 0, and if the
.Fl u
option is not given
.Nm
will identify all network interfaces in all routing domains,
eliminating non-broadcast interfaces if possible,
and listen for DHCP broadcasts on each interface.
.Pp
The options are as follows:
.Bl -tag -width Ds
@ -286,6 +266,21 @@ See also
.Sx SYNCHRONISATION
below.
.El
.Sh BOOTP
.Nm
also provides BOOTP support.
Unlike DHCP, the BOOTP protocol does not provide a protocol for recovering
dynamically-assigned addresses once they are no longer needed.
It is still possible to dynamically assign addresses to BOOTP clients, but
some administrative process for reclaiming addresses is required.
By default, leases are granted to BOOTP clients in perpetuity, although
the network administrator may set an earlier cutoff date or a shorter
lease length for BOOTP leases if that makes sense.
.Pp
BOOTP clients may also be served in the old standard way, which is
simply to provide a declaration in the
.Pa dhcpd.conf
file for each BOOTP client, permanently assigning an address to each client.
.Sh CONFIGURATION
The syntax of the
.Xr dhcpd.conf 5

View File

@ -1,4 +1,4 @@
/* $OpenBSD: parse.y,v 1.14 2023/08/18 06:37:20 yasuoka Exp $ */
/* $OpenBSD: parse.y,v 1.15 2023/09/04 12:28:18 yasuoka Exp $ */
/*
* Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org>
@ -99,6 +99,7 @@ typedef struct {
%type <v.prefix> prefix
%type <v.yesno> yesno
%type <v.string> strnum
%type <v.string> key
%%
grammar : /* empty */
@ -276,7 +277,7 @@ module : MODULE LOAD STRING STRING {
free($4);
TAILQ_INSERT_TAIL(&conf->module, module, next);
}
| MODULE SET STRING STRING str_l {
| MODULE SET STRING key str_l {
struct radiusd_module *module;
module = find_module($3);
@ -301,6 +302,11 @@ setstrerr:
free_str_l(&$5);
}
;
key : STRING
| SECRET { $$ = strdup("secret"); }
;
authenticate : AUTHENTICATE {
radiusd_authentication_init(&authen);
} str_l optnl '{' authopts '}' {

View File

@ -1,4 +1,4 @@
/* $OpenBSD: radiusd.c,v 1.28 2022/12/28 21:30:18 jmc Exp $ */
/* $OpenBSD: radiusd.c,v 1.29 2023/09/04 10:50:52 yasuoka Exp $ */
/*
* Copyright (c) 2013 Internet Initiative Japan Inc.
@ -27,7 +27,6 @@
#include <err.h>
#include <errno.h>
#include <event.h>
#include <fcntl.h>
#include <fnmatch.h>
#include <imsg.h>
#include <md5.h>
@ -919,7 +918,7 @@ radiusd_module_load(struct radiusd *radiusd, const char *path, const char *name)
{
struct radiusd_module *module = NULL;
pid_t pid;
int ival, pairsock[] = { -1, -1 };
int pairsock[] = { -1, -1 };
const char *av[3];
ssize_t n;
struct imsg imsg;
@ -929,7 +928,8 @@ radiusd_module_load(struct radiusd *radiusd, const char *path, const char *name)
fatal("Out of memory");
module->radiusd = radiusd;
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pairsock) == -1) {
if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, PF_UNSPEC,
pairsock) == -1) {
log_warn("Could not load module `%s'(%s): pipe()", name, path);
goto on_error;
}
@ -956,16 +956,6 @@ radiusd_module_load(struct radiusd *radiusd, const char *path, const char *name)
close(pairsock[1]);
module->fd = pairsock[0];
if ((ival = fcntl(module->fd, F_GETFL)) == -1) {
log_warn("Could not load module `%s': fcntl(F_GETFL)",
name);
goto on_error;
}
if (fcntl(module->fd, F_SETFL, ival | O_NONBLOCK) == -1) {
log_warn("Could not load module `%s': fcntl(F_SETFL,O_NONBLOCK)",
name);
goto on_error;
}
strlcpy(module->name, name, sizeof(module->name));
module->pid = pid;
imsg_init(&module->ibuf, module->fd);

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: radiusd.conf.5,v 1.15 2022/12/13 00:59:53 yasuoka Exp $
.\" $OpenBSD: radiusd.conf.5,v 1.16 2023/09/04 12:28:18 yasuoka Exp $
.\"
.\" Copyright (c) 2014 Esdenera Networks GmbH
.\" Copyright (c) 2014 Internet Initiative Japan Inc.
@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
.Dd $Mdocdate: December 13 2022 $
.Dd $Mdocdate: September 4 2023 $
.Dt RADIUSD.CONF 5
.Os
.Sh NAME
@ -192,18 +192,18 @@ client 192.168.0.0/24 {
msgauth-required yes
}
module load "bsdauth" "/usr/libexec/radiusd/radiusd_bsdauth"
module set "bsdauth" "restrict-group" "operator"
module load bsdauth "/usr/libexec/radiusd/radiusd_bsdauth"
module set bsdauth restrict-group "operator"
module load "radius" "/usr/libexec/radiusd/radiusd_radius"
module set "radius" "secret" "testing123"
module set "radius" "server" "127.0.0.1"
module load radius "/usr/libexec/radiusd/radiusd_radius"
module set radius secret "testing123"
module set radius server "127.0.0.1"
authenticate *@example.com {
authenticate-by "radius"
authenticate-by radius
}
authenticate * {
authenticate-by "bsdauth"
authenticate-by bsdauth
}
.Ed
.Sh SEE ALSO

View File

@ -1,4 +1,4 @@
/* $OpenBSD: radiusd_radius.c,v 1.18 2022/12/28 21:30:18 jmc Exp $ */
/* $OpenBSD: radiusd_radius.c,v 1.19 2023/09/04 10:49:20 yasuoka Exp $ */
/*
* Copyright (c) 2013 Internet Initiative Japan Inc.
@ -138,6 +138,8 @@ main(int argc, char *argv[])
module_start(module_radius.base);
event_loop(0);
module_destroy(module_radius.base);
exit(EXIT_SUCCESS);
}
@ -219,8 +221,7 @@ module_radius_config_set(void *ctx, const char *paramname, int paramvalc,
} else if (strcmp(paramname, "_debug") == 0)
log_init(1);
else if (strncmp(paramname, "_", 1) == 0)
/* ignore all internal messages */
module_send_message(module->base, IMSG_OK, NULL);
/* nothing */; /* ignore all internal messages */
else {
module_send_message(module->base, IMSG_NG,
"Unknown config parameter name `%s'", paramname);