Module Name: src Committed By: pooka Date: Fri Mar 11 09:59:56 UTC 2011
Modified Files: src/sbin/ping: ping.c ping_hostops.c ping_rumpops.c prog_ops.h Log Message: Make get/setuid prog ops (so that i can do rump.ping -f regardless of host privs). To generate a diff of this commit: cvs rdiff -u -r1.92 -r1.93 src/sbin/ping/ping.c cvs rdiff -u -r1.1 -r1.2 src/sbin/ping/ping_hostops.c \ src/sbin/ping/ping_rumpops.c cvs rdiff -u -r1.2 -r1.3 src/sbin/ping/prog_ops.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/ping/ping.c diff -u src/sbin/ping/ping.c:1.92 src/sbin/ping/ping.c:1.93 --- src/sbin/ping/ping.c:1.92 Mon Dec 13 17:42:17 2010 +++ src/sbin/ping/ping.c Fri Mar 11 09:59:56 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ping.c,v 1.92 2010/12/13 17:42:17 pooka Exp $ */ +/* $NetBSD: ping.c,v 1.93 2011/03/11 09:59:56 pooka Exp $ */ /* * Copyright (c) 1989, 1993 @@ -58,7 +58,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ping.c,v 1.92 2010/12/13 17:42:17 pooka Exp $"); +__RCSID("$NetBSD: ping.c,v 1.93 2011/03/11 09:59:56 pooka Exp $"); #endif #include <stdio.h> @@ -261,7 +261,7 @@ if (prog_shutdown(sloop, SHUT_RD) == -1) warn("Cannot shutdown for read"); - if (setuid(getuid()) == -1) + if (prog_setuid(prog_getuid()) == -1) err(1, "setuid"); setprogname(argv[0]); @@ -410,11 +410,11 @@ if (interval == 0) interval = (pingflags & F_FLOOD) ? FLOOD_INTVL : 1.0; #ifndef sgi - if (pingflags & F_FLOOD && getuid()) + if (pingflags & F_FLOOD && prog_getuid()) errx(1, "Must be superuser to use -f"); - if (interval < 1.0 && getuid()) + if (interval < 1.0 && prog_getuid()) errx(1, "Must be superuser to use < 1 sec ping interval"); - if (preload > 0 && getuid()) + if (preload > 0 && prog_getuid()) errx(1, "Must be superuser to use -l"); #endif sec_to_timeval(interval, &interval_tv); Index: src/sbin/ping/ping_hostops.c diff -u src/sbin/ping/ping_hostops.c:1.1 src/sbin/ping/ping_hostops.c:1.2 --- src/sbin/ping/ping_hostops.c:1.1 Mon Dec 13 17:42:17 2010 +++ src/sbin/ping/ping_hostops.c Fri Mar 11 09:59:56 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ping_hostops.c,v 1.1 2010/12/13 17:42:17 pooka Exp $ */ +/* $NetBSD: ping_hostops.c,v 1.2 2011/03/11 09:59:56 pooka Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ping_hostops.c,v 1.1 2010/12/13 17:42:17 pooka Exp $"); +__RCSID("$NetBSD: ping_hostops.c,v 1.2 2011/03/11 09:59:56 pooka Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -48,4 +48,6 @@ .op_recvfrom = recvfrom, .op_sendto = sendto, .op_close = close, + .op_getuid = getuid, + .op_setuid = setuid, }; Index: src/sbin/ping/ping_rumpops.c diff -u src/sbin/ping/ping_rumpops.c:1.1 src/sbin/ping/ping_rumpops.c:1.2 --- src/sbin/ping/ping_rumpops.c:1.1 Mon Dec 13 17:42:17 2010 +++ src/sbin/ping/ping_rumpops.c Fri Mar 11 09:59:56 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ping_rumpops.c,v 1.1 2010/12/13 17:42:17 pooka Exp $ */ +/* $NetBSD: ping_rumpops.c,v 1.2 2011/03/11 09:59:56 pooka Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ping_rumpops.c,v 1.1 2010/12/13 17:42:17 pooka Exp $"); +__RCSID("$NetBSD: ping_rumpops.c,v 1.2 2011/03/11 09:59:56 pooka Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -53,4 +53,6 @@ .op_sendto = rump_sys_sendto, .op_recvfrom = rump_sys_recvfrom, .op_close = rump_sys_close, + .op_getuid = rump_sys_getuid, + .op_setuid = rump_sys_setuid, }; Index: src/sbin/ping/prog_ops.h diff -u src/sbin/ping/prog_ops.h:1.2 src/sbin/ping/prog_ops.h:1.3 --- src/sbin/ping/prog_ops.h:1.2 Mon Dec 13 19:19:10 2010 +++ src/sbin/ping/prog_ops.h Fri Mar 11 09:59:56 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: prog_ops.h,v 1.2 2010/12/13 19:19:10 pooka Exp $ */ +/* $NetBSD: prog_ops.h,v 1.3 2011/03/11 09:59:56 pooka Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -47,6 +47,9 @@ const struct sockaddr *, socklen_t); int (*op_close)(int); + + uid_t (*op_getuid)(void); + int (*op_setuid)(uid_t); }; extern const struct prog_ops prog_ops; @@ -58,6 +61,8 @@ #define prog_recvfrom prog_ops.op_recvfrom #define prog_sendto prog_ops.op_sendto #define prog_close prog_ops.op_close +#define prog_getuid prog_ops.op_getuid +#define prog_setuid prog_ops.op_setuid #else #define prog_init ((int (*)(void))NULL) #define prog_socket socket @@ -67,6 +72,8 @@ #define prog_recvfrom recvfrom #define prog_sendto sendto #define prog_close close +#define prog_getuid getuid +#define prog_setuid setuid #endif #endif /* _PROG_OPS_H_ */