/* called when a client connects to a share */ static int tsmsm_connect(struct vfs_handle_struct *handle, const char *service, const char *user) { struct tsmsm_struct *tsmd; const char *fres; const char *tsmname; int ret = SMB_VFS_NEXT_CONNECT(handle, service, user); if (ret < 0) { return ret; } tsmd = talloc_zero(handle, struct tsmsm_struct); if (!tsmd) { SMB_VFS_NEXT_DISCONNECT(handle); DEBUG(0,("tsmsm_connect: out of memory!\n")); return -1; } if (!dmapi_have_session()) { SMB_VFS_NEXT_DISCONNECT(handle); DEBUG(0,("tsmsm_connect: no DMAPI session for Samba is available!\n")); TALLOC_FREE(tsmd); return -1; } tsmname = (handle->param ? handle->param : "tsmsm"); /* Get 'hsm script' and 'dmapi attribute' parameters to tsmd context */ tsmd->hsmscript = lp_parm_talloc_string( tsmd, SNUM(handle->conn), tsmname, "hsm script", NULL); talloc_steal(tsmd, tsmd->hsmscript); tsmd->attrib_name = lp_parm_talloc_string( tsmd, SNUM(handle->conn), tsmname, "dmapi attribute", DM_ATTRIB_OBJECT); talloc_steal(tsmd, tsmd->attrib_name); tsmd->attrib_value = lp_parm_talloc_string( tsmd, SNUM(handle->conn), tsmname, "dmapi value", NULL); talloc_steal(tsmd, tsmd->attrib_value); /* retrieve 'online ratio'. In case of error default to FILE_IS_ONLINE_RATIO */ fres = lp_parm_const_string(SNUM(handle->conn), tsmname, "online ratio", NULL); if (fres == NULL) { tsmd->online_ratio = FILE_IS_ONLINE_RATIO; } else { tsmd->online_ratio = strtof(fres, NULL); if (tsmd->online_ratio > 1.0 || tsmd->online_ratio <= 0.0) { DEBUG(1, ("tsmsm_connect: invalid online ration %f - using %f.\n", tsmd->online_ratio, (float)FILE_IS_ONLINE_RATIO)); } } /* Store the private data. */ SMB_VFS_HANDLE_SET_DATA(handle, tsmd, tsmsm_free_data, struct tsmsm_struct, return -1); return 0; }
static void skel_disconnect(vfs_handle_struct *handle) { SMB_VFS_NEXT_DISCONNECT(handle); }
static void vfs_my_module_disconnect(vfs_handle_struct *handle) { SMB_VFS_NEXT_DISCONNECT(handle); }