Example #1
0
	void encryption::init(encryption_method method)
	{
		_last_error.clear();

		_method = method;

		_ca_filename.clear();
		_cert_filename.clear();
		_private_key_filename.clear();
		_verify_mode = ssl_verify_none;
		_verify_callback = verify_callback();

		_context = std::move(ssl_context(static_cast<ssl_context::method>(_method)));
	}
Example #2
0
int parse_path(const char *path,char *result,struct vnode **ret_vnode,int (*error_callback) (struct dentry *dentry,const char *name), int (*verify_callback)(struct dentry *dentry ) ) { 
  char *args = (char *)path;
  struct vnode *vnode ; /*pointer to the current vnode*/
  struct mountpoint *mp ;
  char output[MAX_PATH+1];
  int err = -1;
  if( ret_vnode )
    *ret_vnode = NULL;

  if( !args ) {
    goto out;
  }

  while (isspace(*args) ) ++args;
  if (! *args) {
    goto out;
  }
  vnode = vnode_lookup(current->files_struct.cwd);
  if(! vnode) { 
    printf("Invalid CURRENT WORKING DIRECTORY %s. vnode not found in Function %s...\n",current->files_struct.cwd,__FUNCTION__);
    goto out;
  }
  trim_file_separator(args,output,sizeof(output)-1);
  {
    char *ptr = output;
    char *ptr1 ;
    char path[MAX_PATH+1], abs_path[MAX_PATH+1]="";
    struct vnode *traverse = vnode;
    struct dentry *dentry ;
    if(output[0] == FILE_SEPARATOR) {
      /*look for a mount point in the path and set the current to that of the mount point*/
      if( ( mp = get_mount(output) ) ) { 
	ptr += strlen(mp->path);
	traverse = mp->v;
      } else {
	error_callback(NULL,args);
	goto out;
      }
    }

    if(strcmp(traverse->name.abs_name,FILE_SEPARATOR_STR) ) 
      strncpy(abs_path,traverse->name.abs_name,sizeof(abs_path)-1);

    while ( ptr && *ptr ) { 
      ptr1 = strchr(ptr,FILE_SEPARATOR);
      if(ptr1)  
	*ptr1++ = 0;
      if(*ptr) { 
	if (!strcmp(ptr,".") ) {
	  /*ignore this guy or current directory references*/
	} else if (!strcmp(ptr,"..") ) { 
	  if(traverse->parent) { 
	    traverse = traverse->parent; /*shift to the parent vnode*/
	    /*overwrite the absolute path*/
	    strncpy(abs_path,traverse->name.abs_name,sizeof(abs_path)-1);
	  } else {
	    error_callback(NULL,args);
	    goto out;
	  }
	} else {
	  sprintf(path,"%s%s",FILE_SEPARATOR_STR,ptr);
	  strncat(abs_path,path,sizeof(abs_path) - strlen(abs_path) - 1);
	  /*no we try to get a dentry corresponding to the current vnode*/
	  dentry = vfs_lookup_dentry(traverse,ptr);
	  if(!dentry) {
	    error_callback(NULL,args);
	    goto out;
	  }
	  if(! verify_callback(dentry) ) {
	    error_callback(dentry,args);
	    goto out;
	  }
	  traverse = vnode_find(abs_path); /*we now get the vnode*/
	  if(! traverse) { 
	    printf("cannot chdir to %s.vnode not found...\n",args);
	    goto out;
	  }
	}
      }
      ptr = ptr1;
    }
    strncpy(result,traverse->name.abs_name,MAX_PATH);
    if(ret_vnode)
      *ret_vnode = traverse;
  }
  err = 0;
 out:
  return err;
}