sync with OpenBSD -current
This commit is contained in:
parent
6040ea8924
commit
2d0895064a
17 changed files with 392 additions and 53 deletions
|
@ -2631,6 +2631,7 @@
|
||||||
./usr/sbin/cryptoadm
|
./usr/sbin/cryptoadm
|
||||||
./usr/sbin/cryptoinit
|
./usr/sbin/cryptoinit
|
||||||
./usr/sbin/dev_mkdb
|
./usr/sbin/dev_mkdb
|
||||||
|
./usr/sbin/dhcp6leasectl
|
||||||
./usr/sbin/dhcpd
|
./usr/sbin/dhcpd
|
||||||
./usr/sbin/dhcpleasectl
|
./usr/sbin/dhcpleasectl
|
||||||
./usr/sbin/dhcrelay
|
./usr/sbin/dhcrelay
|
||||||
|
|
|
@ -2437,6 +2437,7 @@
|
||||||
./usr/share/man/man8/daily.8
|
./usr/share/man/man8/daily.8
|
||||||
./usr/share/man/man8/dev_mkdb.8
|
./usr/share/man/man8/dev_mkdb.8
|
||||||
./usr/share/man/man8/dhclient.8
|
./usr/share/man/man8/dhclient.8
|
||||||
|
./usr/share/man/man8/dhcp6leasectl.8
|
||||||
./usr/share/man/man8/dhcp6leased.8
|
./usr/share/man/man8/dhcp6leased.8
|
||||||
./usr/share/man/man8/dhcpd.8
|
./usr/share/man/man8/dhcpd.8
|
||||||
./usr/share/man/man8/dhcpleasectl.8
|
./usr/share/man/man8/dhcpleasectl.8
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: ssl_tlsext.c,v 1.149 2024/04/16 17:46:30 tb Exp $ */
|
/* $OpenBSD: ssl_tlsext.c,v 1.150 2024/06/06 16:13:12 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
|
* Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
|
||||||
* Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
|
* Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
|
||||||
|
@ -1472,7 +1472,8 @@ tlsext_keyshare_server_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
|
||||||
size_t i, j, client_groups_index;
|
size_t i, j, client_groups_index;
|
||||||
int preferred_group_found = 0;
|
int preferred_group_found = 0;
|
||||||
int decode_error;
|
int decode_error;
|
||||||
uint16_t group, client_preferred_group;
|
uint16_t client_preferred_group = 0;
|
||||||
|
uint16_t group;
|
||||||
CBS client_shares, key_exchange;
|
CBS client_shares, key_exchange;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: dhcp6leased.h,v 1.7 2024/06/05 16:15:47 florian Exp $ */
|
/* $OpenBSD: dhcp6leased.h,v 1.8 2024/06/06 15:15:44 florian Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, 2021 Florian Obser <florian@openbsd.org>
|
* Copyright (c) 2017, 2021 Florian Obser <florian@openbsd.org>
|
||||||
|
@ -175,6 +175,13 @@ enum imsg_type {
|
||||||
IMSG_WRITE_LEASE,
|
IMSG_WRITE_LEASE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct prefix {
|
||||||
|
struct in6_addr prefix;
|
||||||
|
int prefix_len;
|
||||||
|
uint32_t vltime;
|
||||||
|
uint32_t pltime;
|
||||||
|
};
|
||||||
|
|
||||||
struct ctl_engine_info {
|
struct ctl_engine_info {
|
||||||
uint32_t if_index;
|
uint32_t if_index;
|
||||||
int running;
|
int running;
|
||||||
|
@ -184,6 +191,7 @@ struct ctl_engine_info {
|
||||||
uint32_t lease_time;
|
uint32_t lease_time;
|
||||||
uint32_t t1;
|
uint32_t t1;
|
||||||
uint32_t t2;
|
uint32_t t2;
|
||||||
|
struct prefix pds[MAX_IA];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iface_pd_conf {
|
struct iface_pd_conf {
|
||||||
|
@ -213,13 +221,6 @@ struct dhcp6leased_conf {
|
||||||
int rapid_commit;
|
int rapid_commit;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct prefix {
|
|
||||||
struct in6_addr prefix;
|
|
||||||
int prefix_len;
|
|
||||||
uint32_t vltime;
|
|
||||||
uint32_t pltime;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct imsg_ifinfo {
|
struct imsg_ifinfo {
|
||||||
uint32_t if_index;
|
uint32_t if_index;
|
||||||
int rdomain;
|
int rdomain;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: engine.c,v 1.12 2024/06/05 16:15:47 florian Exp $ */
|
/* $OpenBSD: engine.c,v 1.13 2024/06/06 15:15:44 florian Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, 2021, 2024 Florian Obser <florian@openbsd.org>
|
* Copyright (c) 2017, 2021, 2024 Florian Obser <florian@openbsd.org>
|
||||||
|
@ -572,6 +572,7 @@ send_interface_info(struct dhcp6leased_iface *iface, pid_t pid)
|
||||||
cei.lease_time = iface->lease_time;
|
cei.lease_time = iface->lease_time;
|
||||||
cei.t1 = iface->t1;
|
cei.t1 = iface->t1;
|
||||||
cei.t2 = iface->t2;
|
cei.t2 = iface->t2;
|
||||||
|
memcpy(&cei.pds, &iface->pds, sizeof(cei.pds));
|
||||||
engine_imsg_compose_frontend(IMSG_CTL_SHOW_INTERFACE_INFO, pid, &cei,
|
engine_imsg_compose_frontend(IMSG_CTL_SHOW_INTERFACE_INFO, pid, &cei,
|
||||||
sizeof(cei));
|
sizeof(cei));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: parse.y,v 1.8 2024/06/05 16:15:47 florian Exp $ */
|
/* $OpenBSD: parse.y,v 1.9 2024/06/06 06:26:14 florian Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2024 Florian Obser <florian@openbsd.org>
|
* Copyright (c) 2018, 2024 Florian Obser <florian@openbsd.org>
|
||||||
|
@ -168,17 +168,17 @@ ia_pd : REQUEST PREFIX DELEGATION ON STRING FOR {
|
||||||
SIMPLEQ_INIT(&iface_ia_conf->iface_pd_list);
|
SIMPLEQ_INIT(&iface_ia_conf->iface_pd_list);
|
||||||
SIMPLEQ_INSERT_TAIL(&iface_conf->iface_ia_list,
|
SIMPLEQ_INSERT_TAIL(&iface_conf->iface_ia_list,
|
||||||
iface_ia_conf, entry);
|
iface_ia_conf, entry);
|
||||||
} '{' iface_block '}' {
|
} iface_block {
|
||||||
iface_conf = NULL;
|
iface_conf = NULL;
|
||||||
iface_ia_conf = NULL;
|
iface_ia_conf = NULL;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
iface_block : optnl ifaceopts_l
|
iface_block : '{' optnl ifaceopts_l '}'
|
||||||
| optnl
|
| ifaceoptsl
|
||||||
;
|
;
|
||||||
|
|
||||||
ifaceopts_l : ifaceopts_l ifaceoptsl nl
|
ifaceopts_l : ifaceopts_l ifaceoptsl optnl
|
||||||
| ifaceoptsl optnl
|
| ifaceoptsl optnl
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: copy.S,v 1.19 2023/07/28 06:18:35 guenther Exp $ */
|
/* $OpenBSD: copy.S,v 1.20 2024/06/06 00:36:46 bluhm Exp $ */
|
||||||
/* $NetBSD: copy.S,v 1.1 2003/04/26 18:39:26 fvdl Exp $ */
|
/* $NetBSD: copy.S,v 1.1 2003/04/26 18:39:26 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -189,6 +189,7 @@ ENTRY(_copyin)
|
||||||
|
|
||||||
NENTRY(copy_fault)
|
NENTRY(copy_fault)
|
||||||
DECLARE_ONFAULT(copy_fault)
|
DECLARE_ONFAULT(copy_fault)
|
||||||
|
cld
|
||||||
SMAP_CLAC
|
SMAP_CLAC
|
||||||
movq CPUVAR(CURPCB),%rdx
|
movq CPUVAR(CURPCB),%rdx
|
||||||
popq PCB_ONFAULT(%rdx)
|
popq PCB_ONFAULT(%rdx)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: db_disasm.c,v 1.24 2023/04/22 18:26:17 guenther Exp $ */
|
/* $OpenBSD: db_disasm.c,v 1.25 2024/06/06 12:36:41 bluhm Exp $ */
|
||||||
/* $NetBSD: db_disasm.c,v 1.11 1996/05/03 19:41:58 christos Exp $ */
|
/* $NetBSD: db_disasm.c,v 1.11 1996/05/03 19:41:58 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -793,7 +793,7 @@ struct inst db_inst_table[256] = {
|
||||||
/*e6*/ { "out", 0, BYTE, op2(A, Ib), 0 },
|
/*e6*/ { "out", 0, BYTE, op2(A, Ib), 0 },
|
||||||
/*e7*/ { "out", 0, LONG, op2(A, Ib) , 0 },
|
/*e7*/ { "out", 0, LONG, op2(A, Ib) , 0 },
|
||||||
|
|
||||||
/*e8*/ { "call", 0, QUAD, op1(Dl), 0 },
|
/*e8*/ { "call", 0, NONE, op1(Dl), 0 },
|
||||||
/*e9*/ { "jmp", 0, NONE, op1(Dl), 0 },
|
/*e9*/ { "jmp", 0, NONE, op1(Dl), 0 },
|
||||||
/*ea*/ { "", 0, NONE, op1(OS), 0 },
|
/*ea*/ { "", 0, NONE, op1(OS), 0 },
|
||||||
/*eb*/ { "jmp", 0, NONE, op1(Db), 0 },
|
/*eb*/ { "jmp", 0, NONE, op1(Db), 0 },
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: locore.s,v 1.204 2023/12/12 07:37:20 deraadt Exp $ */
|
/* $OpenBSD: locore.s,v 1.205 2024/06/06 00:36:46 bluhm Exp $ */
|
||||||
/* $NetBSD: locore.s,v 1.145 1996/05/03 19:41:19 christos Exp $ */
|
/* $NetBSD: locore.s,v 1.145 1996/05/03 19:41:19 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -555,6 +555,7 @@ ENTRY(_copyin)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
ENTRY(copy_fault)
|
ENTRY(copy_fault)
|
||||||
|
cld
|
||||||
SMAP_CLAC
|
SMAP_CLAC
|
||||||
GET_CURPCB(%edx)
|
GET_CURPCB(%edx)
|
||||||
popl PCB_ONFAULT(%edx)
|
popl PCB_ONFAULT(%edx)
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# $OpenBSD: Makefile,v 1.215 2022/06/28 18:47:54 claudio Exp $
|
# $OpenBSD: Makefile,v 1.216 2024/06/06 15:21:01 florian Exp $
|
||||||
|
|
||||||
.include <bsd.own.mk>
|
.include <bsd.own.mk>
|
||||||
|
|
||||||
SUBDIR= ac accton acme-client acpidump adduser amd apm apmd arp authpf \
|
SUBDIR= ac accton acme-client acpidump adduser amd apm apmd arp authpf \
|
||||||
bgpctl bgpd bgplgd btrace chroot config cron crunchgen dev_mkdb \
|
bgpctl bgpd bgplgd btrace chroot config cron crunchgen dev_mkdb \
|
||||||
dhcpd dhcpleasectl dhcrelay dhcrelay6 dvmrpctl dvmrpd edquota eeprom \
|
dhcp6leasectl dhcpd dhcpleasectl dhcrelay dhcrelay6 dvmrpctl dvmrpd \
|
||||||
eigrpd eigrpctl fdformat ftp-proxy fw_update gpioctl hostapd hostctl \
|
edquota eeprom eigrpd eigrpctl fdformat ftp-proxy fw_update gpioctl \
|
||||||
hotplugd httpd identd ifstated ikectl inetd installboot iostat \
|
hostapd hostctl hotplugd httpd identd ifstated ikectl inetd \
|
||||||
iscsictl iscsid kgmon kvm_mkdb ldapd ldapctl ldomctl ldomd \
|
installboot iostat iscsictl iscsid kgmon kvm_mkdb ldapd ldapctl \
|
||||||
ldpd ldpctl lpr makefs mailwrapper map-mbone memconfig mksuncd \
|
ldomctl ldomd ldpd ldpctl lpr makefs mailwrapper map-mbone memconfig \
|
||||||
mkuboot mopd mrinfo mrouted mtrace mtree ndp netgroup_mkdb \
|
mksuncd mkuboot mopd mrinfo mrouted mtrace mtree ndp netgroup_mkdb \
|
||||||
npppctl npppd nsd ntpd ocspcheck ospfctl ospfd ospf6d ospf6ctl \
|
npppctl npppd nsd ntpd ocspcheck ospfctl ospfd ospf6d ospf6ctl \
|
||||||
pcidump pkg_add portmap pppd procmap pstat pwd_mkdb \
|
pcidump pkg_add portmap pppd procmap pstat pwd_mkdb \
|
||||||
quot quotaon ractl rad radiusctl radiusd rarpd rbootd \
|
quot quotaon ractl rad radiusctl radiusd rarpd rbootd \
|
||||||
|
|
17
usr.sbin/dhcp6leasectl/Makefile
Normal file
17
usr.sbin/dhcp6leasectl/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# $OpenBSD: Makefile,v 1.1 2024/06/06 15:16:57 florian Exp $
|
||||||
|
|
||||||
|
PROG= dhcp6leasectl
|
||||||
|
SRCS= dhcp6leasectl.c
|
||||||
|
|
||||||
|
MAN= dhcp6leasectl.8
|
||||||
|
|
||||||
|
CFLAGS+= -Wall
|
||||||
|
CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
|
||||||
|
CFLAGS+= -Wmissing-declarations
|
||||||
|
CFLAGS+= -Wshadow -Wpointer-arith -Wcast-qual
|
||||||
|
CFLAGS+= -Wsign-compare
|
||||||
|
CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../../sbin/dhcp6leased
|
||||||
|
LDADD= -lutil
|
||||||
|
DPADD= ${LIBUTIL}
|
||||||
|
|
||||||
|
.include <bsd.prog.mk>
|
73
usr.sbin/dhcp6leasectl/dhcp6leasectl.8
Normal file
73
usr.sbin/dhcp6leasectl/dhcp6leasectl.8
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
.\" $OpenBSD: dhcp6leasectl.8,v 1.1 2024/06/06 15:16:57 florian Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 2021 Florian Obser <florian@openbsd.org>
|
||||||
|
.\" Copyright (c) 2016 Kenneth R Westerback <kwesterback@gmail.com>
|
||||||
|
.\" Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
|
||||||
|
.\"
|
||||||
|
.\" 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.
|
||||||
|
.\"
|
||||||
|
.Dd $Mdocdate: June 6 2024 $
|
||||||
|
.Dt DHCP6LEASECTL 8
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm dhcp6leasectl
|
||||||
|
.Nd control the dhcp6leased client
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl l
|
||||||
|
.Op Fl s Ar socket
|
||||||
|
.Op Fl w Ar maxwait
|
||||||
|
.Ar interface
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
program instructs the
|
||||||
|
.Xr dhcp6leased 8
|
||||||
|
daemon to request a new lease.
|
||||||
|
.Pp
|
||||||
|
The following options are available:
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl l
|
||||||
|
List the configured lease on
|
||||||
|
.Ar interface
|
||||||
|
instead of requesting a new lease.
|
||||||
|
.It Fl s Ar socket
|
||||||
|
Use
|
||||||
|
.Ar socket
|
||||||
|
instead of the default
|
||||||
|
.Pa /dev/dhcp6leased.sock
|
||||||
|
to communicate with
|
||||||
|
.Xr dhcp6leased 8 .
|
||||||
|
.It Fl w Ar maxwait
|
||||||
|
Specify the maximum number of seconds to wait for
|
||||||
|
.Ar interface
|
||||||
|
to be configured.
|
||||||
|
The default is to wait 10 seconds unless
|
||||||
|
.Fl l
|
||||||
|
is specified.
|
||||||
|
.El
|
||||||
|
.Sh FILES
|
||||||
|
.Bl -tag -width "/dev/dhcp6leased.sockXX" -compact
|
||||||
|
.It Pa /dev/dhcp6leased.sock
|
||||||
|
.Ux Ns -domain
|
||||||
|
socket used for communication with
|
||||||
|
.Xr dhcp6leased 8 .
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr dhcp6leased.conf 5 ,
|
||||||
|
.Xr dhcp6leased 8
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
program first appeared in
|
||||||
|
.Ox 7.6 .
|
240
usr.sbin/dhcp6leasectl/dhcp6leasectl.c
Normal file
240
usr.sbin/dhcp6leasectl/dhcp6leasectl.c
Normal file
|
@ -0,0 +1,240 @@
|
||||||
|
/* $OpenBSD: dhcp6leasectl.c,v 1.1 2024/06/06 15:16:57 florian Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, 2024 Florian Obser <florian@openbsd.org>
|
||||||
|
* Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org>
|
||||||
|
* Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
|
||||||
|
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
|
||||||
|
*
|
||||||
|
* 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 <sys/types.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/queue.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <net/if.h>
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/if_ether.h>
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <event.h>
|
||||||
|
#include <imsg.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "dhcp6leased.h"
|
||||||
|
|
||||||
|
__dead void usage(void);
|
||||||
|
void show_interface_msg(struct ctl_engine_info *);
|
||||||
|
|
||||||
|
struct imsgbuf *ibuf;
|
||||||
|
|
||||||
|
__dead void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
extern char *__progname;
|
||||||
|
|
||||||
|
fprintf(stderr, "usage: %s [-l] [-s socket] [-w maxwait] interface\n",
|
||||||
|
__progname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct sockaddr_un sun;
|
||||||
|
struct imsg imsg;
|
||||||
|
struct ctl_engine_info *cei;
|
||||||
|
int ctl_sock;
|
||||||
|
int n, lFlag = 0, maxwait_set = 0, didot = 0;
|
||||||
|
int ch, if_index = 0, maxwait = 10, bound = 0;
|
||||||
|
char *sockname;
|
||||||
|
const char *errstr;
|
||||||
|
|
||||||
|
sockname = _PATH_CTRL_SOCKET;
|
||||||
|
while ((ch = getopt(argc, argv, "ls:w:")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'l':
|
||||||
|
lFlag = 1;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
sockname = optarg;
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
maxwait_set = 1;
|
||||||
|
maxwait = strtonum(optarg, 1, INT_MAX, &errstr);
|
||||||
|
if (errstr)
|
||||||
|
errx(1, "maxwait value is %s: %s",
|
||||||
|
errstr, optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 1)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if ((if_index = if_nametoindex(argv[0])) == 0)
|
||||||
|
errx(1, "unknown interface");
|
||||||
|
|
||||||
|
if (lFlag && !maxwait_set)
|
||||||
|
maxwait = 0;
|
||||||
|
|
||||||
|
/* Connect to control socket. */
|
||||||
|
if ((ctl_sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
|
||||||
|
err(1, "socket");
|
||||||
|
|
||||||
|
memset(&sun, 0, sizeof(sun));
|
||||||
|
sun.sun_family = AF_UNIX;
|
||||||
|
strlcpy(sun.sun_path, sockname, sizeof(sun.sun_path));
|
||||||
|
|
||||||
|
if (connect(ctl_sock, (struct sockaddr *)&sun, sizeof(sun)) == -1)
|
||||||
|
err(1, "connect: %s", sockname);
|
||||||
|
|
||||||
|
if (pledge("stdio", NULL) == -1)
|
||||||
|
err(1, "pledge");
|
||||||
|
|
||||||
|
if ((ibuf = malloc(sizeof(struct imsgbuf))) == NULL)
|
||||||
|
err(1, NULL);
|
||||||
|
imsg_init(ibuf, ctl_sock);
|
||||||
|
|
||||||
|
if (!lFlag) {
|
||||||
|
imsg_compose(ibuf, IMSG_CTL_SEND_REQUEST, 0, 0, -1,
|
||||||
|
&if_index, sizeof(if_index));
|
||||||
|
while (ibuf->w.queued)
|
||||||
|
if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN)
|
||||||
|
err(1, "write error");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
imsg_compose(ibuf, IMSG_CTL_SHOW_INTERFACE_INFO, 0, 0, -1,
|
||||||
|
&if_index, sizeof(if_index));
|
||||||
|
|
||||||
|
while (ibuf->w.queued)
|
||||||
|
if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN)
|
||||||
|
err(1, "write error");
|
||||||
|
|
||||||
|
|
||||||
|
if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN)
|
||||||
|
errx(1, "imsg_read error");
|
||||||
|
if (n == 0)
|
||||||
|
errx(1, "pipe closed");
|
||||||
|
|
||||||
|
if ((n = imsg_get(ibuf, &imsg)) == -1)
|
||||||
|
errx(1, "imsg_get error");
|
||||||
|
if (n == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (imsg.hdr.type == IMSG_CTL_END) {
|
||||||
|
if (lFlag)
|
||||||
|
errx(1, "non-autoconf interface %s", argv[0]);
|
||||||
|
else if (--maxwait < 0)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
cei = imsg.data;
|
||||||
|
if (strcmp(cei->state, "Bound") == 0)
|
||||||
|
bound = 1;
|
||||||
|
|
||||||
|
if (bound || --maxwait < 0) {
|
||||||
|
if (didot)
|
||||||
|
putchar('\n');
|
||||||
|
show_interface_msg(cei);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
didot = 1;
|
||||||
|
putchar('.');
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
imsg_free(&imsg);
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
close(ctl_sock);
|
||||||
|
free(ibuf);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
show_interface_msg(struct ctl_engine_info *cei)
|
||||||
|
{
|
||||||
|
struct timespec now, diff;
|
||||||
|
time_t d, h, m, s;
|
||||||
|
int i, has_pd = 0;
|
||||||
|
char buf[IF_NAMESIZE], *bufp;
|
||||||
|
char ntopbuf[INET6_ADDRSTRLEN];
|
||||||
|
|
||||||
|
bufp = if_indextoname(cei->if_index, buf);
|
||||||
|
printf("%s [%s]\n", bufp != NULL ? bufp : "unknown", cei->state);
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_IA; i++) {
|
||||||
|
if (cei->pds[i].prefix_len == 0)
|
||||||
|
continue;
|
||||||
|
has_pd = 1;
|
||||||
|
printf ("\tIA_PD %d: %s/%d\n", i, inet_ntop(AF_INET6,
|
||||||
|
&cei->pds[i], ntopbuf, INET6_ADDRSTRLEN),
|
||||||
|
cei->pds[i].prefix_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_pd) {
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
timespecsub(&now, &cei->request_time, &diff);
|
||||||
|
s = cei->lease_time - diff.tv_sec;
|
||||||
|
if (s < 0)
|
||||||
|
s = 0;
|
||||||
|
|
||||||
|
if ( s > 86400 ) {
|
||||||
|
d = s / 86400;
|
||||||
|
|
||||||
|
/* round up */
|
||||||
|
if (s - d * 86400 > 43200)
|
||||||
|
d++;
|
||||||
|
printf("\tlease %lld day%s\n", d, d > 1 ? "s" : "");
|
||||||
|
} else if (s > 3600) {
|
||||||
|
h = s / 3600;
|
||||||
|
|
||||||
|
/* round up */
|
||||||
|
if (s - h * 3600 > 1800)
|
||||||
|
h++;
|
||||||
|
printf("\tlease %lld hour%s\n", h, h > 1 ? "s" : "");
|
||||||
|
} else if (s > 60) {
|
||||||
|
m = s / 60;
|
||||||
|
|
||||||
|
/* round up */
|
||||||
|
if (s - m * 60 > 30)
|
||||||
|
m++;
|
||||||
|
printf("\tlease %lld minute%s\n", m, m > 1 ? "s" : "");
|
||||||
|
} else
|
||||||
|
printf("\tlease %lld second%s\n", s, s > 1 ? "s" : "");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: dhcpleasectl.c,v 1.7 2021/09/16 06:23:01 jmc Exp $ */
|
/* $OpenBSD: dhcpleasectl.c,v 1.8 2024/06/06 15:07:46 florian Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Florian Obser <florian@openbsd.org>
|
* Copyright (c) 2021 Florian Obser <florian@openbsd.org>
|
||||||
|
@ -287,23 +287,23 @@ show_interface_msg(struct ctl_engine_info *cei)
|
||||||
/* round up */
|
/* round up */
|
||||||
if (s - d * 86400 > 43200)
|
if (s - d * 86400 > 43200)
|
||||||
d++;
|
d++;
|
||||||
printf("\tlease %lld days\n", d);
|
printf("\tlease %lld day%s\n", d, d > 1 ? "s" : "");
|
||||||
} else if (s > 3600) {
|
} else if (s > 3600) {
|
||||||
h = s / 3600;
|
h = s / 3600;
|
||||||
|
|
||||||
/* round up */
|
/* round up */
|
||||||
if (s - h * 3600 > 1800)
|
if (s - h * 3600 > 1800)
|
||||||
h++;
|
h++;
|
||||||
printf("\tlease %lld hours\n", h);
|
printf("\tlease %lld hour%s\n", h, h > 1 ? "s" : "");
|
||||||
} else if (s > 60) {
|
} else if (s > 60) {
|
||||||
m = s / 60;
|
m = s / 60;
|
||||||
|
|
||||||
/* round up */
|
/* round up */
|
||||||
if (s - m * 60 > 30)
|
if (s - m * 60 > 30)
|
||||||
m++;
|
m++;
|
||||||
printf("\tlease %lld minutes\n", m);
|
printf("\tlease %lld minute%s\n", m, m > 1 ? "s" : "");
|
||||||
} else
|
} else
|
||||||
printf("\tlease %lld seconds\n", s);
|
printf("\tlease %lld second%s\n", s, s > 1 ? "s" : "");
|
||||||
}
|
}
|
||||||
if (cei->server_identifier.s_addr != INADDR_ANY) {
|
if (cei->server_identifier.s_addr != INADDR_ANY) {
|
||||||
if (inet_ntop(AF_INET, &cei->server_identifier, ipbuf,
|
if (inet_ntop(AF_INET, &cei->server_identifier, ipbuf,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: cert.c,v 1.136 2024/06/04 14:10:53 tb Exp $ */
|
/* $OpenBSD: cert.c,v 1.140 2024/06/06 12:38:02 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022 Theo Buehler <tb@openbsd.org>
|
* Copyright (c) 2022 Theo Buehler <tb@openbsd.org>
|
||||||
* Copyright (c) 2021 Job Snijders <job@openbsd.org>
|
* Copyright (c) 2021 Job Snijders <job@openbsd.org>
|
||||||
|
@ -1073,7 +1073,6 @@ struct cert *
|
||||||
ta_parse(const char *fn, struct cert *p, const unsigned char *pkey,
|
ta_parse(const char *fn, struct cert *p, const unsigned char *pkey,
|
||||||
size_t pkeysz)
|
size_t pkeysz)
|
||||||
{
|
{
|
||||||
ASN1_TIME *notBefore, *notAfter;
|
|
||||||
EVP_PKEY *pk, *opk;
|
EVP_PKEY *pk, *opk;
|
||||||
time_t now = get_current_time();
|
time_t now = get_current_time();
|
||||||
|
|
||||||
|
@ -1095,35 +1094,26 @@ ta_parse(const char *fn, struct cert *p, const unsigned char *pkey,
|
||||||
"pubkey does not match TAL pubkey", fn);
|
"pubkey does not match TAL pubkey", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
|
if (p->notbefore >= now) {
|
||||||
if ((notBefore = X509_get_notBefore(p->x509)) == NULL) {
|
|
||||||
warnx("%s: certificate has invalid notBefore", fn);
|
|
||||||
goto badcert;
|
|
||||||
}
|
|
||||||
if ((notAfter = X509_get_notAfter(p->x509)) == NULL) {
|
|
||||||
warnx("%s: certificate has invalid notAfter", fn);
|
|
||||||
goto badcert;
|
|
||||||
}
|
|
||||||
if (X509_cmp_time(notBefore, &now) != -1) {
|
|
||||||
warnx("%s: certificate not yet valid", fn);
|
warnx("%s: certificate not yet valid", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
if (X509_cmp_time(notAfter, &now) != 1) {
|
if (p->notafter <= now) {
|
||||||
warnx("%s: certificate has expired", fn);
|
warnx("%s: certificate has expired", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
if (p->aki != NULL && strcmp(p->aki, p->ski)) {
|
if (p->aki != NULL && strcmp(p->aki, p->ski)) {
|
||||||
warnx("%s: RFC 6487 section 8.4.2: "
|
warnx("%s: RFC 6487 section 4.8.3: "
|
||||||
"trust anchor AKI, if specified, must match SKI", fn);
|
"trust anchor AKI, if specified, must match SKI", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
if (p->aia != NULL) {
|
if (p->aia != NULL) {
|
||||||
warnx("%s: RFC 6487 section 8.4.7: "
|
warnx("%s: RFC 6487 section 4.8.7: "
|
||||||
"trust anchor must not have AIA", fn);
|
"trust anchor must not have AIA", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
if (p->crl != NULL) {
|
if (p->crl != NULL) {
|
||||||
warnx("%s: RFC 6487 section 8.4.2: "
|
warnx("%s: RFC 6487 section 4.8.6: "
|
||||||
"trust anchor may not specify CRL resource", fn);
|
"trust anchor may not specify CRL resource", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
|
@ -1131,6 +1121,14 @@ ta_parse(const char *fn, struct cert *p, const unsigned char *pkey,
|
||||||
warnx("%s: BGPsec cert cannot be a trust anchor", fn);
|
warnx("%s: BGPsec cert cannot be a trust anchor", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Do not replace with a <= 0 check since OpenSSL 3 broke that:
|
||||||
|
* https://github.com/openssl/openssl/issues/24575
|
||||||
|
*/
|
||||||
|
if (X509_verify(p->x509, pk) != 1) {
|
||||||
|
warnx("%s: failed to verify signature", fn);
|
||||||
|
goto badcert;
|
||||||
|
}
|
||||||
if (x509_any_inherits(p->x509)) {
|
if (x509_any_inherits(p->x509)) {
|
||||||
warnx("%s: Trust anchor IP/AS resources may not inherit", fn);
|
warnx("%s: Trust anchor IP/AS resources may not inherit", fn);
|
||||||
goto badcert;
|
goto badcert;
|
||||||
|
@ -1139,7 +1137,7 @@ ta_parse(const char *fn, struct cert *p, const unsigned char *pkey,
|
||||||
EVP_PKEY_free(pk);
|
EVP_PKEY_free(pk);
|
||||||
return p;
|
return p;
|
||||||
|
|
||||||
badcert:
|
badcert:
|
||||||
EVP_PKEY_free(pk);
|
EVP_PKEY_free(pk);
|
||||||
cert_free(p);
|
cert_free(p);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: filemode.c,v 1.42 2024/05/20 15:51:43 claudio Exp $ */
|
/* $OpenBSD: filemode.c,v 1.43 2024/06/06 07:19:10 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
@ -526,9 +526,15 @@ proc_parser_file(char *file, unsigned char *buf, size_t len)
|
||||||
constraints_validate(file, cert);
|
constraints_validate(file, cert);
|
||||||
}
|
}
|
||||||
} else if (is_ta) {
|
} else if (is_ta) {
|
||||||
|
expires = NULL;
|
||||||
|
notafter = NULL;
|
||||||
if ((tal = find_tal(cert)) != NULL) {
|
if ((tal = find_tal(cert)) != NULL) {
|
||||||
cert = ta_parse(file, cert, tal->pkey, tal->pkeysz);
|
cert = ta_parse(file, cert, tal->pkey, tal->pkeysz);
|
||||||
status = (cert != NULL);
|
status = (cert != NULL);
|
||||||
|
if (status) {
|
||||||
|
expires = &cert->expires;
|
||||||
|
notafter = &cert->notafter;
|
||||||
|
}
|
||||||
if (outformats & FORMAT_JSON)
|
if (outformats & FORMAT_JSON)
|
||||||
json_do_string("tal", tal->descr);
|
json_do_string("tal", tal->descr);
|
||||||
else
|
else
|
||||||
|
@ -538,7 +544,6 @@ proc_parser_file(char *file, unsigned char *buf, size_t len)
|
||||||
} else {
|
} else {
|
||||||
cert_free(cert);
|
cert_free(cert);
|
||||||
cert = NULL;
|
cert = NULL;
|
||||||
expires = NULL;
|
|
||||||
status = 0;
|
status = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: print.c,v 1.53 2024/05/29 13:26:24 tb Exp $ */
|
/* $OpenBSD: print.c,v 1.54 2024/06/06 05:57:36 tb Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
|
@ -211,7 +211,6 @@ ip_resources_print(struct cert_ip *ips, size_t ipsz, size_t asz)
|
||||||
size_t i;
|
size_t i;
|
||||||
int sockt;
|
int sockt;
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < ipsz; i++) {
|
for (i = 0; i < ipsz; i++) {
|
||||||
if (outformats & FORMAT_JSON)
|
if (outformats & FORMAT_JSON)
|
||||||
json_do_object("resource", 1);
|
json_do_object("resource", 1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue