nfs-ganesha 1.4
|
00001 /* 00002 * vim:expandtab:shiftwidth=4:tabstop=4: 00003 */ 00004 00015 #ifdef HAVE_CONFIG_H 00016 #include "config.h" 00017 #endif 00018 #include "fsal_convert.h" 00019 #include <sys/types.h> 00020 #include <sys/stat.h> 00021 #include <errno.h> 00022 #include <string.h> 00023 #include <fcntl.h> 00024 00025 #define MAX_2( x, y ) ( (x) > (y) ? (x) : (y) ) 00026 #define MAX_3( x, y, z ) ( (x) > (y) ? MAX_2((x),(z)) : MAX_2((y),(z)) ) 00027 00037 int fsal2posix_testperm(fsal_accessflags_t testperm) 00038 { 00039 00040 int posix_testperm = 0; 00041 00042 if(testperm & FSAL_R_OK) 00043 posix_testperm |= R_OK; 00044 if(testperm & FSAL_W_OK) 00045 posix_testperm |= W_OK; 00046 if(testperm & FSAL_X_OK) 00047 posix_testperm |= X_OK; 00048 if(testperm & FSAL_F_OK) 00049 posix_testperm |= F_OK; 00050 00051 return posix_testperm; 00052 00053 } 00054 00064 mode_t fsal2unix_mode(fsal_accessmode_t fsal_mode) 00065 { 00066 00067 mode_t out_mode = 0; 00068 00069 if((fsal_mode & FSAL_MODE_SUID)) 00070 out_mode |= S_ISUID; 00071 if((fsal_mode & FSAL_MODE_SGID)) 00072 out_mode |= S_ISGID; 00073 if((fsal_mode & FSAL_MODE_SVTX)) 00074 out_mode |= S_ISVTX; 00075 00076 if((fsal_mode & FSAL_MODE_RUSR)) 00077 out_mode |= S_IRUSR; 00078 if((fsal_mode & FSAL_MODE_WUSR)) 00079 out_mode |= S_IWUSR; 00080 if((fsal_mode & FSAL_MODE_XUSR)) 00081 out_mode |= S_IXUSR; 00082 if((fsal_mode & FSAL_MODE_RGRP)) 00083 out_mode |= S_IRGRP; 00084 if((fsal_mode & FSAL_MODE_WGRP)) 00085 out_mode |= S_IWGRP; 00086 if((fsal_mode & FSAL_MODE_XGRP)) 00087 out_mode |= S_IXGRP; 00088 if((fsal_mode & FSAL_MODE_ROTH)) 00089 out_mode |= S_IROTH; 00090 if((fsal_mode & FSAL_MODE_WOTH)) 00091 out_mode |= S_IWOTH; 00092 if((fsal_mode & FSAL_MODE_XOTH)) 00093 out_mode |= S_IXOTH; 00094 00095 return out_mode; 00096 00097 } 00098 00108 fsal_accessmode_t unix2fsal_mode(mode_t unix_mode) 00109 { 00110 00111 fsal_accessmode_t fsalmode = 0; 00112 00113 if(unix_mode & S_ISUID) 00114 fsalmode |= FSAL_MODE_SUID; 00115 if(unix_mode & S_ISGID) 00116 fsalmode |= FSAL_MODE_SGID; 00117 if(unix_mode & S_ISVTX) 00118 fsalmode |= FSAL_MODE_SVTX; 00119 00120 if(unix_mode & S_IRUSR) 00121 fsalmode |= FSAL_MODE_RUSR; 00122 if(unix_mode & S_IWUSR) 00123 fsalmode |= FSAL_MODE_WUSR; 00124 if(unix_mode & S_IXUSR) 00125 fsalmode |= FSAL_MODE_XUSR; 00126 00127 if(unix_mode & S_IRGRP) 00128 fsalmode |= FSAL_MODE_RGRP; 00129 if(unix_mode & S_IWGRP) 00130 fsalmode |= FSAL_MODE_WGRP; 00131 if(unix_mode & S_IXGRP) 00132 fsalmode |= FSAL_MODE_XGRP; 00133 00134 if(unix_mode & S_IROTH) 00135 fsalmode |= FSAL_MODE_ROTH; 00136 if(unix_mode & S_IWOTH) 00137 fsalmode |= FSAL_MODE_WOTH; 00138 if(unix_mode & S_IXOTH) 00139 fsalmode |= FSAL_MODE_XOTH; 00140 00141 return fsalmode; 00142 00143 } 00144 00155 fsal_nodetype_t posix2fsal_type(mode_t posix_type_in) 00156 { 00157 00158 switch (posix_type_in & S_IFMT) 00159 { 00160 case S_IFIFO: 00161 return FSAL_TYPE_FIFO; 00162 00163 case S_IFCHR: 00164 return FSAL_TYPE_CHR; 00165 00166 case S_IFDIR: 00167 return FSAL_TYPE_DIR; 00168 00169 case S_IFBLK: 00170 return FSAL_TYPE_BLK; 00171 00172 case S_IFREG: 00173 case S_IFMT: 00174 return FSAL_TYPE_FILE; 00175 00176 case S_IFLNK: 00177 return FSAL_TYPE_LNK; 00178 00179 case S_IFSOCK: 00180 return FSAL_TYPE_SOCK; 00181 00182 default: 00183 LogWarn(COMPONENT_FSAL, "Unknown object type: %d", posix_type_in); 00184 return -1; 00185 } 00186 00187 } 00188 00189 fsal_time_t posix2fsal_time(time_t tsec, time_t nsec) 00190 { 00191 fsal_time_t fsaltime; 00192 00193 fsaltime.seconds = (fsal_uint_t) tsec; 00194 fsaltime.nseconds = (fsal_uint_t) nsec; 00195 00196 return fsaltime; 00197 } 00198 00199 fsal_fsid_t posix2fsal_fsid(dev_t posix_devid) 00200 { 00201 00202 fsal_fsid_t fsid; 00203 00204 fsid.major = (fsal_u64_t) posix_devid; 00205 fsid.minor = 0; 00206 00207 return fsid; 00208 00209 } 00210 00211 fsal_dev_t posix2fsal_devt(dev_t posix_devid) 00212 { 00213 00214 fsal_dev_t dev; 00215 00216 dev.major = major(posix_devid); 00217 dev.minor = minor(posix_devid); 00218 00219 return dev; 00220 }