version 1.80, 2018/06/06 18:23:32 |
version 1.81, 2018/06/07 04:31:51 |
|
|
* Return 0 on success. Return -1 on failure and sets *errstrp to error reason. |
* Return 0 on success. Return -1 on failure and sets *errstrp to error reason. |
*/ |
*/ |
static int |
static int |
handle_permit(const char *opts, char ***permitsp, size_t *npermitsp, |
handle_permit(const char **opts, char ***permitsp, size_t *npermitsp, |
const char **errstrp) |
const char **errstrp) |
{ |
{ |
char *opt, *tmp, *cp, *host, **permits = *permitsp; |
char *opt, *tmp, *cp, *host, **permits = *permitsp; |
|
|
*errstrp = "too many permission directives"; |
*errstrp = "too many permission directives"; |
return -1; |
return -1; |
} |
} |
if ((opt = opt_dequote(&opts, &errstr)) == NULL) { |
if ((opt = opt_dequote(opts, &errstr)) == NULL) { |
return -1; |
return -1; |
} |
} |
if ((tmp = strdup(opt)) == NULL) { |
if ((tmp = strdup(opt)) == NULL) { |
|
|
} |
} |
ret->env[ret->nenv++] = opt; |
ret->env[ret->nenv++] = opt; |
} else if (opt_match(&opts, "permitopen")) { |
} else if (opt_match(&opts, "permitopen")) { |
if (handle_permit(opts, &ret->permitopen, |
if (handle_permit(&opts, &ret->permitopen, |
&ret->npermitopen, &errstr) != 0) |
&ret->npermitopen, &errstr) != 0) |
goto fail; |
goto fail; |
} else if (opt_match(&opts, "permitlisten")) { |
} else if (opt_match(&opts, "permitlisten")) { |
if (handle_permit(opts, &ret->permitlisten, |
if (handle_permit(&opts, &ret->permitlisten, |
&ret->npermitlisten, &errstr) != 0) |
&ret->npermitlisten, &errstr) != 0) |
goto fail; |
goto fail; |
} else if (opt_match(&opts, "tunnel")) { |
} else if (opt_match(&opts, "tunnel")) { |