static int my_parser(struct lxc_arguments *args, int c, char *arg)
{
- char **it;
- char *del;
int ret;
switch (c) {
case 's':
namespace_flags = 0;
- /* The identifiers for namespaces used with lxc-attach as given
- * on the manpage do not align with the standard identifiers.
- * This affects network, mount, and uts namespaces. The standard
- * identifiers are: "mnt", "uts", and "net" whereas lxc-attach
- * uses "MOUNT", "UTSNAME", and "NETWORK". So let's use some
- * cheap memmove()s to replace them by their standard
- * identifiers. Let's illustrate this with an example:
- * Assume the string:
- *
- * "IPC|MOUNT|PID"
- *
- * then we memmove()
- *
- * dest: del + 1 == OUNT|PID
- * src: del + 3 == NT|PID
- */
- while ((del = strstr(arg, "MOUNT")))
- memmove(del + 1, del + 3, strlen(del) - 2);
-
- for (it = (char *[]){"NETWORK", "UTSNAME", NULL}; it && *it; it++)
- while ((del = strstr(arg, *it)))
- memmove(del + 3, del + 7, strlen(del) - 6);
+ if (lxc_namespace_2_std_identifiers(arg) < 0)
+ return -1;
ret = lxc_fill_namespace_flags(arg, &namespace_flags);
if (ret)
return -1;
+
/* -s implies -e */
lxc_fill_elevated_privileges(NULL, &elevated_privileges);
break;