1219b2ee8SDavid du Colombier #include "lib.h"
2219b2ee8SDavid du Colombier #include "sys9.h"
33e12c5d1SDavid du Colombier #include <sys/types.h>
4219b2ee8SDavid du Colombier #include <sys/stat.h>
53e12c5d1SDavid du Colombier #include <unistd.h>
6219b2ee8SDavid du Colombier #include <string.h>
73e12c5d1SDavid du Colombier #include <errno.h>
8*9a747e4fSDavid du Colombier #include <stdlib.h>
9219b2ee8SDavid du Colombier #include "dir.h"
103e12c5d1SDavid du Colombier
113e12c5d1SDavid du Colombier int
chown(const char * path,uid_t owner,gid_t group)123e12c5d1SDavid du Colombier chown(const char *path, uid_t owner, gid_t group)
133e12c5d1SDavid du Colombier {
14219b2ee8SDavid du Colombier int num;
15219b2ee8SDavid du Colombier Dir d;
16219b2ee8SDavid du Colombier
17*9a747e4fSDavid du Colombier _nulldir(&d);
18219b2ee8SDavid du Colombier
19*9a747e4fSDavid du Colombier /* find owner, group */
20*9a747e4fSDavid du Colombier d.uid = nil;
21*9a747e4fSDavid du Colombier num = owner;
22*9a747e4fSDavid du Colombier if(!_getpw(&num, &d.uid, 0)) {
23219b2ee8SDavid du Colombier errno = EINVAL;
24219b2ee8SDavid du Colombier return -1;
25219b2ee8SDavid du Colombier }
26*9a747e4fSDavid du Colombier
27*9a747e4fSDavid du Colombier d.gid = nil;
28219b2ee8SDavid du Colombier num = group;
29*9a747e4fSDavid du Colombier if(!_getpw(&num, &d.gid, 0)) {
30219b2ee8SDavid du Colombier errno = EINVAL;
31219b2ee8SDavid du Colombier return -1;
32219b2ee8SDavid du Colombier }
33219b2ee8SDavid du Colombier
34*9a747e4fSDavid du Colombier if(_dirwstat(path, &d) < 0){
35219b2ee8SDavid du Colombier _syserrno();
36*9a747e4fSDavid du Colombier return -1;
37219b2ee8SDavid du Colombier }
38*9a747e4fSDavid du Colombier return 0;
39219b2ee8SDavid du Colombier }
40