authdaemontest.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 2000 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. #include "config.h"
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #if HAVE_UNISTD_H
  10. #include <unistd.h>
  11. #endif
  12. #include <fcntl.h>
  13. #include        <unistd.h>
  14. #include        <stdlib.h>
  15. #include        <stdio.h>
  16. #include        <errno.h>
  17. #include <signal.h>
  18. #include "authwait.h"
  19. static const char rcsid[]="$Id: authdaemontest.c,v 1.1 2000/04/26 22:32:37 mrsam Exp $";
  20. static int runtest(int count, char **argv)
  21. {
  22. int i;
  23. pid_t p;
  24. int waitstat;
  25. int x;
  26. for (i=0; i<count; i++)
  27. {
  28. p=fork();
  29. if (p == -1)
  30. {
  31. perror("fork");
  32. return (1);
  33. }
  34. if (p == 0)
  35. {
  36. execv(argv[0], argv);
  37. perror("exec");
  38. exit(1);
  39. }
  40. while (wait(&waitstat) != p)
  41. ;
  42. if (WIFEXITED(waitstat))
  43. x=WEXITSTATUS(waitstat);
  44. else
  45. x=1;
  46. if (x)
  47. return (1);
  48. }
  49. return (0);
  50. }
  51. static int cleanup()
  52. {
  53. int waitstat;
  54. int rc=0;
  55. int x;
  56. while (wait(&waitstat) >= 0 || errno != ECHILD)
  57. {
  58. x=1;
  59. if (WIFEXITED(waitstat))
  60. x=WEXITSTATUS(waitstat);
  61. if (x)
  62. rc=1;
  63. }
  64. return (rc);
  65. }
  66. static int dotest(int nchildren, int count, char **argv)
  67. {
  68. pid_t p;
  69. int i;
  70. signal(SIGCHLD, SIG_DFL);
  71. for (i=0; i<nchildren; i++)
  72. {
  73. p=fork();
  74. if (p == -1)
  75. {
  76. perror("fork");
  77. cleanup();
  78. return (1);
  79. }
  80. if (p == 0)
  81. {
  82. close(1);
  83. if (open("/dev/null", O_WRONLY) != 1)
  84. {
  85. perror("open");
  86. exit(1);
  87. }
  88. exit(runtest(count, argv));
  89. }
  90. }
  91. return (cleanup());
  92. }
  93. int main(int argc, char **argv)
  94. {
  95. if (argc >= 4)
  96. {
  97. int nchildren=atoi(argv[1]);
  98. int count=atoi(argv[2]);
  99. if (nchildren > 0 && count > 0)
  100. exit(dotest(nchildren, count, argv+3));
  101. }
  102. fprintf(stderr, "Usage: authdaemontest [nchildren] [count] ./authtest [userid] [password]n");
  103. exit(1);
  104. return (1);
  105. }