lib/sysquotas_4A.c

ソースコードを見る。

関数

int sys_get_vfs_quota (const char *path, const char *bdev, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
int sys_set_vfs_quota (const char *path, const char *bdev, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
void dummy_sysquotas_4A (void)


関数

int sys_get_vfs_quota ( const char *  path,
const char *  bdev,
enum SMB_QUOTA_TYPE  qtype,
unid_t  id,
SMB_DISK_QUOTA dp 
)

sysquotas_4A.c88 行で定義されています。

参照先 _SMB_DISK_QUOTA::bsize_SMB_DISK_QUOTA::curblocks_SMB_DISK_QUOTA::curinodeserrno_SMB_DISK_QUOTA::hardlimit_SMB_DISK_QUOTA::ihardlimit_SMB_DISK_QUOTA::isoftlimit_SMB_DISK_QUOTA::qflags_SMB_DISK_QUOTA::qtypeSMB_GROUP_FS_QUOTA_TYPESMB_GROUP_QUOTA_TYPESMB_USER_FS_QUOTA_TYPESMB_USER_QUOTA_TYPE_SMB_DISK_QUOTA::softlimit.

参照元 sys_get_quota().

00089 {
00090         int ret = -1;
00091         uint32 qflags = 0;
00092         struct dqblk D;
00093         SMB_BIG_UINT bsize = (SMB_BIG_UINT)QUOTABLOCK_SIZE;
00094 
00095         ZERO_STRUCT(D);
00096         ZERO_STRUCT(*dp);
00097         dp->qtype = qtype;
00098 
00099         switch (qtype) {
00100                 case SMB_USER_QUOTA_TYPE:
00101                         DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_USER_QUOTA_TYPE uid[%u]\n",
00102                                 path, bdev, (unsigned)id.uid));
00103 
00104                         if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))&&errno != EDQUOT) {
00105                                 return ret;
00106                         }
00107 
00108                         if ((D.dqb_curblocks==0)&&
00109                                 (D.dqb_bsoftlimit==0)&&
00110                                 (D.dqb_bhardlimit==0)) {
00111                                 /* the upper layer functions don't want empty quota records...*/
00112                                 return -1;
00113                         }
00114 
00115                         break;
00116 #ifdef HAVE_GROUP_QUOTA
00117                 case SMB_GROUP_QUOTA_TYPE:
00118                         DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_GROUP_QUOTA_TYPE gid[%u]\n",
00119                                 path, bdev, (unsigned)id.gid));
00120 
00121                         if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))&&errno != EDQUOT) {
00122                                 return ret;
00123                         }
00124 
00125                         if ((D.dqb_curblocks==0)&&
00126                                 (D.dqb_bsoftlimit==0)&&
00127                                 (D.dqb_bhardlimit==0)) {
00128                                 /* the upper layer functions don't want empty quota records...*/
00129                                 return -1;
00130                         }
00131 
00132                         break;
00133 #endif /* HAVE_GROUP_QUOTA */
00134                 case SMB_USER_FS_QUOTA_TYPE:
00135                         id.uid = getuid();
00136 
00137                         DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_USER_FS_QUOTA_TYPE (uid[%u])\n",
00138                                 path, (caddr_t)bdev, (unsigned)id.uid));
00139 
00140                         if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))==0) {
00141                                 qflags |= QUOTAS_DENY_DISK;
00142                         }
00143 
00144                         ret = 0;
00145                         break;
00146 #ifdef HAVE_GROUP_QUOTA
00147                 case SMB_GROUP_FS_QUOTA_TYPE:
00148                         id.gid = getgid();
00149 
00150                         DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_GROUP_FS_QUOTA_TYPE (gid[%u])\n",
00151                                 path, bdev, (unsigned)id.gid));
00152 
00153                         if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))==0) {
00154                                 qflags |= QUOTAS_DENY_DISK;
00155                         }
00156 
00157                         ret = 0;
00158                         break;
00159 #endif /* HAVE_GROUP_QUOTA */
00160                 default:
00161                         errno = ENOSYS;
00162                         return -1;
00163         }
00164 
00165         dp->bsize = bsize;
00166         dp->softlimit = (SMB_BIG_UINT)D.dqb_bsoftlimit;
00167         dp->hardlimit = (SMB_BIG_UINT)D.dqb_bhardlimit;
00168         dp->ihardlimit = (SMB_BIG_UINT)D.dqb_ihardlimit;
00169         dp->isoftlimit = (SMB_BIG_UINT)D.dqb_isoftlimit;
00170         dp->curinodes = (SMB_BIG_UINT)D.dqb_curinodes;
00171         dp->curblocks = (SMB_BIG_UINT)D.dqb_curblocks;
00172 
00173 
00174         dp->qflags = qflags;
00175 
00176         return ret;
00177 }

