File: set_limits_example.c

package info (click to toggle)
quota 4.00-4%2Bdeb7u1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 1,776 kB
  • sloc: ansic: 10,920; sh: 631; perl: 333; makefile: 194
file content (60 lines) | stat: -rw-r--r-- 1,379 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "config.h"

#include <sys/types.h>
#include <sys/quota.h>
#include <errno.h>
#include <stdio.h>

#include "pot.h"

static int copy_user_quota_limits(const char *block_device, uid_t from, uid_t to)
{
	struct dqblk dq;

	if (quotactl(QCMD(Q_GETQUOTA, USRQUOTA), block_device, from, (caddr_t) & dq) == 0) {
		if (quotactl(QCMD(Q_SETQLIM, USRQUOTA), block_device, to, (caddr_t) & dq) == 0) {
			return (0);
		}
		else {
			errstr(
				_("copy_user_quota_limits: Failed to set userquota for uid %ld : %s\n"),
				to, strerror(errno));
			return (1);
		}
	}
	else {
		errstr(
			_("copy_user_quota_limits: Failed to get userquota for uid %ld : %s\n"),
			from, strerror(errno));
		return (1);
	}
}

static int copy_group_quota_limits(const char *block_device, gid_t from, gid_t to)
{
	struct dqblk dq;

	if (quotactl(QCMD(Q_GETQUOTA, GRPQUOTA), block_device, from, (caddr_t) & dq) == 0) {
		if (quotactl(QCMD(Q_SETQLIM, GRPQUOTA), block_device, to, (caddr_t) & dq) == 0) {
			return (0);
		}
		else {
			errstr(
				_("copy_group_quota_limits: Failed to set groupquota for uid %ld : %s\n"),
				to, strerror(errno));
			return (1);
		}
	}
	else {
		errstr(
			_("copy_group_quota_limits: Failed to get groupquota for uid %ld : %s\n"),
			from, strerror(errno));
		return (1);
	}
}

main(int argc, char **argv)
{
	gettexton();
	copy_user_quota_limits("/dev/hda8", 152, 151);
}