version 1.188, 2018/11/16 03:26:01 |
version 1.189, 2019/01/16 23:23:45 |
|
|
printf("Available commands:\n" |
printf("Available commands:\n" |
"bye Quit sftp\n" |
"bye Quit sftp\n" |
"cd path Change remote directory to 'path'\n" |
"cd path Change remote directory to 'path'\n" |
"chgrp grp path Change group of file 'path' to 'grp'\n" |
"chgrp [-h] grp path Change group of file 'path' to 'grp'\n" |
"chmod mode path Change permissions of file 'path' to 'mode'\n" |
"chmod [-h] mode path Change permissions of file 'path' to 'mode'\n" |
"chown own path Change owner of file 'path' to 'own'\n" |
"chown [-h] own path Change owner of file 'path' to 'own'\n" |
"df [-hi] [path] Display statistics for current directory or\n" |
"df [-hi] [path] Display statistics for current directory or\n" |
" filesystem containing 'path'\n" |
" filesystem containing 'path'\n" |
"exit Quit sftp\n" |
"exit Quit sftp\n" |
|
|
} |
} |
|
|
static int |
static int |
|
parse_ch_flags(const char *cmd, char **argv, int argc, int *hflag) |
|
{ |
|
extern int opterr, optind, optopt, optreset; |
|
int ch; |
|
|
|
optind = optreset = 1; |
|
opterr = 0; |
|
|
|
*hflag = 0; |
|
while ((ch = getopt(argc, argv, "h")) != -1) { |
|
switch (ch) { |
|
case 'h': |
|
*hflag = 1; |
|
break; |
|
default: |
|
error("%s: Invalid flag -%c", cmd, optopt); |
|
return -1; |
|
} |
|
} |
|
|
|
return optind; |
|
} |
|
|
|
static int |
parse_no_flags(const char *cmd, char **argv, int argc) |
parse_no_flags(const char *cmd, char **argv, int argc) |
{ |
{ |
extern int opterr, optind, optopt, optreset; |
extern int opterr, optind, optopt, optreset; |
|
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case I_CHOWN: |
case I_CHOWN: |
case I_CHGRP: |
case I_CHGRP: |
if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) |
if ((optidx = parse_ch_flags(cmd, argv, argc, hflag)) == -1) |
return -1; |
return -1; |
/* Get numeric arg (mandatory) */ |
/* Get numeric arg (mandatory) */ |
if (argc - optidx < 1) |
if (argc - optidx < 1) |
|
|
if (!quiet) |
if (!quiet) |
mprintf("Changing mode on %s\n", |
mprintf("Changing mode on %s\n", |
g.gl_pathv[i]); |
g.gl_pathv[i]); |
err = do_setstat(conn, g.gl_pathv[i], &a); |
err = (hflag ? do_lsetstat : do_setstat)(conn, |
|
g.gl_pathv[i], &a); |
if (err != 0 && err_abort) |
if (err != 0 && err_abort) |
break; |
break; |
} |
} |
|
|
path1 = make_absolute(path1, *pwd); |
path1 = make_absolute(path1, *pwd); |
remote_glob(conn, path1, GLOB_NOCHECK, NULL, &g); |
remote_glob(conn, path1, GLOB_NOCHECK, NULL, &g); |
for (i = 0; g.gl_pathv[i] && !interrupted; i++) { |
for (i = 0; g.gl_pathv[i] && !interrupted; i++) { |
if (!(aa = do_stat(conn, g.gl_pathv[i], 0))) { |
if (!(aa = (hflag ? do_lstat : do_stat)(conn, |
|
g.gl_pathv[i], 0))) { |
if (err_abort) { |
if (err_abort) { |
err = -1; |
err = -1; |
break; |
break; |
|
|
g.gl_pathv[i]); |
g.gl_pathv[i]); |
aa->gid = n_arg; |
aa->gid = n_arg; |
} |
} |
err = do_setstat(conn, g.gl_pathv[i], aa); |
err = (hflag ? do_lsetstat : do_setstat)(conn, |
|
g.gl_pathv[i], aa); |
if (err != 0 && err_abort) |
if (err != 0 && err_abort) |
break; |
break; |
} |
} |