|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Eric P. Allman
3: * Copyright (c) 1988 Regents of the University of California.
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms are permitted provided
7: * that: (1) source distributions retain this entire copyright notice and
8: * comment, and (2) distributions including binaries display the following
9: * acknowledgement: ``This product includes software developed by the
10: * University of California, Berkeley and its contributors'' in the
11: * documentation or other materials provided with the distribution and in
12: * all advertising materials mentioning features or use of this software.
13: * Neither the name of the University nor the names of its contributors may
14: * be used to endorse or promote products derived from this software without
15: * specific prior written permission.
16: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
17: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
18: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19: */
20:
21: #ifndef lint
22: char copyright[] =
23: "@(#) Copyright (c) 1988 Regents of the University of California.\n\
24: All rights reserved.\n";
25: #endif /* not lint */
26:
27: #ifndef lint
28: static char sccsid[] = "@(#)addr.c 5.3 (Berkeley) 6/1/90";
29: #endif /* not lint */
30:
31: # include "postbox.h"
32:
33: /*
34: ** PUTONQ -- put an address node on the end of a queue
35: **
36: ** Parameters:
37: ** a -- the address to put on the queue.
38: ** q -- the queue to put it on.
39: **
40: ** Returns:
41: ** none
42: **
43: ** Side Effects:
44: ** none
45: **
46: ** Called By:
47: ** alias
48: ** recipient
49: */
50:
51: putonq(a, q)
52: register ADDRESS *a;
53: register ADDRESS *q;
54: {
55: if (q->q_prev == NULL)
56: {
57: q->q_prev = q->q_next = a;
58: a->q_prev = NULL;
59: }
60: else
61: {
62: a->q_prev = q->q_prev;
63: q->q_prev->q_next = a;
64: q->q_prev = a;
65: }
66: a->q_next = NULL;
67: }
68: /*
69: ** TKOFFQ -- remove address node from queue
70: **
71: ** Takes a node off of a queue, from anyplace in the queue.
72: **
73: ** Parameters:
74: ** a -- the node to remove.
75: ** q -- the queue to remove it from.
76: **
77: ** Returns:
78: ** none
79: **
80: ** Side Effects:
81: ** none
82: **
83: ** Called By:
84: ** alias
85: */
86:
87: tkoffq(a, q)
88: register ADDRESS *a;
89: register ADDRESS *q;
90: {
91: if (a->q_prev != NULL)
92: a->q_prev->q_next = a->q_next;
93: else
94: q->q_next = a->q_next;
95: if (a->q_next != NULL)
96: a->q_next->q_prev = a->q_prev;
97: else
98: q->q_prev = a->q_prev;
99: }
100: /*
101: ** SAMEADDR -- Determine if tow addresses are the same
102: **
103: ** This is not just a straight comparison -- if the mailer doesn't
104: ** care about the host we just ignore it, etc.
105: **
106: ** Parameters:
107: ** a, b -- pointers to the internal forms to compare.
108: ** wildflg -- if TRUE, 'a' may have no user specified,
109: ** in which case it is to match anything.
110: **
111: ** Returns:
112: ** TRUE -- they represent the same mailbox.
113: ** FALSE -- they don't.
114: **
115: ** Side Effects:
116: ** none.
117: **
118: ** Called By:
119: ** recipient
120: ** alias
121: */
122:
123: bool
124: sameaddr(a, b, wildflg)
125: register ADDRESS *a;
126: register ADDRESS *b;
127: bool wildflg;
128: {
129: /* if they don't have the same mailer, forget it */
130: if (a->q_mailer != b->q_mailer)
131: return (FALSE);
132:
133: /* if the user isn't the same, we can drop out */
134: if ((!wildflg || a->q_user[0] != '\0') && strcmp(a->q_user, b->q_user) != 0)
135: return (FALSE);
136:
137: /* if the mailer ignores hosts, we have succeeded! */
138: if (bitset(M_NOHOST, Mailer[a->q_mailer]->m_flags))
139: return (TRUE);
140:
141: /* otherwise compare hosts (but be careful for NULL ptrs) */
142: if (a->q_host == NULL || b->q_host == NULL)
143: return (FALSE);
144: if (strcmp(a->q_host, b->q_host) != 0)
145: return (FALSE);
146:
147: return (TRUE);
148: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.