| 1169 | } |
| 1170 | |
| 1171 | static void |
| 1172 | lomac_ifnet_create(struct ifnet *ifp, struct label *ifplabel) |
| 1173 | { |
| 1174 | char tifname[IFNAMSIZ], *p, *q; |
| 1175 | char tiflist[sizeof(trusted_interfaces)]; |
| 1176 | struct mac_lomac *dest; |
| 1177 | int len, grade; |
| 1178 | |
| 1179 | dest = SLOT(ifplabel); |
| 1180 | |
| 1181 | if (ifp->if_type == IFT_LOOP) { |
| 1182 | grade = MAC_LOMAC_TYPE_EQUAL; |
| 1183 | goto set; |
| 1184 | } |
| 1185 | |
| 1186 | if (trust_all_interfaces) { |
| 1187 | grade = MAC_LOMAC_TYPE_HIGH; |
| 1188 | goto set; |
| 1189 | } |
| 1190 | |
| 1191 | grade = MAC_LOMAC_TYPE_LOW; |
| 1192 | |
| 1193 | if (trusted_interfaces[0] == '\0' || |
| 1194 | !strvalid(trusted_interfaces, sizeof(trusted_interfaces))) |
| 1195 | goto set; |
| 1196 | |
| 1197 | bzero(tiflist, sizeof(tiflist)); |
| 1198 | for (p = trusted_interfaces, q = tiflist; *p != '\0'; p++, q++) |
| 1199 | if(*p != ' ' && *p != '\t') |
| 1200 | *q = *p; |
| 1201 | |
| 1202 | for (p = q = tiflist;; p++) { |
| 1203 | if (*p == ',' || *p == '\0') { |
| 1204 | len = p - q; |
| 1205 | if (len < IFNAMSIZ) { |
| 1206 | bzero(tifname, sizeof(tifname)); |
| 1207 | bcopy(q, tifname, len); |
| 1208 | if (strcmp(tifname, ifp->if_xname) == 0) { |
| 1209 | grade = MAC_LOMAC_TYPE_HIGH; |
| 1210 | break; |
| 1211 | } |
| 1212 | } |
| 1213 | else { |
| 1214 | *p = '\0'; |
| 1215 | printf("MAC/LOMAC warning: interface name " |
| 1216 | "\"%s\" is too long (must be < %d)\n", |
| 1217 | q, IFNAMSIZ); |
| 1218 | } |
| 1219 | if (*p == '\0') |
| 1220 | break; |
| 1221 | q = p + 1; |
| 1222 | } |
| 1223 | } |
| 1224 | set: |
| 1225 | lomac_set_single(dest, grade, 0); |
| 1226 | lomac_set_range(dest, grade, 0, grade, 0); |
| 1227 | } |
| 1228 |
nothing calls this directly
no test coverage detected