1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

The usual !pstring...

Jeremy.
(This used to be commit b676262a781363e7be49b21817668a53cca75c2d)
This commit is contained in:
Jeremy Allison 2007-12-04 16:56:18 -08:00
parent e262c41c61
commit de7fd585b1
5 changed files with 61 additions and 57 deletions

View File

@ -125,13 +125,15 @@ static void print_brl(struct file_id id,
{
#if NASTY_POSIX_LOCK_HACK
{
pstring cmd;
static SMB_INO_T lastino;
if (lastino != ino) {
slprintf(cmd, sizeof(cmd),
"egrep POSIX.*%u /proc/locks", (int)ino);
system(cmd);
char *cmd;
if (asprintf(&cmd,
"egrep POSIX.*%u /proc/locks", (int)ino) > 0) {
system(cmd);
SAFE_FREE(cmd);
}
}
lastino = ino;
}

View File

@ -64,16 +64,21 @@ static struct record *recorded;
static int try_open(struct cli_state *c, char *nfs, int fstype, const char *fname, int flags)
{
pstring path;
char *path;
switch (fstype) {
case FSTYPE_SMB:
return cli_open(c, fname, flags, DENY_NONE);
case FSTYPE_NFS:
slprintf(path, sizeof(path), "%s%s", nfs, fname);
pstring_sub(path,"\\", "/");
return open(path, flags, 0666);
if (asprintf(&path, "%s%s", nfs, fname) > 0) {
int ret;
string_replace(path,'\\', '/');
ret = open(path, flags, 0666);
SAFE_FREE(path);
return ret;
}
break;
}
return -1;

View File

@ -89,20 +89,20 @@ static char **completion_fn(const char *text, int start, int end)
return matches;
}
static char* next_command(char** cmdstr)
static char *next_command(TALLOC_CTX *ctx, char **cmdstr)
{
static pstring command;
char *p;
char *command;
char *p;
if (!cmdstr || !(*cmdstr))
return NULL;
p = strchr_m(*cmdstr, ';');
if (p)
*p = '\0';
pstrcpy(command, *cmdstr);
command = talloc_strdup(ctx, *cmdstr);
*cmdstr = p;
return command;
}
@ -266,24 +266,22 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c
const char *p = cmd;
char **argv = NULL;
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
pstring buf;
TALLOC_CTX *mem_ctx = NULL;
char *buf;
TALLOC_CTX *mem_ctx = talloc_stackframe();
int argc = 0, i;
/* Count number of arguments first time through the loop then
allocate memory and strdup them. */
again:
while(next_token(&p, buf, " ", sizeof(buf))) {
while(next_token_talloc(mem_ctx, &p, &buf, " ")) {
if (argv) {
argv[argc] = SMB_STRDUP(buf);
}
argc++;
}
if (!argv) {
if (!argv) {
/* Create argument list */
argv = SMB_MALLOC_ARRAY(char *, argc);
@ -294,44 +292,35 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c
result = NT_STATUS_NO_MEMORY;
goto done;
}
p = cmd;
argc = 0;
goto again;
}
/* Call the function */
if (cmd_entry->fn) {
if (mem_ctx == NULL) {
/* Create mem_ctx */
if (!(mem_ctx = talloc_init("do_cmd"))) {
DEBUG(0, ("talloc_init() failed\n"));
goto done;
}
}
/* Run command */
result = cmd_entry->fn(vfs, mem_ctx, argc, (const char **)argv);
} else {
fprintf (stderr, "Invalid command\n");
goto done;
}
done:
/* Cleanup */
if (argv) {
for (i = 0; i < argc; i++)
SAFE_FREE(argv[i]);
SAFE_FREE(argv);
}
TALLOC_FREE(mem_ctx);
return result;
}
@ -340,19 +329,21 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd)
{
struct cmd_list *temp_list;
bool found = False;
pstring buf;
char *buf;
const char *p = cmd;
NTSTATUS result = NT_STATUS_OK;
TALLOC_CTX *mem_ctx = talloc_stackframe();
int len = 0;
if (cmd[strlen(cmd) - 1] == '\n')
cmd[strlen(cmd) - 1] = '\0';
if (!next_token(&p, buf, " ", sizeof(buf))) {
if (!next_token_talloc(mem_ctx, &p, &buf, " ")) {
TALLOC_FREE(mem_ctx);
return NT_STATUS_OK;
}
/* strip the trainly \n if it exsists */
/* Strip the trailing \n if it exists */
len = strlen(buf);
if (buf[len-1] == '\n')
buf[len-1] = '\0';
@ -376,6 +367,7 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd)
done:
if (!found && buf[0]) {
printf("command not found: %s\n", buf);
TALLOC_FREE(mem_ctx);
return NT_STATUS_OK;
}
@ -383,6 +375,7 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd)
printf("result was %s\n", nt_errstr(result));
}
TALLOC_FREE(mem_ctx);
return result;
}
@ -437,13 +430,12 @@ void reload_printers(void)
bool reload_services(bool test)
{
bool ret;
if (lp_loaded()) {
pstring fname;
pstrcpy(fname,lp_configfile());
const char *fname = lp_configfile();
if (file_exist(fname, NULL) &&
!strcsequal(fname, dyn_CONFIGFILE)) {
pstrcpy(dyn_CONFIGFILE, fname);
strlcpy(dyn_CONFIGFILE, fname, sizeof(dyn_CONFIGFILE));
test = False;
}
}
@ -454,7 +446,7 @@ bool reload_services(bool test)
return(True);
lp_killunused(conn_snum_used);
ret = lp_load(dyn_CONFIGFILE, False, False, True, True);
/* perhaps the config filename is now set */
@ -512,6 +504,7 @@ int main(int argc, char *argv[])
static struct vfs_state vfs;
int i;
static char *filename = NULL;
TALLOC_CTX *frame = talloc_stackframe();
/* make sure the vars that get altered (4th field) are in
a fixed location or certain compilers complain */
@ -574,23 +567,21 @@ int main(int argc, char *argv[])
if (cmdstr && cmdstr[0]) {
char *cmd;
char *p = cmdstr;
while((cmd=next_command(&p)) != NULL) {
while((cmd=next_command(frame, &p)) != NULL) {
process_cmd(&vfs, cmd);
}
TALLOC_FREE(cmd);
return 0;
}
/* Loop around accepting commands */
while(1) {
pstring prompt;
char *line;
slprintf(prompt, sizeof(prompt) - 1, "vfstest $> ");
line = smb_readline(prompt, NULL, completion_fn);
line = smb_readline("vfstest $> ", NULL, completion_fn);
if (line == NULL)
break;
@ -598,7 +589,8 @@ int main(int argc, char *argv[])
if (line[0] != '\n')
process_cmd(&vfs, line);
}
conn_free(vfs.conn);
TALLOC_FREE(frame);
return 0;
}

View File

@ -85,7 +85,7 @@ static int DoWriteCommand( int argc, char **argv, bool debugflag, char *exename
ELOG_TDB *etdb;
/* fixed constants are bad bad bad */
pstring linein;
char linein[1024];
bool is_eor;
Eventlog_entry ee;
int rcnum;

View File

@ -1636,12 +1636,17 @@ int net_ads_join(int argc, const char **argv)
}
if ( createupn ) {
pstring upn;
char *upn;
/* default to using the short UPN name */
if ( !machineupn ) {
snprintf( upn, sizeof(upn), "host/%s@%s", global_myname(),
ads->config.realm );
if (!machineupn ) {
upn = talloc_asprintf(ctx,
"host/%s@%s", global_myname(),
ads->config.realm );
if (!upn) {
nt_status = NT_STATUS_NO_MEMORY;
goto fail;
}
machineupn = upn;
}