|
1 | 1 | /*
|
2 | 2 | * fapolicyd.c - Main file for the program
|
3 |
| - * Copyright (c) 2016 Red Hat Inc., Durham, North Carolina. |
| 3 | + * Copyright (c) 2016,2018 Red Hat Inc., Durham, North Carolina. |
4 | 4 | * All Rights Reserved.
|
5 | 5 | *
|
6 | 6 | * This software may be freely redistributed and/or modified under the
|
|
34 | 34 | #include <stdio.h>
|
35 | 35 | #include <ctype.h>
|
36 | 36 | #include <pwd.h>
|
| 37 | +#include <grp.h> |
37 | 38 | #include <cap-ng.h>
|
38 | 39 | #include <sys/prctl.h>
|
39 | 40 | #include <linux/unistd.h> /* syscall numbers */
|
@@ -180,7 +181,7 @@ static void usage(void)
|
180 | 181 | {
|
181 | 182 | fprintf(stderr,
|
182 | 183 | "Usage: fapolicyd [--debug|--debug-deny] [--permissive] "
|
183 |
| - "[--boost xxx]\n\t\t[--queue xxx] [--user xx] " |
| 184 | + "[--boost xxx]\n\t\t[--queue xxx] [--user xx] [--group xx]" |
184 | 185 | "[--no-details]\n");
|
185 | 186 | exit(1);
|
186 | 187 | }
|
@@ -266,6 +267,30 @@ int main(int argc, char *argv[])
|
266 | 267 | gid = pw->pw_gid;
|
267 | 268 | endpwent();
|
268 | 269 | }
|
| 270 | + } else if (strcmp(argv[i], "--group") == 0) { |
| 271 | + i++; |
| 272 | + if (i == argc || *argv[i] == '-') { |
| 273 | + msg(LOG_ERR, "group takes an argument"); |
| 274 | + exit(1); |
| 275 | + } |
| 276 | + if (isdigit(*argv[i])) { |
| 277 | + errno = 0; |
| 278 | + gid = strtol(argv[i], NULL, 10); |
| 279 | + if (errno) { |
| 280 | + msg(LOG_ERR, |
| 281 | + "Error converting group value"); |
| 282 | + exit(1); |
| 283 | + } |
| 284 | + } else { |
| 285 | + struct group *gr = getgrnam(argv[i]); |
| 286 | + if (gr == NULL) { |
| 287 | + msg(LOG_ERR, "group %s is unknown", |
| 288 | + argv[i]); |
| 289 | + exit(1); |
| 290 | + } |
| 291 | + gid = gr->gr_gid; |
| 292 | + endgrent(); |
| 293 | + } |
269 | 294 | } else if (strcmp(argv[i], "--no-details") == 0) {
|
270 | 295 | details = 0;
|
271 | 296 | } else {
|
|
0 commit comments