17c478bd9Sstevel@tonic-gate# 2*c227543fSJohn Sonnenschein# Copyright (c) 2000, 2005 Oracle and/or its affiliates. All rights reserved. 37c478bd9Sstevel@tonic-gate# 4*c227543fSJohn Sonnenschein 57c478bd9Sstevel@tonic-gate# 67c478bd9Sstevel@tonic-gate# test script for Sun::Solaris::Project 77c478bd9Sstevel@tonic-gate# 87c478bd9Sstevel@tonic-gate 97c478bd9Sstevel@tonic-gateuse warnings; 107c478bd9Sstevel@tonic-gateuse strict; 117c478bd9Sstevel@tonic-gateuse Data::Dumper; 127c478bd9Sstevel@tonic-gate$Data::Dumper::Terse = 1; 137c478bd9Sstevel@tonic-gate$Data::Dumper::Indent = 0; 147c478bd9Sstevel@tonic-gate 157c478bd9Sstevel@tonic-gatesub cleanup { 167c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.1"); 177c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.2"); 187c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.3"); 197c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.4"); 207c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.5"); 217c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.1.w"); 227c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.2.w"); 237c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.3.w"); 247c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.4.w"); 257c478bd9Sstevel@tonic-gate unlink("/tmp/project.$$.5.w"); 267c478bd9Sstevel@tonic-gate unlink("/tmp/projent.$$"); 277c478bd9Sstevel@tonic-gate} 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate# 'use Sun::Solaris::Project;' counts as test 1 307c478bd9Sstevel@tonic-gateour $test = 1; 317c478bd9Sstevel@tonic-gateour $intest = 1; 327c478bd9Sstevel@tonic-gateour $loaded = 0; 337c478bd9Sstevel@tonic-gate 347c478bd9Sstevel@tonic-gate# 357c478bd9Sstevel@tonic-gate# Status reporting utils 367c478bd9Sstevel@tonic-gate# 377c478bd9Sstevel@tonic-gate# Expected calling sequence is: 387c478bd9Sstevel@tonic-gate# start() 397c478bd9Sstevel@tonic-gate# pass() or fail() 407c478bd9Sstevel@tonic-gate# start() 417c478bd9Sstevel@tonic-gate# pass() or fail() 427c478bd9Sstevel@tonic-gate# ... 437c478bd9Sstevel@tonic-gate# ... 447c478bd9Sstevel@tonic-gate# 457c478bd9Sstevel@tonic-gate# Calling start() twice in a row will fail test. 467c478bd9Sstevel@tonic-gate# Calling start() and then exiting will fail test. 477c478bd9Sstevel@tonic-gate# 487c478bd9Sstevel@tonic-gatesub start 497c478bd9Sstevel@tonic-gate{ 507c478bd9Sstevel@tonic-gate if ($intest != 0) { 517c478bd9Sstevel@tonic-gate fatal("Started new test before finishing previous."); 527c478bd9Sstevel@tonic-gate } 537c478bd9Sstevel@tonic-gate $test++; 547c478bd9Sstevel@tonic-gate $intest = 1; 557c478bd9Sstevel@tonic-gate print "# Starting Test $test: @_\n" if (@_); 567c478bd9Sstevel@tonic-gate} 577c478bd9Sstevel@tonic-gate 587c478bd9Sstevel@tonic-gatesub pass 597c478bd9Sstevel@tonic-gate{ 607c478bd9Sstevel@tonic-gate if ($intest == 0) { 617c478bd9Sstevel@tonic-gate fatal("pass() without start()"); 627c478bd9Sstevel@tonic-gate } 637c478bd9Sstevel@tonic-gate print("ok $test @_\n"); 647c478bd9Sstevel@tonic-gate $intest = 0; 657c478bd9Sstevel@tonic-gate} 667c478bd9Sstevel@tonic-gate 677c478bd9Sstevel@tonic-gatesub fail 687c478bd9Sstevel@tonic-gate{ 697c478bd9Sstevel@tonic-gate if ($intest == 0) { 707c478bd9Sstevel@tonic-gate fatal("fail() without start()"); 717c478bd9Sstevel@tonic-gate } 727c478bd9Sstevel@tonic-gate print("not ok $test @_\n"); 737c478bd9Sstevel@tonic-gate $intest = 0; 747c478bd9Sstevel@tonic-gate} 757c478bd9Sstevel@tonic-gate 767c478bd9Sstevel@tonic-gatesub fatal 777c478bd9Sstevel@tonic-gate{ 787c478bd9Sstevel@tonic-gate print(STDERR "FATAL!\n"); 797c478bd9Sstevel@tonic-gate print("not ok $test @_\n"); 807c478bd9Sstevel@tonic-gate exit(1); 817c478bd9Sstevel@tonic-gate} 827c478bd9Sstevel@tonic-gate 837c478bd9Sstevel@tonic-gatesub comment 847c478bd9Sstevel@tonic-gate{ 857c478bd9Sstevel@tonic-gate print("# @_\n"); 867c478bd9Sstevel@tonic-gate} 877c478bd9Sstevel@tonic-gate 887c478bd9Sstevel@tonic-gate# 897c478bd9Sstevel@tonic-gate# Read in a project file and build into the same data structure that we will 907c478bd9Sstevel@tonic-gate# get if we do the same with the getXXX functions 917c478bd9Sstevel@tonic-gate# 927c478bd9Sstevel@tonic-gate 937c478bd9Sstevel@tonic-gatesub read_pfile 947c478bd9Sstevel@tonic-gate{ 957c478bd9Sstevel@tonic-gate my ($fh) = @_; 967c478bd9Sstevel@tonic-gate my ($line, @a1, @a2); 977c478bd9Sstevel@tonic-gate while (defined($line = <$fh>)) { 987c478bd9Sstevel@tonic-gate chomp($line); 997c478bd9Sstevel@tonic-gate @a2 = split(/:/, $line, 6); 1007c478bd9Sstevel@tonic-gate $a2[2] = '' if (! defined($a2[2])); 1017c478bd9Sstevel@tonic-gate $a2[3] = defined($a2[3]) ? [ split(/,/, $a2[3]) ] : []; 1027c478bd9Sstevel@tonic-gate $a2[4] = defined($a2[4]) ? [ split(/,/, $a2[4]) ] : []; 1037c478bd9Sstevel@tonic-gate $a2[5] = '' if (! defined($a2[5])); 1047c478bd9Sstevel@tonic-gate push(@a1, [ @a2 ]); 1057c478bd9Sstevel@tonic-gate } 1067c478bd9Sstevel@tonic-gate return(\@a1); 1077c478bd9Sstevel@tonic-gate} 1087c478bd9Sstevel@tonic-gate 1097c478bd9Sstevel@tonic-gate# 1107c478bd9Sstevel@tonic-gate# Compare two arrays of project structures & check for equivalence. 1117c478bd9Sstevel@tonic-gate# Converts each into a string using Data::Dumper and then does a string 1127c478bd9Sstevel@tonic-gate# comparison. Dirty but effective :-) 1137c478bd9Sstevel@tonic-gate# 1147c478bd9Sstevel@tonic-gate 1157c478bd9Sstevel@tonic-gatesub cmp_recs 1167c478bd9Sstevel@tonic-gate{ 1177c478bd9Sstevel@tonic-gate my ($a1, $a2) = @_; 1187c478bd9Sstevel@tonic-gate my $s1 = Dumper($a1); 1197c478bd9Sstevel@tonic-gate my $s2 = Dumper($a2); 1207c478bd9Sstevel@tonic-gate 1217c478bd9Sstevel@tonic-gate # Make sure numbers and quoted numbers compare the same 1227c478bd9Sstevel@tonic-gate $s1 =~ s/'([+-]?[\d.]+)'/$1/g; 1237c478bd9Sstevel@tonic-gate $s2 =~ s/'([+-]?[\d.]+)'/$1/g; 1247c478bd9Sstevel@tonic-gate 1257c478bd9Sstevel@tonic-gate return($s1 eq $s2); 1267c478bd9Sstevel@tonic-gate} 1277c478bd9Sstevel@tonic-gate 1287c478bd9Sstevel@tonic-gatesub hash2string 1297c478bd9Sstevel@tonic-gate{ 1307c478bd9Sstevel@tonic-gate my ($key, $value); 1317c478bd9Sstevel@tonic-gate my @strings; 1327c478bd9Sstevel@tonic-gate my $string; 1337c478bd9Sstevel@tonic-gate my $hash = $_[0]; 1347c478bd9Sstevel@tonic-gate foreach $key (keys(%$hash)) { 1357c478bd9Sstevel@tonic-gate push(@strings, "$key => $hash->{$key}"); 1367c478bd9Sstevel@tonic-gate } 1377c478bd9Sstevel@tonic-gate $string = "{ " . join(", ", @strings) . " }"; 1387c478bd9Sstevel@tonic-gate return ($string); 1397c478bd9Sstevel@tonic-gate} 1407c478bd9Sstevel@tonic-gate 1417c478bd9Sstevel@tonic-gate# 1427c478bd9Sstevel@tonic-gate# Main body of tests starts here. 1437c478bd9Sstevel@tonic-gate# 1447c478bd9Sstevel@tonic-gate 1457c478bd9Sstevel@tonic-gate# Check the module loads. 1467c478bd9Sstevel@tonic-gateBEGIN { 1477c478bd9Sstevel@tonic-gate $| = 1; 1487c478bd9Sstevel@tonic-gate print "1..548\n"; 1497c478bd9Sstevel@tonic-gate} 1507c478bd9Sstevel@tonic-gate 1517c478bd9Sstevel@tonic-gateEND { 1527c478bd9Sstevel@tonic-gate fail("not ok 1") unless ($loaded); 1537c478bd9Sstevel@tonic-gate fail("Exited during test!") if ($intest == 1); 1547c478bd9Sstevel@tonic-gate cleanup(); 1557c478bd9Sstevel@tonic-gate} 1567c478bd9Sstevel@tonic-gate 1577c478bd9Sstevel@tonic-gateuse Sun::Solaris::Project qw(:ALL :PRIVATE); 1587c478bd9Sstevel@tonic-gate$loaded = 1; 1597c478bd9Sstevel@tonic-gatepass(); 1607c478bd9Sstevel@tonic-gate 1617c478bd9Sstevel@tonic-gatestart("Check the constants."); 1627c478bd9Sstevel@tonic-gatemy ($fh, $line, $n1, $n2, $n3, $s); 1637c478bd9Sstevel@tonic-gateopen($fh, "</usr/include/project.h") || fatal($!); 1647c478bd9Sstevel@tonic-gatewhile (defined($line = <$fh>)) { 1657c478bd9Sstevel@tonic-gate $n1 = $1 if ($line =~ /#define\s+PROJNAME_MAX\s+(\d+)/); 1667c478bd9Sstevel@tonic-gate $n2 = $1 if ($line =~ /#define\s+PROJECT_BUFSZ\s+(\d+)/); 1677c478bd9Sstevel@tonic-gate $s = $1 if ($line =~ /#define\s+PROJF_PATH\s+"([^"]+)"/); 1687c478bd9Sstevel@tonic-gate} 1697c478bd9Sstevel@tonic-gateclose($fh); 1707c478bd9Sstevel@tonic-gateopen($fh, "</usr/include/sys/param.h") || fatal($!); 1717c478bd9Sstevel@tonic-gatewhile (defined($line = <$fh>)) { 1727c478bd9Sstevel@tonic-gate $n3 = $1 if ($line =~ /#define\s+MAXUID\s+(\d+)/); 1737c478bd9Sstevel@tonic-gate} 1747c478bd9Sstevel@tonic-gateclose($fh); 1757c478bd9Sstevel@tonic-gateif (! defined($s) || ! defined($n1) || ! defined($n2)) { 1767c478bd9Sstevel@tonic-gate fail(); 1777c478bd9Sstevel@tonic-gate} else { 1787c478bd9Sstevel@tonic-gate if ($n1 == &PROJNAME_MAX && $n2 == &PROJECT_BUFSZ && 1797c478bd9Sstevel@tonic-gate $n3 == &MAXPROJID && $s eq &PROJF_PATH) { 1807c478bd9Sstevel@tonic-gate pass(); 1817c478bd9Sstevel@tonic-gate } else { 1827c478bd9Sstevel@tonic-gate fail(); 1837c478bd9Sstevel@tonic-gate } 1847c478bd9Sstevel@tonic-gate} 1857c478bd9Sstevel@tonic-gate 1867c478bd9Sstevel@tonic-gate# 1877c478bd9Sstevel@tonic-gate# projf_read on various files with various flags. 1887c478bd9Sstevel@tonic-gate# 1897c478bd9Sstevel@tonic-gate# This table represents when projf_read should fail given a file 1907c478bd9Sstevel@tonic-gate# and flags. 1917c478bd9Sstevel@tonic-gate# 1927c478bd9Sstevel@tonic-gate# file/flags # {} validate validate,res validate,dup 1937c478bd9Sstevel@tonic-gate# ################################################################### 1947c478bd9Sstevel@tonic-gate# parse error # no no no no 1957c478bd9Sstevel@tonic-gate# dup names # yes no no no 1967c478bd9Sstevel@tonic-gate# dup ids # yes no no yes 1977c478bd9Sstevel@tonic-gate# system ids # yes no yes no 1987c478bd9Sstevel@tonic-gate# all user # yes yes yes yes 1997c478bd9Sstevel@tonic-gate# 2007c478bd9Sstevel@tonic-gate 2017c478bd9Sstevel@tonic-gatemy $flags1 = {}; 2027c478bd9Sstevel@tonic-gatemy $flags2 = { "validate" => "true" }; 2037c478bd9Sstevel@tonic-gatemy $flags3 = { "validate" => "true", "res" => 1 }; 2047c478bd9Sstevel@tonic-gatemy $flags4 = { "validate" => "true", "dup" => 1 }; 2057c478bd9Sstevel@tonic-gate 2067c478bd9Sstevel@tonic-gate# Make a temporary project files. 2077c478bd9Sstevel@tonic-gatemy ($ret, $file1, $file2, $file3, $file4, $file5, $pass); 2087c478bd9Sstevel@tonic-gate 2097c478bd9Sstevel@tonic-gate# file1, parse error (extra ":") on group.staff project. 2107c478bd9Sstevel@tonic-gateopen($file1, "+>/tmp/project.$$.1") || fatal($!); 2117c478bd9Sstevel@tonic-gateprint $file1 <<EOF; 2127c478bd9Sstevel@tonic-gatetest1:123:project one:root,bin:adm:attr1=a;attr2=b 2137c478bd9Sstevel@tonic-gateuser.test2:456:project two:adm,uucp:staff:attr1=p;attr2=q 2147c478bd9Sstevel@tonic-gategroup.test3:678:project three::root,nobody:root,lp:attr1=y;attr2=z 2157c478bd9Sstevel@tonic-gatetest4:678:project four:root:root: 2167c478bd9Sstevel@tonic-gatetest5:679:project five::sys: 2177c478bd9Sstevel@tonic-gatetest6:690:::: 2187c478bd9Sstevel@tonic-gateEOF 2197c478bd9Sstevel@tonic-gate 2207c478bd9Sstevel@tonic-gate# file2, duplicate project names. 2217c478bd9Sstevel@tonic-gateopen($file2, "+>/tmp/project.$$.2") || fatal($!); 2227c478bd9Sstevel@tonic-gateprint $file2 <<EOF; 2237c478bd9Sstevel@tonic-gatetest1:123:project one:root,bin:adm:attr1=a;attr2=b 2247c478bd9Sstevel@tonic-gateuser.test2:456:project two:adm,uucp:staff:attr1=p;attr2=q 2257c478bd9Sstevel@tonic-gategroup.test3:677:project three:root,nobody:root,lp:attr1=y;attr2=z 2267c478bd9Sstevel@tonic-gatetest1:678:project four:root:root: 2277c478bd9Sstevel@tonic-gatetest5:679:project five::sys: 2287c478bd9Sstevel@tonic-gatetest6:690:::: 2297c478bd9Sstevel@tonic-gateEOF 2307c478bd9Sstevel@tonic-gate 2317c478bd9Sstevel@tonic-gate# file3, duplicate project ids. 2327c478bd9Sstevel@tonic-gateopen($file3, "+>/tmp/project.$$.3") || fatal($!); 2337c478bd9Sstevel@tonic-gateprint $file3 <<EOF; 2347c478bd9Sstevel@tonic-gatetest1:123:project one:root,bin:adm:attr1=a;attr2=b 2357c478bd9Sstevel@tonic-gateuser.test2:456:project two:adm,uucp:staff:attr1=p;attr2=q 2367c478bd9Sstevel@tonic-gategroup.test3:677:project three:root,nobody:root,lp:attr1=y;attr2=z 2377c478bd9Sstevel@tonic-gatetest4:678:project four:root:root: 2387c478bd9Sstevel@tonic-gatetest5:678:project five::sys: 2397c478bd9Sstevel@tonic-gatetest6:690:::: 2407c478bd9Sstevel@tonic-gateEOF 2417c478bd9Sstevel@tonic-gate 2427c478bd9Sstevel@tonic-gate# file4, system project ids. 2437c478bd9Sstevel@tonic-gateopen($file4, "+>/tmp/project.$$.4") || fatal($!); 2447c478bd9Sstevel@tonic-gateprint $file4 <<EOF; 2457c478bd9Sstevel@tonic-gatesystem:0:::: 2467c478bd9Sstevel@tonic-gateuser.root:1:::: 2477c478bd9Sstevel@tonic-gatenoproject:2:::: 2487c478bd9Sstevel@tonic-gatedefault:3:::: 2497c478bd9Sstevel@tonic-gategroup.staff:10:::: 2507c478bd9Sstevel@tonic-gatetest1:123:project one:root,bin:adm:attr1=a;attr2=b 2517c478bd9Sstevel@tonic-gateuser.test2:456:project two:adm,uucp:staff:attr1=p;attr2=q 2527c478bd9Sstevel@tonic-gategroup.test3:677:project three:root,nobody:root,lp:attr1=y;attr2=z 2537c478bd9Sstevel@tonic-gatetest4:678:project four:root:root: 2547c478bd9Sstevel@tonic-gatetest5:679:project five::sys: 2557c478bd9Sstevel@tonic-gatetest6:690:::: 2567c478bd9Sstevel@tonic-gateEOF 2577c478bd9Sstevel@tonic-gate 2587c478bd9Sstevel@tonic-gate# file5, all unique user projects. 2597c478bd9Sstevel@tonic-gateopen($file5, "+>/tmp/project.$$.5") || fatal($!); 2607c478bd9Sstevel@tonic-gateprint $file5 <<EOF; 2617c478bd9Sstevel@tonic-gatetest1:123:project one:root,bin:adm:attr1=a;attr2=b 2627c478bd9Sstevel@tonic-gateuser.test2:456:project two:adm,uucp:staff:attr1=p;attr2=q 2637c478bd9Sstevel@tonic-gategroup.test3:677:project three:root,nobody:root,lp:attr1=y;attr2=z 2647c478bd9Sstevel@tonic-gatetest4:678:project four:root:root: 2657c478bd9Sstevel@tonic-gatetest5:679:project five::sys: 2667c478bd9Sstevel@tonic-gatetest6:690:::: 2677c478bd9Sstevel@tonic-gateEOF 2687c478bd9Sstevel@tonic-gate 2697c478bd9Sstevel@tonic-gate# 2707c478bd9Sstevel@tonic-gate# Each test is the file description, input file, filename, flags, and the expected 2717c478bd9Sstevel@tonic-gate# return value. 2727c478bd9Sstevel@tonic-gate# 2737c478bd9Sstevel@tonic-gatemy @read_tests = ( 2747c478bd9Sstevel@tonic-gate [ "parse error", $file1, "/tmp/project.$$.1", $flags1, 1 ], 2757c478bd9Sstevel@tonic-gate [ "parse error", $file1, "/tmp/project.$$.1", $flags2, 1 ], 2767c478bd9Sstevel@tonic-gate [ "parse error", $file1, "/tmp/project.$$.1", $flags3, 1 ], 2777c478bd9Sstevel@tonic-gate [ "parse error", $file1, "/tmp/project.$$.1", $flags4, 1 ], 2787c478bd9Sstevel@tonic-gate [ "dup names", $file2, "/tmp/project.$$.2", $flags1, 0 ], 2797c478bd9Sstevel@tonic-gate [ "dup names", $file2, "/tmp/project.$$.2", $flags2, 1 ], 2807c478bd9Sstevel@tonic-gate [ "dup names", $file2, "/tmp/project.$$.2", $flags3, 1 ], 2817c478bd9Sstevel@tonic-gate [ "dup names", $file2, "/tmp/project.$$.2", $flags4, 1 ], 2827c478bd9Sstevel@tonic-gate [ "dup ids", $file3, "/tmp/project.$$.3", $flags1, 0 ], 2837c478bd9Sstevel@tonic-gate [ "dup ids", $file3, "/tmp/project.$$.3", $flags2, 1 ], 2847c478bd9Sstevel@tonic-gate [ "dup ids", $file3, "/tmp/project.$$.3", $flags3, 1 ], 2857c478bd9Sstevel@tonic-gate [ "dup ids", $file3, "/tmp/project.$$.3", $flags4, 0 ], 2867c478bd9Sstevel@tonic-gate [ "sys ids", $file4, "/tmp/project.$$.4", $flags1, 0 ], 2877c478bd9Sstevel@tonic-gate [ "sys ids", $file4, "/tmp/project.$$.4", $flags2, 1 ], 2887c478bd9Sstevel@tonic-gate [ "sys ids", $file4, "/tmp/project.$$.4", $flags3, 0 ], 2897c478bd9Sstevel@tonic-gate [ "sys ids", $file4, "/tmp/project.$$.4", $flags4, 1 ], 2907c478bd9Sstevel@tonic-gate [ "unique users", $file5, "/tmp/project.$$.5", $flags1, 0 ], 2917c478bd9Sstevel@tonic-gate [ "unique users", $file5, "/tmp/project.$$.5", $flags2, 0 ], 2927c478bd9Sstevel@tonic-gate [ "unique users", $file5, "/tmp/project.$$.5", $flags3, 0 ], 2937c478bd9Sstevel@tonic-gate [ "unique users", $file5, "/tmp/project.$$.5", $flags4, 0 ] 2947c478bd9Sstevel@tonic-gate); 2957c478bd9Sstevel@tonic-gate 2967c478bd9Sstevel@tonic-gatemy $projents; 2977c478bd9Sstevel@tonic-gatemy @goodprojents; 2987c478bd9Sstevel@tonic-gatemy $read_test; 2997c478bd9Sstevel@tonic-gatemy $desc; 3007c478bd9Sstevel@tonic-gatemy $file; 3017c478bd9Sstevel@tonic-gatemy $filename; 3027c478bd9Sstevel@tonic-gatemy $flags; 3037c478bd9Sstevel@tonic-gatemy $flagstring; 3047c478bd9Sstevel@tonic-gatemy $exp; 3057c478bd9Sstevel@tonic-gatemy $error; 3067c478bd9Sstevel@tonic-gate 3077c478bd9Sstevel@tonic-gate# Do projf_read tests. 3087c478bd9Sstevel@tonic-gateforeach $read_test (@read_tests) { 3097c478bd9Sstevel@tonic-gate 3107c478bd9Sstevel@tonic-gate ($desc, $file, $filename, $flags, $exp) = @$read_test; 3117c478bd9Sstevel@tonic-gate $flagstring = hash2string($flags); 3127c478bd9Sstevel@tonic-gate start("projf_read(): $desc, flags: $flagstring, file: $filename"); 3137c478bd9Sstevel@tonic-gate 3147c478bd9Sstevel@tonic-gate seek($file, 0, 0); 3157c478bd9Sstevel@tonic-gate 3167c478bd9Sstevel@tonic-gate ($ret, $projents) = projf_read($file, $flags); 3177c478bd9Sstevel@tonic-gate # check return is expected result 3187c478bd9Sstevel@tonic-gate if ($ret != $exp) { 3197c478bd9Sstevel@tonic-gate fail("Expected $exp, Returned $ret"); 3207c478bd9Sstevel@tonic-gate if ($ret) { 3217c478bd9Sstevel@tonic-gate foreach $error (@$projents) { 3227c478bd9Sstevel@tonic-gate comment("# " . join(", ", @$error));; 3237c478bd9Sstevel@tonic-gate } 3247c478bd9Sstevel@tonic-gate } 3257c478bd9Sstevel@tonic-gate next; 3267c478bd9Sstevel@tonic-gate } 3277c478bd9Sstevel@tonic-gate # verify either projents or error messages were returned 3287c478bd9Sstevel@tonic-gate if (!(@$projents)) { 3297c478bd9Sstevel@tonic-gate fail("Missing projents or error messages"); 3307c478bd9Sstevel@tonic-gate next; 3317c478bd9Sstevel@tonic-gate } 3327c478bd9Sstevel@tonic-gate pass(); 3337c478bd9Sstevel@tonic-gate 3347c478bd9Sstevel@tonic-gate # Save projents from successful reads for testing projf_write. 3357c478bd9Sstevel@tonic-gate if ($ret == 0) { 3367c478bd9Sstevel@tonic-gate push(@goodprojents, [$desc, $flags, $projents, $filename]); 3377c478bd9Sstevel@tonic-gate } 3387c478bd9Sstevel@tonic-gate} 3397c478bd9Sstevel@tonic-gate 3407c478bd9Sstevel@tonic-gateclose($file1); 3417c478bd9Sstevel@tonic-gateclose($file2); 3427c478bd9Sstevel@tonic-gateclose($file3); 3437c478bd9Sstevel@tonic-gateclose($file4); 3447c478bd9Sstevel@tonic-gateclose($file5); 3457c478bd9Sstevel@tonic-gate 3467c478bd9Sstevel@tonic-gate# Test projf_write, write each successfully read file. 3477c478bd9Sstevel@tonic-gate 3487c478bd9Sstevel@tonic-gatemy @write_tests; 3497c478bd9Sstevel@tonic-gatemy $write_test; 3507c478bd9Sstevel@tonic-gate 3517c478bd9Sstevel@tonic-gateforeach $write_test (@goodprojents) { 3527c478bd9Sstevel@tonic-gate 3537c478bd9Sstevel@tonic-gate ($desc, $flags, $projents, $filename) = @$write_test; 3547c478bd9Sstevel@tonic-gate $flagstring = hash2string($flags); 3557c478bd9Sstevel@tonic-gate start("projf_write(): $desc, flags: $flagstring, file: $filename"); 3567c478bd9Sstevel@tonic-gate 3577c478bd9Sstevel@tonic-gate open($fh, ">$filename.w") || fatal($!); 3587c478bd9Sstevel@tonic-gate 3597c478bd9Sstevel@tonic-gate projf_write($fh, $projents); 3607c478bd9Sstevel@tonic-gate close($fh); 3617c478bd9Sstevel@tonic-gate system("cmp -s $filename $filename.w") == 0 ? pass() : 3627c478bd9Sstevel@tonic-gate fail("Written file $filename.w does not match file $filename"); 3637c478bd9Sstevel@tonic-gate} 3647c478bd9Sstevel@tonic-gate 3657c478bd9Sstevel@tonic-gate# Tests for projent_parse and projent_validate. 3667c478bd9Sstevel@tonic-gate 3677c478bd9Sstevel@tonic-gatemy @projent_tests; 3687c478bd9Sstevel@tonic-gatemy $projent_test; 3697c478bd9Sstevel@tonic-gate 3707c478bd9Sstevel@tonic-gate# 3717c478bd9Sstevel@tonic-gate# Tests, in format: 3727c478bd9Sstevel@tonic-gate# 3737c478bd9Sstevel@tonic-gate# [ parse_result_expected, validate_result_expected, flags, project-line ] 3747c478bd9Sstevel@tonic-gate# 3757c478bd9Sstevel@tonic-gate@projent_tests = ( 3767c478bd9Sstevel@tonic-gate 3777c478bd9Sstevel@tonic-gate# positive 3787c478bd9Sstevel@tonic-gate 3797c478bd9Sstevel@tonic-gate [ 0, 0, { "res" => 1 }, "system:0::::" ], 3807c478bd9Sstevel@tonic-gate [ 0, 0, { "res" => 1 }, "user.root:1::::" ], 3817c478bd9Sstevel@tonic-gate [ 0, 0, { "res" => 1 }, "noproject:2::::" ], 3827c478bd9Sstevel@tonic-gate [ 0, 0, { "res" => 1 }, "default:3::::" ], 3837c478bd9Sstevel@tonic-gate [ 0, 0, { "res" => 1 }, "group.staff:10::::" ], 3847c478bd9Sstevel@tonic-gate [ 0, 0, {}, "long:100::::" . "a" x 2048 ], 3857c478bd9Sstevel@tonic-gate [ 0, 0, {}, "Validname:101::::" ], 3867c478bd9Sstevel@tonic-gate [ 0, 0, {}, "Validname2:102::::" ], 3877c478bd9Sstevel@tonic-gate [ 0, 0, {}, "valid3name:103::::" ], 3887c478bd9Sstevel@tonic-gate [ 0, 0, {}, "VALIDNAME:104::::" ], 3897c478bd9Sstevel@tonic-gate [ 0, 0, {}, "VALIDNAME5:105::::" ], 3907c478bd9Sstevel@tonic-gate [ 0, 0, {}, "vAlid5name:106::::" ], 3917c478bd9Sstevel@tonic-gate [ 0, 0, {}, "valid.name:107::::" ], 3927c478bd9Sstevel@tonic-gate [ 0, 0, {}, "valid8.NAME:108::::" ], 3937c478bd9Sstevel@tonic-gate [ 0, 0, {}, "Valid_name9:109::::" ], 3947c478bd9Sstevel@tonic-gate [ 0, 0, {}, "V_alid.name10:110::::" ], 3957c478bd9Sstevel@tonic-gate [ 0, 0, {}, "valid12345678901234567890123456789012345678901234567890123456789:111::::" ], 3967c478bd9Sstevel@tonic-gate [ 0, 0, {}, "projid:2147483647::::" ], 3977c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comment:111: this is ! & my crazy !@#$%^&*()_+|~`\=-][ 0, 0, {},}{';\"/.,?>< comment:::" ], 3987c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user1:112::*::" ], 3997c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user2:113::!*::" ], 4007c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user3:114::root::" ], 4017c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user4:115::!root::" ], 4027c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user5:116::*,!sys::" ], 4037c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user6:117::!*,daemon::" ], 4047c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user7:118::root,sys,daemon,bin::" ], 4057c478bd9Sstevel@tonic-gate [ 0, 0, {}, "user8:119::root,!sys,daemon,!bin::" ], 4067c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "user9:116::*, !sys::" ], 4077c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "user10:117::!* ,daemon::" ], 4087c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "user11:118::root ,sys ,daemon, bin::" ], 4097c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "user12:119::root, !sys, daemon ,!bin::" ], 4107c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group1:120:::*:" ], 4117c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group2:121:::!*:" ], 4127c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group3:122:::root:" ], 4137c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group4:123:::!root:" ], 4147c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group5:124:::*,!sys:" ], 4157c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group6:125:::!*,daemon:" ], 4167c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group7:126:::root,sys,daemon,bin:" ], 4177c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group8:127:::root,!sys,daemon,!bin:" ], 4187c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "group9:124:::*, !sys:" ], 4197c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "group10:125:::!* ,daemon:" ], 4207c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "group11:126:::root, sys ,daemon, bin:" ], 4217c478bd9Sstevel@tonic-gate [ 0, 0, { "allowspaces" => 1 }, "group12:127:::root ,!sys, daemon ,!bin:" ], 4227c478bd9Sstevel@tonic-gate [ 0, 0, {}, "group9:128:::sys:" ], 4237c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib1:129::::one" ], 4247c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib2:130::::One" ], 4257c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib3:131::::ONE" ], 4267c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib4:132::::attrib10" ], 4277c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib5:133::::attrib.attrib=" ], 4287c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib6:134::::attib_" ], 4297c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib7:135::::a10-._attib" ], 4307c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib8:136::::SUNW,attrib" ], 4317c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib9:137::::A,A10=" ], 4327c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib10:138::::FIVEE,name" ], 4337c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib11:139::::one;two" ], 4347c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib12:140::::one=1;two=four" ], 4357c478bd9Sstevel@tonic-gate [ 0, 0, {}, "attrib13:141::::one;two=;three=four" ], 4367c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value1:142::::one=foo,bar" ], 4377c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value2:143::::one=,bar," ], 4387c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value3:144::::one=(foo,bar)" ], 4397c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value4:145::::one=(foo,bar,baz),boo" ], 4407c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value5:146::::one;two=bar,(baz),foo,((baz)),(,)" ], 4417c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value6:147::::one=100/200" ], 4427c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value7:148::::two=.-_/=" ], 4437c478bd9Sstevel@tonic-gate [ 0, 0, {}, "value8:149::::name=one=two" ], 4447c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "value9:150::::task.max-lwps=(priv,1000M,deny,signal=SIGHUP),(priv,1000k,deny,signal=SIGKILL)" ], 4457c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma1:151::,::" ], 4467c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma2:152::,,::" ], 4477c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma3:153::root,::" ], 4487c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma4:154::bin,root,,::" ], 4497c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma5:155:::,:" ], 4507c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma6:156:::,,:" ], 4517c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma7:157:::bin,root,:" ], 4527c478bd9Sstevel@tonic-gate [ 0, 0, {}, "comma8:158:::root,,:" ], 4537c478bd9Sstevel@tonic-gate [ 0, 0, {}, "semi1:159::::;" ], 4547c478bd9Sstevel@tonic-gate [ 0, 0, {}, "semi2:160::::;;" ], 4557c478bd9Sstevel@tonic-gate [ 0, 0, {}, "semi3:161::::foo=(one,two);" ], 4567c478bd9Sstevel@tonic-gate [ 0, 0, {}, "semi4:162::::foo;;" ], 4577c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl1:163::::task.max-lwps=(priv,1000,deny,signal=HUP),(priv,1000k,deny,signal=15)" ], 4587c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl1:163::::task.max-lwps=(priv,1000,deny,signal=HUP),(priv,10001,deny,signal=15)" ], 4597c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl2:164::::process.max-port-events=(basic,1000,deny)" ], 4607c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl3:165::::project.max-crypto-memory=(priv,2.2gb,deny)" ], 4617c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl3:165::::project.max-crypto-memory=(priv,10,deny)" ], 4627c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl4:166::::project.max-crypto-memory=(privileged,100m,deny)" ], 4637c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl4:166::::project.max-crypto-memory=(privileged,100,deny)" ], 4647c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl5:167::::project.max-crypto-memory=(priv,1000m,deny)" ], 4657c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl5:167::::project.max-crypto-memory=(priv,1000,deny)" ], 4667c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl6:168::::project.max-crypto-memory=(priv,1000k,deny)" ], 4677c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl6:168::::project.max-crypto-memory=(priv,1000m,deny)" ], 4687c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl7:169::::process.max-msg-messages=(priv,10,deny)" ], 4697c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl8:170::::process.max-msg-qbytes=(priv,10000kb,deny)" ], 4707c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl8:170::::process.max-msg-qbytes=(priv,10000,deny)" ], 4717c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl9:171::::process.max-sem-ops=(priv,10000000,deny)" ], 4727c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl10:172::::process.max-sem-nsems=(basic,1,deny)" ], 4737c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl11:173::::process.max-address-space=(priv,2GB,deny)" ], 4747c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl12:174::::process.max-file-descriptor=(basic,1K,deny),(basic,2K,deny)" ], 4757c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl13:175::::process.max-core-size=(priv,10Mb,deny),(priv,2GB,deny)" ], 4767c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl14:176::::process.max-stack-size=(priv,1.8Gb,deny),(priv,100MB,deny)" ], 4777c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl15:177::::process.max-data-size=(priv,1010100101,deny)" ], 4787c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl16:178::::process.max-file-size=(priv,100mb,deny,signal=SIGXFSZ),(priv,1000mb,deny,signal=31)" ], 4797c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl17:179::::process.max-cpu-time=(priv,1t,signal=XCPU),(priv,100ms,sig=30)" ], 4807c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl18:180::::task.max-cpu-time=(priv,1M,sig=SIGKILL)" ], 4817c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl19:181::::task.max-lwps=(basic,10,signal=1),(priv,100,deny,signal=KILL)" ], 4827c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl20:182::::project.max-device-locked-memory=(priv,1000,deny,sig=TERM)" ], 4837c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl21:183::::project.max-port-ids=(priv,100,deny)" ], 4847c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl22:184::::project.max-shm-memory=(priv,1000mb,deny)" ], 4857c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl23:185::::project.max-shm-ids=(priv,1k,deny,signal=SIGSTOP)" ], 4867c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl24:186::::project.max-msg-ids=(priv,1m,deny,signal=XRES)" ], 4877c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl25:187::::project.max-sem-ids=(priv,10,deny,signal=ABRT)" ], 4887c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl26:188::::project.cpu-shares=(priv,63k,none)" ], 4897c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl27:189::::zone.cpu-shares=(priv,20k,none)" ], 4907c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl28:190::::zone.cpu-shares=(priv,100,none)" ], 4917c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl29:191::::project.max-shm-memory=(priv,200G,deny)" ], 4927c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl30:192::::project.max-shm-memory=(priv,200Gb,deny)" ], 4937c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl31:193::::project.max-shm-memory=(priv,2000B,deny)" ], 4947c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl32:194::::project.max-shm-memory=(priv,2000,deny)" ], 4957c478bd9Sstevel@tonic-gate [ 0, 0, {}, "rctl33:195::::task.max-cpu-time=(priv,2000,none)" ], 4967c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl34:196::::task.max-cpu-time=(priv,2000s,none)" ], 4977c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl35:197::::task.max-cpu-time=(priv,20.1ps,none)" ], 4987c478bd9Sstevel@tonic-gate [ 0, 0, { "allowunits" => 1 }, "rctl36:198::::task.max-cpu-time=(priv,20T,none)" ], 4997c478bd9Sstevel@tonic-gate 5007c478bd9Sstevel@tonic-gate# negative 5017c478bd9Sstevel@tonic-gate 5027c478bd9Sstevel@tonic-gate [ 0, 1, {}, "system:0::::" ], 5037c478bd9Sstevel@tonic-gate [ 0, 1, {}, "user.root:1::::" ], 5047c478bd9Sstevel@tonic-gate [ 0, 1, {}, "noproject:2::::" ], 5057c478bd9Sstevel@tonic-gate [ 0, 1, {}, "default:3::::" ], 5067c478bd9Sstevel@tonic-gate [ 0, 1, {}, "group.staff:10::::" ], 5077c478bd9Sstevel@tonic-gate [ 0, 1, {}, "long:100::::" . "a" x 4096 ], 5087c478bd9Sstevel@tonic-gate [ 1, 0, {}, "extrafields:101:::::" ], 5097c478bd9Sstevel@tonic-gate [ 1, 0, {}, "missingfields:102:::" ], 5107c478bd9Sstevel@tonic-gate [ 1, 0, {}, "_invalidname:103::::" ], 5117c478bd9Sstevel@tonic-gate [ 1, 0, {}, "10invlidname:104::::" ], 5127c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid%name:105::::" ], 5137c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid/name:106::::" ], 5147c478bd9Sstevel@tonic-gate [ 1, 0, {}, ".invalidname:107::::" ], 5157c478bd9Sstevel@tonic-gate [ 1, 0, {}, "=invalidName:108::::" ], 5167c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid=name:109::::" ], 5177c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid/name:110::::" ], 5187c478bd9Sstevel@tonic-gate [ 1, 0, {}, "/invalidname:111::::" ], 5197c478bd9Sstevel@tonic-gate [ 1, 0, {}, "/invalidname:112::::" ], 5207c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalidname*:113::::" ], 5217c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid?name:114::::" ], 5227c478bd9Sstevel@tonic-gate [ 1, 0, {}, ":115:invalid name comment:::" ], 5237c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid!name:116::::" ], 5247c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalidname!:117::::" ], 5257c478bd9Sstevel@tonic-gate [ 1, 0, {}, "invalid12345678901234567890123456789012345678901234567890123456789:118::::" ], 5267c478bd9Sstevel@tonic-gate [ 1, 0, {}, "projid:-1::::" ], 5277c478bd9Sstevel@tonic-gate [ 1, 0, {}, "projid:abc::::" ], 5287c478bd9Sstevel@tonic-gate [ 1, 0, {}, "projid:2147483648::::" ], 5297c478bd9Sstevel@tonic-gate [ 1, 0, {}, "projid:::::" ], 5307c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user1:118::*!::" ], 5317c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user2:119::10user::" ], 5327c478bd9Sstevel@tonic-gate [ 0, 1, {}, "user3:120::NOLOWER::" ], 5337c478bd9Sstevel@tonic-gate [ 0, 1, {}, "user4:121::toooolong::" ], 5347c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user5:122::root!::" ], 5357c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user6:123::root;sys::" ], 5367c478bd9Sstevel@tonic-gate [ 0, 1, {}, "user7:124::sys,NOLOWER::" ], 5377c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user8:125::sys/bin,root::" ], 5387c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user9:116::*, !sys::" ], 5397c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user10:117::!* ,daemon::" ], 5407c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user11:118::root ,sys ,daemon, bin::" ], 5417c478bd9Sstevel@tonic-gate [ 1, 0, {}, "user12:119::root, !sys, daemon ,!bin::" ], 5427c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group1:126:::*!:" ], 5437c478bd9Sstevel@tonic-gate [ 0, 1, {}, "group2:127:::oneUpper:" ], 5447c478bd9Sstevel@tonic-gate [ 0, 1, {}, "group3:128:::NOLOWER:" ], 5457c478bd9Sstevel@tonic-gate [ 0, 1, {}, "group4:129:::toooolong:" ], 5467c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group5:130:::root!:" ], 5477c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group6:131:::root;sys:" ], 5487c478bd9Sstevel@tonic-gate [ 0, 1, {}, "group7:132:::sys,NOLOWER:" ], 5497c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group8:133:::sys-bin,root:" ], 5507c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group9:124:::*, !sys:" ], 5517c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group10:125:::!* ,daemon:" ], 5527c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group11:126:::root, sys ,daemon, bin:" ], 5537c478bd9Sstevel@tonic-gate [ 1, 0, {}, "group12:127:::root ,!sys, daemon ,!bin:" ], 5547c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib1:134::::10" ], 5557c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib2:135::::_foo=" ], 5567c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib3:136::::,foo" ], 5577c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib4:137::::sun,foo" ], 5587c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib6:139::::!attrib" ], 5597c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib7:140::::_attrib" ], 5607c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib8:141::::attib,attrib" ], 5617c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib9:142::::attrib/attrib" ], 5627c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib10:143::::one;two,three" ], 5637c478bd9Sstevel@tonic-gate [ 1, 0, {}, "attrib11:144::::one=two;three/" ], 5647c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value1:145::::one=foo%" ], 5657c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value2:146::::one= two" ], 5667c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value3:147::::var=foo?" ], 5677c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value4:148::::name=value;name=value2)" ], 5687c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value5:149::::(foo)" ], 5697c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value6:150::::name=(foo,bar" ], 5707c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value7:151::::name=(value)(value)" ], 5717c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value8:152::::name=)" ], 5727c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value9:153::::name=value,(value value)" ], 5737c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value10:154::::name=(value(value))" ], 5747c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value11:155::::name=(value)value" ], 5757c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value11:156::::name=va?lue" ], 5767c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value12:157::::name=(value,value))" ], 5777c478bd9Sstevel@tonic-gate [ 1, 0, {}, "value13:158::::name=(value),value)" ], 5787c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space1 :159::::" ], 5797c478bd9Sstevel@tonic-gate [ 1, 0, {}, " space2:160::::" ], 5807c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space3: 161::::" ], 5817c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space4:162 ::::" ], 5827c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space 5:163::::" ], 5837c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space6:1 64::::" ], 5847c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space7:165:: root::" ], 5857c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space8:166::root ::" ], 5867c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space9:167::daemon, root::" ], 5877c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space10:168::bin root::" ], 5887c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space11:169::daemon ,root::" ], 5897c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space12 :170::::" ], 5907c478bd9Sstevel@tonic-gate [ 1, 0, {}, " space13:171::::" ], 5917c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space14: 172::::" ], 5927c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space15:173 ::::" ], 5937c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space 16:174::::" ], 5947c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space17:1 75::::" ], 5957c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space18:176::: root:" ], 5967c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space19:177:::root :" ], 5977c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space20:178:::daemon, root:" ], 5987c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space21:179:::bin root:" ], 5997c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space22:180:::daemon ,root:" ], 6007c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space23:181:::: foo" ], 6017c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space34:182::::foo =one" ], 6027c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space35:183::::foo= (one)" ], 6037c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space36:184::::foo=(one, two)" ], 6047c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space37:185::::foo=(one ,two)" ], 6057c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space38:186::::foo=( one)" ], 6067c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space39:187::::foo=(one )" ], 6077c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space40:188::::foo=(one) ,two" ], 6087c478bd9Sstevel@tonic-gate [ 1, 0, {}, "space41:189::::foo=one, (two)" ], 6097c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma1:190::,root,bin::" ], 6107c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma2:191::root,,bin::" ], 6117c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma3:192::,,root,bin::" ], 6127c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma4:193:::,root,bin:" ], 6137c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma5:194:::root,,bin:" ], 6147c478bd9Sstevel@tonic-gate [ 1, 0, {}, "comma6:195:::,,root,bin:" ], 6157c478bd9Sstevel@tonic-gate [ 1, 0, {}, "semi1:196::::;foo" ], 6167c478bd9Sstevel@tonic-gate [ 1, 0, {}, "semi2:197::::foo;;bar=1" ], 6177c478bd9Sstevel@tonic-gate [ 1, 0, {}, "semi3:198::::;;bar=(10)" ], 6187c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl1:199::::task.max-lwps=," ], 6197c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl2:200::::task.max-lwps=" ], 6207c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl3:201::::task.max-lwps=priv" ], 6217c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl4:202::::task.max-lwps=priv,1000" ], 6227c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl5:203::::task.max-lwps=priv,1000,deny" ], 6237c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl6:204::::task.max-lwps=(priv)" ], 6247c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl7:205::::task.max-lwps=(priv,1000)" ], 6257c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl8:206::::task.max-lwps=(foo,100,deny)" ], 6267c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl9:207::::task.max-lwps=(priv,foo,none)" ], 6277c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl9:207::::task.max-lwps=(priv,foo,none)" ], 6287c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl10:208::::task.max-lwps=(priv,100foo,none)" ], 6297c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl11:209::::task.max-lwps=(priv,1000,foo)" ], 6307c478bd9Sstevel@tonic-gate [ 0, 1, { "allowunits" => 1 }, "rctl12:210::::task.max-lwps=(priv,1000k,deny,signal)" ], 6317c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl13:211::::task.max-lwps=(priv,1000,deny,signal=)" ], 6327c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl14:212::::task.max-lwps=(priv,1000,deny,signal=foo)" ], 6337c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl15:213::::task.max-lwps=(priv,1000,deny,signal=1fo)" ], 6347c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl16:214::::task.max-lwps=(priv,1000,deny,signal=100)" ], 6357c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl17:215::::task.max-lwps=(priv,1000,deny,signal=SIG)" ], 6367c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl18:216::::task.max-lwps=(priv,1000,deny,signal=SIG1)" ], 6377c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl19:217::::task.max-lwps=(priv,1000,deny,signal=SIGhup)" ], 6387c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl20:218::::task.max-lwps=(priv,1000,deny,signal=SIGHU)" ], 6397c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl21:219::::task.max-lwps=(priv,1000,deny,signal=SIGHUPP)" ], 6407c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl22:220::::task.max-lwps=(priv,1000,deny,signal=SIGURG)" ], 6417c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl23:221::::task.max-lwps=(priv,1000,deny,signal=SIGXCPU)" ], 6427c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl24:222::::task.max-lwps=(priv,1000,deny,signal=SIGKILL,10)" ], 6437c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl25:223::::task.max-lwps=(priv,1000,deny,signal=SIGKILL,foo)" ], 6447c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl26:224::::process.max-port-events=(priv,1000,none)" ], 6457c478bd9Sstevel@tonic-gate [ 0, 1, { "allowunits" => 1 }, "rctl27:225::::process.max-address-space=(basic,1024mb,deny,signal=TERM)" ], 6467c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl28:226::::process.max-cpu-time=(basic,3600,deny)" ], 6477c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl29:227::::task.max-lwps=()" ], 6487c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl30:228::::task.max-lwps=((priv),deny)" ], 6497c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl31:229::::task.max-lwps=((priv,1000,deny))" ], 6507c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl32:230::::task.max-lwps=(priv,((1000,2000,1000)),deny)" ], 6517c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl33:231::::task.max-lwps=(,,,)" ], 6527c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl34:232::::task.max-lwps=(priv,1000,(deny))" ], 6537c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl35:233::::task.max-lwps=(priv,1000,deny),foo" ], 6547c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl36:234::::task.max-lwps=(priv,1000,deny),(priv,1000)" ], 6557c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl37:235::::project.max-msg-ids=(priv,15EB,deny)" ], 6567c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl38:236::::process.max-address-space=(priv,16.1EB,deny)" ], 6577c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl39:237::::process.max-address-space=(priv,18000000000gb,deny)" ], 6587c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl40:238::::zone.cpu-shares=(priv,10kb,none)" ], 6597c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl41:239::::zone.cpu-shares=(priv,10Ks,none)" ], 6607c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl42:240::::zone.cpu-shares=(priv,10s,none)" ], 6617c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl43:241::::zone.cpu-shares=(priv,100000b,none)" ], 6627c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl44:242::::project.max-shm-memory=(priv,200Ts,deny)" ], 6637c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl45:243::::project.max-shm-memory=(priv,200s,deny)" ], 6647c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl46:244::::task.max-cpu-time=(priv,20B,none)" ], 6657c478bd9Sstevel@tonic-gate [ 1, 0, { "allowunits" => 1 }, "rctl47:245::::task.max-cpu-time=(priv,20Kb,none)" ], 6667c478bd9Sstevel@tonic-gate [ 0, 1, { "allowunits" => 1 }, "rctl48:246::::project.cpu-shares=(priv,100k,none)" ], 6677c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl147:150::::task.max-lwps=(priv,1000M,deny,signal=SIGHUP),(priv,1000k,deny,signal=SIGKILL)" ], 6687c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl148:163::::task.max-lwps=(priv,1000,deny,signal=HUP),(priv,1000k,deny,signal=15)" ], 6697c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl3:165::::project.max-crypto-memory=(priv,10eb,deny)" ], 6707c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl4:166::::project.max-crypto-memory=(privileged,100p,deny)" ], 6717c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl5:167::::project.max-crypto-memory=(priv,1000t,deny)" ], 6727c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl6:168::::project.max-crypto-memory=(priv,1000g,deny)" ], 6737c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl7:169::::process.max-msg-messages=(priv,10m,deny)" ], 6747c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl8:170::::process.max-msg-qbytes=(priv,10000kb,deny)" ], 6757c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl11:173::::process.max-address-space=(priv,10EB,deny)" ], 6767c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl12:174::::process.max-file-descriptor=(basic,1K,deny),(basic,2K,deny)" ], 6777c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl13:175::::process.max-core-size=(priv,1Eb,deny),(priv,10PB,deny)" ], 6787c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl14:176::::process.max-stack-size=(priv,10Tb,deny),(priv,10TB,deny)" ], 6797c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl16:178::::process.max-file-size=(priv,100mb,deny,signal=SIGXFSZ),(priv,1000mb,deny,signal=31)" ], 6807c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl17:179::::process.max-cpu-time=(priv,1t,signal=XCPU),(priv,100ms,sig=30)" ], 6817c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl18:180::::task.max-cpu-time=(priv,1M,sig=SIGKILL)" ], 6827c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl22:184::::project.max-shm-memory=(priv,1000mb,deny)" ], 6837c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl23:185::::project.max-shm-ids=(priv,1k,deny,signal=SIGSTOP)" ], 6847c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl24:186::::project.max-msg-ids=(priv,1m,deny,signal=XRES)" ], 6857c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl26:188::::project.cpu-shares=(priv,63k,none)" ], 6867c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl27:189::::zone.cpu-shares=(priv,20k,none)" ], 6877c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl29:191::::project.max-shm-memory=(priv,200G,deny)" ], 6887c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl30:192::::project.max-shm-memory=(priv,200Gb,deny)" ], 6897c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl31:193::::project.max-shm-memory=(priv,2000B,deny)" ], 6907c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl34:196::::task.max-cpu-time=(priv,2000s,none)" ], 6917c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl35:197::::task.max-cpu-time=(priv,20.1ps,none)" ], 6927c478bd9Sstevel@tonic-gate [ 0, 1, {}, "rctl36:198::::task.max-cpu-time=(priv,20T,none)" ], 6937c478bd9Sstevel@tonic-gate); 6947c478bd9Sstevel@tonic-gate 6957c478bd9Sstevel@tonic-gatemy $parse_exp; 6967c478bd9Sstevel@tonic-gatemy $parse_ret; 6977c478bd9Sstevel@tonic-gatemy $validate_exp; 6987c478bd9Sstevel@tonic-gatemy $validate_ret; 6997c478bd9Sstevel@tonic-gatemy $project; 7007c478bd9Sstevel@tonic-gatemy $projent; 7017c478bd9Sstevel@tonic-gatemy $errors; 7027c478bd9Sstevel@tonic-gate 7037c478bd9Sstevel@tonic-gateforeach $projent_test ( @projent_tests) { 7047c478bd9Sstevel@tonic-gate 7057c478bd9Sstevel@tonic-gate ($parse_exp, $validate_exp, $flags, $project) = @$projent_test; 7067c478bd9Sstevel@tonic-gate $flagstring = hash2string($flags); 7077c478bd9Sstevel@tonic-gate start("projent_parse(): flags: $flagstring, project: $project"); 7087c478bd9Sstevel@tonic-gate ($ret, $projent) = projent_parse($project, $flags); 7097c478bd9Sstevel@tonic-gate if ($ret != $parse_exp) { 7107c478bd9Sstevel@tonic-gate fail("Expected $parse_exp, Returned $ret"); 7117c478bd9Sstevel@tonic-gate if ($ret) { 7127c478bd9Sstevel@tonic-gate foreach $error (@$projent) { 7137c478bd9Sstevel@tonic-gate comment("# " . join(", ", @$error)); 7147c478bd9Sstevel@tonic-gate } 7157c478bd9Sstevel@tonic-gate } 7167c478bd9Sstevel@tonic-gate next; 7177c478bd9Sstevel@tonic-gate } 7187c478bd9Sstevel@tonic-gate pass(); 7197c478bd9Sstevel@tonic-gate 7207c478bd9Sstevel@tonic-gate # projent_validate() can only be successfully parsed projents 7217c478bd9Sstevel@tonic-gate if ($ret) { 7227c478bd9Sstevel@tonic-gate next; 7237c478bd9Sstevel@tonic-gate } 7247c478bd9Sstevel@tonic-gate 7257c478bd9Sstevel@tonic-gate start("projent_validate(): flags: $flagstring, project: $project"); 7267c478bd9Sstevel@tonic-gate ($ret, $errors) = projent_validate($projent, $flags); 7277c478bd9Sstevel@tonic-gate if ($ret != $validate_exp) { 7287c478bd9Sstevel@tonic-gate fail("Expected $validate_exp, Returned $ret"); 7297c478bd9Sstevel@tonic-gate if ($ret) { 7307c478bd9Sstevel@tonic-gate foreach $error (@$errors) { 7317c478bd9Sstevel@tonic-gate comment("# " . join(", ", @$error)); 7327c478bd9Sstevel@tonic-gate } 7337c478bd9Sstevel@tonic-gate } 7347c478bd9Sstevel@tonic-gate next; 7357c478bd9Sstevel@tonic-gate } 7367c478bd9Sstevel@tonic-gate pass(); 7377c478bd9Sstevel@tonic-gate} 7387c478bd9Sstevel@tonic-gate 7397c478bd9Sstevel@tonic-gatemy $pf1; 7407c478bd9Sstevel@tonic-gatemy $pf2; 7417c478bd9Sstevel@tonic-gatemy $fh1; 7427c478bd9Sstevel@tonic-gatemy $fh2; 7437c478bd9Sstevel@tonic-gatemy @lines; 7447c478bd9Sstevel@tonic-gate 7457c478bd9Sstevel@tonic-gate# get projects and make local copy 7467c478bd9Sstevel@tonic-gateopen($fh1, "/usr/bin/getent project |") || fatal($!); 7477c478bd9Sstevel@tonic-gateopen($fh2, ">/tmp/projent.$$") || fatal($!); 7487c478bd9Sstevel@tonic-gate@lines = <$fh1>; 7497c478bd9Sstevel@tonic-gateprint $fh2 @lines; 7507c478bd9Sstevel@tonic-gateclose($fh1); 7517c478bd9Sstevel@tonic-gateclose($fh2); 7527c478bd9Sstevel@tonic-gate 7537c478bd9Sstevel@tonic-gateopen($fh1, "</tmp/projent.$$") || fatal($!); 7547c478bd9Sstevel@tonic-gate$pf1 = read_pfile($fh1); 7557c478bd9Sstevel@tonic-gateclose($fh1); 7567c478bd9Sstevel@tonic-gate 7577c478bd9Sstevel@tonic-gate 7587c478bd9Sstevel@tonic-gatestart("Test getprojid"); 7597c478bd9Sstevel@tonic-gate($s) = `/usr/xpg4/bin/id -p` =~ /projid=(\d+)/; 7607c478bd9Sstevel@tonic-gatedefined($s) && $s == getprojid() ? pass() : fail(); 7617c478bd9Sstevel@tonic-gate 7627c478bd9Sstevel@tonic-gatestart("Test fgetprojent"); 7637c478bd9Sstevel@tonic-gate$pf2 = []; 7647c478bd9Sstevel@tonic-gateopen($fh, "</tmp/projent.$$") || fatal($!); 7657c478bd9Sstevel@tonic-gatewhile (my @proj = fgetprojent($fh)) { 7667c478bd9Sstevel@tonic-gate push(@$pf2, [ @proj ]); 7677c478bd9Sstevel@tonic-gate} 7687c478bd9Sstevel@tonic-gateclose($fh); 7697c478bd9Sstevel@tonic-gatecmp_recs($pf1, $pf2) ? pass() : fail(); 7707c478bd9Sstevel@tonic-gate 7717c478bd9Sstevel@tonic-gatemy %pf_byname = map({ $_->[0] => $_} @$pf1); 7727c478bd9Sstevel@tonic-gatemy %pf_byid = map({ $_->[1] => $_} @$pf1); 7737c478bd9Sstevel@tonic-gatemy (%h, @a1, @a2, $k, $v); 7747c478bd9Sstevel@tonic-gate 7757c478bd9Sstevel@tonic-gatestart("Test getprojent. Don't assume anything about the order it returns stuff in"); 7767c478bd9Sstevel@tonic-gate%h = %pf_byname; 7777c478bd9Sstevel@tonic-gate$pass = 1; 7787c478bd9Sstevel@tonic-gate@a2 = (); 7797c478bd9Sstevel@tonic-gatewhile (@a1 = getprojent()) { 7807c478bd9Sstevel@tonic-gate @a2 = @a1 if (! scalar(@a2)); 7817c478bd9Sstevel@tonic-gate if (exists($h{$a1[0]})) { 7827c478bd9Sstevel@tonic-gate $pass = 0 if (! cmp_recs(\@a1, $h{$a1[0]})); 7837c478bd9Sstevel@tonic-gate delete($h{$a1[0]}); 7847c478bd9Sstevel@tonic-gate } else { 7857c478bd9Sstevel@tonic-gate $pass = 0; 7867c478bd9Sstevel@tonic-gate } 7877c478bd9Sstevel@tonic-gate} 7887c478bd9Sstevel@tonic-gate$pass && ! %h ? pass() : fail(); 7897c478bd9Sstevel@tonic-gate 7907c478bd9Sstevel@tonic-gatestart("Test getprojent when at end"); 7917c478bd9Sstevel@tonic-gate@a1 = getprojent(); 7927c478bd9Sstevel@tonic-gatecmp_recs(\@a1, []) ? pass() : fail(); 7937c478bd9Sstevel@tonic-gate 7947c478bd9Sstevel@tonic-gate 7957c478bd9Sstevel@tonic-gatestart("Test endprojent/getprojent"); 7967c478bd9Sstevel@tonic-gateendprojent(); 7977c478bd9Sstevel@tonic-gate@a1 = getprojent(); 7987c478bd9Sstevel@tonic-gatecmp_recs(\@a1, \@a2) ? pass() : fail(); 7997c478bd9Sstevel@tonic-gate 8007c478bd9Sstevel@tonic-gatestart("Test setprojent/getprojent"); 8017c478bd9Sstevel@tonic-gatesetprojent(); 8027c478bd9Sstevel@tonic-gate@a1 = getprojent(); 8037c478bd9Sstevel@tonic-gatecmp_recs(\@a1, \@a2) ? pass() : fail(); 8047c478bd9Sstevel@tonic-gatesetprojent(); 8057c478bd9Sstevel@tonic-gate 8067c478bd9Sstevel@tonic-gatestart("Test getprojbyname"); 8077c478bd9Sstevel@tonic-gate$pass = 1; 8087c478bd9Sstevel@tonic-gatewhile (($k, $v) = each(%pf_byname)) { 8097c478bd9Sstevel@tonic-gate @a1 = getprojbyname($k); 8107c478bd9Sstevel@tonic-gate $pass = 0 if (! cmp_recs(\@a1, $v)); 8117c478bd9Sstevel@tonic-gate} 8127c478bd9Sstevel@tonic-gate$pass ? pass() : fail(); 8137c478bd9Sstevel@tonic-gate 8147c478bd9Sstevel@tonic-gatestart("Test getprojbyid"); 8157c478bd9Sstevel@tonic-gate$pass = 1; 8167c478bd9Sstevel@tonic-gatewhile (($k, $v) = each(%pf_byid)) { 8177c478bd9Sstevel@tonic-gate @a1 = getprojbyid($k); 8187c478bd9Sstevel@tonic-gate $pass = 0 if (! cmp_recs(\@a1, $v)); 8197c478bd9Sstevel@tonic-gate} 8207c478bd9Sstevel@tonic-gate$pass ? pass() : fail(); 8217c478bd9Sstevel@tonic-gate 8227c478bd9Sstevel@tonic-gatestart("Test getprojidbyname"); 8237c478bd9Sstevel@tonic-gate$pass = 1; 8247c478bd9Sstevel@tonic-gatewhile (($k, $v) = each(%pf_byname)) { 8257c478bd9Sstevel@tonic-gate $pass = 0 if (getprojidbyname($k) != $v->[1]); 8267c478bd9Sstevel@tonic-gate} 8277c478bd9Sstevel@tonic-gate$pass ? pass() : fail(); 8287c478bd9Sstevel@tonic-gate 8297c478bd9Sstevel@tonic-gatestart("Test getdefaultproj"); 8307c478bd9Sstevel@tonic-gatemy $username = getpwuid($>); 8317c478bd9Sstevel@tonic-gatemy $projid; 8327c478bd9Sstevel@tonic-gate$s = `/usr/bin/id -p` ; 8337c478bd9Sstevel@tonic-gate($projid) = $s =~ /projid=\d+\(([^)]+)\)/; 8347c478bd9Sstevel@tonic-gatedefined($projid) && $projid eq getdefaultproj($username) ? pass() : fail(); 8357c478bd9Sstevel@tonic-gate 8367c478bd9Sstevel@tonic-gatestart("test inproj"); 8377c478bd9Sstevel@tonic-gate$s = `/usr/bin/projects`; 8387c478bd9Sstevel@tonic-gate($s) = split(/\s+/, $s); 8397c478bd9Sstevel@tonic-gateinproj($username, $s) ? pass() : fail(); 8407c478bd9Sstevel@tonic-gate 8417c478bd9Sstevel@tonic-gateexit(0); 842