• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/sendmail/src/

Lines Matching refs:mci

16 SM_RCSID("@(#)$Id: mci.c,v 8.225 2013-11-22 20:51:56 ca Exp $")
72 ** mci -- the connection to cache.
79 mci_cache(mci)
80 register MCI *mci;
89 mcislot = mci_scan(mci);
96 if (mci->mci_host == NULL)
100 if (bitset(MCIF_CACHED, mci->mci_flags))
109 (void *)mci, mci->mci_host, (int) (mcislot - MciCache));
113 (unsigned long) mci, mci->mci_host,
116 *mcislot = mci;
117 mci->mci_flags |= MCIF_CACHED;
135 register MCI *mci;
156 mci = MciCache[i];
157 if (mci == NULL || mci->mci_state == MCIS_CLOSED)
162 if ((mci->mci_lastuse + MciCacheTimeout <= now ||
163 (mci->mci_mailer != NULL &&
164 mci->mci_mailer->m_maxdeliveries > 0 &&
165 mci->mci_deliveries + 1 >= mci->mci_mailer->m_maxdeliveries))&&
166 mci != savemci)
177 if (mci->mci_lastuse < (*bestmci)->mci_lastuse)
202 register MCI *mci;
205 mci = *mcislot;
206 if (mci == NULL)
209 if (mci->mci_host == NULL)
212 mci_unlock_host(mci);
216 (void *)mci, mci->mci_host, (int) (mcislot - MciCache),
221 (unsigned long) mci, mci->mci_host,
224 mci->mci_deliveries = 0;
227 message("Closing connection to %s", mci->mci_host);
229 mci->mci_flags &= ~MCIF_CACHED;
232 if (mci->mci_state != MCIS_CLOSED)
233 smtpquit(mci->mci_mailer, mci, &BlankEnvelope);
235 xla_host_end(mci->mci_host);
240 if (mci->mci_in != NULL)
241 (void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
242 if (mci->mci_out != NULL)
243 (void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
244 mci->mci_in = mci->mci_out = NULL;
245 mci->mci_state = MCIS_CLOSED;
246 mci->mci_exitstat = EX_OK;
247 mci->mci_errno = 0;
248 mci->mci_flags = 0;
250 mci->mci_retryrcpt = false;
251 mci->mci_tolist = NULL;
253 mci->mci_okrcpts = 0;
257 SM_FREE(mci->mci_status);
258 SM_FREE(mci->mci_rstatus);
259 SM_FREE(mci->mci_heloname);
260 mci_clear(mci);
261 if (mci->mci_rpool != NULL)
263 sm_rpool_free(mci->mci_rpool);
264 mci->mci_macro.mac_rpool = NULL;
265 mci->mci_rpool = NULL;
301 ** mci -- the connection to clear.
308 mci_clr_extensions(mci)
309 MCI *mci;
311 if (mci == NULL)
314 mci->mci_flags &= ~MCIF_EXTENS;
315 mci->mci_maxsize = 0;
316 mci->mci_min_by = 0;
318 mci->mci_saslcap = NULL;
323 ** MCI_CLEAR -- clear mci
326 ** mci -- the connection to clear.
333 mci_clear(mci)
334 MCI *mci;
336 if (mci == NULL)
339 mci->mci_maxsize = 0;
340 mci->mci_min_by = 0;
341 mci->mci_deliveries = 0;
343 if (bitset(MCIF_AUTHACT, mci->mci_flags))
344 sasl_dispose(&mci->mci_conn);
347 if (bitset(MCIF_TLSACT, mci->mci_flags) && mci->mci_ssl != NULL)
348 SM_SSL_FREE(mci->mci_ssl);
352 mci->mci_flags &= MCIF_CACHED;
353 mactabclear(&mci->mci_macro);
365 ** mci for this host (might be new).
373 register MCI *mci;
387 mci = &s->s_mci;
390 mci->mci_retryrcpt = false;
391 mci->mci_tolist = NULL;
393 mci->mci_okrcpts = 0;
395 mci->mci_flags &= ~MCIF_NOTSTICKY;
397 if (mci->mci_rpool == NULL)
398 mci->mci_rpool = sm_rpool_new_x(NULL);
400 if (mci->mci_macro.mac_rpool == NULL)
401 mci->mci_macro.mac_rpool = mci->mci_rpool;
408 if (mci->mci_host == NULL &&
409 (mci->mci_host = s->s_name) != NULL &&
410 !mci_load_persistent(mci))
415 mci->mci_exitstat = EX_TEMPFAIL;
416 mci->mci_state = MCIS_CLOSED;
417 mci->mci_statfile = NULL;
418 return mci;
424 host, m->m_name, mci->mci_state, mci->mci_flags,
425 mci->mci_exitstat, mci->mci_errno);
428 if (mci->mci_state == MCIS_OPEN)
431 (void) smtpprobe(mci);
434 if (mci->mci_state != MCIS_OPEN)
436 mci->mci_errno = 0;
437 mci->mci_exitstat = EX_OK;
438 mci->mci_state = MCIS_CLOSED;
443 /* (this should really be in the mci struct) */
446 (void) getpeername(sm_io_getinfo(mci->mci_in,
451 if (mci->mci_state == MCIS_CLOSED)
456 if (mci->mci_lastuse + MciInfoTimeout <= now)
458 mci->mci_lastuse = now;
459 mci->mci_errno = 0;
460 mci->mci_exitstat = EX_OK;
462 mci_clear(mci);
465 return mci;
474 ** mci -- the connection to close.
482 mci_close(mci, where)
483 MCI *mci;
488 if (mci == NULL)
491 if (mci->mci_out != NULL)
497 mci_dump(sm_debug_file(), mci, false);
500 (void) sm_io_close(mci->mci_out, SM_TIME_DEFAULT);
501 mci->mci_out = NULL;
503 if (mci->mci_in != NULL)
510 mci_dump(sm_debug_file(), mci, false);
512 (void) sm_io_close(mci->mci_in, SM_TIME_DEFAULT);
513 mci->mci_in = NULL;
515 mci->mci_state = MCIS_CLOSED;
525 ** mci (new).
532 register MCI *mci;
535 mci = (MCI *) sm_malloc_x(sizeof(*mci));
537 mci = (MCI *) sm_rpool_malloc_x(rpool, sizeof(*mci));
538 memset((char *) mci, '\0', sizeof(*mci));
539 mci->mci_rpool = sm_rpool_new_x(NULL);
540 mci->mci_macro.mac_rpool = mci->mci_rpool;
541 return mci;
559 register MCI *mci;
568 mci = &s->s_mci;
569 return mci->mci_state == MCIS_OPEN;
575 ** mci -- the MCI structure to set.
585 mci_setstat(mci, xstat, dstat, rstat)
586 MCI *mci;
593 mci->mci_exitstat = xstat;
595 SM_FREE(mci->mci_status);
597 mci->mci_status = sm_strdup_x(dstat);
599 SM_FREE(mci->mci_rstatus);
601 mci->mci_rstatus = sm_strdup_x(rstat);
608 ** mci -- the MCI structure to dump.
653 mci_dump(fp, mci, logit)
655 register MCI *mci;
664 (void) sm_snprintf(p, SPACELEFT(buf, p), "MCI@%p: ", (void *)mci);
666 if (mci == NULL)
671 (void) sm_snprintf(p, SPACELEFT(buf, p), "flags=%lx", mci->mci_flags);
683 if (mci->mci_flags != 0)
690 if (!bitset(f->mcif_bit, mci->mci_flags))
702 sep, mci->mci_errno, mci->mci_herrno,
703 mci->mci_exitstat, mci->mci_state, (int) mci->mci_pid, sep);
707 mci->mci_maxsize, mci->mci_phase,
708 mci->mci_mailer == NULL ? "NULL" : mci->mci_mailer->m_name,
713 mci->mci_status, mci->mci_rstatus, sep);
717 mci->mci_host, ctime(&mci->mci_lastuse));
761 ** mci -- containing the host we want to lock.
769 mci_lock_host(mci)
770 MCI *mci;
772 if (mci == NULL)
775 sm_dprintf("mci_lock_host: NULL mci\n");
782 return mci_lock_host_statfile(mci);
786 mci_lock_host_statfile(mci)
787 MCI *mci;
793 if (HostStatDir == NULL || mci->mci_host == NULL)
798 mci->mci_host);
800 if (mci_generate_persistent_path(mci->mci_host, fname, sizeof(fname),
806 mci->mci_host);
812 mci->mci_statfile = safefopen(fname, O_RDWR, FileMode,
815 if (mci->mci_statfile == NULL)
821 if (!lockfile(sm_io_getinfo(mci->mci_statfile, SM_IO_WHAT_FD, NULL),
827 (void) sm_io_close(mci->mci_statfile, SM_TIME_DEFAULT);
828 mci->mci_statfile = NULL;
833 if (tTd(56, 12) && mci->mci_statfile != NULL)
847 ** mci -- us.
854 mci_unlock_host(mci)
855 MCI *mci;
859 if (mci == NULL)
862 sm_dprintf("mci_unlock_host: NULL mci\n");
866 if (HostStatDir == NULL || mci->mci_host == NULL)
869 if (!SingleThreadDelivery && mci_lock_host_statfile(mci) == EX_TEMPFAIL)
878 mci_store_persistent(mci);
881 if (mci->mci_statfile != NULL)
883 (void) sm_io_close(mci->mci_statfile, SM_TIME_DEFAULT);
884 mci->mci_statfile = NULL;
896 ** mci -- the host/connection to load persistent info for.
904 mci_load_persistent(mci)
905 MCI *mci;
912 if (mci == NULL)
915 sm_dprintf("mci_load_persistent: NULL mci\n");
919 if (IgnoreHostStatus || HostStatDir == NULL || mci->mci_host == NULL)
923 if (SingleThreadDelivery && mci->mci_statfile != NULL)
928 mci->mci_host);
930 if (mci_generate_persistent_path(mci->mci_host, fname, sizeof(fname),
955 (void) mci_read_persistent(fp, mci);
971 ** mci -- the pointer to fill in.
986 mci_read_persistent(fp, mci)
988 register MCI *mci;
1001 if (mci == NULL)
1003 syserr("mci_read_persistent: NULL mci");
1009 sm_dprintf("mci_read_persistent: fp=%lx, mci=",
1013 SM_FREE(mci->mci_status);
1014 SM_FREE(mci->mci_rstatus);
1035 mci->mci_errno = atoi(&buf[1]);
1039 mci->mci_herrno = atoi(&buf[1]);
1043 mci->mci_exitstat = atoi(&buf[1]);
1047 mci->mci_status = newstr(&buf[1]);
1051 mci->mci_rstatus = newstr(&buf[1]);
1055 mci->mci_lastuse = atol(&buf[1]);
1060 mci_dump(sm_debug_file(), mci, false);
1066 FileName == NULL ? mci->mci_host : FileName,
1086 ** mci -- the host/connection to store persistent info for.
1093 mci_store_persistent(mci)
1094 MCI *mci;
1098 if (mci == NULL)
1101 sm_dprintf("mci_store_persistent: NULL mci\n");
1105 if (HostStatDir == NULL || mci->mci_host == NULL)
1110 mci->mci_host);
1112 if (mci->mci_statfile == NULL)
1119 sm_io_rewind(mci->mci_statfile, SM_TIME_DEFAULT);
1121 (void) ftruncate(sm_io_getinfo(mci->mci_statfile, SM_IO_WHAT_FD, NULL),
1125 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "V0\n");
1126 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "E%d\n",
1127 mci->mci_errno);
1128 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "H%d\n",
1129 mci->mci_herrno);
1130 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "S%d\n",
1131 mci->mci_exitstat);
1132 if (mci->mci_status != NULL)
1133 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT,
1135 denlstring(mci->mci_status, true, false));
1136 if (mci->mci_rstatus != NULL)
1137 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT,
1139 denlstring(mci->mci_rstatus, true, false));
1140 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, "U%ld\n",
1141 (long)(mci->mci_lastuse));
1142 (void) sm_io_fprintf(mci->mci_statfile, SM_TIME_DEFAULT, ".\n");
1144 (void) sm_io_flush(mci->mci_statfile, SM_TIME_DEFAULT);
1152 ** Recursively find all the mci host files in `pathname'. Default to