main.c
上传用户:skhuanbao
上传日期:2007-01-04
资源大小:43k
文件大小:3k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.     File: smtp/main.c
  3.     
  4.     Copyright (C) 1999 by Wolfgang Zekoll <wzk@quietsche-entchen.de>
  5.     This source is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 1, or (at your option)
  8.     any later version.
  9.     This source is distributed in the hope that it will be useful,
  10.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.     GNU General Public License for more details.
  13.     You should have received a copy of the GNU General Public License
  14.     along with this program; if not, write to the Free Software
  15.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. */
  17. #include <stdlib.h>
  18. #include <stdio.h>
  19. #include <string.h>
  20. #include <unistd.h>
  21. #include <sys/types.h>
  22. #include <sys/stat.h>
  23. #include <sys/fcntl.h>
  24. #include <sys/socket.h>
  25. #include <signal.h>
  26. #include <netdb.h>
  27. #include <netinet/in.h>
  28. #include <syslog.h>
  29. #include <sys/time.h>
  30. #include "smtp.h"
  31. #include "ip-lib.h"
  32. #include "lib.h"
  33. char *program = "";
  34. char progname[80] = "";
  35. char configfile[300] = "";
  36. int debug = 0;
  37. int etrn = 0;
  38. void missing_arg(int c, char *string)
  39. {
  40. fprintf (stderr, "%s: missing arg: -%c, %sn", program, c, string);
  41. exit (-1);
  42. }
  43. int main(int argc, char *argv[])
  44. {
  45. int c, i, k;
  46. char *p, option[80];
  47. config_t config;
  48. if ((p = strrchr(argv[0], '/')) == NULL)
  49. program = argv[0];
  50. else {
  51. copy_string(progname, &p[1], sizeof(progname));
  52. program = progname;
  53. }
  54. memset(&config, 0, sizeof(config_t));
  55. config.timeout    = SMTP_TIMEOUT;
  56. config.accepttime = SMTP_ACCEPTTIME;
  57. openlog(program, LOG_PID, LOG_MAIL);
  58. k = 1;
  59. while (k < argc  &&  argv[k][0] == '-'  &&  argv[k][1] != 0) {
  60. copy_string(option, argv[k++], sizeof(option));
  61. for (i=1; (c = option[i]) != 0; i++) {
  62. if (c == 'd')
  63. debug = 1;
  64. else if (c == 'e')
  65. config.etrn = 1;
  66. else if (c == 'l') {
  67. if (k >= argc)
  68. missing_arg(c, "client log directory");
  69. copy_string(config.clientdir, argv[k++], sizeof(config.clientdir));
  70. }
  71. else if (c == 'q') {
  72. if (config.droppath == 0)
  73. config.droppath = 1;
  74. else
  75. config.droppath = 2;
  76. }
  77. else if (c == 'r') {
  78. if (k >= argc)
  79. missing_arg(c, "domain list");
  80. config.rcptlist = allocate(strlen(argv[k]) + 10);
  81. strcpy(config.rcptlist, argv[k++]);
  82. }
  83. else if (c == 's') {
  84. if (k >= argc)
  85. missing_arg(c, "domain list");
  86. config.senderlist = allocate(strlen(argv[k]) + 10);
  87. strcpy(config.senderlist, argv[k++]);
  88. }
  89. else if (c == 't') {
  90. if (k >= argc)
  91. missing_arg(c, "timeout");
  92. config.timeout = atoi(argv[k++]);
  93. if (config.timeout < 1)
  94. config.timeout = 60;
  95. }
  96. else {
  97. if (isatty(2))
  98. fprintf (stderr, "%s: unknown option: -%cn", program, c);
  99. exit (-1);
  100. }
  101. }
  102. }
  103. if (k >= argc) {
  104. static char *sendmailargv[] = { SENDMAIL, "-bs", NULL };
  105. config.argv = sendmailargv;
  106. }
  107. else {
  108. if (*argv[k] == '/')
  109. config.argv = &argv[k];
  110. else {
  111. copy_string(config.server, argv[k++], sizeof(config.server));
  112. if (k < argc) {
  113. if (isatty(2))
  114. fprintf (stderr, "%s: unexpected extra argumentsn", program);
  115. exit (1);
  116. }
  117. }
  118. }
  119. proxy_request(&config);
  120. close(0);
  121. exit (0);
  122. }