📄 client.c
字号:
****************************************************************************/static int cmd_acl(struct smbclient_context *ctx, const char **args){ char *fname; union smb_fileinfo query; NTSTATUS status; int fnum; if (!args[1]) { d_printf("acl <filename>\n"); return 1; } fname = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); fnum = smbcli_nt_create_full(ctx->cli->tree, fname, 0, SEC_STD_READ_CONTROL, 0, NTCREATEX_SHARE_ACCESS_DELETE| NTCREATEX_SHARE_ACCESS_READ| NTCREATEX_SHARE_ACCESS_WRITE, NTCREATEX_DISP_OPEN, 0, 0); if (fnum == -1) { d_printf("%s - %s\n", fname, smbcli_errstr(ctx->cli->tree)); return -1; } query.query_secdesc.level = RAW_FILEINFO_SEC_DESC; query.query_secdesc.in.file.fnum = fnum; query.query_secdesc.in.secinfo_flags = 0x7; status = smb_raw_fileinfo(ctx->cli->tree, ctx, &query); if (!NT_STATUS_IS_OK(status)) { d_printf("%s - %s\n", fname, nt_errstr(status)); return 1; } NDR_PRINT_DEBUG(security_descriptor, query.query_secdesc.out.sd); return 0;}/****************************************************************************lookup a name or sid****************************************************************************/static int cmd_lookup(struct smbclient_context *ctx, const char **args){ NTSTATUS status; struct dom_sid *sid; if (!args[1]) { d_printf("lookup <sid|name>\n"); return 1; } sid = dom_sid_parse_talloc(ctx, args[1]); if (sid == NULL) { const char *sidstr; status = smblsa_lookup_name(ctx->cli, args[1], ctx, &sidstr); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_LookupNames - %s\n", nt_errstr(status)); return 1; } d_printf("%s\n", sidstr); } else { const char *name; status = smblsa_lookup_sid(ctx->cli, args[1], ctx, &name); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_LookupSids - %s\n", nt_errstr(status)); return 1; } d_printf("%s\n", name); } return 0;}/****************************************************************************show privileges for a user****************************************************************************/static int cmd_privileges(struct smbclient_context *ctx, const char **args){ NTSTATUS status; struct dom_sid *sid; struct lsa_RightSet rights; unsigned i; if (!args[1]) { d_printf("privileges <sid|name>\n"); return 1; } sid = dom_sid_parse_talloc(ctx, args[1]); if (sid == NULL) { const char *sid_str; status = smblsa_lookup_name(ctx->cli, args[1], ctx, &sid_str); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_LookupNames - %s\n", nt_errstr(status)); return 1; } sid = dom_sid_parse_talloc(ctx, sid_str); } status = smblsa_sid_privileges(ctx->cli, sid, ctx, &rights); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_EnumAccountRights - %s\n", nt_errstr(status)); return 1; } for (i=0;i<rights.count;i++) { d_printf("\t%s\n", rights.names[i].string); } return 0;}/****************************************************************************add privileges for a user****************************************************************************/static int cmd_addprivileges(struct smbclient_context *ctx, const char **args){ NTSTATUS status; struct dom_sid *sid; struct lsa_RightSet rights; int i; if (!args[1]) { d_printf("addprivileges <sid|name> <privilege...>\n"); return 1; } sid = dom_sid_parse_talloc(ctx, args[1]); if (sid == NULL) { const char *sid_str; status = smblsa_lookup_name(ctx->cli, args[1], ctx, &sid_str); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_LookupNames - %s\n", nt_errstr(status)); return 1; } sid = dom_sid_parse_talloc(ctx, sid_str); } ZERO_STRUCT(rights); for (i = 2; args[i]; i++) { rights.names = talloc_realloc(ctx, rights.names, struct lsa_StringLarge, rights.count+1); rights.names[rights.count].string = talloc_strdup(ctx, args[i]); rights.count++; } status = smblsa_sid_add_privileges(ctx->cli, sid, ctx, &rights); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_AddAccountRights - %s\n", nt_errstr(status)); return 1; } return 0;}/****************************************************************************delete privileges for a user****************************************************************************/static int cmd_delprivileges(struct smbclient_context *ctx, const char **args){ NTSTATUS status; struct dom_sid *sid; struct lsa_RightSet rights; int i; if (!args[1]) { d_printf("delprivileges <sid|name> <privilege...>\n"); return 1; } sid = dom_sid_parse_talloc(ctx, args[1]); if (sid == NULL) { const char *sid_str; status = smblsa_lookup_name(ctx->cli, args[1], ctx, &sid_str); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_LookupNames - %s\n", nt_errstr(status)); return 1; } sid = dom_sid_parse_talloc(ctx, sid_str); } ZERO_STRUCT(rights); for (i = 2; args[i]; i++) { rights.names = talloc_realloc(ctx, rights.names, struct lsa_StringLarge, rights.count+1); rights.names[rights.count].string = talloc_strdup(ctx, args[i]); rights.count++; } status = smblsa_sid_del_privileges(ctx->cli, sid, ctx, &rights); if (!NT_STATUS_IS_OK(status)) { d_printf("lsa_RemoveAccountRights - %s\n", nt_errstr(status)); return 1; } return 0;}/********************************************************************************************************************************************************/static int cmd_open(struct smbclient_context *ctx, const char **args){ char *mask; if (!args[1]) { d_printf("open <filename>\n"); return 1; } mask = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); smbcli_open(ctx->cli->tree, mask, O_RDWR, DENY_ALL); return 0;}/****************************************************************************remove a directory****************************************************************************/static int cmd_rmdir(struct smbclient_context *ctx, const char **args){ char *mask; if (!args[1]) { d_printf("rmdir <dirname>\n"); return 1; } mask = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); if (NT_STATUS_IS_ERR(smbcli_rmdir(ctx->cli->tree, mask))) { d_printf("%s removing remote directory file %s\n", smbcli_errstr(ctx->cli->tree),mask); } return 0;}/**************************************************************************** UNIX hardlink.****************************************************************************/static int cmd_link(struct smbclient_context *ctx, const char **args){ char *src,*dest; if (!(ctx->cli->transport->negotiate.capabilities & CAP_UNIX)) { d_printf("Server doesn't support UNIX CIFS calls.\n"); return 1; } if (!args[1] || !args[2]) { d_printf("link <src> <dest>\n"); return 1; } src = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); dest = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[2]); if (NT_STATUS_IS_ERR(smbcli_unix_hardlink(ctx->cli->tree, src, dest))) { d_printf("%s linking files (%s -> %s)\n", smbcli_errstr(ctx->cli->tree), src, dest); return 1; } return 0;}/**************************************************************************** UNIX symlink.****************************************************************************/static int cmd_symlink(struct smbclient_context *ctx, const char **args){ char *src,*dest; if (!(ctx->cli->transport->negotiate.capabilities & CAP_UNIX)) { d_printf("Server doesn't support UNIX CIFS calls.\n"); return 1; } if (!args[1] || !args[2]) { d_printf("symlink <src> <dest>\n"); return 1; } src = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); dest = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[2]); if (NT_STATUS_IS_ERR(smbcli_unix_symlink(ctx->cli->tree, src, dest))) { d_printf("%s symlinking files (%s -> %s)\n", smbcli_errstr(ctx->cli->tree), src, dest); return 1; } return 0;}/**************************************************************************** UNIX chmod.****************************************************************************/static int cmd_chmod(struct smbclient_context *ctx, const char **args){ char *src; mode_t mode; if (!(ctx->cli->transport->negotiate.capabilities & CAP_UNIX)) { d_printf("Server doesn't support UNIX CIFS calls.\n"); return 1; } if (!args[1] || !args[2]) { d_printf("chmod mode file\n"); return 1; } src = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[2]); mode = (mode_t)strtol(args[1], NULL, 8); if (NT_STATUS_IS_ERR(smbcli_unix_chmod(ctx->cli->tree, src, mode))) { d_printf("%s chmod file %s 0%o\n", smbcli_errstr(ctx->cli->tree), src, (mode_t)mode); return 1; } return 0;}/**************************************************************************** UNIX chown.****************************************************************************/static int cmd_chown(struct smbclient_context *ctx, const char **args){ char *src; uid_t uid; gid_t gid; if (!(ctx->cli->transport->negotiate.capabilities & CAP_UNIX)) { d_printf("Server doesn't support UNIX CIFS calls.\n"); return 1; } if (!args[1] || !args[2] || !args[3]) { d_printf("chown uid gid file\n"); return 1; } uid = (uid_t)atoi(args[1]); gid = (gid_t)atoi(args[2]); src = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[3]); if (NT_STATUS_IS_ERR(smbcli_unix_chown(ctx->cli->tree, src, uid, gid))) { d_printf("%s chown file %s uid=%d, gid=%d\n", smbcli_errstr(ctx->cli->tree), src, (int)uid, (int)gid); return 1; } return 0;}/****************************************************************************rename some files****************************************************************************/static int cmd_rename(struct smbclient_context *ctx, const char **args){ char *src,*dest; if (!args[1] || !args[2]) { d_printf("rename <src> <dest>\n"); return 1; } src = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[1]); dest = talloc_asprintf(ctx, "%s%s", ctx->remote_cur_dir, args[2]); if (NT_STATUS_IS_ERR(smbcli_rename(ctx->cli->tree, src, dest))) { d_printf("%s renaming files\n",smbcli_errstr(ctx->cli->tree)); return 1; } return 0;}/****************************************************************************toggle the prompt flag****************************************************************************/static int cmd_prompt(struct smbclient_context *ctx, const char **args){ ctx->prompt = !ctx->prompt; DEBUG(2,("prompting is now %s\n",ctx->prompt?"on":"off")); return 1;}/****************************************************************************set the newer than time****************************************************************************/static int cmd_newer(struct smbclient_context *ctx, const char **args){ struct stat sbuf; if (args[1] && (stat(args[1],&sbuf) == 0)) { ctx->newer_than = sbuf.st_mtime; DEBUG(1,("Getting files newer than %s", asctime(localtime(&ctx->newer_than)))); } else { ctx->newer_than = 0; } if (args[1] && ctx->newer_than == 0) { d_printf("Error setting newer-than time\n"); return 1; } return 0;}/****************************************************************************set the archive level****************************************************************************/static int cmd_archive(struct smbclient_context *ctx, const char **args){ if (args[1]) { ctx->archive_level = atoi(args[1]); } else d_printf("Archive level is %d\n",ctx->archive_level); return 0;}/****************************************************************************toggle the lowercaseflag****************************************************************************/static int cmd_lowercase(struct smbclient_context *ctx, const char **args){ ctx->lowercase = !ctx->lowercase; DEBUG(2,("filename lowercasing is now %s\n",ctx->lowercase?"on":"off")); return 0;}/****************************************************************************toggle the recurse flag****************************************************************************/static int cmd_recurse(struct smbclient_context *ctx, const char **args){ ctx->recurse = !ctx->recurse; DEBUG(2,("directory recursion is now %s\n",ctx->recurse?"on":"off")); return 0;}/****************************************************************************toggle the translate flag****************************************************************************/static int cmd_translate(struct smbclient_context *ctx, const char **args){ ctx->translation = !ctx->translation; DEBUG(2,("CR/LF<->LF and print text tr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -