#define NBDEBUG 0
/*
Unix SMB/CIFS implementation.
SMB torture tester
Copyright (C) Andrew Tridgell 1997-1998
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "includes.h"
#include "torture/proto.h"
#include "../libcli/security/security.h"
#include "libsmb/libsmb.h"
#include "libsmb/clirap.h"
#define MAX_FILES 1000
static char buf[70000];
extern int line_count;
extern int nbio_id;
static int nprocs;
static struct timeval nb_start;
static struct {
int fd;
int handle;
} ftable[MAX_FILES];
static struct children {
double bytes_in, bytes_out;
int line;
int done;
} *children;
double nbio_total(void)
{
int i;
double total = 0;
for (i=0;iname[0] == '.') {
return NT_STATUS_OK;
}
n = SMB_STRDUP(name);
n[strlen(n)-1] = 0;
if (asprintf(&s, "%s%s", n, finfo->name) == -1) {
free(n);
printf("asprintf failed\n");
return NT_STATUS_NO_MEMORY;
}
if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
char *s2;
if (asprintf(&s2, "%s\\*", s) == -1) {
printf("asprintf failed\n");
free(s);
free(n);
return NT_STATUS_NO_MEMORY;
}
status = cli_list(c, s2, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
free(s2);
if (!NT_STATUS_IS_OK(status)) {
free(s);
free(n);
return status;
}
nb_rmdir(s);
} else {
total_deleted++;
nb_unlink(s);
}
free(s);
free(n);
return NT_STATUS_OK;
}
void nb_deltree(const char *dname)
{
char *mask;
if (asprintf(&mask, "%s\\*", dname) == -1) {
printf("asprintf failed\n");
return;
}
total_deleted = 0;
cli_list(c, mask, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
free(mask);
cli_rmdir(c, dname);
if (total_deleted) printf("WARNING: Cleaned up %d files\n", total_deleted);
}
void nb_cleanup(void)
{
cli_rmdir(c, "clients");
children[nbio_id].done = 1;
}