Use 1 line for function name and return value, remove dofork define/variable, dont check pid value is < or > than 0 if we know it is 0.
No binary (build failed)
—
(log yok)
| @@ -131,25 +131,24 @@ | |
| #include <stdarg.h> | |
| #include <time.h> | |
| + | #ifndef OPEN_MAX |
| + | #define OPEN_MAX 64 |
| + | #endif |
| + | |
| #define _PATH_INETDCONF "/etc/inetd.conf" | |
| #define _PATH_INETDPID "/var/run/inetd.pid" | |
| - | #define TOOMANY 40 /* don't start more than TOOMANY */ |
| - | #define CNT_INTVL 60 /* servers in CNT_INTVL sec. */ |
| - | #define RETRYTIME (60*10) /* retry after bind or server fail */ |
| - | |
| - | #ifndef OPEN_MAX |
| - | #define OPEN_MAX 64 |
| - | #endif |
| + | #define TOOMANY 40 /* don't start more than TOOMANY */ |
| + | #define CNT_INTVL 60 /* servers in CNT_INTVL sec. */ |
| + | #define RETRYTIME (60*10) /* retry after bind or server fail */ |
| + | #define MAXARGV 20 |
| + | #define se_ctrladdr se_un.se_un_ctrladdr |
| + | #define se_ctrladdr_in se_un.se_un_ctrladdr_in |
| + | #define se_ctrladdr_un se_un.se_un_ctrladdr_un |
| /* Reserve some descriptors, 3 stdio + at least: 1 log, 1 conf. file */ | |
| - | #define FD_MARGIN (8) |
| - | static int rlim_ofile_cur = OPEN_MAX; |
| - | |
| - | #ifdef RLIMIT_NOFILE |
| - | static struct rlimit rlim_ofile; |
| - | #endif |
| + | #define FD_MARGIN (8) |
| /* Check unsupporting builtin */ | |
| #if defined CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO || \ | |
| @@ -173,7 +172,6 @@ static struct servtab { | |
| const struct biltin *se_bi; /* if built-in, description */ | |
| #endif | |
| char *se_server; /* server program */ | |
| - | #define MAXARGV 20 |
| char *se_argv[MAXARGV+1]; /* program arguments */ | |
| int se_fd; /* open descriptor */ | |
| union { | |
| @@ -181,9 +179,6 @@ static struct servtab { | |
| struct sockaddr_in se_un_ctrladdr_in; | |
| struct sockaddr_un se_un_ctrladdr_un; | |
| } se_un; /* bound address */ | |
| - | #define se_ctrladdr se_un.se_un_ctrladdr |
| - | #define se_ctrladdr_in se_un.se_un_ctrladdr_in |
| - | #define se_ctrladdr_un se_un.se_un_ctrladdr_un |
| int se_ctrladdr_size; | |
| int se_max; /* max # of instances of this service */ | |
| int se_count; /* number started since se_time */ | |
| @@ -191,21 +186,21 @@ static struct servtab { | |
| struct servtab *se_next; | |
| } *servtab; | |
| - | /* Length of socket listen queue. Should be per-service probably. */ |
| - | static int global_queuelen = 128; |
| - | |
| - | static int nsock, maxsock; |
| - | static fd_set allsock; |
| - | static int timingout; |
| - | static sigset_t blockmask, emptymask; |
| - | |
| + | #ifdef INETD_FEATURE_ENABLED |
| + | struct biltin { |
| + | const char *bi_service; /* internally provided service name */ |
| + | int bi_socktype; /* type of socket supported */ |
| + | short bi_fork; /* 1 if should fork before call */ |
| + | short bi_wait; /* 1 if should wait for child */ |
| + | void (*bi_fn)(int, struct servtab *); /* fn which performs it */ |
| + | }; |
| - | /* Echo received data */ |
| + | /* Echo received data */ |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO | |
| static void echo_stream(int, struct servtab *); | |
| static void echo_dg(int, struct servtab *); | |
| #endif | |
| - | /* Internet /dev/null */ |
| + | /* Internet /dev/null */ |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD | |
| static void discard_stream(int, struct servtab *); | |
| static void discard_dg(int, struct servtab *); | |
| @@ -226,16 +221,6 @@ static void chargen_stream(int, struct servtab *); | |
| static void chargen_dg(int, struct servtab *); | |
| #endif | |
| - | |
| - | #ifdef INETD_FEATURE_ENABLED |
| - | struct biltin { |
| - | const char *bi_service; /* internally provided service name */ |
| - | int bi_socktype; /* type of socket supported */ |
| - | short bi_fork; /* 1 if should fork before call */ |
| - | short bi_wait; /* 1 if should wait for child */ |
| - | void (*bi_fn)(int, struct servtab *); /* fn which performs it */ |
| - | }; |
| - | |
| static const struct biltin biltins[] = { | |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO | |
| /* Echo received data */ | |
| @@ -266,7 +251,23 @@ static const struct biltin biltins[] = { | |
| }; | |
| #endif /* INETD_FEATURE_ENABLED */ | |
| + | #ifdef RLIMIT_NOFILE |
| + | static struct rlimit rlim_ofile; |
| + | #endif |
| + | |
| + | /* Length of socket listen queue. Should be per-service probably. */ |
| + | static int global_queuelen = 128; |
| + | |
| + | static FILE *fconfig; |
| + | static sigset_t blockmask; |
| + | static sigset_t emptymask; |
| + | static fd_set allsock; |
| + | static int nsock; |
| + | static int maxsock; |
| + | static int timingout; |
| + | static int rlim_ofile_cur = OPEN_MAX; |
| static const char *CONFIG = _PATH_INETDCONF; | |
| + | static FILE *fconfig; |
| static void | |
| syslog_err_and_discard_dg(int se_socktype, const char *msg, ...) | |
| @@ -285,10 +286,7 @@ syslog_err_and_discard_dg(int se_socktype, const char *msg, ...) | |
| _exit(1); | |
| } | |
| - | static FILE *fconfig; |
| - | |
| - | static FILE * |
| - | setconfig(void) |
| + | static FILE *setconfig(void) |
| { | |
| FILE *f = fconfig; | |
| @@ -302,8 +300,7 @@ setconfig(void) | |
| return f; | |
| } | |
| - | static char * |
| - | skip(char **cpp) |
| + | static char *skip(char **cpp) |
| { | |
| char *cp = *cpp; | |
| char *start; | |
| @@ -335,8 +332,7 @@ again: | |
| return (start); | |
| } | |
| - | static char * |
| - | newstr(char *cp) |
| + | static char *newstr(char *cp) |
| { | |
| cp = strdup(cp ? cp : ""); | |
| if (cp) | |
| @@ -346,8 +342,7 @@ newstr(char *cp) | |
| } | |
| - | static struct servtab * |
| - | getconfigent(void) |
| + | static struct servtab *getconfigent(void) |
| { | |
| static struct servtab serv; | |
| struct servtab *sep = &serv; | |
| @@ -441,8 +436,7 @@ more: | |
| return (sep); | |
| } | |
| - | static void |
| - | freeconfig(struct servtab *cp) |
| + | static void freeconfig(struct servtab *cp) |
| { | |
| int i; | |
| @@ -459,8 +453,7 @@ freeconfig(struct servtab *cp) | |
| static char **Argv; | |
| static char *LastArg; | |
| - | static void |
| - | setproctitle(char *a, int s) |
| + | static void setproctitle(char *a, int s) |
| { | |
| size_t size; | |
| char *cp; | |
| @@ -480,8 +473,7 @@ setproctitle(char *a, int s) | |
| } | |
| #endif /* INETD_FEATURE_ENABLED */ | |
| - | static struct servtab * |
| - | enter(struct servtab *cp) |
| + | static struct servtab *enter(struct servtab *cp) |
| { | |
| struct servtab *sep; | |
| sigset_t oldmask; | |
| @@ -499,8 +491,7 @@ enter(struct servtab *cp) | |
| return (sep); | |
| } | |
| - | static int |
| - | bump_nofile(void) |
| + | static int bump_nofile(void) |
| { | |
| #ifdef RLIMIT_NOFILE | |
| @@ -539,8 +530,7 @@ bump_nofile(void) | |
| } | |
| - | static void |
| - | setup(struct servtab *sep) |
| + | static void setup(struct servtab *sep) |
| { | |
| int on = 1; | |
| @@ -575,8 +565,7 @@ setup(struct servtab *sep) | |
| } | |
| } | |
| - | static void |
| - | config(int signum) |
| + | static void config(int signum) |
| { | |
| struct servtab *sep, *cp, **sepp; | |
| sigset_t oldmask; | |
| @@ -705,8 +694,7 @@ config(int signum) | |
| - | static void |
| - | reapchild(int signum) |
| + | static void reapchild(int signum) |
| { | |
| int status; | |
| int pid; | |
| @@ -734,8 +722,7 @@ reapchild(int signum) | |
| } | |
| } | |
| - | static void |
| - | retry(int signum) |
| + | static void retry(int signum) |
| { | |
| struct servtab *sep; | |
| @@ -753,8 +740,7 @@ retry(int signum) | |
| } | |
| } | |
| - | static void |
| - | goaway(int signum) |
| + | static void goaway(int signum) |
| { | |
| struct servtab *sep; | |
| @@ -768,11 +754,9 @@ goaway(int signum) | |
| - | extern int |
| - | inetd_main(int argc, char *argv[]) |
| + | extern int inetd_main(int argc, char *argv[]) |
| { | |
| struct servtab *sep; | |
| - | struct passwd *pwd; |
| struct group *grp = NULL; | |
| struct sigaction sa; | |
| int pid; | |
| @@ -781,10 +765,7 @@ inetd_main(int argc, char *argv[]) | |
| gid_t gid; | |
| #ifdef INETD_FEATURE_ENABLED | |
| - | int dofork; |
| extern char **environ; | |
| - | #else |
| - | # define dofork 1 |
| #endif | |
| gid = getgid(); | |
| @@ -914,12 +895,11 @@ inetd_main(int argc, char *argv[]) | |
| sigprocmask(SIG_BLOCK, &blockmask, NULL); | |
| pid = 0; | |
| #ifdef INETD_FEATURE_ENABLED | |
| - | dofork = (sep->se_bi == 0 || sep->se_bi->bi_fork); |
| + | if (sep->se_bi == 0 || sep->se_bi->bi_fork) |
| #endif | |
| - | if (dofork) { |
| + | { |
| if (sep->se_count++ == 0) | |
| - | (void)gettimeofday(&sep->se_time, |
| - | (struct timezone *)0); |
| + | (void)gettimeofday(&sep->se_time, (struct timezone *)0); |
| else if (sep->se_count >= sep->se_max) { | |
| struct timeval now; | |
| @@ -947,19 +927,19 @@ inetd_main(int argc, char *argv[]) | |
| } | |
| } | |
| pid = fork(); | |
| - | } |
| - | if (pid < 0) { |
| - | syslog(LOG_ERR, "fork: %m"); |
| - | if (sep->se_socktype == SOCK_STREAM) |
| - | close(ctrl); |
| - | sigprocmask(SIG_SETMASK, &emptymask, NULL); |
| - | sleep(1); |
| - | continue; |
| - | } |
| - | if (pid && sep->se_wait) { |
| - | sep->se_wait = pid; |
| - | FD_CLR(sep->se_fd, &allsock); |
| - | nsock--; |
| + | if (pid < 0) { |
| + | syslog(LOG_ERR, "fork: %m"); |
| + | if (sep->se_socktype == SOCK_STREAM) |
| + | close(ctrl); |
| + | sigprocmask(SIG_SETMASK, &emptymask, NULL); |
| + | sleep(1); |
| + | continue; |
| + | } |
| + | if (pid && sep->se_wait) { |
| + | sep->se_wait = pid; |
| + | FD_CLR(sep->se_fd, &allsock); |
| + | nsock--; |
| + | } |
| } | |
| sigprocmask(SIG_SETMASK, &emptymask, NULL); | |
| if (pid == 0) { | |
| @@ -968,8 +948,9 @@ inetd_main(int argc, char *argv[]) | |
| (*sep->se_bi->bi_fn)(ctrl, sep); | |
| else | |
| #endif | |
| - | { |
| - | if ((pwd = getpwnam(sep->se_user)) == NULL) { |
| + | { |
| + | struct passwd *pwd = getpwnam(sep->se_user); |
| + | if (pwd == NULL) { |
| syslog_err_and_discard_dg( | |
| sep->se_socktype, | |
| "getpwnam: %s: No such user", | |
| @@ -1041,8 +1022,7 @@ inetd_main(int argc, char *argv[]) | |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_ECHO | |
| /* Echo service -- echo data back */ | |
| - | static void |
| - | echo_stream(int s, struct servtab *sep) |
| + | static void echo_stream(int s, struct servtab *sep) |
| { | |
| char buffer[BUFSIZE]; | |
| int i; | |
| @@ -1055,8 +1035,7 @@ echo_stream(int s, struct servtab *sep) | |
| } | |
| /* Echo service -- echo data back */ | |
| - | static void |
| - | echo_dg(int s, struct servtab *sep) |
| + | static void echo_dg(int s, struct servtab *sep) |
| { | |
| char buffer[BUFSIZE]; | |
| int i; | |
| @@ -1075,8 +1054,7 @@ echo_dg(int s, struct servtab *sep) | |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DISCARD | |
| /* Discard service -- ignore data */ | |
| - | static void |
| - | discard_stream(int s, struct servtab *sep) |
| + | static void discard_stream(int s, struct servtab *sep) |
| { | |
| char buffer[BUFSIZE]; | |
| @@ -1088,8 +1066,7 @@ discard_stream(int s, struct servtab *sep) | |
| } | |
| /* Discard service -- ignore data */ | |
| - | static void |
| - | discard_dg(int s, struct servtab *sep) |
| + | static void discard_dg(int s, struct servtab *sep) |
| { | |
| char buffer[BUFSIZE]; | |
| (void)sep; | |
| @@ -1104,8 +1081,7 @@ discard_dg(int s, struct servtab *sep) | |
| static char ring[128]; | |
| static char *endring; | |
| - | static void |
| - | initring(void) |
| + | static void initring(void) |
| { | |
| int i; | |
| @@ -1117,8 +1093,7 @@ initring(void) | |
| } | |
| /* Character generator */ | |
| - | static void |
| - | chargen_stream(int s, struct servtab *sep) |
| + | static void chargen_stream(int s, struct servtab *sep) |
| { | |
| char *rs; | |
| int len; | |
| @@ -1149,8 +1124,7 @@ chargen_stream(int s, struct servtab *sep) | |
| } | |
| /* Character generator */ | |
| - | static void |
| - | chargen_dg(int s, struct servtab *sep) |
| + | static void chargen_dg(int s, struct servtab *sep) |
| { | |
| struct sockaddr sa; | |
| static char *rs; | |
| @@ -1192,8 +1166,7 @@ chargen_dg(int s, struct servtab *sep) | |
| * some seventy years Bell Labs was asleep. | |
| */ | |
| - | static long |
| - | machtime(void) |
| + | static long machtime(void) |
| { | |
| struct timeval tv; | |
| @@ -1204,8 +1177,7 @@ machtime(void) | |
| return (htonl((long)tv.tv_sec + 2208988800UL)); | |
| } | |
| - | static void |
| - | machtime_stream(int s, struct servtab *sep) |
| + | static void machtime_stream(int s, struct servtab *sep) |
| { | |
| long result; | |
| (void)sep; | |
| @@ -1214,8 +1186,7 @@ machtime_stream(int s, struct servtab *sep) | |
| write(s, (char *) &result, sizeof(result)); | |
| } | |
| - | static void |
| - | machtime_dg(int s, struct servtab *sep) |
| + | static void machtime_dg(int s, struct servtab *sep) |
| { | |
| long result; | |
| struct sockaddr sa; | |
| @@ -1233,16 +1204,14 @@ machtime_dg(int s, struct servtab *sep) | |
| #ifdef CONFIG_FEATURE_INETD_SUPPORT_BILTIN_DAYTIME | |
| /* Return human-readable time of day */ | |
| - | static int |
| - | human_readable_time_sprintf(char *buffer) |
| + | static int human_readable_time_sprintf(char *buffer) |
| { | |
| time_t clocc = time(NULL); | |
| return sprintf(buffer, "%.24s\r\n", ctime(&clocc)); | |
| } | |
| - | static void |
| - | daytime_stream(int s, struct servtab *sep) |
| + | static void daytime_stream(int s, struct servtab *sep) |
| { | |
| char buffer[256]; | |
| size_t st = human_readable_time_sprintf(buffer); | |
| @@ -1253,8 +1222,7 @@ daytime_stream(int s, struct servtab *sep) | |
| } | |
| /* Return human-readable time of day */ | |
| - | static void |
| - | daytime_dg(int s, struct servtab *sep) |
| + | static void daytime_dg(int s, struct servtab *sep) |
| { | |
| char buffer[256]; | |
| struct sockaddr sa; | |