Re: rdate gets pledge error with -c option

David Leadbeater <[email protected]>
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
On Tue, Apr 21, 2026 at 02:02:28PM -0400, Steve Shockley wrote:
> > Synopsis:	rdate gets pledge error with -c option
> > Category:	user
> > Environment:
> 	System      : OpenBSD 7.9
> 	Details     : OpenBSD 7.9 (GENERIC.MP) #443: Sat Apr 18 21:25:46 MDT 2026
> 			 [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> 
> 	Architecture: OpenBSD.amd64
> 	Machine     : amd64
> > Description:
> 	Due to muscle memory I usually run 'rdate -ncv <timeserver>' to set the
> time on a new machine, even though apparently I no longer need -n or -c.
> Anyway, running 'rdate -c <timeserver>' produces an error 'rdate[17868]:
> pledge "rpath", syscall 5'.  We should probably either fix or remove -c.

This is because ntp.c attempts to open /usr/share/zoneinfo/right/UTC.
The following fixes the pledge issues. Although I don't know where
/usr/share/zoneinfo/right/ is supposed to come from and strangely I
don't see an error from failing to open this.


diff --git usr.sbin/rdate/ntp.c usr.sbin/rdate/ntp.c
index 4aed956d62f..f0d11765f79 100644
--- usr.sbin/rdate/ntp.c
+++ usr.sbin/rdate/ntp.c
@@ -151,13 +151,13 @@ ntp_client(const char *hostname, int family, struct timeval *new,
 		/*NOTREACHED*/
 	}
 
-	if (pledge("stdio inet", NULL) == -1)
-		err(1, "pledge");
-
 	corrleaps = leapflag;
 	if (corrleaps)
 		ntpleaps_init();
 
+	if (pledge("stdio inet", NULL) == -1)
+		err(1, "pledge");
+
 	s = -1;
 	for (res = res0; res; res = res->ai_next) {
 		s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
diff --git usr.sbin/rdate/ntpleaps.c usr.sbin/rdate/ntpleaps.c
index f38d3cf2456..307ef8814c8 100644
--- usr.sbin/rdate/ntpleaps.c
+++ usr.sbin/rdate/ntpleaps.c
@@ -86,9 +86,6 @@ ntpleaps_sub(u_int64_t *t)
 	u_int64_t u;
 	int r = 1;
 
-	if (ntpleaps_init() == -1)
-		return (-1);
-
 	u = *t;
 
 	while (i < leapsecs_num) {
diff --git usr.sbin/rdate/rdate.c usr.sbin/rdate/rdate.c
index e6c77711b4d..1d8f62f20b8 100644
--- usr.sbin/rdate/rdate.c
+++ usr.sbin/rdate/rdate.c
@@ -132,7 +132,12 @@ main(int argc, char **argv)
 		err(1, "fork");
 		break;
 	case 0:
-		if (pledge("stdio inet dns", NULL) == -1)
+		if (corrleaps) {
+			if (unveil("/usr/share/zoneinfo", "r") == -1)
+				err(1, "unveil");
+			if (pledge("stdio rpath inet dns", NULL) == -1)
+				err(1, "pledge");
+		} else if (pledge("stdio inet dns", NULL) == -1)
 			err(1, "pledge");
 
 		close(p[0]);	/* read side of pipe */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.