Blame


1 7285a491 2004-06-17 devnull #include <u.h>
2 7285a491 2004-06-17 devnull #include <libc.h>
3 7285a491 2004-06-17 devnull #include <bio.h>
4 7285a491 2004-06-17 devnull #include <libsec.h>
5 7285a491 2004-06-17 devnull #include <disk.h>
6 7285a491 2004-06-17 devnull #include <ctype.h>
7 7285a491 2004-06-17 devnull
8 7285a491 2004-06-17 devnull #include "iso9660.h"
9 7285a491 2004-06-17 devnull
10 7285a491 2004-06-17 devnull #include <grp.h>
11 7285a491 2004-06-17 devnull #include <pwd.h>
12 7285a491 2004-06-17 devnull
13 7285a491 2004-06-17 devnull typedef struct Xarg Xarg;
14 7285a491 2004-06-17 devnull struct Xarg {
15 7285a491 2004-06-17 devnull void (*enm)(char*,char*,XDir*,void*);
16 7285a491 2004-06-17 devnull void (*warn)(char*,void*);
17 7285a491 2004-06-17 devnull void *arg;
18 7285a491 2004-06-17 devnull };
19 7285a491 2004-06-17 devnull
20 7285a491 2004-06-17 devnull static long numericuid(char *user);
21 7285a491 2004-06-17 devnull static long numericgid(char *gp);
22 7285a491 2004-06-17 devnull
23 7285a491 2004-06-17 devnull void
24 7285a491 2004-06-17 devnull dirtoxdir(XDir *xd, Dir *d)
25 7285a491 2004-06-17 devnull {
26 cbeb0b26 2006-04-01 devnull /* char buf[NAMELEN+1]; */
27 7285a491 2004-06-17 devnull memset(xd, 0, sizeof *xd);
28 7285a491 2004-06-17 devnull
29 7285a491 2004-06-17 devnull xd->name = atom(d->name);
30 7285a491 2004-06-17 devnull xd->uid = atom(d->uid);
31 7285a491 2004-06-17 devnull xd->gid = atom(d->gid);
32 7285a491 2004-06-17 devnull xd->uidno = numericuid(d->uid);
33 7285a491 2004-06-17 devnull xd->gidno = numericgid(d->gid);
34 7285a491 2004-06-17 devnull xd->mode = d->mode;
35 7285a491 2004-06-17 devnull xd->atime = d->atime;
36 7285a491 2004-06-17 devnull xd->mtime = d->mtime;
37 7285a491 2004-06-17 devnull xd->ctime = 0;
38 7285a491 2004-06-17 devnull xd->length = d->length;
39 7285a491 2004-06-17 devnull if(xd->mode & CHLINK) {
40 7285a491 2004-06-17 devnull xd->mode |= 0777;
41 cbeb0b26 2006-04-01 devnull /*xd->symlink = atom(d->symlink); */
42 cbeb0b26 2006-04-01 devnull xd->symlink = atom("symlink"); /* XXX: rsc */
43 7285a491 2004-06-17 devnull }
44 5241ed2b 2004-07-03 devnull }
45 7285a491 2004-06-17 devnull
46 7285a491 2004-06-17 devnull void
47 7285a491 2004-06-17 devnull fdtruncate(int fd, ulong size)
48 7285a491 2004-06-17 devnull {
49 7285a491 2004-06-17 devnull ftruncate(fd, size);
50 7285a491 2004-06-17 devnull
51 7285a491 2004-06-17 devnull return;
52 7285a491 2004-06-17 devnull }
53 7285a491 2004-06-17 devnull
54 7285a491 2004-06-17 devnull static long
55 7285a491 2004-06-17 devnull numericuid(char *user)
56 7285a491 2004-06-17 devnull {
57 7285a491 2004-06-17 devnull struct passwd *pass;
58 7285a491 2004-06-17 devnull static int warned = 0;
59 7285a491 2004-06-17 devnull
60 7285a491 2004-06-17 devnull if (! (pass = getpwnam(user))) {
61 7285a491 2004-06-17 devnull if (!warned)
62 7285a491 2004-06-17 devnull fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);
63 7285a491 2004-06-17 devnull warned = 1;
64 7285a491 2004-06-17 devnull return 0;
65 7285a491 2004-06-17 devnull }
66 7285a491 2004-06-17 devnull
67 7285a491 2004-06-17 devnull return pass->pw_uid;
68 7285a491 2004-06-17 devnull }
69 7285a491 2004-06-17 devnull
70 7285a491 2004-06-17 devnull static long
71 7285a491 2004-06-17 devnull numericgid(char *gp)
72 7285a491 2004-06-17 devnull {
73 7285a491 2004-06-17 devnull struct group *gr;
74 7285a491 2004-06-17 devnull static int warned = 0;
75 7285a491 2004-06-17 devnull
76 7285a491 2004-06-17 devnull if (! (gr = getgrnam(gp))) {
77 7285a491 2004-06-17 devnull if (!warned)
78 7285a491 2004-06-17 devnull fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);
79 7285a491 2004-06-17 devnull warned = 1;
80 7285a491 2004-06-17 devnull return 0;
81 7285a491 2004-06-17 devnull }
82 7285a491 2004-06-17 devnull
83 7285a491 2004-06-17 devnull return gr->gr_gid;
84 7285a491 2004-06-17 devnull }