PERFORCE change 156339 for review
Robert Watson
rwatson at FreeBSD.org
Sun Jan 18 09:43:42 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=156339
Change 156339 by rwatson at rwatson_freebsd_capabilities on 2009/01/18 17:42:55
Check fstat() mode on process descriptors in regression test.
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/tools/regression/procdesc/procdesc_test.c#2 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/tools/regression/procdesc/procdesc_test.c#2 (text+ko) ====
@@ -30,11 +30,12 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/procdesc/procdesc_test.c#1 $
+ * $P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/procdesc/procdesc_test.c#2 $
*/
#include <sys/types.h>
#include <sys/procdesc.h>
+#include <sys/stat.h>
#include <err.h>
#include <fcntl.h>
@@ -54,25 +55,37 @@
int
main(int argc, char *argv[])
{
- pid_t pid;
+ struct stat sb;
+ pid_t pid, realpid;
int fd;
printf("1. pdfork() and allow to exit before close().\n");
- pid = pdfork(&fd);
- if (pid < 0)
+ realpid = pdfork(&fd);
+ if (realpid < 0)
err(-1, "pdfork");
- if (pid == 0) {
+ if (realpid == 0) {
if (execve(sleep_argv[0], sleep_argv, environ) < 0)
err(-1, "%s", sleep_argv[0]);
} else {
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid before sleep: %d\n", pid);
+ if (pid != realpid)
+ errx(-1, "pdfork pid %d pdgetpid pid %d", realpid,
+ pid);
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != (S_IFREG | S_IRWXU))
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("before sleep: pid %d mode 0%05o\n", pid, sb.st_mode);
sleep(10);
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid after sleep: %d\n", pid);
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != S_IFREG)
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("after sleep: pid %d mode %05o\n", pid, sb.st_mode);
close(fd);
}
@@ -87,11 +100,19 @@
} else {
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid before sleep: %d\n", pid);
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != (S_IFREG | S_IRWXU))
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("before sleep: pid %d mode %05o\n", pid, sb.st_mode);
sleep(2);
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid after sleep: %d\n", pid);
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != (S_IFREG | S_IRWXU))
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("after sleep: pid %d mode %05o\n", pid, sb.st_mode);
close(fd);
}
@@ -106,20 +127,29 @@
} else {
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid before sleep: %d\n", pid);
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != (S_IFREG | S_IRWXU))
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("before sleep: pid %d mode %05o\n", pid, sb.st_mode);
sleep(2);
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid after sleep: %d\n", pid);
-
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != (S_IFREG | S_IRWXU))
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("after sleep: pid %d mode %05o\n", pid, sb.st_mode);
if (pdkill(fd, SIGKILL) < 0)
err(-1, "pdkill");
-
sleep(1);
if (pdgetpid(fd, &pid) < 0)
err(-1, "pdgetpid");
- printf("pid after kill: %d\n", pid);
-
+ if (fstat(fd, &sb) < 0)
+ err(-1, "fstat");
+ if (sb.st_mode != S_IFREG)
+ errx(-1, "stat mode 0%05o", sb.st_mode);
+ printf("after kill: pid %d mode %05o\n", pid, sb.st_mode);
close(fd);
}
More information about the p4-projects
mailing list