static void gui_update_stats(char *name, unsigned long size,
int percentage, unsigned long elapsed);
-void begin_session(void) { }
void logevent(char *string) { }
void verify_ssh_host_key(char *host, int port, char *keytype,
if (len > 0) {
if (pendsize < pendlen + len) {
pendsize = pendlen + len + 4096;
- pending = (pending ? realloc(pending, pendsize) :
- malloc(pendsize));
+ pending = (pending ? srealloc(pending, pendsize) :
+ smalloc(pendsize));
if (!pending)
fatalbox("Out of memory");
}
pendlen -= pendused;
if (pendlen == 0) {
pendsize = 0;
- free(pending);
+ sfree(pending);
pending = NULL;
}
if (outlen == 0)
static void do_cmd(char *host, char *user, char *cmd)
{
char *err, *realhost;
+ DWORD namelen;
if (host == NULL || host[0] == '\0')
bump("Empty host name");
strncpy(cfg.username, user, sizeof(cfg.username)-1);
cfg.username[sizeof(cfg.username)-1] = '\0';
} else if (cfg.username[0] == '\0') {
- bump("Empty user name");
+ namelen = 0;
+ if (GetUserName(user, &namelen) == FALSE)
+ bump("Empty user name");
+ user = smalloc(namelen * sizeof(char));
+ GetUserName(user, &namelen);
+ if (verbose) tell_user(stderr, "Guessing user name: %s", user);
+ strncpy(cfg.username, user, sizeof(cfg.username)-1);
+ cfg.username[sizeof(cfg.username)-1] = '\0';
+ free(user);
}
if (cfg.protocol != PROT_SSH)
do {
char *last;
char namebuf[2048];
+ /*
+ * Ensure that . and .. are never matched by wildcards,
+ * but only by deliberate action.
+ */
+ if (!strcmp(fdat.cFileName, ".") ||
+ !strcmp(fdat.cFileName, "..")) {
+ /*
+ * Find*File has returned a special dir. We require
+ * that _either_ `src' ends in a backslash followed
+ * by that string, _or_ `src' is precisely that
+ * string.
+ */
+ int len = strlen(src), dlen = strlen(fdat.cFileName);
+ if (len == dlen && !strcmp(src, fdat.cFileName)) {
+ /* ok */;
+ } else if (len > dlen+1 && src[len-dlen-1] == '\\' &&
+ !strcmp(src+len-dlen, fdat.cFileName)) {
+ /* ok */;
+ } else
+ continue; /* ignore this one */
+ }
if (strlen(src) + strlen(fdat.cFileName) >=
sizeof(namebuf)) {
tell_user(stderr, "%s: Name too long", src);