fix building when ARG_MAX is not defined patch by Tom-Steve Watzke http://bugs.gentoo.org/225341 --- netkit-rsh-0.17/rexecd/rexecd.c +++ netkit-rsh-0.17/rexecd/rexecd.c @@ -234,7 +234,8 @@ static void doit(struct sockaddr_in *fromp) { - char cmdbuf[ARG_MAX+1]; + char *cmdbuf; + int cmdbuflen; char user[16], pass[16]; struct passwd *pwd; int s = -1; @@ -253,6 +254,15 @@ #endif #endif /* USE_PAM */ + cmdbuflen = sysconf(_SC_ARG_MAX); + if (cmdbuflen < _POSIX_ARG_MAX) + cmdbuflen = _POSIX_ARG_MAX; + cmdbuf = malloc(cmdbuflen); + if (cmdbuf == NULL) { + syslog(LOG_ERR, "unable to malloc(%i) for command buffer: %s", cmdbuflen, strerror(errno)); + fatal("out of memory\n"); + } + signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); signal(SIGTERM, SIG_DFL); @@ -302,7 +312,7 @@ getstr(user, sizeof(user), "username too long\n"); getstr(pass, sizeof(pass), "password too long\n"); - getstr(cmdbuf, sizeof(cmdbuf), "command too long\n"); + getstr(cmdbuf, cmdbuflen, "command too long\n"); #ifdef USE_PAM #define PAM_BAIL if (pam_error != PAM_SUCCESS) { \ pam_end(pamh, pam_error); exit(1); \ --- netkit-rsh-0.17/rshd/rshd.c +++ netkit-rsh-0.17/rshd/rshd.c @@ -337,7 +337,8 @@ static void doit(struct sockaddr_in *fromp) { - char cmdbuf[ARG_MAX+1]; + char *cmdbuf; + int cmdbuflen; const char *theshell, *shellname; char locuser[16], remuser[16]; struct passwd *pwd; @@ -346,6 +347,15 @@ u_short port; int pv[2], pid, ifd; + cmdbuflen = sysconf(_SC_ARG_MAX); + if (cmdbuflen < _POSIX_ARG_MAX) + cmdbuflen = _POSIX_ARG_MAX; + cmdbuf = malloc(cmdbuflen); + if (cmdbuf == NULL) { + syslog(LOG_ERR, "unable to malloc(%i) for command buffer: %s", cmdbuflen, strerror(errno)); + exit(1); + } + signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); signal(SIGTERM, SIG_DFL); @@ -382,7 +392,7 @@ getstr(remuser, sizeof(remuser), "remuser"); getstr(locuser, sizeof(locuser), "locuser"); - getstr(cmdbuf, sizeof(cmdbuf), "command"); + getstr(cmdbuf, cmdbuflen, "command"); if (!strcmp(locuser, "root")) paranoid = 1; hostname = findhostname(fromp, remuser, locuser, cmdbuf);