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))); }
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; }