|
|
1.1 root 1: /*
2: * store mbox owner through pointer. return 0 (success), -1 (failure)
3: * hard version for systems that let you give files away;
4: * the owner of a mbox is determined from its name -- unless
5: * the set-uid bit is on (!) . In that case, the file must have
6: * been created by its present owner, else anyone could become root.
7: * If the set-uid bit is on, return the file owner and group.
8: */
9:
10: #include <pwd.h>
11: #include <types.h>
12: #include <stat.h>
13: #include "string.h"
14: #include "aux.h"
15: #include "ugid.h"
16: #include "mail.h"
17:
18: mboxowner (mbox, ugidp)
19: char *mbox;
20: struct ugid *ugidp;
21: {
22: char *u;
23: struct passwd *pw, *getpwnam();
24: struct stat statb;
25:
26: if (stat (mbox, &statb) >= 0 && (statb.st_mode & S_ISUID)) {
27: ugidp->uid = statb.st_uid;
28: ugidp->gid = statb.st_gid;
29: return 0;
30: }
31:
32: u = basename(mbox);
33: if (u == NULL)
34: return -1;
35:
36: pw = getpwnam(u);
37: if (pw == NULL)
38: return -1;
39:
40: ugidp->uid = pw->pw_uid;
41: ugidp->gid = pw->pw_gid;
42: return 0;
43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.