mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-31 01:35:11 +02:00
upstream: move authorized_keys option parsing helpsers to misc.c
and make them public; ok markus@ OpenBSD-Commit-ID: c18bcb2a687227b3478377c981c2d56af2638ea2
This commit is contained in:
parent
f8df0413f0
commit
5485f8d50a
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-options.c,v 1.86 2019/07/09 04:15:00 djm Exp $ */
|
/* $OpenBSD: auth-options.c,v 1.87 2019/09/03 08:32:11 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Damien Miller <djm@mindrot.org>
|
* Copyright (c) 2018 Damien Miller <djm@mindrot.org>
|
||||||
*
|
*
|
||||||
@ -40,75 +40,6 @@
|
|||||||
#include "ssh2.h"
|
#include "ssh2.h"
|
||||||
#include "auth-options.h"
|
#include "auth-options.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Match flag 'opt' in *optsp, and if allow_negate is set then also match
|
|
||||||
* 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0
|
|
||||||
* if negated option matches.
|
|
||||||
* If the option or negated option matches, then *optsp is updated to
|
|
||||||
* point to the first character after the option.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
opt_flag(const char *opt, int allow_negate, const char **optsp)
|
|
||||||
{
|
|
||||||
size_t opt_len = strlen(opt);
|
|
||||||
const char *opts = *optsp;
|
|
||||||
int negate = 0;
|
|
||||||
|
|
||||||
if (allow_negate && strncasecmp(opts, "no-", 3) == 0) {
|
|
||||||
opts += 3;
|
|
||||||
negate = 1;
|
|
||||||
}
|
|
||||||
if (strncasecmp(opts, opt, opt_len) == 0) {
|
|
||||||
*optsp = opts + opt_len;
|
|
||||||
return negate ? 0 : 1;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *
|
|
||||||
opt_dequote(const char **sp, const char **errstrp)
|
|
||||||
{
|
|
||||||
const char *s = *sp;
|
|
||||||
char *ret;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
*errstrp = NULL;
|
|
||||||
if (*s != '"') {
|
|
||||||
*errstrp = "missing start quote";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
s++;
|
|
||||||
if ((ret = malloc(strlen((s)) + 1)) == NULL) {
|
|
||||||
*errstrp = "memory allocation failed";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; *s != '\0' && *s != '"';) {
|
|
||||||
if (s[0] == '\\' && s[1] == '"')
|
|
||||||
s++;
|
|
||||||
ret[i++] = *s++;
|
|
||||||
}
|
|
||||||
if (*s == '\0') {
|
|
||||||
*errstrp = "missing end quote";
|
|
||||||
free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
ret[i] = '\0';
|
|
||||||
s++;
|
|
||||||
*sp = s;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
opt_match(const char **opts, const char *term)
|
|
||||||
{
|
|
||||||
if (strncasecmp((*opts), term, strlen(term)) == 0 &&
|
|
||||||
(*opts)[strlen(term)] == '=') {
|
|
||||||
*opts += strlen(term) + 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dup_strings(char ***dstp, size_t *ndstp, char **src, size_t nsrc)
|
dup_strings(char ***dstp, size_t *ndstp, char **src, size_t nsrc)
|
||||||
{
|
{
|
||||||
|
74
misc.c
74
misc.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: misc.c,v 1.141 2019/09/03 08:29:58 djm Exp $ */
|
/* $OpenBSD: misc.c,v 1.142 2019/09/03 08:32:11 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
* Copyright (c) 2005,2006 Damien Miller. All rights reserved.
|
* Copyright (c) 2005,2006 Damien Miller. All rights reserved.
|
||||||
@ -2137,3 +2137,75 @@ skip_space(char **cpp)
|
|||||||
;
|
;
|
||||||
*cpp = cp;
|
*cpp = cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* authorized_key-style options parsing helpers */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Match flag 'opt' in *optsp, and if allow_negate is set then also match
|
||||||
|
* 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0
|
||||||
|
* if negated option matches.
|
||||||
|
* If the option or negated option matches, then *optsp is updated to
|
||||||
|
* point to the first character after the option.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
opt_flag(const char *opt, int allow_negate, const char **optsp)
|
||||||
|
{
|
||||||
|
size_t opt_len = strlen(opt);
|
||||||
|
const char *opts = *optsp;
|
||||||
|
int negate = 0;
|
||||||
|
|
||||||
|
if (allow_negate && strncasecmp(opts, "no-", 3) == 0) {
|
||||||
|
opts += 3;
|
||||||
|
negate = 1;
|
||||||
|
}
|
||||||
|
if (strncasecmp(opts, opt, opt_len) == 0) {
|
||||||
|
*optsp = opts + opt_len;
|
||||||
|
return negate ? 0 : 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
opt_dequote(const char **sp, const char **errstrp)
|
||||||
|
{
|
||||||
|
const char *s = *sp;
|
||||||
|
char *ret;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
*errstrp = NULL;
|
||||||
|
if (*s != '"') {
|
||||||
|
*errstrp = "missing start quote";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
if ((ret = malloc(strlen((s)) + 1)) == NULL) {
|
||||||
|
*errstrp = "memory allocation failed";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
for (i = 0; *s != '\0' && *s != '"';) {
|
||||||
|
if (s[0] == '\\' && s[1] == '"')
|
||||||
|
s++;
|
||||||
|
ret[i++] = *s++;
|
||||||
|
}
|
||||||
|
if (*s == '\0') {
|
||||||
|
*errstrp = "missing end quote";
|
||||||
|
free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret[i] = '\0';
|
||||||
|
s++;
|
||||||
|
*sp = s;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
opt_match(const char **opts, const char *term)
|
||||||
|
{
|
||||||
|
if (strncasecmp((*opts), term, strlen(term)) == 0 &&
|
||||||
|
(*opts)[strlen(term)] == '=') {
|
||||||
|
*opts += strlen(term) + 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
7
misc.h
7
misc.h
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: misc.h,v 1.80 2019/09/03 08:29:58 djm Exp $ */
|
/* $OpenBSD: misc.h,v 1.81 2019/09/03 08:32:11 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -166,6 +166,11 @@ int safe_path(const char *, struct stat *, const char *, uid_t,
|
|||||||
int safe_path_fd(int, const char *, struct passwd *,
|
int safe_path_fd(int, const char *, struct passwd *,
|
||||||
char *err, size_t errlen);
|
char *err, size_t errlen);
|
||||||
|
|
||||||
|
/* authorized_key-style options parsing helpers */
|
||||||
|
int opt_flag(const char *opt, int allow_negate, const char **optsp);
|
||||||
|
char *opt_dequote(const char **sp, const char **errstrp);
|
||||||
|
int opt_match(const char **opts, const char *term);
|
||||||
|
|
||||||
/* readpass.c */
|
/* readpass.c */
|
||||||
|
|
||||||
#define RP_ECHO 0x0001
|
#define RP_ECHO 0x0001
|
||||||
|
Loading…
x
Reference in New Issue
Block a user