1203 |
int |
int |
1204 |
ldap_recvkey (const char *host, const char *keyid, char *key, int maxkeylen) |
ldap_recvkey (const char *host, const char *keyid, char *key, int maxkeylen) |
1205 |
{ |
{ |
1206 |
FILE *inp; |
FILE *fp; |
|
DWORD n; |
|
1207 |
const char *s; |
const char *s; |
1208 |
char *ksprg = NULL, *p = NULL, *sep; |
char *ksprg = NULL, *p = NULL, *sep; |
1209 |
char temp[512], outf[512]; |
char inf[256], outf[256], buf[512]; |
1210 |
|
DWORD n; |
1211 |
int start_key = 0, failed = 0; |
int start_key = 0, failed = 0; |
1212 |
int rc = 0; |
int rc = 0; |
1213 |
|
|
1227 |
"%s: could not find LDAP keyserver module!", ksprg); |
"%s: could not find LDAP keyserver module!", ksprg); |
1228 |
rc = -1; |
rc = -1; |
1229 |
goto leave; |
goto leave; |
1230 |
} |
} |
1231 |
GetTempPath (sizeof (temp)-1, temp); |
get_temp_name (outf, sizeof (outf)-1, keyid); |
1232 |
_snprintf (outf, sizeof (outf)-1, "%s%s.out", temp, keyid); |
get_temp_name (inf, sizeof (inf)-1, NULL); |
1233 |
strcat (temp, keyid); |
fp = fopen (inf, "w+b"); |
1234 |
inp = fopen (temp, "w+b"); |
if (!fp) { |
1235 |
if (!inp) { |
log_box ("LDAP Keyserver Plugin", MB_ERR, "%s: %s", inf, |
|
log_box ("LDAP Keyserver Plugin", MB_ERR, "%s: %s", temp, |
|
1236 |
winpt_strerror (WPTERR_FILE_OPEN)); |
winpt_strerror (WPTERR_FILE_OPEN)); |
1237 |
rc = -1; |
rc = -1; |
1238 |
goto leave; |
goto leave; |
1239 |
} |
} |
1240 |
fprintf (inp, |
fprintf (fp, |
1241 |
"VERSION 1\n" |
"VERSION 1\n" |
1242 |
"PROGRAM 1.4.3-cvs\n" |
"PROGRAM 1.4.3-cvs\n" |
1243 |
"SCHEME ldap\n" |
"SCHEME ldap\n" |
1246 |
"\n" |
"\n" |
1247 |
"%s\n", |
"%s\n", |
1248 |
host? skip_type_prefix (host): "64.94.85.200", keyid); |
host? skip_type_prefix (host): "64.94.85.200", keyid); |
1249 |
fclose (inp); |
fclose (fp); |
1250 |
|
|
1251 |
p = new char[strlen (ksprg) + strlen (temp) + strlen (outf) + 32]; |
p = new char[strlen (ksprg) + strlen (inf) + strlen (outf) + 32]; |
1252 |
if (!p) |
if (!p) |
1253 |
BUG (NULL); |
BUG (NULL); |
1254 |
sprintf (p, "%s -o %s %s", ksprg, outf, temp); |
sprintf (p, "%s -o %s %s", ksprg, outf, inf); |
1255 |
if (spawn_application (p)) { |
if (spawn_application (p)) { |
1256 |
rc = -1; |
rc = -1; |
1257 |
goto leave; |
goto leave; |
1258 |
} |
} |
|
DeleteFile (temp); |
|
1259 |
|
|
1260 |
inp = fopen (outf, "rb"); |
fp = fopen (outf, "rb"); |
1261 |
if (!inp) { |
if (!fp) { |
1262 |
log_box ("LDAP Keyserver Plugin", MB_ERR, "%s: %s", outf, |
log_box ("LDAP Keyserver Plugin", MB_ERR, "%s: %s", outf, |
1263 |
winpt_strerror (WPTERR_FILE_OPEN)); |
winpt_strerror (WPTERR_FILE_OPEN)); |
1264 |
rc = -1; |
rc = -1; |
1265 |
goto leave; |
goto leave; |
1266 |
} |
} |
1267 |
memset (key, 0, maxkeylen); |
memset (key, 0, maxkeylen); |
1268 |
while (!feof (inp)) { |
while (!feof (fp)) { |
1269 |
s = fgets (temp, sizeof (temp)-1, inp); |
s = fgets (buf, sizeof (buf)-1, fp); |
1270 |
if (!s) |
if (!s) |
1271 |
break; |
break; |
1272 |
if (strstr (s, "KEY") && strstr (s, "FAILED")) { |
if (strstr (s, "KEY") && strstr (s, "FAILED")) { |
1279 |
} |
} |
1280 |
if (!start_key) |
if (!start_key) |
1281 |
continue; |
continue; |
1282 |
strcat (key, temp); |
strcat (key, buf); |
1283 |
maxkeylen -= strlen (temp); |
maxkeylen -= strlen (buf); |
1284 |
if (maxkeylen < 0 || (strstr (s, "KEY") && strstr (s, "END"))) |
if (maxkeylen < 0 || (strstr (s, "KEY") && strstr (s, "END"))) |
1285 |
break; |
break; |
1286 |
} |
} |
1287 |
fclose (inp); |
fclose (fp); |
1288 |
|
|
1289 |
leave: |
leave: |
1290 |
if (failed || !strlen (key)) |
if (failed || !strlen (key)) |
1291 |
rc = WPTERR_WINSOCK_RECVKEY; |
rc = WPTERR_WINSOCK_RECVKEY; |
1292 |
|
DeleteFile (inf); |
1293 |
DeleteFile (outf); |
DeleteFile (outf); |
1294 |
free_if_alloc (p); |
free_if_alloc (p); |
1295 |
free_if_alloc (ksprg); |
free_if_alloc (ksprg); |