Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}