@@ -134,11 +134,11 @@ bool VlanMgr::setHostVlanAdminState(int vlan_id, const string &admin_status)
134
134
135
135
// The command should be generated as:
136
136
// /sbin/ip link set Vlan{{vlan_id}} {{admin_status}}
137
- const std::string cmds = std::string ( " " )
138
- + IP_CMD + " link set " + VLAN_PREFIX + std::to_string (vlan_id) + " " + admin_status;
137
+ ostringstream cmds;
138
+ cmds << IP_CMD " link set " VLAN_PREFIX + std::to_string (vlan_id) + " " << shellquote ( admin_status) ;
139
139
140
140
std::string res;
141
- EXEC_WITH_ERROR_THROW (cmds, res);
141
+ EXEC_WITH_ERROR_THROW (cmds. str () , res);
142
142
143
143
return true ;
144
144
}
@@ -177,14 +177,14 @@ bool VlanMgr::addHostVlanMember(int vlan_id, const string &port_alias, const str
177
177
// /bin/bash -c "/sbin/ip link set {{port_alias}} master Bridge &&
178
178
// /sbin/bridge vlan del vid 1 dev {{ port_alias }} &&
179
179
// /sbin/bridge vlan add vid {{vlan_id}} dev {{port_alias}} {{tagging_mode}}"
180
- const std::string cmds = std::string ( " " )
181
- + BASH_CMD + " -c \" "
182
- + IP_CMD + " link set " + port_alias + " master " + DOT1Q_BRIDGE_NAME + " && "
183
- + BRIDGE_CMD + " vlan del vid " + DEFAULT_VLAN_ID + " dev " + port_alias + " && "
184
- + BRIDGE_CMD + " vlan add vid " + std::to_string (vlan_id) + " dev " + port_alias + " " + tagging_cmd + " \" " ;
180
+ ostringstream cmds, inner;
181
+ inner << IP_CMD " link set " << shellquote (port_alias) << " master " DOT1Q_BRIDGE_NAME " && "
182
+ BRIDGE_CMD " vlan del vid " DEFAULT_VLAN_ID " dev " << shellquote (port_alias) << " && "
183
+ BRIDGE_CMD " vlan add vid " + std::to_string (vlan_id) + " dev " << shellquote ( port_alias) << " " + tagging_cmd;
184
+ cmds << BASH_CMD " -c " << shellquote (inner. str ()) ;
185
185
186
186
std::string res;
187
- EXEC_WITH_ERROR_THROW (cmds, res);
187
+ EXEC_WITH_ERROR_THROW (cmds. str () , res);
188
188
189
189
return true ;
190
190
}
@@ -202,17 +202,17 @@ bool VlanMgr::removeHostVlanMember(int vlan_id, const string &port_alias)
202
202
// else exit $ret; fi )'
203
203
204
204
// When port is not member of any VLAN, it shall be detached from Dot1Q bridge!
205
- const std::string cmds = std::string ( " " )
206
- + BASH_CMD + " -c \' "
207
- + BRIDGE_CMD + " vlan del vid " + std::to_string (vlan_id) + " dev " + port_alias + " && ( "
208
- + BRIDGE_CMD + " vlan show dev " + port_alias + " | "
209
- + GREP_CMD + " -q None; ret=$?; if [ $ret -eq 0 ]; then "
210
- + IP_CMD + " link set " + port_alias + " nomaster ; "
211
- + " elif [ $ret -eq 1 ]; then exit 0; "
212
- + " else exit $ret; fi ) \' " ;
205
+ ostringstream cmds, inner;
206
+ inner << BRIDGE_CMD " vlan del vid " + std::to_string (vlan_id) + " dev " << shellquote (port_alias) << " && ( "
207
+ BRIDGE_CMD " vlan show dev " << shellquote (port_alias) << " | "
208
+ GREP_CMD " -q None; ret=$?; if [ $ret -eq 0 ]; then "
209
+ IP_CMD " link set " << shellquote (port_alias) << " nomaster; "
210
+ " elif [ $ret -eq 1 ]; then exit 0 ; "
211
+ " else exit $ret; fi ) " ;
212
+ cmds << BASH_CMD " -c " << shellquote (cmds. str ()) ;
213
213
214
214
std::string res;
215
- EXEC_WITH_ERROR_THROW (cmds, res);
215
+ EXEC_WITH_ERROR_THROW (cmds. str () , res);
216
216
217
217
return true ;
218
218
}
0 commit comments