|
1 | | -/* $NetBSD: user.c,v 1.135 2021/12/12 14:33:13 nia Exp $ */ |
| 1 | +/* $NetBSD: user.c,v 1.136 2026/03/17 17:37:50 christos Exp $ */ |
2 | 2 |
|
3 | 3 | /* |
4 | 4 | * Copyright (c) 1999 Alistair G. Crooks. All rights reserved. |
|
33 | 33 | #ifndef lint |
34 | 34 | __COPYRIGHT("@(#) Copyright (c) 1999\ |
35 | 35 | The NetBSD Foundation, Inc. All rights reserved."); |
36 | | -__RCSID("$NetBSD: user.c,v 1.135 2021/12/12 14:33:13 nia Exp $"); |
| 36 | +__RCSID("$NetBSD: user.c,v 1.136 2026/03/17 17:37:50 christos Exp $"); |
37 | 37 | #endif |
38 | 38 |
|
39 | 39 | #include <sys/types.h> |
@@ -2424,16 +2424,20 @@ groupmod(int argc, char **argv) |
2424 | 2424 | if (!is_local(*argv, _PATH_GROUP)) { |
2425 | 2425 | errx(EXIT_FAILURE, "Group `%s' must be a local group", *argv); |
2426 | 2426 | } |
2427 | | - if (newname != NULL && !valid_group(newname)) { |
2428 | | - warnx("Invalid group name `%s'", newname); |
| 2427 | + if (newname != NULL) { |
| 2428 | + if (!valid_group(newname)) |
| 2429 | + errx(EXIT_FAILURE, "Invalid group name `%s'", newname); |
| 2430 | + if (getgrnam(newname)) |
| 2431 | + errx(EXIT_FAILURE, "Can't rename group `%s' to `%s': " |
| 2432 | + "group `%s' already exists", |
| 2433 | + *argv, newname, newname); |
2429 | 2434 | } |
2430 | 2435 | cc = snprintf(buf, sizeof(buf), "%s:%s:%d:", |
2431 | | - (newname) ? newname : grp->gr_name, |
2432 | | - grp->gr_passwd, |
2433 | | - (gid < 0) ? grp->gr_gid : gid); |
2434 | | - for (cpp = grp->gr_mem ; *cpp && cc < sizeof(buf) ; cpp++) { |
| 2436 | + newname ? newname : grp->gr_name, grp->gr_passwd, |
| 2437 | + gid < 0 ? grp->gr_gid : gid); |
| 2438 | + for (cpp = grp->gr_mem; *cpp && cc < sizeof(buf); cpp++) { |
2435 | 2439 | cc += snprintf(&buf[cc], sizeof(buf) - cc, "%s%s", *cpp, |
2436 | | - (cpp[1] == NULL) ? "" : ","); |
| 2440 | + (cpp[1] == NULL) ? "" : ","); |
2437 | 2441 | } |
2438 | 2442 | cc += snprintf(&buf[cc], sizeof(buf) - cc, "\n"); |
2439 | 2443 | if (newname != NULL) |
|
0 commit comments