11da7c95b62537f066c74972e2b59a322446ca86eDmitry V. LevinBEGIN {
2c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  r_uint = "(0|[1-9][0-9]*)"
3c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  regexp = "^getuid" suffix "\\(\\)[[:space:]]+= " r_uint "$"
4c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  expected = "getuid"
51da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  fail = 0
61da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin}
71da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin
8c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levinregexp == "" {
91da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  fail = 1
101da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  next
111da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin}
121da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin
131da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin{
14c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  if (match($0, regexp, a)) {
1508b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    if (expected == "getuid") {
1608b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      uid = a[1]
1708b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "setuid"
1808b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^setuid" suffix "\\(" uid "\\)[[:space:]]+= 0$"
1908b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "setuid") {
2008b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "getresuid"
2108b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^getresuid" suffix "\\(\\[" uid "\\], \\[" uid "\\], \\[" uid "\\]\\)[[:space:]]+= 0$"
2208b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "getresuid") {
2308b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "setreuid"
2408b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^setreuid" suffix "\\(-1, -1\\)[[:space:]]+= 0$"
2508b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "setreuid") {
2608b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "setresuid"
273a15bc8adf3031b474a81e1c672c11817c8ee8f0Dmitry V. Levin      regexp = "^setresuid" suffix "\\(" uid ", -1, -1\\)[[:space:]]+= 0$"
2808b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "setresuid") {
2968804b326709fadc7bb03f510a11771f07216a59Dmitry V. Levin      expected = "fchown"
3068804b326709fadc7bb03f510a11771f07216a59Dmitry V. Levin      regexp = "^fchown" suffix "\\(1, -1, -1\\)[[:space:]]+= 0$"
3168804b326709fadc7bb03f510a11771f07216a59Dmitry V. Levin    } else if (expected == "fchown") {
3208b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "1st getgroups"
3308b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^getgroups" suffix "\\(0, NULL\\)[[:space:]]+= " r_uint "$"
3408b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "1st getgroups") {
3508b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      ngroups = a[1]
3608b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      if (ngroups == "0")
3708b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin        list=""
3808b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      else if (ngroups == "1")
3908b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin        list=r_uint
4008b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      else
4108b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin        list=r_uint "(, " r_uint "){" (ngroups - 1) "}"
4208b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "2nd getgroups"
4308b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^getgroups" suffix "\\(" ngroups ", \\[" list "\\]\\)[[:space:]]+= " ngroups "$"
4408b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "2nd getgroups") {
4508b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "the last line"
4608b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = "^\\+\\+\\+ exited with 0 \\+\\+\\+$"
4708b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin    } else if (expected == "the last line") {
4808b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      expected = "nothing"
4908b6397d13580fd82450a43f3a65237041679421Dmitry V. Levin      regexp = ""
50c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin    }
511da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  }
521da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin}
531da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin
541da7c95b62537f066c74972e2b59a322446ca86eDmitry V. LevinEND {
551da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  if (fail) {
561da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin    print "Unexpected output after exit"
571da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin    exit 1
581da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  }
59c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  if (regexp == "")
601da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin    exit 0
61c55bfb0045094c38a158d22666bea78682df1716Dmitry V. Levin  print "error: " expected " doesn't match"
621da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin  exit 1
631da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin}
64