static void error_service(VSTREAM *client_stream, char *service, char **argv) { DELIVER_REQUEST *request; int status; /* * Sanity check. This service takes no command-line arguments. */ if (argv[0]) msg_fatal("unexpected command-line argument: %s", argv[0]); /* * This routine runs whenever a client connects to the UNIX-domain socket * dedicated to the error mailer. What we see below is a little protocol * to (1) tell the queue manager that we are ready, (2) read a request * from the queue manager, and (3) report the completion status of that * request. All connection-management stuff is handled by the common code * in single_server.c. */ if ((request = deliver_request_read(client_stream)) != 0) { if (strcmp(service, MAIL_SERVICE_ERROR) == 0) status = deliver_message(request, "5.0.0", bounce_append); else if (strcmp(service, MAIL_SERVICE_RETRY) == 0) status = deliver_message(request, "4.0.0", defer_append); else msg_fatal("bad error service name: %s", service); deliver_request_done(client_stream, request, status); } }
static void pipe_service(VSTREAM *client_stream, char *service, char **argv) { DELIVER_REQUEST *request; int status; /* * This routine runs whenever a client connects to the UNIX-domain socket * dedicated to delivery via external command. What we see below is a * little protocol to (1) tell the queue manager that we are ready, (2) * read a request from the queue manager, and (3) report the completion * status of that request. All connection-management stuff is handled by * the common code in single_server.c. */ if ((request = deliver_request_read(client_stream)) != 0) { status = deliver_message(request, service, argv); deliver_request_done(client_stream, request, status); } }
static void local_service(VSTREAM *stream, char *service, char **argv) { DELIVER_REQUEST *request; int status; /* * Sanity check. This service takes no command-line arguments. */ if (argv[0]) msg_fatal("unexpected command-line argument: %s", argv[0]); /* * This routine runs whenever a client connects to the UNIX-domain socket * that is dedicated to local mail delivery service. What we see below is * a little protocol to (1) tell the client that we are ready, (2) read a * delivery request from the client, and (3) report the completion status * of that request. */ if ((request = deliver_request_read(stream)) != 0) { status = local_deliver(request, service); deliver_request_done(stream, request, status); } }
static void discard_service(VSTREAM *client_stream, char *unused_service, char **argv) { DELIVER_REQUEST *request; int status; /* * Sanity check. This service takes no command-line arguments. */ if (argv[0]) msg_fatal("unexpected command-line argument: %s", argv[0]); /* * This routine runs whenever a client connects to the UNIX-domain socket * dedicated to the discard mailer. What we see below is a little * protocol to (1) tell the queue manager that we are ready, (2) read a * request from the queue manager, and (3) report the completion status * of that request. All connection-management stuff is handled by the * common code in single_server.c. */ if ((request = deliver_request_read(client_stream)) != 0) { status = deliver_message(request); deliver_request_done(client_stream, request, status); } }