| @@ -150,8 +150,8 @@ rattach(Req *r) · 149 unmodified lines |
| 150 | rerrstr(err, sizeof(err)); | 150 | rerrstr(err, sizeof(err)); |
| 151 | respond(r, err); | 151 | respond(r, err); |
| 152 | }else{ | 152 | }else{ |
| 153 | if(findgroup(&a->p->groups, r->ifcall.uname, &a->uid) == nil) | 153 | if(opts.asroot || findgroup(&a->p->groups, r->ifcall.uname, &a->uid) == nil) |
| 154 | a->uid = Root; /* FIXME need external mapping */ | 154 | a->uid = Root; |
| 155 | | 155 | |
| 156 | incref(a->p); | 156 | incref(a->p); |
| 157 | a->type = Adir; | 157 | a->type = Adir; |
| @@ -634,7 +634,7 @@ static Srv fs = { · 476 unmodified lines |
| 634 | static void | 634 | static void |
| 635 | usage(void) | 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 | threadexitsall("usage"); | 638 | threadexitsall("usage"); |
| 639 | } | 639 | } |
| 640 | | 640 | |
| @@ -651,7 +651,9 @@ linkmode(char *m) · 10 unmodified lines |
| 651 | void | 651 | void |
| 652 | threadmain(int argc, char **argv) | 652 | threadmain(int argc, char **argv) |
| 653 | { | 653 | { |
| 654 | char *srv; | 654 | char *srv, *gr; |
| | 655 | vlong sz; |
| | 656 | int f; |
| 655 | | 657 | |
| 656 | srv = "ext4"; | 658 | srv = "ext4"; |
| 657 | ARGBEGIN{ | 659 | ARGBEGIN{ |
| @@ -667,6 +669,23 @@ threadmain(int argc, char **argv) · 9 unmodified lines |
| 667 | case 's': | 669 | case 's': |
| 668 | srv = EARGF(usage()); | 670 | srv = EARGF(usage()); |
| 669 | break; | 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 | }ARGEND | 689 | }ARGEND |
| 671 | | 690 | |
| 672 | if(argc != 0) | 691 | if(argc != 0) |