upstream: add sshkey_save_public(), to save a public key; ok
markus@ OpenBSD-Commit-ID: 5d6f96a966d10d7fa689ff9aa9e1d6767ad5a076
This commit is contained in:
parent
3b1382ffd5
commit
878ba4350d
33
authfile.c
33
authfile.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: authfile.c,v 1.135 2019/09/03 08:30:47 djm Exp $ */
|
/* $OpenBSD: authfile.c,v 1.136 2020/01/02 22:38:33 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -550,3 +550,34 @@ sshkey_advance_past_options(char **cpp)
|
||||||
return (*cp == '\0' && quoted) ? -1 : 0;
|
return (*cp == '\0' && quoted) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Save a public key */
|
||||||
|
int
|
||||||
|
sshkey_save_public(const struct sshkey *key, const char *path,
|
||||||
|
const char *comment)
|
||||||
|
{
|
||||||
|
int fd, oerrno;
|
||||||
|
FILE *f = NULL;
|
||||||
|
int r = SSH_ERR_INTERNAL_ERROR;
|
||||||
|
|
||||||
|
if ((fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1)
|
||||||
|
return SSH_ERR_SYSTEM_ERROR;
|
||||||
|
if ((f = fdopen(fd, "w")) == NULL) {
|
||||||
|
r = SSH_ERR_SYSTEM_ERROR;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if ((r = sshkey_write(key, f)) != 0)
|
||||||
|
goto fail;
|
||||||
|
fprintf(f, " %s\n", comment);
|
||||||
|
if (ferror(f) || fclose(f) != 0) {
|
||||||
|
r = SSH_ERR_SYSTEM_ERROR;
|
||||||
|
fail:
|
||||||
|
oerrno = errno;
|
||||||
|
if (f != NULL)
|
||||||
|
fclose(f);
|
||||||
|
else
|
||||||
|
close(fd);
|
||||||
|
errno = oerrno;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: authfile.h,v 1.23 2019/09/03 08:30:47 djm Exp $ */
|
/* $OpenBSD: authfile.h,v 1.24 2020/01/02 22:38:33 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
|
||||||
|
@ -49,5 +49,7 @@ int sshkey_perm_ok(int, const char *);
|
||||||
int sshkey_in_file(struct sshkey *, const char *, int, int);
|
int sshkey_in_file(struct sshkey *, const char *, int, int);
|
||||||
int sshkey_check_revoked(struct sshkey *key, const char *revoked_keys_file);
|
int sshkey_check_revoked(struct sshkey *key, const char *revoked_keys_file);
|
||||||
int sshkey_advance_past_options(char **cpp);
|
int sshkey_advance_past_options(char **cpp);
|
||||||
|
int sshkey_save_public(const struct sshkey *key, const char *path,
|
||||||
|
const char *comment);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue