Exemplo n.º 1
0
int install_sexe_userdata(sexe_t *S, char *tag)
{
  SHFL *fl;
  shjson_t *udata;
  shfs_t *fs;
  shbuf_t *buff;
  shkey_t *k;
  char path[PATH_MAX+1];
  int is_new;

  k = shkey_str(tag);
  sprintf(path, "/sys/data/sexe/%s", shkey_hex(k)); 
  memcpy(&S->pname, k, sizeof(S->pname));
  shkey_free(&k);

  buff = shbuf_init();
  fs = shfs_init(NULL);
  fl = shfs_file_find(fs, path);
  is_new = shfs_read(fl, buff);

  udata = shjson_init(shbuf_size(buff) ? (char *)shbuf_data(buff) : NULL);
  shbuf_free(&buff);

  if (is_new)
    shjson_num_add(udata, "birth", shtimef(shtime()));

  sexe_table_set(S, udata);
  lua_setglobal(S, "userdata");
  shjson_free(&udata);

  shfs_free(&fs);

  return (0);
}
Exemplo n.º 2
0
int update_sexe_userdata(sexe_t *S)
{
  SHFL *fl;
  shjson_t *udata;
  shfs_t *fs;
  shbuf_t *buff;
  shkey_t *k;
  char path[PATH_MAX+1];
  char *str;
  int err;

  k = &S->pname;
  if (shkey_cmp(k, ashkey_blank())) {
fprintf(stderr, "DEBUG: update_sexe_userdata: no app key\n");
    return (0); /* blank */
  }
  sprintf(path, "/sys/data/sexe/%s", shkey_hex(k)); 

  lua_getglobal(S, "userdata");
  udata = sexe_table_get(S);
  if (!udata) {
fprintf(stderr, "DEBUG: update_sexe_userdata: no global 'userdata' variable.\n");
    return (SHERR_INVAL);
  }

  str = shjson_print(udata);
  if (!str) {
fprintf(stderr, "DEBUG: update_sexe_userdata: error encoding JSON.\n");
    return (SHERR_INVAL);
}
  shjson_free(&udata);

  buff = shbuf_init();
  shbuf_catstr(buff, str);
  free(str);


  fs = shfs_init(NULL);
  fl = shfs_file_find(fs, path);
  err = shfs_write(fl, buff);
  shbuf_free(&buff);
  shfs_free(&fs);

  return (err);
}
Exemplo n.º 3
0
void *pstore_read(int tx_op, char *name)
{
    SHFL *fl;
    shbuf_t *buff;
    char path[PATH_MAX+1];
    char prefix[256];
    unsigned char *data;
    size_t data_len;
    int err;

    pstore_init();

    memset(prefix, 0, sizeof(prefix));
    switch (tx_op) {
    case TX_ACCOUNT:
        strcpy(prefix, "account");
        break;
    case TX_IDENT:
        strcpy(prefix, "id");
        break;
    case TX_SESSION:
        strcpy(prefix, "session");
        break;
    case TX_APP:
        strcpy(prefix, "app");
        break;
    case TX_LEDGER:
        strcpy(prefix, "ledger");
        break;
    default:
        strcpy(prefix, "default");
        break;
    }

    buff = shbuf_init();
    sprintf(path, "/sys/net/tx/%s/%s", prefix, name);
    fl = shfs_file_find(_pstore_fs, path);
    err = shfs_read(fl, buff);
    if (err) {
        shbuf_free(&buff);
        return (NULL);
    }

    return (shbuf_unmap(buff));
}
Exemplo n.º 4
0
int pstore_write(int tx_op, char *name, unsigned char *data, size_t data_len)
{
    SHFL *fl;
    char prefix[256];
    char path[PATH_MAX+1];
    shbuf_t *buff;
    int err;

    pstore_init();

    memset(prefix, 0, sizeof(prefix));
    switch (tx_op) {
    case TX_ACCOUNT:
        strcpy(prefix, "account");
        break;
    case TX_IDENT:
        strcpy(prefix, "id");
        break;
    case TX_SESSION:
        strcpy(prefix, "session");
        break;
    case TX_APP:
        strcpy(prefix, "app");
        break;
    case TX_LEDGER:
        strcpy(prefix, "ledger");
        break;
    default:
        strcpy(prefix, "default");
        break;
    }

    sprintf(path, "/sys/net/tx/%s/%s", prefix, name);
    fl = shfs_file_find(_pstore_fs, path);
    buff = shbuf_init();
    shbuf_cat(buff, data, data_len);
    err = shfs_write(fl, buff);
    shbuf_free(&buff);
    if (err)
        return (err);

    return (0);
}
Exemplo n.º 5
0
int pstore_delete(int tx_op, char *hash)
{
    char path[PATH_MAX+1];
    char prefix[256];
    shfs_ino_t *fl;
    int err;

    pstore_init();

    memset(prefix, 0, sizeof(prefix));
    switch (tx_op) {
    case TX_ACCOUNT:
        strcpy(prefix, "account");
        break;
    case TX_IDENT:
        strcpy(prefix, "id");
        break;
    case TX_SESSION:
        strcpy(prefix, "session");
        break;
    case TX_APP:
        strcpy(prefix, "app");
        break;
    case TX_LEDGER:
        strcpy(prefix, "ledger");
        break;
    case TX_LICENSE:
        strcpy(prefix, "license");
        break;
    default:
        strcpy(prefix, "default");
        break;
    }

    sprintf(path, "/sys/net/tx/%s/%s", prefix, hash);
    fl = shfs_file_find(_pstore_fs, path);
    err = shfs_file_remove(fl);
    if (err)
        return (err);

    return (0);
}
Exemplo n.º 6
0
shfs_ino_t *shpam_shadow_file(shfs_t **fs_p)
{
  shfs_ino_t *sys_dir;
  shfs_ino_t *file;
  shpeer_t *peer;
  shfs_t *fs;

  fs = *fs_p;
  if (!fs) {
    fs = shfs_sys_init(SHFS_DIR_PAM, "shadow", &file);
  } else {
    file = shfs_file_find(fs, shfs_sys_dir(SHFS_DIR_PAM, "shadow"));
  }

/* ?? */
  shfs_access_owner_set(file, shpam_ident_root(&fs->peer));

  *fs_p = fs;
  return (file);
}
Exemplo n.º 7
0
int share_file_copy_recursive(SHFL *dest_file, char *fname)
{
  shfs_dirent_t *ents;
  shfs_t *fs;
  SHFL **files;
  SHFL *dir;
  struct stat st;
  char spec_prefix[SHFS_PATH_MAX];
  char spec_dir[SHFS_PATH_MAX];
  char spec_fname[SHFS_PATH_MAX];
  char path[SHFS_PATH_MAX];
  char work_path[SHFS_PATH_MAX];
  char buf[4096];
char *list_fname;
  char *ptr;
  int ent_nr;
  int err;
  int i;

  memset(spec_prefix, 0, sizeof(spec_prefix));
  ptr = strstr(fname, ":/");
  if (ptr) {
    ptr += 2;
    strncpy(spec_prefix, fname, MIN(sizeof(spec_prefix)-1, (ptr-fname)));
    fname += strlen(spec_prefix);
  }

  if (!strchr(fname, '/') || 0 == strncmp(fname, "./", 2)) {
    if (0 == strncmp(fname, "./", 2)) 
      fname += 2;

    strcpy(spec_prefix, "file:/");
    getcwd(buf, sizeof(buf)-1);
    strcat(buf, "/");
    strcat(buf, fname);
    ptr = strrchr(buf, '/');
    strncpy(spec_dir, buf + 1, strlen(buf) - strlen(ptr));
    sprintf(spec_fname, "%s%s", spec_dir, ptr+1);

    list_fname = basename(spec_fname);
  } else {
    memset(spec_fname, 0, sizeof(spec_fname));
    strncpy(spec_fname, fname, sizeof(spec_fname)-1);
    list_fname = basename(spec_fname);

    memset(spec_dir, 0, sizeof(spec_dir));
    strncpy(spec_dir, fname, MIN(strlen(fname) - strlen(list_fname), sizeof(spec_dir)-1));
  }

  sprintf(path, "%s%s", spec_prefix, spec_dir); 
fprintf(stderr, "DEBUG: file_recursive: shfs_uri_init(%s)\n", path);
  fs = shfs_uri_init(path, 0, &dir);

  if (!*list_fname) {
    /* directory reference. */
    ent_nr = 1;
    files = (SHFL **)calloc(ent_nr+1, sizeof(SHFL *)); 
    if (!files) return (SHERR_NOMEM);
    files[0] = dir;
  } else {
    /* search files in directory */
    err = 0;
    ent_nr = shfs_list(dir, list_fname, &ents);
    if (ent_nr <= 0)
      return (ent_nr);

    err = SHERR_NOENT;
    files = (SHFL **)calloc(ent_nr+1, sizeof(SHFL *)); 
    if (!files) return (SHERR_NOMEM);
    for (i = 0; i < ent_nr; i++) {
      ptr = strstr(spec_dir, ":/");
      if (ptr) {
        sprintf(path, "%s%s", ptr+2, ents[i].d_name);
      } else {
        sprintf(path, "%s%s", spec_dir, ents[i].d_name);
      }
      err = shfs_stat(fs, path, &st);
      if (err)
        break;

      files[i] = shfs_file_find(fs, path);
    }
    shfs_list_free(&ents);
    if (err) {
      free(files);
      return (err);
    }
  }

#if 0
  /* handle recursive hierarchy */
  if ((run_flags & PFLAG_RECURSIVE)) {
    for (i = 0; i < ent_nr; i++) {
      if (shfs_type(files[i]) != SHINODE_DIRECTORY)
        continue;

      /* .. */
    }
  }
#endif
    
  for (i = 0; i < ent_nr; i++) {
    /* perform file copy */
    err = shfs_file_copy(files[i], dest_file);
    if (err) {
      fprintf(sharetool_fout, "%s: error copying \"%s\" to \"%s\": %s [sherr %d].\n",
          process_path, shfs_filename(files[i]), shfs_filename(dest_file),
          sherrstr(err), err);
      return (err);
    }

    if (!(run_flags & PFLAG_QUIET) && (run_flags & PFLAG_VERBOSE)) {
      fprintf(sharetool_fout, "%s: %s \"%s\" copied to %s \"%s\".\n",
        process_path,
        shfs_type_str(shfs_type(files[i])), shfs_filename(files[i]), 
        shfs_type_str(shfs_type(dest_file)), shfs_filename(dest_file)); 
    }
  }

  free(files);
  shfs_free(&fs);

  return (0);
}