/*#endif HAVE_QUOTACTL_4A */
#elif defined(HAVE_QUOTACTL_4B)
-#error HAVE_QUOTACTL_4B not implemeted
-
/*#endif HAVE_QUOTACTL_4B */
#elif defined(HAVE_QUOTACTL_3)
(*bdev) = NULL;
(*fs) = NULL;
- if ( sys_stat(path, &S) == -1 )
+ if ( sys_stat(path, &S, false) == -1 )
return (-1);
- devno = S.st_dev ;
+ devno = S.st_ex_dev ;
fp = setmntent(MOUNTED,"r");
if (fp == NULL) {
}
while ((mnt = getmntent(fp))) {
- if ( sys_stat(mnt->mnt_dir,&S) == -1 )
+ if ( sys_stat(mnt->mnt_dir, &S, false) == -1 )
continue ;
- if (S.st_dev == devno) {
+ if (S.st_ex_dev == devno) {
(*mntpath) = SMB_STRDUP(mnt->mnt_dir);
(*bdev) = SMB_STRDUP(mnt->mnt_fsname);
(*fs) = SMB_STRDUP(mnt->mnt_type);
/* find the block device file */
- if ((ret=sys_stat(path, &S))!=0) {
+ if ((ret=sys_stat(path, &S, false))!=0) {
return ret;
}
- if ((ret=devnm(S_IFBLK, S.st_dev, dev_disk, 256, 1))!=0) {
+ if ((ret=devnm(S_IFBLK, S.st_ex_dev, dev_disk, 256, 1))!=0) {
return ret;
}
int (*get_quota)(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp);
int (*set_quota)(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp);
} sys_quota_backends[] = {
-#ifdef HAVE_XFS_QUOTAS
+#if defined HAVE_XFS_QUOTAS
{"xfs", sys_get_xfs_quota, sys_set_xfs_quota},
+ {"gfs", sys_get_xfs_quota, sys_set_xfs_quota},
+ {"gfs2", sys_get_xfs_quota, sys_set_xfs_quota},
#endif /* HAVE_XFS_QUOTAS */
- {NULL, NULL, NULL}
+#ifdef HAVE_NFS_QUOTAS
+ {"nfs", sys_get_nfs_quota, sys_set_nfs_quota},
+ {"nfs4", sys_get_nfs_quota, sys_set_nfs_quota},
+#endif /* HAVE_NFS_QUOTAS */
+ {NULL, NULL, NULL}
};
static int command_get_quota(const char *path, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
{
const char *get_quota_command;
char **lines = NULL;
-
- get_quota_command = lp_get_quota_command();
+
+ get_quota_command = lp_get_quota_command(talloc_tos());
if (get_quota_command && *get_quota_command) {
const char *p;
char *p2;
- pstring syscmd;
+ char *syscmd = NULL;
int _id = -1;
switch(qtype) {
return -1;
}
- slprintf(syscmd, sizeof(syscmd)-1,
- "%s \"%s\" %d %d",
- get_quota_command, path, qtype, _id);
+ if (asprintf(&syscmd, "%s %s %d %d",
+ get_quota_command, path, qtype, _id) < 0) {
+ return -1;
+ }
DEBUG (3, ("get_quota: Running command %s\n", syscmd));
lines = file_lines_pload(syscmd, NULL);
+ SAFE_FREE(syscmd);
+
if (lines) {
char *line = lines[0];
/* we need to deal with long long unsigned here, if supported */
- dp->qflags = (enum SMB_QUOTA_TYPE)strtoul(line, &p2, 10);
+ dp->qflags = strtoul(line, &p2, 10);
p = p2;
while (p && *p && isspace(*p)) {
p++;
dp->bsize = 1024;
}
- file_lines_free(lines);
+ TALLOC_FREE(lines);
lines = NULL;
DEBUG (3, ("Parsed output of get_quota, ...\n"));
-#ifdef LARGE_SMB_OFF_T
DEBUGADD (5,(
"qflags:%u curblocks:%llu softlimit:%llu hardlimit:%llu\n"
"curinodes:%llu isoftlimit:%llu ihardlimit:%llu bsize:%llu\n",
(long long unsigned)dp->curinodes,
(long long unsigned)dp->isoftlimit,(long long unsigned)dp->ihardlimit,
(long long unsigned)dp->bsize));
-#else /* LARGE_SMB_OFF_T */
- DEBUGADD (5,(
- "qflags:%u curblocks:%lu softlimit:%lu hardlimit:%lu\n"
- "curinodes:%lu isoftlimit:%lu ihardlimit:%lu bsize:%lu\n",
- dp->qflags,(long unsigned)dp->curblocks,
- (long unsigned)dp->softlimit,(long unsigned)dp->hardlimit,
- (long unsigned)dp->curinodes,
- (long unsigned)dp->isoftlimit,(long unsigned)dp->ihardlimit,
- (long unsigned)dp->bsize));
-#endif /* LARGE_SMB_OFF_T */
return 0;
}
errno = ENOSYS;
return -1;
-
+
invalid_param:
- file_lines_free(lines);
+ TALLOC_FREE(lines);
DEBUG(0,("The output of get_quota_command is invalid!\n"));
return -1;
}
static int command_set_quota(const char *path, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
{
const char *set_quota_command;
-
- set_quota_command = lp_set_quota_command();
+
+ set_quota_command = lp_set_quota_command(talloc_tos());
if (set_quota_command && *set_quota_command) {
- char **lines;
- pstring syscmd;
+ char **lines = NULL;
+ char *syscmd = NULL;
int _id = -1;
switch(qtype) {
return -1;
}
-#ifdef LARGE_SMB_OFF_T
- slprintf(syscmd, sizeof(syscmd)-1,
- "%s \"%s\" %d %d "
+ if (asprintf(&syscmd,
+ "%s %s %d %d "
"%u %llu %llu "
- "%llu %llu %llu ",
+ "%llu %llu %llu ",
set_quota_command, path, qtype, _id, dp->qflags,
(long long unsigned)dp->softlimit,(long long unsigned)dp->hardlimit,
(long long unsigned)dp->isoftlimit,(long long unsigned)dp->ihardlimit,
- (long long unsigned)dp->bsize);
-#else /* LARGE_SMB_OFF_T */
- slprintf(syscmd, sizeof(syscmd)-1,
- "%s \"%s\" %d %d "
- "%u %lu %lu "
- "%lu %lu %lu ",
- set_quota_command, path, qtype, _id, dp->qflags,
- (long unsigned)dp->softlimit,(long unsigned)dp->hardlimit,
- (long unsigned)dp->isoftlimit,(long unsigned)dp->ihardlimit,
- (long unsigned)dp->bsize);
-#endif /* LARGE_SMB_OFF_T */
-
-
+ (long long unsigned)dp->bsize) < 0) {
+ return -1;
+ }
DEBUG (3, ("get_quota: Running command %s\n", syscmd));
lines = file_lines_pload(syscmd, NULL);
+ SAFE_FREE(syscmd);
if (lines) {
char *line = lines[0];
DEBUG (3, ("Read output from set_quota, \"%s\"\n", line));
- file_lines_free(lines);
-
+ TALLOC_FREE(lines);
+
return 0;
}
DEBUG (0, ("set_quota_command failed!\n"));
{
int ret = -1;
int i;
- BOOL ready = False;
+ bool ready = False;
char *mntpath = NULL;
char *bdev = NULL;
char *fs = NULL;
}
errno = 0;
- DEBUG(10,("sys_get_quota() uid(%u, %u)\n", (unsigned)getuid(), (unsigned)geteuid()));
+ DEBUG(10,("sys_get_quota() uid(%u, %u), fs(%s)\n", (unsigned)getuid(), (unsigned)geteuid(), fs));
for (i=0;(fs && sys_quota_backends[i].name && sys_quota_backends[i].get_quota);i++) {
if (strcmp(fs,sys_quota_backends[i].name)==0) {
{
int ret = -1;
int i;
- BOOL ready = False;
+ bool ready = False;
char *mntpath = NULL;
char *bdev = NULL;
char *fs = NULL;