Mercurial > masqmail
comparison src/address.c @ 10:26e34ae9a3e3
changed indention and line wrapping to a more consistent style
author | meillo@marmaro.de |
---|---|
date | Mon, 27 Oct 2008 16:23:10 +0100 |
parents | 08114f7dcc23 |
children | 49dab67fe461 |
comparison
equal
deleted
inserted
replaced
9:31cc8a89cb74 | 10:26e34ae9a3e3 |
---|---|
17 */ | 17 */ |
18 | 18 |
19 #include "masqmail.h" | 19 #include "masqmail.h" |
20 #include <fnmatch.h> | 20 #include <fnmatch.h> |
21 | 21 |
22 address *create_address(gchar *path, gboolean is_rfc821) | 22 address* |
23 { | 23 create_address(gchar * path, gboolean is_rfc821) |
24 address *addr; | 24 { |
25 addr = _create_address(path, NULL, is_rfc821); | 25 address *addr; |
26 | 26 addr = _create_address(path, NULL, is_rfc821); |
27 if(addr != NULL){ | 27 |
28 addr_unmark_delivered(addr); | 28 if (addr != NULL) { |
29 } | 29 addr_unmark_delivered(addr); |
30 return addr; | 30 } |
31 } | 31 return addr; |
32 | 32 } |
33 address *create_address_qualified(gchar *path, gboolean is_rfc821, | 33 |
34 gchar *domain) | 34 address* |
35 { | 35 create_address_qualified(gchar * path, gboolean is_rfc821, gchar * domain) |
36 address *addr = create_address(path, is_rfc821); | 36 { |
37 if(addr != NULL){ | 37 address *addr = create_address(path, is_rfc821); |
38 if(addr->domain == NULL) | 38 if (addr != NULL) { |
39 addr->domain = g_strdup(domain); | 39 if (addr->domain == NULL) |
40 } | 40 addr->domain = g_strdup(domain); |
41 | 41 } |
42 return addr; | 42 |
43 return addr; | |
43 } | 44 } |
44 | 45 |
45 /* nothing special about pipes here, | 46 /* nothing special about pipes here, |
46 but its only called for that purpose */ | 47 but its only called for that purpose */ |
47 address *create_address_pipe(gchar *path) | 48 address* |
48 { | 49 create_address_pipe(gchar * path) |
49 address *addr = g_malloc(sizeof(address)); | 50 { |
50 | 51 address *addr = g_malloc(sizeof(address)); |
51 if(addr){ | 52 |
52 memset(addr, 0, sizeof(address)); | 53 if (addr) { |
53 addr->address = g_strchomp(g_strdup(path)); | 54 memset(addr, 0, sizeof(address)); |
54 addr->local_part = g_strdup(addr->address); | 55 addr->address = g_strchomp(g_strdup(path)); |
55 | 56 addr->local_part = g_strdup(addr->address); |
56 addr->domain = g_strdup("localhost"); /* quick hack */ | 57 |
57 } | 58 addr->domain = g_strdup("localhost"); /* quick hack */ |
58 return addr; | 59 } |
59 } | 60 return addr; |
60 | 61 } |
61 void destroy_address(address *addr) | 62 |
62 { | 63 void |
63 DEBUG(6) debugf("destroy_address entered\n"); | 64 destroy_address(address * addr) |
64 | 65 { |
65 g_free(addr->address); | 66 DEBUG(6) debugf("destroy_address entered\n"); |
66 g_free(addr->local_part); | 67 |
67 g_free(addr->domain); | 68 g_free(addr->address); |
68 | 69 g_free(addr->local_part); |
69 g_free(addr); | 70 g_free(addr->domain); |
70 } | 71 |
71 | 72 g_free(addr); |
72 address *copy_modify_address(const address *orig, gchar *l_part, gchar *dom) | 73 } |
73 { | 74 |
74 address *addr = NULL; | 75 address* |
75 | 76 copy_modify_address(const address * orig, gchar * l_part, gchar * dom) |
76 if(orig){ | 77 { |
77 addr = g_malloc(sizeof(address)); | 78 address *addr = NULL; |
78 if(addr){ | 79 |
79 addr->address = g_strdup(orig->address); | 80 if (orig) { |
80 | 81 addr = g_malloc(sizeof(address)); |
81 if(l_part == NULL) | 82 if (addr) { |
82 addr->local_part = g_strdup(orig->local_part); | 83 addr->address = g_strdup(orig->address); |
83 else | 84 |
84 addr->local_part = g_strdup(l_part); | 85 if (l_part == NULL) |
85 | 86 addr->local_part = g_strdup(orig->local_part); |
86 if(dom == NULL) | 87 else |
87 addr->domain = g_strdup(orig->domain); | 88 addr->local_part = g_strdup(l_part); |
88 else | 89 |
89 addr->domain = g_strdup(dom); | 90 if (dom == NULL) |
90 | 91 addr->domain = g_strdup(orig->domain); |
91 addr->flags = 0; | 92 else |
92 addr->children = NULL; | 93 addr->domain = g_strdup(dom); |
93 addr->parent = NULL; | 94 |
94 } | 95 addr->flags = 0; |
95 } | 96 addr->children = NULL; |
96 return addr; | 97 addr->parent = NULL; |
97 } | 98 } |
98 | 99 } |
99 gboolean addr_isequal(address *addr1, address *addr2) | 100 return addr; |
100 { | 101 } |
101 return | 102 |
102 (strcmp(addr1->local_part, addr2->local_part) == 0) && | 103 gboolean |
103 (strcasecmp(addr1->domain, addr2->domain) == 0); | 104 addr_isequal(address * addr1, address * addr2) |
105 { | |
106 return | |
107 (strcmp(addr1->local_part, addr2->local_part) == 0) && | |
108 (strcasecmp(addr1->domain, addr2->domain) == 0); | |
104 } | 109 } |
105 | 110 |
106 /* searches in ancestors of addr1 */ | 111 /* searches in ancestors of addr1 */ |
107 gboolean addr_isequal_parent(address *addr1, address *addr2) | 112 gboolean |
108 { | 113 addr_isequal_parent(address * addr1, address * addr2) |
109 address *addr; | 114 { |
110 | 115 address *addr; |
111 for(addr = addr1; addr; addr = addr->parent) | 116 |
112 if(addr_isequal(addr, addr2)) | 117 for (addr = addr1; addr; addr = addr->parent) |
113 return TRUE; | 118 if (addr_isequal(addr, addr2)) |
114 | 119 return TRUE; |
115 return FALSE; | 120 |
121 return FALSE; | |
116 } | 122 } |
117 | 123 |
118 /* careful, this is recursive */ | 124 /* careful, this is recursive */ |
119 /* returns TRUE if ALL children have been delivered */ | 125 /* returns TRUE if ALL children have been delivered */ |
120 gboolean addr_is_delivered_children(address *addr) | 126 gboolean |
121 { | 127 addr_is_delivered_children(address * addr) |
122 GList *addr_node; | 128 { |
123 | 129 GList *addr_node; |
124 if(addr->children == NULL) return addr_is_delivered(addr); | 130 |
125 | 131 if (addr->children == NULL) |
126 foreach(addr->children, addr_node){ | 132 return addr_is_delivered(addr); |
127 address *addr = (address *)(addr_node->data); | 133 |
128 if(!addr_is_delivered_children(addr)) | 134 foreach(addr->children, addr_node) { |
129 return FALSE; | 135 address *addr = (address *) (addr_node->data); |
130 } | 136 if (!addr_is_delivered_children(addr)) |
131 return TRUE; | 137 return FALSE; |
138 } | |
139 return TRUE; | |
132 } | 140 } |
133 | 141 |
134 /* careful, this is recursive */ | 142 /* careful, this is recursive */ |
135 /* returns TRUE if ALL children have been either delivered or have failed */ | 143 /* returns TRUE if ALL children have been either delivered or have failed */ |
136 gboolean addr_is_finished_children(address *addr) | 144 gboolean |
137 { | 145 addr_is_finished_children(address * addr) |
138 GList *addr_node; | 146 { |
139 | 147 GList *addr_node; |
140 if(addr->children == NULL) return (addr_is_failed(addr) || addr_is_delivered(addr)); | 148 |
141 | 149 if (addr->children == NULL) |
142 foreach(addr->children, addr_node){ | 150 return (addr_is_failed(addr) || addr_is_delivered(addr)); |
143 address *addr = (address *)(addr_node->data); | 151 |
144 if(!addr_is_finished_children(addr)) | 152 foreach(addr->children, addr_node) { |
145 return FALSE; | 153 address *addr = (address *) (addr_node->data); |
146 } | 154 if (!addr_is_finished_children(addr)) |
147 return TRUE; | 155 return FALSE; |
156 } | |
157 return TRUE; | |
148 } | 158 } |
149 | 159 |
150 /* find original address */ | 160 /* find original address */ |
151 address *addr_find_ancestor(address *addr) | 161 address* |
152 { | 162 addr_find_ancestor(address * addr) |
153 while(addr->parent) addr = addr->parent; | 163 { |
154 return addr; | 164 while (addr->parent) |
155 } | 165 addr = addr->parent; |
156 | 166 return addr; |
157 gchar *addr_string(address *addr) | 167 } |
158 { | 168 |
159 static gchar *buffer = NULL; | 169 gchar* |
160 | 170 addr_string(address * addr) |
161 if(addr == NULL){ | 171 { |
162 g_free(buffer); | 172 static gchar *buffer = NULL; |
163 buffer = NULL; | 173 |
164 return NULL; | 174 if (addr == NULL) { |
165 } | 175 g_free(buffer); |
166 if(buffer) | 176 buffer = NULL; |
167 g_free(buffer); | 177 return NULL; |
168 | 178 } |
169 if(addr->local_part[0] == 0){ | 179 if (buffer) |
170 buffer = g_strdup("<>"); | 180 g_free(buffer); |
171 }else{ | 181 |
172 buffer = g_strdup_printf("<%s@%s>", | 182 if (addr->local_part[0] == 0) { |
173 addr->local_part ? addr->local_part : "", | 183 buffer = g_strdup("<>"); |
174 addr->domain ? addr->domain : ""); | 184 } else { |
175 } | 185 buffer = g_strdup_printf("<%s@%s>", addr->local_part ? addr->local_part : "", addr->domain ? addr->domain : ""); |
176 return buffer; | 186 } |
177 } | 187 return buffer; |
178 | 188 } |
179 gint addr_match(address *addr1, address *addr2) | 189 |
180 { | 190 gint |
181 int res; | 191 addr_match(address * addr1, address * addr2) |
182 | 192 { |
183 if((res = fnmatch(addr1->local_part, addr2->local_part, 0)) == 0){ | 193 int res; |
184 if((res = fnmatch(addr1->domain, addr2->domain, FNM_CASEFOLD)) == 0) | 194 |
185 return 0; | 195 if ((res = fnmatch(addr1->local_part, addr2->local_part, 0)) == 0) { |
186 } | 196 if ((res = fnmatch(addr1->domain, addr2->domain, FNM_CASEFOLD)) == 0) |
187 return res; | 197 return 0; |
188 } | 198 } |
189 | 199 return res; |
200 } |