assert(ssh1key);
if (outfile)
- fp = f_open(outfilename, "w");
+ fp = f_open(outfilename, "w", FALSE);
else
fp = stdout;
dec1 = bignum_decimal(ssh1key->exponent);
*p++ = '\0';
if (outfile)
- fp = f_open(outfilename, "w");
+ fp = f_open(outfilename, "w", FALSE);
else
fp = stdout;
fprintf(fp, "%s\n", buffer);
}
if (outfile)
- fp = f_open(outfilename, "w");
+ fp = f_open(outfilename, "w", FALSE);
else
fp = stdout;
fprintf(fp, "%s\n", fingerprint);
ret->encrypted = 0;
memset(ret->iv, 0, sizeof(ret->iv));
- fp = f_open(*filename, "r");
+ fp = f_open(*filename, "r", FALSE);
if (!fp) {
errmsg = "unable to open key file";
goto error;
* And save it. We'll use Unix line endings just in case it's
* subsequently transferred in binary mode.
*/
- fp = f_open(*filename, "wb"); /* ensure Unix line endings */
+ fp = f_open(*filename, "wb", TRUE); /* ensure Unix line endings */
if (!fp)
goto error;
fputs(header, fp);
ret->keyblob = NULL;
ret->keyblob_len = ret->keyblob_size = 0;
- fp = f_open(*filename, "r");
+ fp = f_open(*filename, "r", FALSE);
if (!fp) {
errmsg = "unable to open key file";
goto error;
* And save it. We'll use Unix line endings just in case it's
* subsequently transferred in binary mode.
*/
- fp = f_open(*filename, "wb"); /* ensure Unix line endings */
+ fp = f_open(*filename, "wb", TRUE); /* ensure Unix line endings */
if (!fp)
goto error;
fputs("---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----\n", fp);
ctx->state = L_ERROR; /* disable logging */
} else {
fmode = (mode == 1 ? "ab" : "wb");
- ctx->lgfp = f_open(ctx->currlogfilename, fmode);
+ ctx->lgfp = f_open(ctx->currlogfilename, fmode, TRUE);
if (ctx->lgfp)
ctx->state = L_OPEN;
else
/* substitute special codes in file name */
xlatlognam(&ctx->currlogfilename, ctx->cfg.logfilename,ctx->cfg.host, &tm);
- ctx->lgfp = f_open(ctx->currlogfilename, "r"); /* file already present? */
+ ctx->lgfp = f_open(ctx->currlogfilename, "r", FALSE); /* file already present? */
if (ctx->lgfp) {
fclose(ctx->lgfp);
if (ctx->cfg.logxfovr != LGXF_ASK) {
return fn.fss.vRefNum == 0 && fn.fss.parID == 0 && fn.fss.name[0] == 0;
}
-FILE *f_open(Filename fn, char const *mode)
+FILE *f_open(Filename fn, char const *mode, int is_private)
{
short savevol;
long savedir;
FSSpec fss;
};
-extern FILE * f_open(struct Filename, char const *);
+extern FILE * f_open(struct Filename, char const *, int);
/* Suspiciously similar to an ICFontRecord */
struct FontSpec {
int ret = 0;
const char *error = NULL;
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp) {
error = "can't open file";
goto end;
FILE *fp;
char buf[64];
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp)
return 0; /* doesn't even exist */
*bloblen = 0;
ret = 0;
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp) {
error = "can't open file";
goto end;
/*
* Done. Write the result to the file.
*/
- fp = f_open(*filename, "wb");
+ fp = f_open(*filename, "wb", TRUE);
if (fp) {
int ret = (fwrite(buf, 1, p - buf, fp) == (size_t) (p - buf));
if (fclose(fp))
encryption = comment = mac = NULL;
public_blob = private_blob = NULL;
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp) {
error = "can't open file";
goto error;
public_blob = NULL;
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp) {
error = "can't open file";
goto error;
if (commentptr)
*commentptr = NULL;
- fp = f_open(*filename, "rb");
+ fp = f_open(*filename, "rb", FALSE);
if (!fp)
return 0;
if (!read_header(fp, header)
memset(&s, 0, sizeof(s));
}
- fp = f_open(*filename, "w");
+ fp = f_open(*filename, "w", TRUE);
if (!fp)
return 0;
fprintf(fp, "PuTTY-User-Key-File-2: %s\n", key->alg->name);
const char openssh_sig[] = "-----BEGIN ";
int i;
- fp = f_open(*filename, "r");
+ fp = f_open(*filename, "r", FALSE);
if (!fp)
return SSH_KEYTYPE_UNOPENABLE;
i = fread(buf, 1, sizeof(buf), fp);
struct Filename {
char path[FILENAME_MAX];
};
-#define f_open(filename, mode) ( fopen((filename).path, (mode)) )
+FILE *f_open(struct Filename, char const *, int);
struct FontSpec {
char name[256];
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <assert.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
if (fdflags == -1) return -1;
return fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
}
+
+FILE *f_open(struct Filename filename, char const *mode, int is_private)
+{
+ if (!is_private) {
+ return fopen(filename.path, mode);
+ } else {
+ assert(mode[0] == 'w'); /* is_private is meaningless for read */
+ int fd = open(filename.path, O_WRONLY | O_CREAT | O_TRUNC,
+ 0700);
+ if (fd < 0)
+ return NULL;
+ return fdopen(fd, mode);
+ }
+}
struct Filename {
char path[FILENAME_MAX];
};
-#define f_open(filename, mode) ( fopen((filename).path, (mode)) )
+#define f_open(filename, mode, isprivate) ( fopen((filename).path, (mode)) )
struct FontSpec {
char name[64];