| @@ -150,8 +150,8 @@ rattach(Req *r) · 149 unmodified lines |
| 150 | 150 | rerrstr(err, sizeof(err)); |
| 151 | 151 | respond(r, err); |
| 152 | 152 | }else{ |
| 153 | | − if(findgroup(&a->p->groups, r->ifcall.uname, &a->uid) == nil) |
| 154 | | − a->uid = Root; /* FIXME need external mapping */ |
| 153 | + if(opts.asroot || findgroup(&a->p->groups, r->ifcall.uname, &a->uid) == nil) |
| 154 | + a->uid = Root; |
| 155 | 155 | |
| 156 | 156 | incref(a->p); |
| 157 | 157 | a->type = Adir; |
| @@ -634,7 +634,7 @@ static Srv fs = { · 476 unmodified lines |
| 634 | 634 | static void |
| 635 | 635 | usage(void) |
| 636 | 636 | { |
| 637 | | − fprint(2, "usage: %s [-C] [-l hide] [-s srvname]\n", argv0); |
| 637 | + fprint(2, "usage: %s [-C] [-R] [-g GROUPFILE] [-l hide] [-s SRVNAME]\n", argv0); |
| 638 | 638 | threadexitsall("usage"); |
| 639 | 639 | } |
| 640 | 640 | |
| @@ -651,7 +651,9 @@ linkmode(char *m) · 10 unmodified lines |
| 651 | 651 | void |
| 652 | 652 | threadmain(int argc, char **argv) |
| 653 | 653 | { |
| 654 | | − char *srv; |
| 654 | + char *srv, *gr; |
| 655 | + vlong sz; |
| 656 | + int f; |
| 655 | 657 | |
| 656 | 658 | srv = "ext4"; |
| 657 | 659 | ARGBEGIN{ |
| @@ -667,6 +669,23 @@ threadmain(int argc, char **argv) · 9 unmodified lines |
| 667 | 669 | case 's': |
| 668 | 670 | srv = EARGF(usage()); |
| 669 | 671 | break; |
| 672 | + case 'g': |
| 673 | + gr = EARGF(usage()); |
| 674 | + if((f = open(gr, OREAD)) < 0) |
| 675 | + sysfatal("%r"); |
| 676 | + if((sz = seek(f, 0, 2)) < 0) |
| 677 | + sysfatal("%s: invalid group file", gr); |
| 678 | + if((opts.group = malloc(sz+1)) == nil) |
| 679 | + sysfatal("memory"); |
| 680 | + seek(f, 0, 0); |
| 681 | + if(readn(f, opts.group, sz) != sz) |
| 682 | + sysfatal("%s: read failed", gr); |
| 683 | + close(f); |
| 684 | + opts.group[sz] = 0; |
| 685 | + break; |
| 686 | + case 'R': |
| 687 | + opts.asroot = 1; |
| 688 | + break; |
| 670 | 689 | }ARGEND |
| 671 | 690 | |
| 672 | 691 | if(argc != 0) |