259 lines
7.0 KiB
C
259 lines
7.0 KiB
C
/****************************************************************************
|
|
|
|
|
| (C) Copyright 1995 - 2000 Novell, Inc.
|
|
| All Rights Reserved.
|
|
|
|
|
| This program is free software; you can redistribute it and/or
|
|
| modify it under the terms of version 2 of the GNU General Public
|
|
| License as published by the Free Software Foundation.
|
|
|
|
|
| This program is distributed in the hope that it will be useful,
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
| GNU General Public License for more details.
|
|
|
|
|
| You should have received a copy of the GNU General Public License
|
|
| along with this program; if not, contact Novell, Inc.
|
|
|
|
|
| To contact Novell about this file by physical or electronic mail,
|
|
| you may find current contact information at www.novell.com
|
|
|
|
|
|***************************************************************************
|
|
|
|
|
| Novell Storage Services (NSS) support module
|
|
|
|
|
|---------------------------------------------------------------------------
|
|
|
|
|
| $Author: taysom $
|
|
| $Date: 2008-04-19 03:14:27 +0530 (Sat, 19 Apr 2008) $
|
|
|
|
|
| $RCSfile$
|
|
| $Revision: 2323 $
|
|
|
|
|
|---------------------------------------------------------------------------
|
|
| This module is used to:
|
|
| Header file for linux semantic agent (LSA)
|
|
+-------------------------------------------------------------------------*/
|
|
|
|
#ifndef _LSA_H_
|
|
#define _LSA_H_
|
|
|
|
#ifndef _ZOMNI_H_
|
|
#include <zOmni.h>
|
|
#endif
|
|
|
|
#ifndef _LINUX_LIMIS_H
|
|
#include <linux/limits.h>
|
|
#endif
|
|
|
|
#define LINUX_INFO (zGET_STD_INFO | zGET_BLOCK_SIZE | zGET_STORAGE_USED \
|
|
| zGET_TIMES_IN_SECS | zGET_IDS | zGET_STORAGE_USED \
|
|
| zGET_COUNTS)
|
|
|
|
#define LINUX_INFO_SIZE (sizeof(zInfo_s) - zGET_INFO_VARIABLE_DATA_SIZE)
|
|
|
|
enum {
|
|
LSA_SECTOR_SIZE = 512,
|
|
LSA_BLK_SHIFT = 12, /* 4096 byte block */
|
|
LSA_BLK_SIZE = (1 << LSA_BLK_SHIFT),
|
|
LSA_SECTORS_PER_BLK = (LSA_BLK_SIZE / LSA_SECTOR_SIZE),
|
|
LSA_BITS_PER_BLK = LSA_BLK_SIZE * 8,
|
|
LSA_LSAM_BLKS = 1000,
|
|
LSA_FS_SIZE = ((long long)LSA_LSAM_BLKS) * LSA_BLK_SIZE,
|
|
LSA_SUPER_BLK = 1,
|
|
LSA_ROOT_INO = 1,
|
|
LSA_NAME_LEN = (3*NAME_MAX), /* Account for UTF 8 names */
|
|
LSA_MAX_FILE_SIZE = 1LL << 43,
|
|
LSA_VERSION = 1, /* Increment when on disk inode format changes */
|
|
LSA_MAGIC_SB = 1853059840
|
|
};
|
|
|
|
enum { /* Special file position values for enumeration */
|
|
LSA_DOT = 0, /* Must be this value */
|
|
LSA_DOT_DOT = 124,
|
|
LSA_MORE = 125,
|
|
LSA_NO_MORE = 126
|
|
};
|
|
|
|
typedef struct LsaSuper_s LsaSuper_s;
|
|
struct LsaSuper_s
|
|
{
|
|
LsaSuper_s *sb_next; /* Hash list indexed by volume id */
|
|
struct super_block *sb_super_block;
|
|
VolumeID_t sb_volID; /* volume or pool id */
|
|
|
|
Key_t sb_rootKey; /* This lets us shutdown all other keys quickly */
|
|
LONG sb_type; /* Whether pool, volume or admin */
|
|
#define LSA_SB_TYPE_ADMIN 1
|
|
#define LSA_SB_TYPE_VOLUME 2
|
|
#define LSA_SB_TYPE_POOL 3
|
|
NINT sb_nameSpace;
|
|
struct inode *sb_inode;
|
|
|
|
#define LSA_ROOT_PATH 6 /* Add 6 for _IV_ and :/ */
|
|
BYTE sb_volName[zMAX_COMPONENT_NAME+LSA_ROOT_PATH]; /* volume/pool
|
|
name with :/ added */
|
|
};
|
|
|
|
typedef struct LsaFile_s
|
|
{
|
|
Key_t f_key;
|
|
struct FullDirectoryInfo_s *f_info;
|
|
} LsaFile_s;
|
|
|
|
extern LONG LSA_LinuxNobodyUID;
|
|
extern BOOL LSA_HaveNobodyUID;
|
|
|
|
extern Key_t userKey(LONG id);
|
|
extern void userShutdown(void);
|
|
extern NINT nss2linuxError(int status);
|
|
extern void lsaInitErrorTable();
|
|
|
|
|
|
extern int LSA_GetOptions(
|
|
utf8_t *options,
|
|
char *name,
|
|
int maxNameLen,
|
|
BOOL *shared,
|
|
NINT *nameSpace,
|
|
BOOL *barrier,
|
|
char *snapname);
|
|
|
|
typedef struct LsaInode_s {
|
|
struct File_s *li_beast;
|
|
#ifdef MARS_NWE_NWNSS_USERSPACE
|
|
struct inode *li_inode;
|
|
#else
|
|
struct inode li_inode;
|
|
#endif
|
|
} LsaInode_s;
|
|
|
|
|
|
typedef struct LSAInfo_s {
|
|
Zid_t zid;
|
|
QUAD logicalEOF;
|
|
LONG fileAttributes;
|
|
LONG hardLinkCount;
|
|
LONG blockSize;
|
|
LONG blockSizeShift;
|
|
QUAD dataBytes;
|
|
QUAD createdTime;
|
|
QUAD modifiedTime;
|
|
QUAD metaDataModifiedTime;
|
|
QUAD accessedTime;
|
|
UserID_t ownerID;
|
|
Zid_t parentZid;
|
|
} LSAInfo_s;
|
|
|
|
extern STATUS LSACOMN_Lookup(
|
|
VolumeID_t *volID,
|
|
Zid_t zid,
|
|
NINT nameSpace,
|
|
const void *name,
|
|
LSAInfo_s *lsaInfo,
|
|
struct LsaInode_s *lsaInode);
|
|
|
|
struct zNW_quota_s;
|
|
STATUS LSACOMN_Quotas (
|
|
VolumeID_t *volID,
|
|
Zid_t zid,
|
|
NINT nameSpace,
|
|
LsaInode_s *lsaInode,
|
|
GUID_t *guid,
|
|
struct zNW_quota_s *quota);
|
|
|
|
struct zNW_metadata_s;
|
|
STATUS LSACOMN_Metadata (
|
|
VolumeID_t *volID,
|
|
Zid_t zid,
|
|
NINT nameSpace,
|
|
LsaInode_s *lsaInode,
|
|
NINT *size,
|
|
struct zNW_metadata_s *metadata);
|
|
|
|
extern STATUS LSACOMN_InfoByKey (
|
|
Key_t key,
|
|
LSAInfo_s *lsaInfo);
|
|
|
|
#if 0
|
|
extern STATUS LSACOMN_GetTrusteeCountByKey (
|
|
Key_t key,
|
|
NINT *count);
|
|
|
|
struct ACLEntry_s;
|
|
extern STATUS LSACOMN_GetTrusteeListByKey (
|
|
Key_t key,
|
|
struct ACLEntry_s *acl_list,
|
|
NINT count);
|
|
#endif
|
|
|
|
extern STATUS LSACOMN_Rename(
|
|
VolumeID_t *volID,
|
|
Zid_t srcPZid,
|
|
const void *srcName,
|
|
Zid_t dstPZid,
|
|
const void *dstName,
|
|
NINT nameSpace,
|
|
NINT renameFlags);
|
|
|
|
extern STATUS LSACOMN_Delete(
|
|
VolumeID_t *volID,
|
|
Zid_t pZid,
|
|
const void *name,
|
|
NINT nameSpace,
|
|
NINT deleteFlags);
|
|
|
|
extern STATUS LSACOMN_ModifyInfo(
|
|
VolumeID_t *volID,
|
|
NINT nameSpace,
|
|
Zid_t zid,
|
|
QUAD modifyInfoMask,
|
|
NINT sizeModifyInfo,
|
|
NINT infoVersion,
|
|
const void *modifyInfo);
|
|
|
|
extern STATUS LSACOMN_BrowseUsers(
|
|
NINT connectionID,
|
|
VolumeID_t *volID,
|
|
NINT numEntriesRequested,
|
|
UserID_t *lastUserReturned, /* inout */
|
|
zUserRest_s *userEntries, /* out */
|
|
NINT *numEntriesReturned, /* inout */
|
|
LONG allUsersFlag); /* in */
|
|
|
|
typedef struct LSAInvalidateDentry_s {
|
|
Zid_t lid_zid;
|
|
Zid_t lid_pZid;
|
|
VolumeID_t lid_volID;
|
|
unicode_t lid_name[zMAX_COMPONENT_NAME];
|
|
} LSAInvalidateDentry_s;
|
|
|
|
extern STATUS COMN_LsaCleanupSetup(
|
|
NamedBeast_s *beast,
|
|
// cnt NINT nameUniquifier,
|
|
LSAInvalidateDentry_s *lsaInv);
|
|
|
|
extern STATUS GetLinuxAuthIDsList(
|
|
LONG uid,
|
|
LONG *numberOfAuthIDs,
|
|
GUID_t **AuthIDList);
|
|
|
|
extern BOOL GetLinuxIsSupervisor(LONG uid);
|
|
|
|
extern LsaSuper_s *lsa_find_super(VolumeID_t *volID);
|
|
extern void lsa_add_super(LsaSuper_s *super);
|
|
extern void lsa_delete_super(LsaSuper_s *super);
|
|
extern void lsa_invalidate_dentry(LSAInvalidateDentry_s *lsaInv);
|
|
extern void (*Ptr_lsa_invalidate_dentry)(LSAInvalidateDentry_s *lsaInv);
|
|
extern void lsa_invalidate_vol(VolumeID_t *volID);
|
|
extern void (*Ptr_lsa_invalidate_vol)(VolumeID_t *volID);
|
|
extern void lsa_noatime(VolumeID_t *volID, BOOL on);
|
|
extern void (*Ptr_lsa_noatime)(VolumeID_t *volID, BOOL on);
|
|
extern NINT lsa_get_vol_namespace(VolumeID_t *volID);
|
|
extern NINT (*Ptr_lsa_get_vol_namespace)(VolumeID_t *volID);
|
|
|
|
extern struct inode *lsa_get_inode(VolumeID_t *volID, Zid_t zid);
|
|
extern struct inode *(*Ptr_lsa_get_inode)(VolumeID_t *volID, Zid_t zid);
|
|
|
|
#endif
|