... | ... |
@@ -1030,194 +1030,208 @@ struct lsig_attrib { |
1030 | 1030 |
/* TODO: rework this */ |
1031 | 1031 |
static int lsigattribs(char *attribs, struct cli_lsig_tdb *tdb) |
1032 | 1032 |
{ |
1033 |
- struct lsig_attrib attrtab[] = { |
|
1034 |
-#define ATTRIB_TOKENS 9 |
|
1035 |
- { "Target", CLI_TDB_UINT, (void **) &tdb->target }, |
|
1036 |
- { "Engine", CLI_TDB_RANGE, (void **) &tdb->engine }, |
|
1033 |
+ struct lsig_attrib attrtab[] = { |
|
1034 |
+#define ATTRIB_TOKENS 9 |
|
1035 |
+ { "Target", CLI_TDB_UINT, (void **) &tdb->target }, |
|
1036 |
+ { "Engine", CLI_TDB_RANGE, (void **) &tdb->engine }, |
|
1037 | 1037 |
|
1038 |
- { "FileSize", CLI_TDB_RANGE, (void **) &tdb->filesize }, |
|
1039 |
- { "EntryPoint", CLI_TDB_RANGE, (void **) &tdb->ep }, |
|
1040 |
- { "NumberOfSections", CLI_TDB_RANGE, (void **) &tdb->nos }, |
|
1038 |
+ { "FileSize", CLI_TDB_RANGE, (void **) &tdb->filesize }, |
|
1039 |
+ { "EntryPoint", CLI_TDB_RANGE, (void **) &tdb->ep }, |
|
1040 |
+ { "NumberOfSections", CLI_TDB_RANGE, (void **) &tdb->nos }, |
|
1041 | 1041 |
|
1042 |
- { "IconGroup1", CLI_TDB_STR, (void **) &tdb->icongrp1 }, |
|
1043 |
- { "IconGroup2", CLI_TDB_STR, (void **) &tdb->icongrp2 }, |
|
1042 |
+ { "IconGroup1", CLI_TDB_STR, (void **) &tdb->icongrp1 }, |
|
1043 |
+ { "IconGroup2", CLI_TDB_STR, (void **) &tdb->icongrp2 }, |
|
1044 | 1044 |
|
1045 |
- { "Container", CLI_TDB_FTYPE, (void **) &tdb->container }, |
|
1046 |
- { "HandlerType", CLI_TDB_FTYPE, (void **) &tdb->handlertype }, |
|
1045 |
+ { "Container", CLI_TDB_FTYPE, (void **) &tdb->container }, |
|
1046 |
+ { "HandlerType", CLI_TDB_FTYPE, (void **) &tdb->handlertype }, |
|
1047 | 1047 |
/* |
1048 |
- { "SectOff", CLI_TDB_RANGE2, (void **) &tdb->sectoff }, |
|
1049 |
- { "SectRVA", CLI_TDB_RANGE2, (void **) &tdb->sectrva }, |
|
1050 |
- { "SectVSZ", CLI_TDB_RANGE2, (void **) &tdb->sectvsz }, |
|
1051 |
- { "SectRAW", CLI_TDB_RANGE2, (void **) &tdb->sectraw }, |
|
1052 |
- { "SectRSZ", CLI_TDB_RANGE2, (void **) &tdb->sectrsz }, |
|
1053 |
- { "SectURVA", CLI_TDB_RANGE2, (void **) &tdb->secturva }, |
|
1054 |
- { "SectUVSZ", CLI_TDB_RANGE2, (void **) &tdb->sectuvsz }, |
|
1055 |
- { "SectURAW", CLI_TDB_RANGE2, (void **) &tdb->secturaw }, |
|
1056 |
- { "SectURSZ", CLI_TDB_RANGE2, (void **) &tdb->sectursz }, |
|
1048 |
+ { "SectOff", CLI_TDB_RANGE2, (void **) &tdb->sectoff }, |
|
1049 |
+ { "SectRVA", CLI_TDB_RANGE2, (void **) &tdb->sectrva }, |
|
1050 |
+ { "SectVSZ", CLI_TDB_RANGE2, (void **) &tdb->sectvsz }, |
|
1051 |
+ { "SectRAW", CLI_TDB_RANGE2, (void **) &tdb->sectraw }, |
|
1052 |
+ { "SectRSZ", CLI_TDB_RANGE2, (void **) &tdb->sectrsz }, |
|
1053 |
+ { "SectURVA", CLI_TDB_RANGE2, (void **) &tdb->secturva }, |
|
1054 |
+ { "SectUVSZ", CLI_TDB_RANGE2, (void **) &tdb->sectuvsz }, |
|
1055 |
+ { "SectURAW", CLI_TDB_RANGE2, (void **) &tdb->secturaw }, |
|
1056 |
+ { "SectURSZ", CLI_TDB_RANGE2, (void **) &tdb->sectursz }, |
|
1057 | 1057 |
*/ |
1058 |
- { NULL, 0, NULL, } |
|
1059 |
- }; |
|
1060 |
- struct lsig_attrib *apt; |
|
1061 |
- char *tokens[ATTRIB_TOKENS], *pt, *pt2; |
|
1062 |
- unsigned int v1, v2, v3, i, j, tokens_count, have_newext = 0; |
|
1063 |
- uint32_t cnt, off[ATTRIB_TOKENS]; |
|
1058 |
+ { NULL, 0, NULL, } |
|
1059 |
+ }; |
|
1060 |
+ struct lsig_attrib *apt; |
|
1061 |
+ char *tokens[ATTRIB_TOKENS], *pt, *pt2; |
|
1062 |
+ unsigned int v1, v2, v3, i, j, tokens_count, have_newext = 0; |
|
1063 |
+ uint32_t cnt, off[ATTRIB_TOKENS]; |
|
1064 | 1064 |
|
1065 | 1065 |
|
1066 | 1066 |
tokens_count = cli_strtokenize(attribs, ',', ATTRIB_TOKENS, (const char **) tokens); |
1067 | 1067 |
|
1068 | 1068 |
for(i = 0; i < tokens_count; i++) { |
1069 |
- if(!(pt = strchr(tokens[i], ':'))) { |
|
1070 |
- cli_errmsg("lsigattribs: Incorrect format of attribute '%s'\n", tokens[i]); |
|
1071 |
- return -1; |
|
1072 |
- } |
|
1073 |
- *pt++ = 0; |
|
1069 |
+ if(!(pt = strchr(tokens[i], ':'))) { |
|
1070 |
+ cli_errmsg("lsigattribs: Incorrect format of attribute '%s'\n", tokens[i]); |
|
1071 |
+ return -1; |
|
1072 |
+ } |
|
1073 |
+ *pt++ = 0; |
|
1074 | 1074 |
|
1075 |
- apt = NULL; |
|
1076 |
- for(j = 0; attrtab[j].name; j++) { |
|
1077 |
- if(!strcmp(attrtab[j].name, tokens[i])) { |
|
1078 |
- apt = &attrtab[j]; |
|
1079 |
- break; |
|
1080 |
- } |
|
1081 |
- } |
|
1075 |
+ apt = NULL; |
|
1076 |
+ for(j = 0; attrtab[j].name; j++) { |
|
1077 |
+ if(!strcmp(attrtab[j].name, tokens[i])) { |
|
1078 |
+ apt = &attrtab[j]; |
|
1079 |
+ break; |
|
1080 |
+ } |
|
1081 |
+ } |
|
1082 | 1082 |
|
1083 |
- if(!apt) { |
|
1084 |
- cli_dbgmsg("lsigattribs: Unknown attribute name '%s'\n", tokens[i]); |
|
1085 |
- return 1; |
|
1086 |
- } |
|
1083 |
+ if(!apt) { |
|
1084 |
+ cli_dbgmsg("lsigattribs: Unknown attribute name '%s'\n", tokens[i]); |
|
1085 |
+ return 1; |
|
1086 |
+ } |
|
1087 | 1087 |
|
1088 |
- if(!strcmp(apt->name, "Engine")) { |
|
1089 |
- if(i) { |
|
1090 |
- cli_errmsg("lsigattribs: For backward compatibility the Engine attribute must be on the first position\n"); |
|
1091 |
- return -1; |
|
1092 |
- } |
|
1093 |
- } else if(strcmp(apt->name, "Target")) |
|
1094 |
- have_newext = 1; |
|
1088 |
+ if(!strcmp(apt->name, "Engine")) { |
|
1089 |
+ if(i) { |
|
1090 |
+ cli_errmsg("lsigattribs: For backward compatibility the Engine attribute must be on the first position\n"); |
|
1091 |
+ return -1; |
|
1092 |
+ } |
|
1093 |
+ } else if(strcmp(apt->name, "Target")) { |
|
1094 |
+ have_newext = 1; |
|
1095 |
+ } |
|
1095 | 1096 |
|
1096 |
- switch(apt->type) { |
|
1097 |
- case CLI_TDB_UINT: |
|
1098 |
- if(!cli_isnumber(pt)) { |
|
1099 |
- cli_errmsg("lsigattribs: Invalid argument for %s\n", tokens[i]); |
|
1100 |
- return -1; |
|
1101 |
- } |
|
1102 |
- off[i] = cnt = tdb->cnt[CLI_TDB_UINT]++; |
|
1103 |
- tdb->val = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->val, tdb->cnt[CLI_TDB_UINT] * sizeof(uint32_t)); |
|
1104 |
- if(!tdb->val) { |
|
1105 |
- tdb->cnt[CLI_TDB_UINT] = 0; |
|
1106 |
- return -1; |
|
1107 |
- } |
|
1108 |
- tdb->val[cnt] = atoi(pt); |
|
1109 |
- break; |
|
1097 |
+ switch(apt->type) { |
|
1098 |
+ case CLI_TDB_UINT: |
|
1099 |
+ if(!cli_isnumber(pt)) { |
|
1100 |
+ cli_errmsg("lsigattribs: Invalid argument for %s\n", tokens[i]); |
|
1101 |
+ return -1; |
|
1102 |
+ } |
|
1110 | 1103 |
|
1111 |
- case CLI_TDB_FTYPE: |
|
1112 |
- if((v1 = cli_ftcode(pt)) == CL_TYPE_ERROR) { |
|
1113 |
- cli_dbgmsg("lsigattribs: Unknown file type in %s\n", tokens[i]); |
|
1114 |
- return 1; /* skip */ |
|
1115 |
- } |
|
1116 |
- off[i] = cnt = tdb->cnt[CLI_TDB_UINT]++; |
|
1117 |
- tdb->val = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->val, tdb->cnt[CLI_TDB_UINT] * sizeof(uint32_t)); |
|
1118 |
- if(!tdb->val) { |
|
1119 |
- tdb->cnt[CLI_TDB_UINT] = 0; |
|
1120 |
- return -1; |
|
1121 |
- } |
|
1122 |
- tdb->val[cnt] = v1; |
|
1123 |
- break; |
|
1104 |
+ off[i] = cnt = tdb->cnt[CLI_TDB_UINT]++; |
|
1105 |
+ tdb->val = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->val, tdb->cnt[CLI_TDB_UINT] * sizeof(uint32_t)); |
|
1106 |
+ if(!tdb->val) { |
|
1107 |
+ tdb->cnt[CLI_TDB_UINT] = 0; |
|
1108 |
+ return -1; |
|
1109 |
+ } |
|
1124 | 1110 |
|
1125 |
- case CLI_TDB_RANGE: |
|
1126 |
- if(!(pt2 = strchr(pt, '-'))) { |
|
1127 |
- cli_errmsg("lsigattribs: Incorrect parameters in '%s'\n", tokens[i]); |
|
1128 |
- return -1; |
|
1129 |
- } |
|
1130 |
- *pt2++ = 0; |
|
1131 |
- off[i] = cnt = tdb->cnt[CLI_TDB_RANGE]; |
|
1132 |
- tdb->cnt[CLI_TDB_RANGE] += 2; |
|
1133 |
- tdb->range = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->range, tdb->cnt[CLI_TDB_RANGE] * sizeof(uint32_t)); |
|
1134 |
- if(!tdb->range) { |
|
1135 |
- tdb->cnt[CLI_TDB_RANGE] = 0; |
|
1136 |
- return -1; |
|
1137 |
- } |
|
1138 |
- if(!cli_isnumber(pt) || !cli_isnumber(pt2)) { |
|
1139 |
- cli_errmsg("lsigattribs: Invalid argument for %s\n", tokens[i]); |
|
1140 |
- return -1; |
|
1141 |
- } |
|
1142 |
- tdb->range[cnt] = atoi(pt); |
|
1143 |
- tdb->range[cnt + 1] = atoi(pt2); |
|
1144 |
- break; |
|
1111 |
+ tdb->val[cnt] = atoi(pt); |
|
1112 |
+ break; |
|
1145 | 1113 |
|
1146 |
- case CLI_TDB_RANGE2: |
|
1147 |
- if(!strchr(pt, '-') || !strchr(pt, '.')) { |
|
1148 |
- cli_errmsg("lsigattribs: Incorrect parameters in '%s'\n", tokens[i]); |
|
1149 |
- return -1; |
|
1150 |
- } |
|
1151 |
- off[i] = cnt = tdb->cnt[CLI_TDB_RANGE]; |
|
1152 |
- tdb->cnt[CLI_TDB_RANGE] += 3; |
|
1153 |
- tdb->range = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->range, tdb->cnt[CLI_TDB_RANGE] * sizeof(uint32_t)); |
|
1154 |
- if(!tdb->range) { |
|
1155 |
- tdb->cnt[CLI_TDB_RANGE] = 0; |
|
1156 |
- return -1; |
|
1157 |
- } |
|
1158 |
- if(sscanf(pt, "%u.%u-%u", &v1, &v2, &v3) != 3) { |
|
1159 |
- cli_errmsg("lsigattribs: Can't parse parameters in '%s'\n", tokens[i]); |
|
1160 |
- return -1; |
|
1161 |
- } |
|
1162 |
- tdb->range[cnt] = (uint32_t) v1; |
|
1163 |
- tdb->range[cnt + 1] = (uint32_t) v2; |
|
1164 |
- tdb->range[cnt + 2] = (uint32_t) v3; |
|
1165 |
- break; |
|
1114 |
+ case CLI_TDB_FTYPE: |
|
1115 |
+ if((v1 = cli_ftcode(pt)) == CL_TYPE_ERROR) { |
|
1116 |
+ cli_dbgmsg("lsigattribs: Unknown file type in %s\n", tokens[i]); |
|
1117 |
+ return 1; /* skip */ |
|
1118 |
+ } |
|
1166 | 1119 |
|
1167 |
- case CLI_TDB_STR: |
|
1168 |
- off[i] = cnt = tdb->cnt[CLI_TDB_STR]; |
|
1169 |
- tdb->cnt[CLI_TDB_STR] += strlen(pt) + 1; |
|
1170 |
- tdb->str = (char *) mpool_realloc2(tdb->mempool, tdb->str, tdb->cnt[CLI_TDB_STR] * sizeof(char)); |
|
1171 |
- if(!tdb->str) { |
|
1172 |
- cli_errmsg("lsigattribs: Can't allocate memory for tdb->str\n"); |
|
1173 |
- return -1; |
|
1174 |
- } |
|
1175 |
- memcpy(&tdb->str[cnt], pt, strlen(pt)); |
|
1176 |
- tdb->str[tdb->cnt[CLI_TDB_STR] - 1] = 0; |
|
1177 |
- break; |
|
1120 |
+ off[i] = cnt = tdb->cnt[CLI_TDB_UINT]++; |
|
1121 |
+ tdb->val = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->val, tdb->cnt[CLI_TDB_UINT] * sizeof(uint32_t)); |
|
1122 |
+ if(!tdb->val) { |
|
1123 |
+ tdb->cnt[CLI_TDB_UINT] = 0; |
|
1124 |
+ return -1; |
|
1125 |
+ } |
|
1178 | 1126 |
|
1179 |
- default: |
|
1180 |
- /* All known TDB types handled above, skip unknown */ |
|
1181 |
- cli_dbgmsg("lsigattribs: Unknown attribute type '%u'\n", apt->type); |
|
1182 |
- return 1; /* +1 = skip */ |
|
1183 |
- } |
|
1127 |
+ tdb->val[cnt] = v1; |
|
1128 |
+ break; |
|
1129 |
+ |
|
1130 |
+ case CLI_TDB_RANGE: |
|
1131 |
+ if(!(pt2 = strchr(pt, '-'))) { |
|
1132 |
+ cli_errmsg("lsigattribs: Incorrect parameters in '%s'\n", tokens[i]); |
|
1133 |
+ return -1; |
|
1134 |
+ } |
|
1135 |
+ |
|
1136 |
+ *pt2++ = 0; |
|
1137 |
+ off[i] = cnt = tdb->cnt[CLI_TDB_RANGE]; |
|
1138 |
+ tdb->cnt[CLI_TDB_RANGE] += 2; |
|
1139 |
+ tdb->range = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->range, tdb->cnt[CLI_TDB_RANGE] * sizeof(uint32_t)); |
|
1140 |
+ if(!tdb->range) { |
|
1141 |
+ tdb->cnt[CLI_TDB_RANGE] = 0; |
|
1142 |
+ return -1; |
|
1143 |
+ } |
|
1144 |
+ |
|
1145 |
+ if(!cli_isnumber(pt) || !cli_isnumber(pt2)) { |
|
1146 |
+ cli_errmsg("lsigattribs: Invalid argument for %s\n", tokens[i]); |
|
1147 |
+ return -1; |
|
1148 |
+ } |
|
1149 |
+ |
|
1150 |
+ tdb->range[cnt] = atoi(pt); |
|
1151 |
+ tdb->range[cnt + 1] = atoi(pt2); |
|
1152 |
+ break; |
|
1153 |
+ |
|
1154 |
+ case CLI_TDB_RANGE2: |
|
1155 |
+ if(!strchr(pt, '-') || !strchr(pt, '.')) { |
|
1156 |
+ cli_errmsg("lsigattribs: Incorrect parameters in '%s'\n", tokens[i]); |
|
1157 |
+ return -1; |
|
1158 |
+ } |
|
1159 |
+ |
|
1160 |
+ off[i] = cnt = tdb->cnt[CLI_TDB_RANGE]; |
|
1161 |
+ tdb->cnt[CLI_TDB_RANGE] += 3; |
|
1162 |
+ tdb->range = (uint32_t *) mpool_realloc2(tdb->mempool, tdb->range, tdb->cnt[CLI_TDB_RANGE] * sizeof(uint32_t)); |
|
1163 |
+ if(!tdb->range) { |
|
1164 |
+ tdb->cnt[CLI_TDB_RANGE] = 0; |
|
1165 |
+ return -1; |
|
1166 |
+ } |
|
1167 |
+ |
|
1168 |
+ if(sscanf(pt, "%u.%u-%u", &v1, &v2, &v3) != 3) { |
|
1169 |
+ cli_errmsg("lsigattribs: Can't parse parameters in '%s'\n", tokens[i]); |
|
1170 |
+ return -1; |
|
1171 |
+ } |
|
1172 |
+ |
|
1173 |
+ tdb->range[cnt] = (uint32_t) v1; |
|
1174 |
+ tdb->range[cnt + 1] = (uint32_t) v2; |
|
1175 |
+ tdb->range[cnt + 2] = (uint32_t) v3; |
|
1176 |
+ break; |
|
1177 |
+ |
|
1178 |
+ case CLI_TDB_STR: |
|
1179 |
+ off[i] = cnt = tdb->cnt[CLI_TDB_STR]; |
|
1180 |
+ tdb->cnt[CLI_TDB_STR] += strlen(pt) + 1; |
|
1181 |
+ tdb->str = (char *) mpool_realloc2(tdb->mempool, tdb->str, tdb->cnt[CLI_TDB_STR] * sizeof(char)); |
|
1182 |
+ if(!tdb->str) { |
|
1183 |
+ cli_errmsg("lsigattribs: Can't allocate memory for tdb->str\n"); |
|
1184 |
+ return -1; |
|
1185 |
+ } |
|
1186 |
+ memcpy(&tdb->str[cnt], pt, strlen(pt)); |
|
1187 |
+ tdb->str[tdb->cnt[CLI_TDB_STR] - 1] = 0; |
|
1188 |
+ break; |
|
1189 |
+ |
|
1190 |
+ default: |
|
1191 |
+ /* All known TDB types handled above, skip unknown */ |
|
1192 |
+ cli_dbgmsg("lsigattribs: Unknown attribute type '%u'\n", apt->type); |
|
1193 |
+ return 1; /* +1 = skip */ |
|
1194 |
+ } |
|
1184 | 1195 |
} |
1185 | 1196 |
|
1186 | 1197 |
if(!i) { |
1187 |
- cli_errmsg("lsigattribs: Empty TDB\n"); |
|
1188 |
- return -1; |
|
1198 |
+ cli_errmsg("lsigattribs: Empty TDB\n"); |
|
1199 |
+ return -1; |
|
1189 | 1200 |
} |
1190 | 1201 |
|
1191 | 1202 |
for(i = 0; i < tokens_count; i++) { |
1192 |
- for(j = 0; attrtab[j].name; j++) { |
|
1193 |
- if(!strcmp(attrtab[j].name, tokens[i])) { |
|
1194 |
- apt = &attrtab[j]; |
|
1195 |
- break; |
|
1196 |
- } |
|
1197 |
- } |
|
1198 |
- if(!apt) |
|
1199 |
- continue; |
|
1200 |
- switch(apt->type) { |
|
1201 |
- case CLI_TDB_UINT: |
|
1202 |
- case CLI_TDB_FTYPE: |
|
1203 |
- *apt->pt = (uint32_t *) &tdb->val[off[i]]; |
|
1204 |
- break; |
|
1203 |
+ for(j = 0; attrtab[j].name; j++) { |
|
1204 |
+ if(!strcmp(attrtab[j].name, tokens[i])) { |
|
1205 |
+ apt = &attrtab[j]; |
|
1206 |
+ break; |
|
1207 |
+ } |
|
1208 |
+ } |
|
1205 | 1209 |
|
1206 |
- case CLI_TDB_RANGE: |
|
1207 |
- case CLI_TDB_RANGE2: |
|
1208 |
- *apt->pt = (uint32_t *) &tdb->range[off[i]]; |
|
1209 |
- break; |
|
1210 |
+ if(!apt) |
|
1211 |
+ continue; |
|
1210 | 1212 |
|
1211 |
- case CLI_TDB_STR: |
|
1212 |
- *apt->pt = (char *) &tdb->str[off[i]]; |
|
1213 |
- break; |
|
1214 |
- } |
|
1213 |
+ switch(apt->type) { |
|
1214 |
+ case CLI_TDB_UINT: |
|
1215 |
+ case CLI_TDB_FTYPE: |
|
1216 |
+ *apt->pt = (uint32_t *) &tdb->val[off[i]]; |
|
1217 |
+ break; |
|
1218 |
+ |
|
1219 |
+ case CLI_TDB_RANGE: |
|
1220 |
+ case CLI_TDB_RANGE2: |
|
1221 |
+ *apt->pt = (uint32_t *) &tdb->range[off[i]]; |
|
1222 |
+ break; |
|
1223 |
+ |
|
1224 |
+ case CLI_TDB_STR: |
|
1225 |
+ *apt->pt = (char *) &tdb->str[off[i]]; |
|
1226 |
+ break; |
|
1227 |
+ } |
|
1215 | 1228 |
} |
1216 | 1229 |
|
1217 | 1230 |
if(have_newext && (!tdb->engine || tdb->engine[0] < 51)) { |
1218 |
- cli_errmsg("lsigattribs: For backward compatibility all signatures using new attributes must have the Engine attribute present and set to min_level of at least 51 (0.96)\n"); |
|
1219 |
- return -1; |
|
1231 |
+ cli_errmsg("lsigattribs: For backward compatibility all signatures using new attributes must have the Engine attribute present and set to min_level of at least 51 (0.96)\n"); |
|
1232 |
+ return -1; |
|
1220 | 1233 |
} |
1234 |
+ |
|
1221 | 1235 |
return 0; |
1222 | 1236 |
} |
1223 | 1237 |
|
... | ... |
@@ -1419,49 +1433,53 @@ static int load_oneldb(char *buffer, int chkpua, struct cl_engine *engine, unsig |
1419 | 1419 |
|
1420 | 1420 |
static int cli_loadldb(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, struct cli_dbio *dbio, const char *dbname) |
1421 | 1421 |
{ |
1422 |
- char buffer[CLI_DEFAULT_LSIG_BUFSIZE + 1], *buffer_cpy = NULL; |
|
1423 |
- unsigned int line = 0, sigs = 0; |
|
1424 |
- int ret; |
|
1425 |
- |
|
1422 |
+ char buffer[CLI_DEFAULT_LSIG_BUFSIZE + 1], *buffer_cpy = NULL; |
|
1423 |
+ unsigned int line = 0, sigs = 0; |
|
1424 |
+ int ret; |
|
1426 | 1425 |
|
1427 | 1426 |
if((ret = cli_initroots(engine, options))) |
1428 |
- return ret; |
|
1427 |
+ return ret; |
|
1429 | 1428 |
|
1430 |
- if(engine->ignored) |
|
1431 |
- if(!(buffer_cpy = cli_malloc(sizeof(buffer)))) { |
|
1432 |
- cli_errmsg("cli_loadldb: Can't allocate memory for buffer_cpy\n"); |
|
1433 |
- return CL_EMEM; |
|
1429 |
+ if(engine->ignored) { |
|
1430 |
+ if(!(buffer_cpy = cli_malloc(sizeof(buffer)))) { |
|
1431 |
+ cli_errmsg("cli_loadldb: Can't allocate memory for buffer_cpy\n"); |
|
1432 |
+ return CL_EMEM; |
|
1433 |
+ } |
|
1434 | 1434 |
} |
1435 |
+ |
|
1435 | 1436 |
while(cli_dbgets(buffer, sizeof(buffer), fs, dbio)) { |
1436 |
- line++; |
|
1437 |
- if(buffer[0] == '#') |
|
1438 |
- continue; |
|
1439 |
- sigs++; |
|
1440 |
- cli_chomp(buffer); |
|
1437 |
+ line++; |
|
1438 |
+ if(buffer[0] == '#') |
|
1439 |
+ continue; |
|
1441 | 1440 |
|
1442 |
- if(engine->ignored) |
|
1443 |
- strcpy(buffer_cpy, buffer); |
|
1444 |
- ret = load_oneldb(buffer, |
|
1445 |
- engine->pua_cats && (options & CL_DB_PUA_MODE) && (options & (CL_DB_PUA_INCLUDE | CL_DB_PUA_EXCLUDE)), |
|
1446 |
- engine, options, dbname, line, &sigs, 0, buffer_cpy, NULL); |
|
1447 |
- if (ret) |
|
1448 |
- break; |
|
1441 |
+ sigs++; |
|
1442 |
+ cli_chomp(buffer); |
|
1443 |
+ |
|
1444 |
+ if(engine->ignored) |
|
1445 |
+ strcpy(buffer_cpy, buffer); |
|
1446 |
+ |
|
1447 |
+ ret = load_oneldb(buffer, |
|
1448 |
+ engine->pua_cats && (options & CL_DB_PUA_MODE) && (options & (CL_DB_PUA_INCLUDE | CL_DB_PUA_EXCLUDE)), |
|
1449 |
+ engine, options, dbname, line, &sigs, 0, buffer_cpy, NULL); |
|
1450 |
+ if (ret) |
|
1451 |
+ break; |
|
1449 | 1452 |
} |
1453 |
+ |
|
1450 | 1454 |
if(engine->ignored) |
1451 |
- free(buffer_cpy); |
|
1455 |
+ free(buffer_cpy); |
|
1452 | 1456 |
|
1453 | 1457 |
if(!line) { |
1454 |
- cli_errmsg("Empty database file\n"); |
|
1455 |
- return CL_EMALFDB; |
|
1458 |
+ cli_errmsg("Empty database file\n"); |
|
1459 |
+ return CL_EMALFDB; |
|
1456 | 1460 |
} |
1457 | 1461 |
|
1458 | 1462 |
if(ret) { |
1459 |
- cli_errmsg("Problem parsing database at line %u\n", line); |
|
1460 |
- return ret; |
|
1463 |
+ cli_errmsg("Problem parsing database at line %u\n", line); |
|
1464 |
+ return ret; |
|
1461 | 1465 |
} |
1462 | 1466 |
|
1463 | 1467 |
if(signo) |
1464 |
- *signo += sigs; |
|
1468 |
+ *signo += sigs; |
|
1465 | 1469 |
|
1466 | 1470 |
return CL_SUCCESS; |
1467 | 1471 |
} |