mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Simplify fake_file logic
This commit is contained in:
parent
1c4adc8dda
commit
93111ea0a1
@ -31,19 +31,9 @@ we now get the unix name --metze
|
|||||||
#define FAKE_FILE_NAME_QUOTA_WIN32 "\\$Extend\\$Quota:$Q:$INDEX_ALLOCATION"
|
#define FAKE_FILE_NAME_QUOTA_WIN32 "\\$Extend\\$Quota:$Q:$INDEX_ALLOCATION"
|
||||||
#define FAKE_FILE_NAME_QUOTA_UNIX "$Extend/$Quota:$Q:$INDEX_ALLOCATION"
|
#define FAKE_FILE_NAME_QUOTA_UNIX "$Extend/$Quota:$Q:$INDEX_ALLOCATION"
|
||||||
|
|
||||||
typedef struct _FAKE_FILE_HANDLE {
|
struct fake_file_handle {
|
||||||
enum FAKE_FILE_TYPE type;
|
enum FAKE_FILE_TYPE type;
|
||||||
TALLOC_CTX *mem_ctx;
|
void *private_data;
|
||||||
void *pd; /* for private data */
|
};
|
||||||
void (*free_pd)(void **pd); /* free private_data */
|
|
||||||
} FAKE_FILE_HANDLE;
|
|
||||||
|
|
||||||
typedef struct _FAKE_FILE {
|
|
||||||
const char *name;
|
|
||||||
enum FAKE_FILE_TYPE type;
|
|
||||||
void *(*init_pd)(TALLOC_CTX *men_ctx);
|
|
||||||
void (*free_pd)(void **pd);
|
|
||||||
} FAKE_FILE;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _FAKE_FILE_H */
|
#endif /* _FAKE_FILE_H */
|
||||||
|
@ -91,6 +91,6 @@ typedef struct _SMB_NTQUOTA_HANDLE {
|
|||||||
#define CHECK_NTQUOTA_HANDLE_OK(fsp,conn) (FNUM_OK(fsp,conn) &&\
|
#define CHECK_NTQUOTA_HANDLE_OK(fsp,conn) (FNUM_OK(fsp,conn) &&\
|
||||||
(fsp)->fake_file_handle &&\
|
(fsp)->fake_file_handle &&\
|
||||||
((fsp)->fake_file_handle->type == FAKE_FILE_TYPE_QUOTA) &&\
|
((fsp)->fake_file_handle->type == FAKE_FILE_TYPE_QUOTA) &&\
|
||||||
(fsp)->fake_file_handle->pd)
|
(fsp)->fake_file_handle->private_data)
|
||||||
|
|
||||||
#endif /*_NTQUOTAS_H */
|
#endif /*_NTQUOTAS_H */
|
||||||
|
@ -515,7 +515,7 @@ typedef struct files_struct {
|
|||||||
char *fsp_name;
|
char *fsp_name;
|
||||||
|
|
||||||
struct vfs_fsp_data *vfs_extension;
|
struct vfs_fsp_data *vfs_extension;
|
||||||
FAKE_FILE_HANDLE *fake_file_handle;
|
struct fake_file_handle *fake_file_handle;
|
||||||
|
|
||||||
struct notify_change_buf *notify;
|
struct notify_change_buf *notify;
|
||||||
|
|
||||||
|
@ -21,52 +21,52 @@
|
|||||||
|
|
||||||
extern struct current_user current_user;
|
extern struct current_user current_user;
|
||||||
|
|
||||||
static FAKE_FILE fake_files[] = {
|
struct fake_file_type {
|
||||||
|
const char *name;
|
||||||
|
enum FAKE_FILE_TYPE type;
|
||||||
|
void *(*init_pd)(TALLOC_CTX *mem_ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct fake_file_type fake_files[] = {
|
||||||
#ifdef WITH_QUOTAS
|
#ifdef WITH_QUOTAS
|
||||||
{FAKE_FILE_NAME_QUOTA_UNIX, FAKE_FILE_TYPE_QUOTA, init_quota_handle, destroy_quota_handle},
|
{FAKE_FILE_NAME_QUOTA_UNIX, FAKE_FILE_TYPE_QUOTA, init_quota_handle},
|
||||||
#endif /* WITH_QUOTAS */
|
#endif /* WITH_QUOTAS */
|
||||||
{NULL, FAKE_FILE_TYPE_NONE, NULL, NULL }
|
{NULL, FAKE_FILE_TYPE_NONE, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Create a fake file handle
|
Create a fake file handle
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static struct _FAKE_FILE_HANDLE *init_fake_file_handle(enum FAKE_FILE_TYPE type)
|
static struct fake_file_handle *init_fake_file_handle(enum FAKE_FILE_TYPE type)
|
||||||
{
|
{
|
||||||
TALLOC_CTX *mem_ctx = NULL;
|
struct fake_file_handle *fh = NULL;
|
||||||
FAKE_FILE_HANDLE *fh = NULL;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0;fake_files[i].name!=NULL;i++) {
|
for (i=0; fake_files[i].name!=NULL; i++) {
|
||||||
if (fake_files[i].type==type) {
|
if (fake_files[i].type==type) {
|
||||||
DEBUG(5,("init_fake_file_handle: for [%s]\n",fake_files[i].name));
|
break;
|
||||||
|
|
||||||
if ((mem_ctx=talloc_init("fake_file_handle"))==NULL) {
|
|
||||||
DEBUG(0,("talloc_init(fake_file_handle) failed.\n"));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((fh =TALLOC_ZERO_P(mem_ctx, FAKE_FILE_HANDLE))==NULL) {
|
|
||||||
DEBUG(0,("TALLOC_ZERO() failed.\n"));
|
|
||||||
talloc_destroy(mem_ctx);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fh->type = type;
|
|
||||||
fh->mem_ctx = mem_ctx;
|
|
||||||
|
|
||||||
if (fake_files[i].init_pd) {
|
|
||||||
fh->pd = fake_files[i].init_pd(fh->mem_ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
fh->free_pd = fake_files[i].free_pd;
|
|
||||||
|
|
||||||
return fh;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
if (fake_files[i].name == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG(5,("init_fake_file_handle: for [%s]\n",fake_files[i].name));
|
||||||
|
|
||||||
|
fh = talloc(NULL, struct fake_file_handle);
|
||||||
|
if (fh == NULL) {
|
||||||
|
DEBUG(0,("TALLOC_ZERO() failed.\n"));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fh->type = type;
|
||||||
|
|
||||||
|
if (fake_files[i].init_pd) {
|
||||||
|
fh->private_data = fake_files[i].init_pd(fh);
|
||||||
|
}
|
||||||
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -147,18 +147,12 @@ NTSTATUS open_fake_file(connection_struct *conn,
|
|||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy_fake_file_handle(FAKE_FILE_HANDLE **fh)
|
void destroy_fake_file_handle(struct fake_file_handle **fh)
|
||||||
{
|
{
|
||||||
if (!fh||!(*fh)) {
|
if (!fh) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
TALLOC_FREE(*fh);
|
||||||
if ((*fh)->free_pd) {
|
|
||||||
(*fh)->free_pd(&(*fh)->pd);
|
|
||||||
}
|
|
||||||
|
|
||||||
talloc_destroy((*fh)->mem_ctx);
|
|
||||||
(*fh) = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS close_fake_file(files_struct *fsp)
|
NTSTATUS close_fake_file(files_struct *fsp)
|
||||||
|
@ -222,6 +222,13 @@ int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int quota_handle_destructor(SMB_NTQUOTA_HANDLE *handle)
|
||||||
|
{
|
||||||
|
if (handle->quota_list)
|
||||||
|
free_ntquota_list(&handle->quota_list);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void *init_quota_handle(TALLOC_CTX *mem_ctx)
|
void *init_quota_handle(TALLOC_CTX *mem_ctx)
|
||||||
{
|
{
|
||||||
SMB_NTQUOTA_HANDLE *qt_handle;
|
SMB_NTQUOTA_HANDLE *qt_handle;
|
||||||
@ -235,24 +242,6 @@ void *init_quota_handle(TALLOC_CTX *mem_ctx)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void *)qt_handle;
|
talloc_set_destructor(qt_handle, quota_handle_destructor);
|
||||||
}
|
return (void *)qt_handle;
|
||||||
|
|
||||||
void destroy_quota_handle(void **pqt_handle)
|
|
||||||
{
|
|
||||||
SMB_NTQUOTA_HANDLE *qt_handle = NULL;
|
|
||||||
if (!pqt_handle||!(*pqt_handle))
|
|
||||||
return;
|
|
||||||
|
|
||||||
qt_handle = (SMB_NTQUOTA_HANDLE *)(*pqt_handle);
|
|
||||||
|
|
||||||
|
|
||||||
if (qt_handle->quota_list)
|
|
||||||
free_ntquota_list(&qt_handle->quota_list);
|
|
||||||
|
|
||||||
qt_handle->quota_list = NULL;
|
|
||||||
qt_handle->tmp_list = NULL;
|
|
||||||
qt_handle = NULL;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
@ -2065,7 +2065,7 @@ static void call_nt_transact_get_user_quota(connection_struct *conn,
|
|||||||
/* the NULL pointer checking for fsp->fake_file_handle->pd
|
/* the NULL pointer checking for fsp->fake_file_handle->pd
|
||||||
* is done by CHECK_NTQUOTA_HANDLE_OK()
|
* is done by CHECK_NTQUOTA_HANDLE_OK()
|
||||||
*/
|
*/
|
||||||
qt_handle = (SMB_NTQUOTA_HANDLE *)fsp->fake_file_handle->pd;
|
qt_handle = (SMB_NTQUOTA_HANDLE *)fsp->fake_file_handle->private_data;
|
||||||
|
|
||||||
level = SVAL(params,2);
|
level = SVAL(params,2);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user