| 1102 | } |
| 1103 | |
| 1104 | static int |
| 1105 | rctl_rule_fully_specified(const struct rctl_rule *rule) |
| 1106 | { |
| 1107 | |
| 1108 | ASSERT_RACCT_ENABLED(); |
| 1109 | |
| 1110 | switch (rule->rr_subject_type) { |
| 1111 | case RCTL_SUBJECT_TYPE_UNDEFINED: |
| 1112 | return (0); |
| 1113 | case RCTL_SUBJECT_TYPE_PROCESS: |
| 1114 | if (rule->rr_subject.rs_proc == NULL) |
| 1115 | return (0); |
| 1116 | break; |
| 1117 | case RCTL_SUBJECT_TYPE_USER: |
| 1118 | if (rule->rr_subject.rs_uip == NULL) |
| 1119 | return (0); |
| 1120 | break; |
| 1121 | case RCTL_SUBJECT_TYPE_LOGINCLASS: |
| 1122 | if (rule->rr_subject.rs_loginclass == NULL) |
| 1123 | return (0); |
| 1124 | break; |
| 1125 | case RCTL_SUBJECT_TYPE_JAIL: |
| 1126 | if (rule->rr_subject.rs_prison_racct == NULL) |
| 1127 | return (0); |
| 1128 | break; |
| 1129 | default: |
| 1130 | panic("rctl_rule_fully_specified: unknown subject type %d", |
| 1131 | rule->rr_subject_type); |
| 1132 | } |
| 1133 | if (rule->rr_resource == RACCT_UNDEFINED) |
| 1134 | return (0); |
| 1135 | if (rule->rr_action == RCTL_ACTION_UNDEFINED) |
| 1136 | return (0); |
| 1137 | if (rule->rr_amount == RCTL_AMOUNT_UNDEFINED) |
| 1138 | return (0); |
| 1139 | if (rule->rr_per == RCTL_SUBJECT_TYPE_UNDEFINED) |
| 1140 | return (0); |
| 1141 | |
| 1142 | return (1); |
| 1143 | } |
| 1144 | |
| 1145 | static int |
| 1146 | rctl_string_to_rule(char *rulestr, struct rctl_rule **rulep) |
no test coverage detected