+static void chgrp_error(const char *group, const char *target, const char *failed)
+{
+ ERROR("cannot set group %s for %s (%s: %d)\n",
+ group, target, failed, errno);
+}
+
+static void chgrp_target(struct blob_attr *bgroup, struct blob_attr *btarget)
+{
+ int ret = 0;
+ struct group *g = NULL;
+ const char *group = blobmsg_get_string(bgroup);
+ const char *target = blobmsg_get_string(btarget);
+
+ errno = 0;
+
+ g = getgrnam(group);
+ if (!g)
+ return chgrp_error(group, target, "getgrnam");
+
+ ret = chown(target, 0, g->gr_gid);
+ if (ret < 0)
+ return chgrp_error(group, target, "chown");
+}
+