1/* 2 * Skeleton VFS module. Implements passthrough operation of all VFS 3 * calls to disk functions. 4 * 5 * Copyright (C) Tim Potter, 1999-2000 6 * Copyright (C) Alexander Bokovoy, 2002 7 * Copyright (C) Stefan (metze) Metzmacher, 2003 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24 25#include "includes.h" 26 27/* PLEASE,PLEASE READ THE VFS MODULES CHAPTER OF THE 28 SAMBA DEVELOPERS GUIDE!!!!!! 29 */ 30 31/* If you take this file as template for your module 32 * please make sure that you remove all vfswrap_* functions and 33 * implement your own function!! 34 * 35 * for functions you didn't want to provide implement dummy functions 36 * witch return ERROR and errno = ENOSYS; ! 37 * 38 * --metze 39 */ 40 41/* NOTE: As of approximately Samba 3.0.24, the vfswrap_* functions are not 42 * global symbols. They are included here only as an pointer that opaque 43 * operations should not call further into the VFS. 44 */ 45 46static int skel_connect(vfs_handle_struct *handle, const char *service, const char *user) 47{ 48 return 0; 49} 50 51static void skel_disconnect(vfs_handle_struct *handle, connection_struct *conn) 52{ 53 return; 54} 55 56static SMB_BIG_UINT skel_disk_free(vfs_handle_struct *handle, const char *path, 57 BOOL small_query, SMB_BIG_UINT *bsize, 58 SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) 59{ 60 return vfswrap_disk_free(NULL, path, small_query, bsize, 61 dfree, dsize); 62} 63 64static int skel_get_quota(vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dq) 65{ 66 return vfswrap_get_quota(NULL, qtype, id, dq); 67} 68 69static int skel_set_quota(vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dq) 70{ 71 return vfswrap_set_quota(NULL, qtype, id, dq); 72} 73 74static int skel_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels) 75{ 76 return vfswrap_get_shadow_copy_data(NULL, fsp, shadow_copy_data, labels); 77} 78 79static int skel_statvfs(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf) 80{ 81 return vfswrap_statvfs(NULL, path, statbuf); 82} 83 84static SMB_STRUCT_DIR *skel_opendir(vfs_handle_struct *handle, const char *fname, const char *mask, uint32 attr) 85{ 86 return vfswrap_opendir(NULL, fname, mask, attr); 87} 88 89static SMB_STRUCT_DIRENT *skel_readdir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp) 90{ 91 return vfswrap_readdir(NULL, dirp); 92} 93 94static void skel_seekdir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp, long offset) 95{ 96 return vfswrap_seekdir(NULL, dirp, offset); 97} 98 99static long skel_telldir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp) 100{ 101 return vfswrap_telldir(NULL, dirp); 102} 103 104static void skel_rewinddir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp) 105{ 106 return vfswrap_rewinddir(NULL, dirp); 107} 108 109static int skel_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode) 110{ 111 return vfswrap_mkdir(NULL, path, mode); 112} 113 114static int skel_rmdir(vfs_handle_struct *handle, const char *path) 115{ 116 return vfswrap_rmdir(NULL, path); 117} 118 119static int skel_closedir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dir) 120{ 121 return vfswrap_closedir(NULL, dir); 122} 123 124static int skel_open(vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode) 125{ 126 return vfswrap_open(NULL, fname, flags, mode); 127} 128 129static int skel_close(vfs_handle_struct *handle, files_struct *fsp, int fd) 130{ 131 return vfswrap_close(NULL, fsp, fd); 132} 133 134static ssize_t skel_read(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data, size_t n) 135{ 136 return vfswrap_read(NULL, fsp, fd, data, n); 137} 138 139static ssize_t skel_pread(vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n, SMB_OFF_T offset) 140{ 141 return vfswrap_pread(NULL, fsp, fd, data, n, offset); 142} 143 144static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data, size_t n) 145{ 146 return vfswrap_write(NULL, fsp, fd, data, n); 147} 148 149ssize_t skel_pwrite(vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n, SMB_OFF_T offset) 150{ 151 return vfswrap_pwrite(NULL, fsp, fd, data, n, offset); 152} 153 154static SMB_OFF_T skel_lseek(vfs_handle_struct *handle, files_struct *fsp, int filedes, SMB_OFF_T offset, int whence) 155{ 156 return vfswrap_lseek(NULL, fsp, filedes, offset, whence); 157} 158 159static int skel_rename(vfs_handle_struct *handle, const char *oldname, const char *newname) 160{ 161 return vfswrap_rename(NULL, oldname, newname); 162} 163 164static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd) 165{ 166 return vfswrap_fsync(NULL, fsp, fd); 167} 168 169static int skel_stat(vfs_handle_struct *handle, const char *fname, SMB_STRUCT_STAT *sbuf) 170{ 171 return vfswrap_stat(NULL, fname, sbuf); 172} 173 174static int skel_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf) 175{ 176 return vfswrap_fstat(NULL, fsp, fd, sbuf); 177} 178 179static int skel_lstat(vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf) 180{ 181 return vfswrap_lstat(NULL, path, sbuf); 182} 183 184static int skel_unlink(vfs_handle_struct *handle, const char *path) 185{ 186 return vfswrap_unlink(NULL, path); 187} 188 189static int skel_chmod(vfs_handle_struct *handle, const char *path, mode_t mode) 190{ 191 return vfswrap_chmod(NULL, path, mode); 192} 193 194static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode) 195{ 196 return vfswrap_fchmod(NULL, fsp, fd, mode); 197} 198 199static int skel_chown(vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid) 200{ 201 return vfswrap_chown(NULL, path, uid, gid); 202} 203 204static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd, uid_t uid, gid_t gid) 205{ 206 return vfswrap_fchown(NULL, fsp, fd, uid, gid); 207} 208 209static int skel_chdir(vfs_handle_struct *handle, const char *path) 210{ 211 return vfswrap_chdir(NULL, path); 212} 213 214static char *skel_getwd(vfs_handle_struct *handle, char *buf) 215{ 216 return vfswrap_getwd(NULL, buf); 217} 218 219static int skel_ntimes(vfs_handle_struct *handle, const char *path, const struct timespec ts[2]) 220{ 221 return vfswrap_ntimes(NULL, path, ts); 222} 223 224static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T offset) 225{ 226 return vfswrap_ftruncate(NULL, fsp, fd, offset); 227} 228 229static BOOL skel_lock(vfs_handle_struct *handle, files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type) 230{ 231 return vfswrap_lock(NULL, fsp, fd, op, offset, count, type); 232} 233 234static BOOL skel_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid) 235{ 236 return vfswrap_getlock(NULL, fsp, fd, poffset, pcount, ptype, ppid); 237} 238 239static int skel_symlink(vfs_handle_struct *handle, const char *oldpath, const char *newpath) 240{ 241 return vfswrap_symlink(NULL, oldpath, newpath); 242} 243 244 245static int skel_readlink(vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz) 246{ 247 return vfswrap_readlink(NULL, path, buf, bufsiz); 248} 249 250static int skel_link(vfs_handle_struct *handle, const char *oldpath, const char *newpath) 251{ 252 return vfswrap_link(NULL, oldpath, newpath); 253} 254 255static int skel_mknod(vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev) 256{ 257 return vfswrap_mknod(NULL, path, mode, dev); 258} 259 260static char *skel_realpath(vfs_handle_struct *handle, const char *path, char *resolved_path) 261{ 262 return vfswrap_realpath(NULL, path, resolved_path); 263} 264 265static NTSTATUS skel_notify_watch(struct vfs_handle_struct *handle, 266 struct sys_notify_context *ctx, struct notify_entry *e, 267 void (*callback)(struct sys_notify_context *ctx, void *private_data, struct notify_event *ev), 268 void *private_data, void *handle_p) 269{ 270 return NT_STATUS_NOT_SUPPORTED; 271} 272 273static int skel_chflags(vfs_handle_struct *handle, const char *path, uint flags) 274{ 275 errno = ENOSYS; 276 return -1; 277} 278 279static size_t skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp, 280 int fd, uint32 security_info, SEC_DESC **ppdesc) 281{ 282 errno = ENOSYS; 283 return 0; 284} 285 286static size_t skel_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp, 287 const char *name, uint32 security_info, SEC_DESC **ppdesc) 288{ 289 errno = ENOSYS; 290 return 0; 291} 292 293static BOOL skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int 294 fd, uint32 security_info_sent, SEC_DESC *psd) 295{ 296 errno = ENOSYS; 297 return False; 298} 299 300static BOOL skel_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const 301 char *name, uint32 security_info_sent, SEC_DESC *psd) 302{ 303 errno = ENOSYS; 304 return False; 305} 306 307static int skel_chmod_acl(vfs_handle_struct *handle, const char *name, mode_t mode) 308{ 309 errno = ENOSYS; 310 return -1; 311} 312 313static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode) 314{ 315 errno = ENOSYS; 316 return -1; 317} 318 319static int skel_sys_acl_get_entry(vfs_handle_struct *handle, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p) 320{ 321 errno = ENOSYS; 322 return -1; 323} 324 325static int skel_sys_acl_get_tag_type(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p) 326{ 327 errno = ENOSYS; 328 return -1; 329} 330 331static int skel_sys_acl_get_permset(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p) 332{ 333 errno = ENOSYS; 334 return -1; 335} 336 337static void *skel_sys_acl_get_qualifier(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d) 338{ 339 errno = ENOSYS; 340 return NULL; 341} 342 343static SMB_ACL_T skel_sys_acl_get_file(vfs_handle_struct *handle, const char *path_p, SMB_ACL_TYPE_T type) 344{ 345 errno = ENOSYS; 346 return NULL; 347} 348 349static SMB_ACL_T skel_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd) 350{ 351 errno = ENOSYS; 352 return NULL; 353} 354 355static int skel_sys_acl_clear_perms(vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset) 356{ 357 errno = ENOSYS; 358 return -1; 359} 360 361static int skel_sys_acl_add_perm(vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm) 362{ 363 errno = ENOSYS; 364 return -1; 365} 366 367static char *skel_sys_acl_to_text(vfs_handle_struct *handle, SMB_ACL_T theacl, ssize_t *plen) 368{ 369 errno = ENOSYS; 370 return NULL; 371} 372 373static SMB_ACL_T skel_sys_acl_init(vfs_handle_struct *handle, int count) 374{ 375 errno = ENOSYS; 376 return NULL; 377} 378 379static int skel_sys_acl_create_entry(vfs_handle_struct *handle, SMB_ACL_T *pacl, SMB_ACL_ENTRY_T *pentry) 380{ 381 errno = ENOSYS; 382 return -1; 383} 384 385static int skel_sys_acl_set_tag_type(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype) 386{ 387 errno = ENOSYS; 388 return -1; 389} 390 391static int skel_sys_acl_set_qualifier(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, void *qual) 392{ 393 errno = ENOSYS; 394 return -1; 395} 396 397static int skel_sys_acl_set_permset(vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset) 398{ 399 errno = ENOSYS; 400 return -1; 401} 402 403static int skel_sys_acl_valid(vfs_handle_struct *handle, SMB_ACL_T theacl ) 404{ 405 errno = ENOSYS; 406 return -1; 407} 408 409static int skel_sys_acl_set_file(vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl) 410{ 411 errno = ENOSYS; 412 return -1; 413} 414 415static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_ACL_T theacl) 416{ 417 errno = ENOSYS; 418 return -1; 419} 420 421static int skel_sys_acl_delete_def_file(vfs_handle_struct *handle, const char *path) 422{ 423 errno = ENOSYS; 424 return -1; 425} 426 427static int skel_sys_acl_get_perm(vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm) 428{ 429 errno = ENOSYS; 430 return -1; 431} 432 433static int skel_sys_acl_free_text(vfs_handle_struct *handle, char *text) 434{ 435 errno = ENOSYS; 436 return -1; 437} 438 439static int skel_sys_acl_free_acl(vfs_handle_struct *handle, SMB_ACL_T posix_acl) 440{ 441 errno = ENOSYS; 442 return -1; 443} 444 445static int skel_sys_acl_free_qualifier(vfs_handle_struct *handle, void *qualifier, SMB_ACL_TAG_T tagtype) 446{ 447 errno = ENOSYS; 448 return -1; 449} 450 451static ssize_t skel_getxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t size) 452{ 453 errno = ENOSYS; 454 return -1; 455} 456 457static ssize_t skel_lgetxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t 458size) 459{ 460 errno = ENOSYS; 461 return -1; 462} 463 464static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size) 465{ 466 errno = ENOSYS; 467 return -1; 468} 469 470static ssize_t skel_listxattr(vfs_handle_struct *handle, const char *path, char *list, size_t size) 471{ 472 errno = ENOSYS; 473 return -1; 474} 475 476static ssize_t skel_llistxattr(vfs_handle_struct *handle, const char *path, char *list, size_t size) 477{ 478 errno = ENOSYS; 479 return -1; 480} 481 482static ssize_t skel_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, char *list, size_t size) 483{ 484 errno = ENOSYS; 485 return -1; 486} 487 488static int skel_removexattr(vfs_handle_struct *handle, const char *path, const char *name) 489{ 490 errno = ENOSYS; 491 return -1; 492} 493 494static int skel_lremovexattr(vfs_handle_struct *handle, const char *path, const char *name) 495{ 496 errno = ENOSYS; 497 return -1; 498} 499 500static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name) 501{ 502 errno = ENOSYS; 503 return -1; 504} 505 506static int skel_setxattr(vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags) 507{ 508 errno = ENOSYS; 509 return -1; 510} 511 512static int skel_lsetxattr(vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags) 513{ 514 errno = ENOSYS; 515 return -1; 516} 517 518static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, const void *value, size_t size, int flags) 519{ 520 errno = ENOSYS; 521 return -1; 522} 523 524static int skel_aio_read(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb) 525{ 526 return vfswrap_aio_read(NULL, fsp, aiocb); 527} 528 529static int skel_aio_write(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb) 530{ 531 return vfswrap_aio_write(NULL, fsp, aiocb); 532} 533 534static ssize_t skel_aio_return(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb) 535{ 536 return vfswrap_aio_return(NULL, fsp, aiocb); 537} 538 539static int skel_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb) 540{ 541 return vfswrap_aio_cancel(NULL, fsp, fd, aiocb); 542} 543 544static int skel_aio_error(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb) 545{ 546 return vfswrap_aio_error(NULL, fsp, aiocb); 547} 548 549static int skel_aio_fsync(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_STRUCT_AIOCB *aiocb) 550{ 551 return vfswrap_aio_fsync(NULL, fsp, op, aiocb); 552} 553 554static int skel_aio_suspend(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_AIOCB * const aiocb[], int n, const struct timespec *ts) 555{ 556 return vfswrap_aio_suspend(NULL, fsp, aiocb, n, ts); 557} 558 559/* VFS operations structure */ 560 561static vfs_op_tuple skel_op_tuples[] = { 562 563 /* Disk operations */ 564 565 {SMB_VFS_OP(skel_connect), SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_OPAQUE}, 566 {SMB_VFS_OP(skel_disconnect), SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_OPAQUE}, 567 {SMB_VFS_OP(skel_disk_free), SMB_VFS_OP_DISK_FREE, SMB_VFS_LAYER_OPAQUE}, 568 {SMB_VFS_OP(skel_get_quota), SMB_VFS_OP_GET_QUOTA, SMB_VFS_LAYER_OPAQUE}, 569 {SMB_VFS_OP(skel_set_quota), SMB_VFS_OP_SET_QUOTA, SMB_VFS_LAYER_OPAQUE}, 570 {SMB_VFS_OP(skel_get_shadow_copy_data), SMB_VFS_OP_GET_SHADOW_COPY_DATA,SMB_VFS_LAYER_OPAQUE}, 571 {SMB_VFS_OP(skel_statvfs), SMB_VFS_OP_STATVFS, SMB_VFS_LAYER_OPAQUE}, 572 573 /* Directory operations */ 574 575 {SMB_VFS_OP(skel_opendir), SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_OPAQUE}, 576 {SMB_VFS_OP(skel_readdir), SMB_VFS_OP_READDIR, SMB_VFS_LAYER_OPAQUE}, 577 {SMB_VFS_OP(skel_seekdir), SMB_VFS_OP_SEEKDIR, SMB_VFS_LAYER_OPAQUE}, 578 {SMB_VFS_OP(skel_telldir), SMB_VFS_OP_TELLDIR, SMB_VFS_LAYER_OPAQUE}, 579 {SMB_VFS_OP(skel_rewinddir), SMB_VFS_OP_REWINDDIR, SMB_VFS_LAYER_OPAQUE}, 580 {SMB_VFS_OP(skel_mkdir), SMB_VFS_OP_MKDIR, SMB_VFS_LAYER_OPAQUE}, 581 {SMB_VFS_OP(skel_rmdir), SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_OPAQUE}, 582 {SMB_VFS_OP(skel_closedir), SMB_VFS_OP_CLOSEDIR, SMB_VFS_LAYER_OPAQUE}, 583 584 /* File operations */ 585 586 {SMB_VFS_OP(skel_open), SMB_VFS_OP_OPEN, SMB_VFS_LAYER_OPAQUE}, 587 {SMB_VFS_OP(skel_close), SMB_VFS_OP_CLOSE, SMB_VFS_LAYER_OPAQUE}, 588 {SMB_VFS_OP(skel_read), SMB_VFS_OP_READ, SMB_VFS_LAYER_OPAQUE}, 589 {SMB_VFS_OP(skel_pread), SMB_VFS_OP_PREAD, SMB_VFS_LAYER_OPAQUE}, 590 {SMB_VFS_OP(skel_write), SMB_VFS_OP_WRITE, SMB_VFS_LAYER_OPAQUE}, 591 {SMB_VFS_OP(skel_pwrite), SMB_VFS_OP_PWRITE, SMB_VFS_LAYER_OPAQUE}, 592 {SMB_VFS_OP(skel_lseek), SMB_VFS_OP_LSEEK, SMB_VFS_LAYER_OPAQUE}, 593 {SMB_VFS_OP(skel_rename), SMB_VFS_OP_RENAME, SMB_VFS_LAYER_OPAQUE}, 594 {SMB_VFS_OP(skel_fsync), SMB_VFS_OP_FSYNC, SMB_VFS_LAYER_OPAQUE}, 595 {SMB_VFS_OP(skel_stat), SMB_VFS_OP_STAT, SMB_VFS_LAYER_OPAQUE}, 596 {SMB_VFS_OP(skel_fstat), SMB_VFS_OP_FSTAT, SMB_VFS_LAYER_OPAQUE}, 597 {SMB_VFS_OP(skel_lstat), SMB_VFS_OP_LSTAT, SMB_VFS_LAYER_OPAQUE}, 598 {SMB_VFS_OP(skel_unlink), SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_OPAQUE}, 599 {SMB_VFS_OP(skel_chmod), SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_OPAQUE}, 600 {SMB_VFS_OP(skel_fchmod), SMB_VFS_OP_FCHMOD, SMB_VFS_LAYER_OPAQUE}, 601 {SMB_VFS_OP(skel_chown), SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_OPAQUE}, 602 {SMB_VFS_OP(skel_fchown), SMB_VFS_OP_FCHOWN, SMB_VFS_LAYER_OPAQUE}, 603 {SMB_VFS_OP(skel_chdir), SMB_VFS_OP_CHDIR, SMB_VFS_LAYER_OPAQUE}, 604 {SMB_VFS_OP(skel_getwd), SMB_VFS_OP_GETWD, SMB_VFS_LAYER_OPAQUE}, 605 {SMB_VFS_OP(skel_ntimes), SMB_VFS_OP_NTIMES, SMB_VFS_LAYER_OPAQUE}, 606 {SMB_VFS_OP(skel_ftruncate), SMB_VFS_OP_FTRUNCATE, SMB_VFS_LAYER_OPAQUE}, 607 {SMB_VFS_OP(skel_lock), SMB_VFS_OP_LOCK, SMB_VFS_LAYER_OPAQUE}, 608 {SMB_VFS_OP(skel_getlock), SMB_VFS_OP_GETLOCK, SMB_VFS_LAYER_OPAQUE}, 609 {SMB_VFS_OP(skel_symlink), SMB_VFS_OP_SYMLINK, SMB_VFS_LAYER_OPAQUE}, 610 {SMB_VFS_OP(skel_readlink), SMB_VFS_OP_READLINK, SMB_VFS_LAYER_OPAQUE}, 611 {SMB_VFS_OP(skel_link), SMB_VFS_OP_LINK, SMB_VFS_LAYER_OPAQUE}, 612 {SMB_VFS_OP(skel_mknod), SMB_VFS_OP_MKNOD, SMB_VFS_LAYER_OPAQUE}, 613 {SMB_VFS_OP(skel_realpath), SMB_VFS_OP_REALPATH, SMB_VFS_LAYER_OPAQUE}, 614 {SMB_VFS_OP(skel_notify_watch), SMB_VFS_OP_NOTIFY_WATCH, SMB_VFS_LAYER_OPAQUE}, 615 {SMB_VFS_OP(skel_chflags), SMB_VFS_OP_CHFLAGS, SMB_VFS_LAYER_OPAQUE}, 616 617 618 619 /* NT File ACL operations */ 620 621 {SMB_VFS_OP(skel_fget_nt_acl), SMB_VFS_OP_FGET_NT_ACL, SMB_VFS_LAYER_OPAQUE}, 622 {SMB_VFS_OP(skel_get_nt_acl), SMB_VFS_OP_GET_NT_ACL, SMB_VFS_LAYER_OPAQUE}, 623 {SMB_VFS_OP(skel_fset_nt_acl), SMB_VFS_OP_FSET_NT_ACL, SMB_VFS_LAYER_OPAQUE}, 624 {SMB_VFS_OP(skel_set_nt_acl), SMB_VFS_OP_SET_NT_ACL, SMB_VFS_LAYER_OPAQUE}, 625 626 /* POSIX ACL operations */ 627 628 {SMB_VFS_OP(skel_chmod_acl), SMB_VFS_OP_CHMOD_ACL, SMB_VFS_LAYER_OPAQUE}, 629 {SMB_VFS_OP(skel_fchmod_acl), SMB_VFS_OP_FCHMOD_ACL, SMB_VFS_LAYER_OPAQUE}, 630 631 {SMB_VFS_OP(skel_sys_acl_get_entry), SMB_VFS_OP_SYS_ACL_GET_ENTRY, SMB_VFS_LAYER_OPAQUE}, 632 {SMB_VFS_OP(skel_sys_acl_get_tag_type), SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE, SMB_VFS_LAYER_OPAQUE}, 633 {SMB_VFS_OP(skel_sys_acl_get_permset), SMB_VFS_OP_SYS_ACL_GET_PERMSET, SMB_VFS_LAYER_OPAQUE}, 634 {SMB_VFS_OP(skel_sys_acl_get_qualifier), SMB_VFS_OP_SYS_ACL_GET_QUALIFIER, SMB_VFS_LAYER_OPAQUE}, 635 {SMB_VFS_OP(skel_sys_acl_get_file), SMB_VFS_OP_SYS_ACL_GET_FILE, SMB_VFS_LAYER_OPAQUE}, 636 {SMB_VFS_OP(skel_sys_acl_get_fd), SMB_VFS_OP_SYS_ACL_GET_FD, SMB_VFS_LAYER_OPAQUE}, 637 {SMB_VFS_OP(skel_sys_acl_clear_perms), SMB_VFS_OP_SYS_ACL_CLEAR_PERMS, SMB_VFS_LAYER_OPAQUE}, 638 {SMB_VFS_OP(skel_sys_acl_add_perm), SMB_VFS_OP_SYS_ACL_ADD_PERM, SMB_VFS_LAYER_OPAQUE}, 639 {SMB_VFS_OP(skel_sys_acl_to_text), SMB_VFS_OP_SYS_ACL_TO_TEXT, SMB_VFS_LAYER_OPAQUE}, 640 {SMB_VFS_OP(skel_sys_acl_init), SMB_VFS_OP_SYS_ACL_INIT, SMB_VFS_LAYER_OPAQUE}, 641 {SMB_VFS_OP(skel_sys_acl_create_entry), SMB_VFS_OP_SYS_ACL_CREATE_ENTRY, SMB_VFS_LAYER_OPAQUE}, 642 {SMB_VFS_OP(skel_sys_acl_set_tag_type), SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE, SMB_VFS_LAYER_OPAQUE}, 643 {SMB_VFS_OP(skel_sys_acl_set_qualifier), SMB_VFS_OP_SYS_ACL_SET_QUALIFIER, SMB_VFS_LAYER_OPAQUE}, 644 {SMB_VFS_OP(skel_sys_acl_set_permset), SMB_VFS_OP_SYS_ACL_SET_PERMSET, SMB_VFS_LAYER_OPAQUE}, 645 {SMB_VFS_OP(skel_sys_acl_valid), SMB_VFS_OP_SYS_ACL_VALID, SMB_VFS_LAYER_OPAQUE}, 646 {SMB_VFS_OP(skel_sys_acl_set_file), SMB_VFS_OP_SYS_ACL_SET_FILE, SMB_VFS_LAYER_OPAQUE}, 647 {SMB_VFS_OP(skel_sys_acl_set_fd), SMB_VFS_OP_SYS_ACL_SET_FD, SMB_VFS_LAYER_OPAQUE}, 648 {SMB_VFS_OP(skel_sys_acl_delete_def_file), SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, SMB_VFS_LAYER_OPAQUE}, 649 {SMB_VFS_OP(skel_sys_acl_get_perm), SMB_VFS_OP_SYS_ACL_GET_PERM, SMB_VFS_LAYER_OPAQUE}, 650 {SMB_VFS_OP(skel_sys_acl_free_text), SMB_VFS_OP_SYS_ACL_FREE_TEXT, SMB_VFS_LAYER_OPAQUE}, 651 {SMB_VFS_OP(skel_sys_acl_free_acl), SMB_VFS_OP_SYS_ACL_FREE_ACL, SMB_VFS_LAYER_OPAQUE}, 652 {SMB_VFS_OP(skel_sys_acl_free_qualifier), SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, SMB_VFS_LAYER_OPAQUE}, 653 654 /* EA operations. */ 655 {SMB_VFS_OP(skel_getxattr), SMB_VFS_OP_GETXATTR, SMB_VFS_LAYER_OPAQUE}, 656 {SMB_VFS_OP(skel_lgetxattr), SMB_VFS_OP_LGETXATTR, SMB_VFS_LAYER_OPAQUE}, 657 {SMB_VFS_OP(skel_fgetxattr), SMB_VFS_OP_FGETXATTR, SMB_VFS_LAYER_OPAQUE}, 658 {SMB_VFS_OP(skel_listxattr), SMB_VFS_OP_LISTXATTR, SMB_VFS_LAYER_OPAQUE}, 659 {SMB_VFS_OP(skel_llistxattr), SMB_VFS_OP_LLISTXATTR, SMB_VFS_LAYER_OPAQUE}, 660 {SMB_VFS_OP(skel_flistxattr), SMB_VFS_OP_FLISTXATTR, SMB_VFS_LAYER_OPAQUE}, 661 {SMB_VFS_OP(skel_removexattr), SMB_VFS_OP_REMOVEXATTR, SMB_VFS_LAYER_OPAQUE}, 662 {SMB_VFS_OP(skel_lremovexattr), SMB_VFS_OP_LREMOVEXATTR, SMB_VFS_LAYER_OPAQUE}, 663 {SMB_VFS_OP(skel_fremovexattr), SMB_VFS_OP_FREMOVEXATTR, SMB_VFS_LAYER_OPAQUE}, 664 {SMB_VFS_OP(skel_setxattr), SMB_VFS_OP_SETXATTR, SMB_VFS_LAYER_OPAQUE}, 665 {SMB_VFS_OP(skel_lsetxattr), SMB_VFS_OP_LSETXATTR, SMB_VFS_LAYER_OPAQUE}, 666 {SMB_VFS_OP(skel_fsetxattr), SMB_VFS_OP_FSETXATTR, SMB_VFS_LAYER_OPAQUE}, 667 668 /* AIO operations. */ 669 {SMB_VFS_OP(skel_aio_read), SMB_VFS_OP_AIO_READ, SMB_VFS_LAYER_OPAQUE}, 670 {SMB_VFS_OP(skel_aio_write), SMB_VFS_OP_AIO_WRITE, SMB_VFS_LAYER_OPAQUE}, 671 {SMB_VFS_OP(skel_aio_return), SMB_VFS_OP_AIO_RETURN, SMB_VFS_LAYER_OPAQUE}, 672 {SMB_VFS_OP(skel_aio_cancel), SMB_VFS_OP_AIO_CANCEL, SMB_VFS_LAYER_OPAQUE}, 673 {SMB_VFS_OP(skel_aio_error), SMB_VFS_OP_AIO_ERROR, SMB_VFS_LAYER_OPAQUE}, 674 {SMB_VFS_OP(skel_aio_fsync), SMB_VFS_OP_AIO_FSYNC, SMB_VFS_LAYER_OPAQUE}, 675 {SMB_VFS_OP(skel_aio_suspend), SMB_VFS_OP_AIO_SUSPEND, SMB_VFS_LAYER_OPAQUE}, 676 677 {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} 678}; 679 680NTSTATUS init_module(void) 681{ 682 return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "skel_opaque", skel_op_tuples); 683} 684