mirror of
https://github.com/sheumann/hush.git
synced 2024-12-27 16:31:24 +00:00
Patch from Vodz, cleanup memory usage, send strdup error messages to
syslog.
This commit is contained in:
parent
7fc504c6f7
commit
df7d84cf25
@ -279,6 +279,16 @@ syslog_err_and_discard_dg(int se_socktype, const char *msg, ...)
|
|||||||
_exit(1);
|
_exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char * inetd_strdup(const char *s)
|
||||||
|
{
|
||||||
|
char *ms = strdup(s);
|
||||||
|
|
||||||
|
if(ms == NULL)
|
||||||
|
syslog_err_and_discard_dg(SOCK_STREAM, "strdup: %m");
|
||||||
|
return ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static servtab_t *getconfigent(void)
|
static servtab_t *getconfigent(void)
|
||||||
{
|
{
|
||||||
static servtab_t serv;
|
static servtab_t serv;
|
||||||
@ -298,13 +308,15 @@ more:
|
|||||||
if ((cp == NULL) || (*cp == '#')) {
|
if ((cp == NULL) || (*cp == '#')) {
|
||||||
goto more;
|
goto more;
|
||||||
}
|
}
|
||||||
|
/* make bind 0.0.0.0 and other zero default */
|
||||||
|
memset((char *)sep, 0, sizeof *sep);
|
||||||
|
|
||||||
cp_ptr = strtok_r(cp, " \t", &cp_ptr_ptr);
|
cp_ptr = strtok_r(cp, " \t", &cp_ptr_ptr);
|
||||||
if (cp_ptr == NULL) {
|
if (cp_ptr == NULL) {
|
||||||
/* Error */
|
/* Error */
|
||||||
goto more;
|
goto more;
|
||||||
}
|
}
|
||||||
sep->se_service = bb_xstrdup(cp_ptr);
|
sep->se_service = inetd_strdup(cp_ptr);
|
||||||
|
|
||||||
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
||||||
if (cp_ptr == NULL) {
|
if (cp_ptr == NULL) {
|
||||||
@ -339,7 +351,7 @@ more:
|
|||||||
}
|
}
|
||||||
sep->se_family = AF_INET;
|
sep->se_family = AF_INET;
|
||||||
}
|
}
|
||||||
sep->se_proto = bb_xstrdup(cp_ptr);
|
sep->se_proto = inetd_strdup(cp_ptr);
|
||||||
|
|
||||||
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
||||||
if (cp_ptr == NULL) {
|
if (cp_ptr == NULL) {
|
||||||
@ -361,14 +373,16 @@ more:
|
|||||||
/* error */
|
/* error */
|
||||||
goto more;
|
goto more;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sep->se_user = inetd_strdup(cp_ptr);
|
||||||
{
|
{
|
||||||
char *cp_ptr2 = strchr(cp_ptr, '.');
|
char *cp_ptr2 = strchr(sep->se_user, '.');
|
||||||
|
|
||||||
if (cp_ptr2) {
|
if (cp_ptr2) {
|
||||||
*cp_ptr2++ = '\0';
|
*cp_ptr2++ = '\0';
|
||||||
sep->se_group = bb_xstrdup(cp_ptr2);
|
|
||||||
}
|
}
|
||||||
|
sep->se_group = cp_ptr2;
|
||||||
}
|
}
|
||||||
sep->se_user = bb_xstrdup(cp_ptr);
|
|
||||||
|
|
||||||
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
|
||||||
if (cp_ptr == NULL) {
|
if (cp_ptr == NULL) {
|
||||||
@ -401,19 +415,16 @@ more:
|
|||||||
sep->se_bi = NULL;
|
sep->se_bi = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
sep->se_server = bb_xstrdup(cp_ptr);
|
sep->se_server = inetd_strdup(cp_ptr);
|
||||||
|
|
||||||
argc = 0;
|
argc = 0;
|
||||||
while ((cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr)) != NULL) {
|
while ((cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr)) != NULL) {
|
||||||
if (argc < MAXARGV) {
|
if (argc < MAXARGV) {
|
||||||
sep->se_argv[argc++] = cp_ptr;
|
sep->se_argv[argc++] = inetd_strdup(cp_ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (argc <= MAXARGV) {
|
free(cp);
|
||||||
sep->se_argv[argc++] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//free(cp); // BUG: cp is the argv[] container; we must not free it here!
|
|
||||||
return (sep);
|
return (sep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user