diff options
Diffstat (limited to 'authfile.c')
-rw-r--r-- | authfile.c | 33 |
1 files changed, 32 insertions, 1 deletions
@@ -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. * @@ -550,3 +550,34 @@ sshkey_advance_past_options(char **cpp) 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; +} |