~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove the loops that close all open fds before running a
[sgt/putty]
/
unix
/
uxstore.c
diff --git
a/unix/uxstore.c
b/unix/uxstore.c
index
c46b9a2
..
9ee083a
100644
(file)
--- a/
unix/uxstore.c
+++ b/
unix/uxstore.c
@@
-9,6
+9,7
@@
#include <assert.h>
#include <errno.h>
#include <ctype.h>
#include <assert.h>
#include <errno.h>
#include <ctype.h>
+#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
@@
-18,6
+19,12
@@
#include "storage.h"
#include "tree234.h"
#include "storage.h"
#include "tree234.h"
+#ifdef PATH_MAX
+#define FNLEN PATH_MAX
+#else
+#define FNLEN 1024 /* XXX */
+#endif
+
enum {
INDEX_DIR, INDEX_HOSTKEYS, INDEX_HOSTKEYS_TMP, INDEX_RANDSEED,
INDEX_SESSIONDIR, INDEX_SESSION,
enum {
INDEX_DIR, INDEX_HOSTKEYS, INDEX_HOSTKEYS_TMP, INDEX_RANDSEED,
INDEX_SESSIONDIR, INDEX_SESSION,
@@
-85,12
+92,14
@@
static void make_filename(char *filename, int index, const char *subname)
char *home;
int len;
home = getenv("HOME");
char *home;
int len;
home = getenv("HOME");
- strncpy(filename, home, FILENAME_MAX);
+ if (!home)
+ home="/";
+ strncpy(filename, home, FNLEN);
len = strlen(filename);
if (index == INDEX_SESSION) {
char *munged = mungestr(subname);
char *fn = dupprintf("/.putty/sessions/%s", munged);
len = strlen(filename);
if (index == INDEX_SESSION) {
char *munged = mungestr(subname);
char *fn = dupprintf("/.putty/sessions/%s", munged);
- strncpy(filename + len, fn, F
ILENAME_MAX
- len);
+ strncpy(filename + len, fn, F
NLEN
- len);
sfree(fn);
sfree(munged);
} else {
sfree(fn);
sfree(munged);
} else {
@@
-100,14
+109,14
@@
static void make_filename(char *filename, int index, const char *subname)
index == INDEX_HOSTKEYS ? "/.putty/sshhostkeys" :
index == INDEX_HOSTKEYS_TMP ? "/.putty/sshhostkeys.tmp" :
index == INDEX_RANDSEED ? "/.putty/randomseed" :
index == INDEX_HOSTKEYS ? "/.putty/sshhostkeys" :
index == INDEX_HOSTKEYS_TMP ? "/.putty/sshhostkeys.tmp" :
index == INDEX_RANDSEED ? "/.putty/randomseed" :
- "/.putty/ERROR", F
ILENAME_MAX
- len);
+ "/.putty/ERROR", F
NLEN
- len);
}
}
- filename[F
ILENAME_MAX
-1] = '\0';
+ filename[F
NLEN
-1] = '\0';
}
void *open_settings_w(const char *sessionname, char **errmsg)
{
}
void *open_settings_w(const char *sessionname, char **errmsg)
{
- char filename[F
ILENAME_MAX
];
+ char filename[F
NLEN
];
FILE *fp;
*errmsg = NULL;
FILE *fp;
*errmsg = NULL;
@@
-224,7
+233,7
@@
const char *get_setting(const char *key)
void *open_settings_r(const char *sessionname)
{
void *open_settings_r(const char *sessionname)
{
- char filename[F
ILENAME_MAX
];
+ char filename[F
NLEN
];
FILE *fp;
char *line;
tree234 *ret;
FILE *fp;
char *line;
tree234 *ret;
@@
-339,7
+348,7
@@
void close_settings_r(void *handle)
void del_settings(const char *sessionname)
{
void del_settings(const char *sessionname)
{
- char filename[F
ILENAME_MAX
];
+ char filename[F
NLEN
];
make_filename(filename, INDEX_SESSION, sessionname);
unlink(filename);
}
make_filename(filename, INDEX_SESSION, sessionname);
unlink(filename);
}
@@
-347,7
+356,7
@@
void del_settings(const char *sessionname)
void *enum_settings_start(void)
{
DIR *dp;
void *enum_settings_start(void)
{
DIR *dp;
- char filename[F
ILENAME_MAX
];
+ char filename[F
NLEN
];
make_filename(filename, INDEX_SESSIONDIR, NULL);
dp = opendir(filename);
make_filename(filename, INDEX_SESSIONDIR, NULL);
dp = opendir(filename);
@@
-360,7
+369,7
@@
char *enum_settings_next(void *handle, char *buffer, int buflen)
DIR *dp = (DIR *)handle;
struct dirent *de;
struct stat st;
DIR *dp = (DIR *)handle;
struct dirent *de;
struct stat st;
- char fullpath[F
ILENAME_MAX
];
+ char fullpath[F
NLEN
];
int len;
char *unmunged;
int len;
char *unmunged;
@@
-368,10
+377,10
@@
char *enum_settings_next(void *handle, char *buffer, int buflen)
len = strlen(fullpath);
while ( (de = readdir(dp)) != NULL ) {
len = strlen(fullpath);
while ( (de = readdir(dp)) != NULL ) {
- if (len < F
ILENAME_MAX
) {
+ if (len < F
NLEN
) {
fullpath[len] = '/';
fullpath[len] = '/';
- strncpy(fullpath+len+1, de->d_name, F
ILENAME_MAX
-(len+1));
- fullpath[F
ILENAME_MAX
-1] = '\0';
+ strncpy(fullpath+len+1, de->d_name, F
NLEN
-(len+1));
+ fullpath[F
NLEN
-1] = '\0';
}
if (stat(fullpath, &st) < 0 || !S_ISREG(st.st_mode))
}
if (stat(fullpath, &st) < 0 || !S_ISREG(st.st_mode))
@@
-406,7
+415,7
@@
int verify_host_key(const char *hostname, int port,
const char *keytype, const char *key)
{
FILE *fp;
const char *keytype, const char *key)
{
FILE *fp;
- char filename[F
ILENAME_MAX
];
+ char filename[F
NLEN
];
char *line;
int ret;
char *line;
int ret;
@@
-476,7
+485,7
@@
void store_host_key(const char *hostname, int port,
FILE *rfp, *wfp;
char *newtext, *line;
int headerlen;
FILE *rfp, *wfp;
char *newtext, *line;
int headerlen;
- char filename[F
ILENAME_MAX], tmpfilename[FILENAME_MAX
];
+ char filename[F
NLEN], tmpfilename[FNLEN
];
newtext = dupprintf("%s@%d:%s %s\n", keytype, port, hostname, key);
headerlen = 1 + strcspn(newtext, " "); /* count the space too */
newtext = dupprintf("%s@%d:%s %s\n", keytype, port, hostname, key);
headerlen = 1 + strcspn(newtext, " "); /* count the space too */
@@
-487,7
+496,7
@@
void store_host_key(const char *hostname, int port,
make_filename(tmpfilename, INDEX_HOSTKEYS_TMP, NULL);
wfp = fopen(tmpfilename, "w");
if (!wfp) {
make_filename(tmpfilename, INDEX_HOSTKEYS_TMP, NULL);
wfp = fopen(tmpfilename, "w");
if (!wfp) {
- char dir[F
ILENAME_MAX
];
+ char dir[F
NLEN
];
make_filename(dir, INDEX_DIR, NULL);
mkdir(dir, 0700);
make_filename(dir, INDEX_DIR, NULL);
mkdir(dir, 0700);
@@
-525,7
+534,7
@@
void store_host_key(const char *hostname, int port,
void read_random_seed(noise_consumer_t consumer)
{
int fd;
void read_random_seed(noise_consumer_t consumer)
{
int fd;
- char fname[F
ILENAME_MAX
];
+ char fname[F
NLEN
];
make_filename(fname, INDEX_RANDSEED, NULL);
fd = open(fname, O_RDONLY);
make_filename(fname, INDEX_RANDSEED, NULL);
fd = open(fname, O_RDONLY);
@@
-541,7
+550,7
@@
void read_random_seed(noise_consumer_t consumer)
void write_random_seed(void *data, int len)
{
int fd;
void write_random_seed(void *data, int len)
{
int fd;
- char fname[F
ILENAME_MAX
];
+ char fname[F
NLEN
];
make_filename(fname, INDEX_RANDSEED, NULL);
/*
make_filename(fname, INDEX_RANDSEED, NULL);
/*
@@
-551,7
+560,7
@@
void write_random_seed(void *data, int len)
*/
fd = open(fname, O_CREAT | O_WRONLY, 0600);
if (fd < 0) {
*/
fd = open(fname, O_CREAT | O_WRONLY, 0600);
if (fd < 0) {
- char dir[F
ILENAME_MAX
];
+ char dir[F
NLEN
];
make_filename(dir, INDEX_DIR, NULL);
mkdir(dir, 0700);
make_filename(dir, INDEX_DIR, NULL);
mkdir(dir, 0700);