int sys_set_vfs_quota ( const char *  path,
const char *  bdev,
enum SMB_QUOTA_TYPE  qtype,
unid_t  id,
SMB_DISK_QUOTA dp 
)

sysquotas_4A.c182 行で定義されています。

参照先 asprintf()_SMB_DISK_QUOTA::bsizeerrno_SMB_DISK_QUOTA::hardlimit_SMB_DISK_QUOTA::ihardlimit_SMB_DISK_QUOTA::isoftlimit_SMB_DISK_QUOTA::qflagsSMB_GROUP_FS_QUOTA_TYPESMB_GROUP_QUOTA_TYPESMB_USER_FS_QUOTA_TYPESMB_USER_QUOTA_TYPE_SMB_DISK_QUOTA::softlimitstrerror().

参照元 sys_set_quota().

00183 {
00184         int ret = -1;
00185         uint32 qflags = 0;
00186         uint32 oldqflags = 0;
00187         struct dqblk D;
00188         SMB_BIG_UINT bsize = (SMB_BIG_UINT)QUOTABLOCK_SIZE;
00189 
00190         ZERO_STRUCT(D);
00191 
00192         if (bsize == dp->bsize) {
00193                 D.dqb_bsoftlimit = dp->softlimit;
00194                 D.dqb_bhardlimit = dp->hardlimit;
00195                 D.dqb_ihardlimit = dp->ihardlimit;
00196                 D.dqb_isoftlimit = dp->isoftlimit;
00197         } else {
00198                 D.dqb_bsoftlimit = (dp->softlimit*dp->bsize)/bsize;
00199                 D.dqb_bhardlimit = (dp->hardlimit*dp->bsize)/bsize;
00200                 D.dqb_ihardlimit = (dp->ihardlimit*dp->bsize)/bsize;
00201                 D.dqb_isoftlimit = (dp->isoftlimit*dp->bsize)/bsize;
00202         }
00203 
00204         qflags = dp->qflags;
00205 
00206         switch (qtype) {
00207                 case SMB_USER_QUOTA_TYPE:
00208                         DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_USER_QUOTA_TYPE uid[%u]\n",
00209                                 path, bdev, (unsigned)id.uid));
00210 
00211                         ret = quotactl(QCMD(Q_SETQLIM,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D);
00212                         break;
00213 #ifdef HAVE_GROUP_QUOTA
00214                 case SMB_GROUP_QUOTA_TYPE:
00215                         DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_GROUP_QUOTA_TYPE gid[%u]\n",
00216                                 path, bdev, (unsigned)id.gid));
00217 
00218                         ret = quotactl(QCMD(Q_SETQLIM,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D);
00219                         break;
00220 #endif /* HAVE_GROUP_QUOTA */
00221                 case SMB_USER_FS_QUOTA_TYPE:
00222                         /* this stuff didn't work as it should:
00223                          * switching on/off quota via quotactl()
00224                          * didn't work!
00225                          * So we just return 0
00226                          * --metze
00227                          * 
00228                          * On HPUX we didn't have the mount path,
00229                          * we need to fix sys_path_to_bdev()
00230                          *
00231                          */
00232                         id.uid = getuid();
00233                         DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_USER_FS_QUOTA_TYPE (uid[%u])\n",
00234                                 path, bdev, (unsigned)id.uid));
00235 
00236 #if 0
00237                         ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D);
00238 
00239                         if ((qflags&QUOTAS_DENY_DISK)||(qflags&QUOTAS_ENABLED)) {
00240                                 if (ret == 0) {
00241                                         char *quota_file = NULL;
00242                                         
00243                                         asprintf(&quota_file,"/%s/%s%s",path, QUOTAFILENAME,USERQUOTAFILE_EXTENSION);
00244                                         if (quota_file == NULL) {
00245                                                 DEBUG(0,("asprintf() failed!\n"));
00246                                                 errno = ENOMEM;
00247                                                 return -1;
00248                                         }
00249                                         
00250                                         ret = quotactl(QCMD(Q_QUOTAON,USRQUOTA), (caddr_t)bdev, -1,(void *)quota_file);
00251                                 } else {
00252                                         ret = 0;        
00253                                 }
00254                         } else {
00255                                 if (ret != 0) {
00256                                         /* turn off */
00257                                         ret = quotactl(QCMD(Q_QUOTAOFF,USRQUOTA), (caddr_t)bdev, -1, (void *)0);        
00258                                 } else {
00259                                         ret = 0;
00260                                 }               
00261                         }
00262 
00263                         DEBUG(0,("sys_set_vfs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
00264                                 ret,errno,strerror(errno),id.uid,bdev));
00265 #else
00266                         if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))==0) {
00267                                 oldqflags |= QUOTAS_DENY_DISK;
00268                         }
00269 
00270                         if (oldqflags == qflags) {
00271                                 ret = 0;
00272                         } else {
00273                                 ret = -1;
00274                         }
00275 #endif
00276                         break;
00277 #ifdef HAVE_GROUP_QUOTA
00278                 case SMB_GROUP_FS_QUOTA_TYPE:
00279                         /* this stuff didn't work as it should:
00280                          * switching on/off quota via quotactl()
00281                          * didn't work!
00282                          * So we just return 0
00283                          * --metze
00284                          * 
00285                          * On HPUX we didn't have the mount path,
00286                          * we need to fix sys_path_to_bdev()
00287                          *
00288                          */
00289                         id.gid = getgid();
00290                         DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_GROUP_FS_QUOTA_TYPE (gid[%u])\n",
00291                                 path, bdev, (unsigned)id.gid));
00292 
00293 #if 0
00294                         ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), bdev, id, (void *)&D);
00295 
00296                         if ((qflags&QUOTAS_DENY_DISK)||(qflags&QUOTAS_ENABLED)) {
00297                                 if (ret == 0) {
00298                                         char *quota_file = NULL;
00299                                         
00300                                         asprintf(&quota_file,"/%s/%s%s",path, QUOTAFILENAME,GROUPQUOTAFILE_EXTENSION);
00301                                         if (quota_file == NULL) {
00302                                                 DEBUG(0,("asprintf() failed!\n"));
00303                                                 errno = ENOMEM;
00304                                                 return -1;
00305                                         }
00306                                         
00307                                         ret = quotactl(QCMD(Q_QUOTAON,GRPQUOTA), (caddr_t)bdev, -1,(void *)quota_file);
00308                                 } else {
00309                                         ret = 0;        
00310                                 }
00311                         } else {
00312                                 if (ret != 0) {
00313                                         /* turn off */
00314                                         ret = quotactl(QCMD(Q_QUOTAOFF,GRPQUOTA), (caddr_t)bdev, -1, (void *)0);        
00315                                 } else {
00316                                         ret = 0;
00317                                 }               
00318                         }
00319 
00320                         DEBUG(0,("sys_set_vfs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
00321                                 ret,errno,strerror(errno),id.gid,bdev));
00322 #else
00323                         if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))==0) {
00324                                 oldqflags |= QUOTAS_DENY_DISK;
00325                         }
00326 
00327                         if (oldqflags == qflags) {
00328                                 ret = 0;
00329                         } else {
00330                                 ret = -1;
00331                         }
00332 #endif
00333                         break;
00334 #endif /* HAVE_GROUP_QUOTA */
00335                 default:
00336                         errno = ENOSYS;
00337                         return -1;
00338         }
00339 
00340         return ret;
00341 }

void dummy_sysquotas_4A ( void   ) 

sysquotas_4A.c346 行で定義されています。

00346 {}


Sambaに対してSat Aug 29 21:23:38 2009に生成されました。  doxygen 1.4.7