int cmd_setattr(int argc, char **argv) { int ret; char opt; char *path = NULL; dpl_dict_t *metadata = NULL; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = getopt(argc, argv, usage_getoptstr(setattr_usage))) != -1) switch (opt) { case 'm': metadata = dpl_parse_metadata(optarg); if (NULL == metadata) { fprintf(stderr, "error parsing metadata\n"); return SHELL_CONT; } break ; case '?': default: usage_help(&setattr_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (1 != argc) { usage_help(&setattr_cmd); return SHELL_CONT; } path = argv[0]; ret = dpl_setattr(ctx, path, metadata); if (DPL_SUCCESS != ret) { fprintf(stderr, "status: %s (%d)\n", dpl_status_str(ret), ret); goto end; } var_set("status", "0", VAR_CMD_SET, NULL); end: if (NULL != metadata) dpl_dict_free(metadata); return SHELL_CONT; }
int cmd_mv(int argc, char **argv) { int ret; char opt; char *src_path = NULL; char *dst_path = NULL; dpl_sysmd_t sysmd; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = linux_getopt(argc, argv, usage_getoptstr(mv_usage))) != -1) switch (opt) { case '?': default: usage_help(&mv_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (2 != argc) { usage_help(&mv_cmd); goto end; } src_path = argv[0]; dst_path = argv[1]; if (!strcmp(dst_path, ".")) { char *p; p = rindex(src_path, '/'); if (NULL != p) { p++; dst_path = p; } else { dst_path = src_path; } } if (! strcmp("s3", (char *) dpl_get_backend_name(ctx))) { if (-1 == path_contains_valid_bucketname(ctx, src_path) || -1 == path_contains_valid_bucketname(ctx, dst_path)) { fprintf(stderr, "You need to set a bucket to use 'mv' " "(use 'la' to list the buckets)\n"); goto end; } } ret = dpl_getattr(ctx, src_path, NULL, &sysmd); if (DPL_SUCCESS != ret) { fprintf(stderr, "dpl_getattr status: %s (%d)\n", dpl_status_str(ret), ret); goto end; } ret = dpl_rename(ctx, src_path, dst_path, sysmd.ftype); if (DPL_SUCCESS != ret) { fprintf(stderr, "dpl_rename status: %s (%d)\n", dpl_status_str(ret), ret); goto end; } var_set("status", "0", VAR_CMD_SET, NULL); end: return SHELL_CONT; }
int cmd_ls(int argc, char **argv) { char opt; int ret; int lflag = 0; int aflag = 0; int Rflag = 0; size_t total_size = 0; char *path; struct ls_data ls_data; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = getopt(argc, argv, usage_getoptstr(ls_usage))) != -1) switch (opt) { case 'R': Rflag = 1; break ; case 'a': break ; case 'A': aflag = 1; break ; case 'l': lflag = 1; break ; case '?': default: usage_help(&ls_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (0 == argc) path = "."; else if (1 == argc) path = argv[0]; else { usage_help(&ls_cmd); return SHELL_CONT; } memset(&ls_data, 0, sizeof (ls_data)); ls_data.ctx = ctx; ls_data.lflag = lflag; ls_data.Rflag = Rflag; ls_data.aflag = aflag; ret = ls_recurse(&ls_data, path, 0); if (DPL_SUCCESS != ret) { fprintf(stderr, "ls failure %s (%d)\n", dpl_status_str(ret), ret); goto end; } total_size = ls_data.total_size; if (1 == lflag) { if (NULL != ctx->pricing) printf("Total %s Price %s\n", dpl_size_str(total_size), dpl_price_storage_str(ctx, total_size)); } var_set("status", "0", VAR_CMD_SET, NULL); end: return SHELL_CONT; }
int cmd_get(int argc, char **argv) { int ret; char opt; char *path = NULL; dpl_dict_t *metadata = NULL; struct get_data get_data; int do_stdout = 0; int kflag = 0; char *local_file = NULL; int start = -1; int start_inited = 0; int end = -1; int end_inited = 0; int mflag = 0; memset(&get_data, 0, sizeof (get_data)); get_data.fd = -1; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = getopt(argc, argv, usage_getoptstr(get_usage))) != -1) switch (opt) { case 'm': mflag = 1; break ; case 's': start = strtol(optarg, NULL, 0); start_inited = 1; break ; case 'e': end = strtol(optarg, NULL, 0); end_inited = 1; break ; case 'k': kflag = 1; break ; case '?': default: usage_help(&get_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (start_inited != end_inited) { fprintf(stderr, "please provide -s and -e\n"); return SHELL_CONT; } if (2 == argc) { path = argv[0]; local_file = argv[1]; } else if (1 == argc) { path = argv[0]; local_file = rindex(path, '/'); if (NULL != local_file) local_file++; else local_file = path; } else { usage_help(&get_cmd); return SHELL_CONT; } if (!strcmp(local_file, "-")) { get_data.fd = 1; do_stdout = 1; } else if ('|' == local_file[0]) { get_data.pipe = popen(local_file + 1, "w"); if (NULL == get_data.pipe) { fprintf(stderr, "pipe failed\n"); goto end; } } else { ret = access(local_file, F_OK); if (0 == ret) { if (1 == ask_for_confirmation("file already exists, overwrite?")) return SHELL_CONT; } get_data.fd = open(local_file, O_WRONLY|O_CREAT, 0600); if (-1 == get_data.fd) { perror("open"); goto end; } } if (1 == start_inited && 1 == end_inited) { char *data_buf; u_int data_len; ret = dpl_openread_range(ctx, path, (1 == kflag ? DPL_VFILE_FLAG_ENCRYPT : 0u), NULL, start, end, &data_buf, &data_len, &metadata); if (DPL_SUCCESS != ret) { fprintf(stderr, "status: %s (%d)\n", dpl_status_str(ret), ret); goto end; } ret = write_all(get_data.fd, data_buf, data_len); free(data_buf); if (0 != ret) { fprintf(stderr, "short write\n"); goto end; } if (1 == mflag) dpl_dict_iterate(metadata, cb_print_metadata, NULL); } else { ret = dpl_openread(ctx, path, (1 == kflag ? DPL_VFILE_FLAG_ENCRYPT : 0u), NULL, cb_get_buffered, &get_data, &metadata); if (DPL_SUCCESS != ret) { fprintf(stderr, "status: %s (%d)\n", dpl_status_str(ret), ret); goto end; } if (1 == mflag) dpl_dict_iterate(metadata, cb_print_metadata, NULL); } var_set("status", "0", VAR_CMD_SET, NULL); end: if (NULL != metadata) dpl_dict_free(metadata); if (0 == do_stdout) { if (-1 != get_data.fd) close(get_data.fd); if (NULL != get_data.pipe) pclose(get_data.pipe); } return SHELL_CONT; }
int cmd_mb(int argc, char **argv) { int ret; char opt; char *bucket; char *resource; dpl_canned_acl_t canned_acl = DPL_CANNED_ACL_PRIVATE; int Aflag = 0; int i; dpl_location_constraint_t location_constraint = DPL_LOCATION_CONSTRAINT_US_STANDARD; int Lflag = 0; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = getopt(argc, argv, usage_getoptstr(mb_usage))) != -1) switch (opt) { case 'l': location_constraint = dpl_location_constraint(optarg); if (-1 == location_constraint) { fprintf(stderr, "bad location constraint '%s'\n", optarg); return SHELL_CONT; } break ; case 'L': Lflag = 1; break ; case 'a': canned_acl = dpl_canned_acl(optarg); if (-1 == canned_acl) { fprintf(stderr, "bad canned acl '%s'\n", optarg); return SHELL_CONT; } break ; case 'A': Aflag = 1; break ; case '?': default: usage_help(&mb_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (1 == Aflag) { for (i = 0;i < DPL_N_CANNED_ACL;i++) printf("%s\n", dpl_canned_acl_str(i)); return SHELL_CONT; } if (1 == Lflag) { for (i = 0;i < DPL_N_LOCATION_CONSTRAINT;i++) printf("%s\n", dpl_location_constraint_str(i)); return SHELL_CONT; } if (1 != argc) { usage_help(&mb_cmd); return SHELL_CONT; } bucket = argv[0]; resource = "/"; ret = dpl_make_bucket(ctx, bucket, location_constraint, canned_acl); if (DPL_SUCCESS != ret) { fprintf(stderr, "status: %s (%d)\n", dpl_status_str(ret), ret); return SHELL_CONT; } var_set("status", "0", VAR_CMD_SET, NULL); return SHELL_CONT; }
int cmd_put(int argc, char **argv) { int ret; char opt; dpl_canned_acl_t canned_acl = DPL_CANNED_ACL_PRIVATE; int Aflag = 0; int i; int fd = -1; dpl_dict_t *metadata = NULL; char *local_file = NULL; char *remote_file = NULL; dpl_vfile_t *vfile = NULL; size_t block_size = 64*1024; ssize_t cc; struct stat st; int kflag = 0; char *buf; var_set("status", "1", VAR_CMD_SET, NULL); optind = 0; while ((opt = getopt(argc, argv, usage_getoptstr(put_usage))) != -1) switch (opt) { case 'k': kflag = 1; break ; case 'm': metadata = dpl_parse_metadata(optarg); if (NULL == metadata) { fprintf(stderr, "error parsing metadata\n"); return SHELL_CONT; } break ; case 'a': canned_acl = dpl_canned_acl(optarg); if (-1 == canned_acl) { fprintf(stderr, "bad canned acl '%s'\n", optarg); return SHELL_CONT; } break ; case 'A': Aflag = 1; break ; case '?': default: usage_help(&put_cmd); return SHELL_CONT; } argc -= optind; argv += optind; if (1 == Aflag) { for (i = 0;i < DPL_N_CANNED_ACL;i++) printf("%s\n", dpl_canned_acl_str(i)); return SHELL_CONT; } if (2 == argc) { char *p, *p2; local_file = argv[0]; remote_file = argv[1]; p = index(remote_file, ':'); if (NULL != p) { p++; if (!strcmp(p, "")) { p2 = rindex(local_file, '/'); if (NULL != p2) { p2++; strcat(remote_file, p2); } else { strcat(remote_file, local_file); } } } } else if (1 == argc) { local_file = argv[0]; remote_file = rindex(local_file, '/'); if (NULL != remote_file) remote_file++; else remote_file = local_file; } else { usage_help(&put_cmd); return SHELL_CONT; } fd = open(local_file, O_RDONLY); if (-1 == fd) { perror("open"); goto end; } buf = alloca(block_size); ret = fstat(fd, &st); if (-1 == ret) { perror("fstat"); return SHELL_CONT; } ret = dpl_openwrite(ctx, remote_file, DPL_VFILE_FLAG_CREAT | (1 == kflag ? DPL_VFILE_FLAG_ENCRYPT : DPL_VFILE_FLAG_MD5), metadata, canned_acl, st.st_size, &vfile); if (DPL_SUCCESS != ret) { fprintf(stderr, "status: %s (%d)\n", dpl_status_str(ret), ret); return SHELL_CONT; } while (1) { cc = read(fd, buf, block_size); if (-1 == cc) { perror("read"); return -1; } if (0 == cc) { break ; } ret = dpl_write(vfile, buf, cc); if (DPL_SUCCESS != ret) { fprintf(stderr, "write failed\n"); return SHELL_CONT; } if (1 == hash) { fprintf(stderr, "#"); fflush(stderr); } } ret = dpl_close(vfile); if (DPL_SUCCESS != ret) { fprintf(stderr, "close failed %s (%d)\n", dpl_status_str(ret), ret); return SHELL_CONT; } vfile = NULL; var_set("status", "0", VAR_CMD_SET, NULL); end: if (-1 != fd) close(fd); if (NULL != metadata) dpl_dict_free(metadata); if (NULL != vfile) dpl_close(vfile); return SHELL_CONT; }