int CtdlHostAlias(char *fqdn) {
int config_lines;
int i;
- char buf[SIZ];
- char host[SIZ], type[SIZ];
+ char buf[256];
+ char host[256], type[256];
if (fqdn == NULL) return(hostalias_nomatch);
if (strlen(fqdn) == 0) return(hostalias_nomatch);
config_lines = num_tokens(inetcfg, '\n');
for (i=0; i<config_lines; ++i) {
- extract_token(buf, inetcfg, i, '\n');
- extract_token(host, buf, 0, '|');
- extract_token(type, buf, 1, '|');
+ extract_token(buf, inetcfg, i, '\n', sizeof buf);
+ extract_token(host, buf, 0, '|', sizeof host);
+ extract_token(type, buf, 1, '|', sizeof type);
if ( (!strcasecmp(type, "localhost"))
&& (!strcasecmp(fqdn, host)))
msg->cm_format_type = FMT_RFC822; /* internet message */
msg->cm_fields['M'] = rfc822;
- lprintf(CTDL_DEBUG, "Unconverted RFC822 message length = %ld\n", (long)strlen(rfc822));
pos = 0;
done = 0;
msg->cm_fields['T'] = strdup(buf);
}
- lprintf(CTDL_DEBUG, "RFC822 length remaining after conversion = %ld\n",
- (long)strlen(rfc822));
return msg;
}
* the directory
*/
int IsDirectory(char *addr) {
- char domain[SIZ];
+ char domain[256];
int h;
- extract_token(domain, addr, 1, '@');
+ extract_token(domain, addr, 1, '@', sizeof domain);
striplt(domain);
h = CtdlHostAlias(domain);
- lprintf(CTDL_DEBUG, "IsDirectory(%s)\n", domain);
if ( (h == hostalias_localhost) || (h == hostalias_directory) ) {
- lprintf(CTDL_DEBUG, " ...yes\n");
return(1);
}
else {
- lprintf(CTDL_DEBUG, " ...no\n");
return(0);
}
}
* On success: returns 0, and Citadel address stored in 'target'
* On failure: returns nonzero
*/
-int CtdlDirectoryLookup(char *target, char *internet_addr) {
+int CtdlDirectoryLookup(char *target, char *internet_addr, size_t targbuflen) {
struct cdbdata *cdbrec;
char key[SIZ];
/* Dump it in there unchanged, just for kicks */
- strcpy(target, internet_addr);
+ safestrncpy(target, internet_addr, targbuflen);
/* Only do lookups for addresses with hostnames in them */
if (num_tokens(internet_addr, '@') != 2) return(-1);
directory_key(key, internet_addr);
cdbrec = cdb_fetch(CDB_DIRECTORY, key, strlen(key) );
if (cdbrec != NULL) {
- safestrncpy(target, cdbrec->ptr, SIZ);
+ safestrncpy(target, cdbrec->ptr, targbuflen);
cdb_free(cdbrec);
return(0);
}