]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * chanservdb_alloc.c: | |
3 | * Handles allocation of the various chanserv structures. | |
4 | */ | |
5 | ||
6 | #include "../chanserv.h" | |
7 | #include "../../core/nsmalloc.h" | |
8 | ||
9 | #include <stdlib.h> | |
10 | ||
11 | #define ALLOCUNIT 100 | |
12 | ||
13 | regchan *csfreechans; | |
14 | reguser *csfreeusers; | |
15 | regchanuser *csfreechanusers; | |
16 | regban *csfreeregbans; | |
17 | activeuser *csfreeactiveusers; | |
18 | maildomain *csfreemaildomains; | |
19 | ||
20 | void *csmallocs; | |
21 | ||
22 | void chanservallocinit() { | |
23 | csfreechans=NULL; | |
24 | csfreeusers=NULL; | |
25 | csfreechanusers=NULL; | |
26 | csfreeregbans=NULL; | |
27 | csfreeactiveusers=NULL; | |
28 | } | |
29 | ||
30 | regchan *getregchan() { | |
31 | int i; | |
32 | regchan *rcp; | |
33 | ||
34 | if (csfreechans==NULL) { | |
35 | csfreechans=(regchan *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchan)); | |
36 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
37 | csfreechans[i].index=(chanindex *)&(csfreechans[i+1]); | |
38 | } | |
39 | csfreechans[ALLOCUNIT-1].index=NULL; | |
40 | } | |
41 | ||
42 | rcp=csfreechans; | |
43 | csfreechans=(regchan *)rcp->index; | |
44 | ||
45 | tagregchan(rcp); | |
46 | ||
47 | return rcp; | |
48 | } | |
49 | ||
50 | void freeregchan(regchan *rcp) { | |
51 | verifyregchan(rcp); | |
52 | rcp->index=(chanindex *)csfreechans; | |
53 | csfreechans=rcp; | |
54 | } | |
55 | ||
56 | reguser *getreguser() { | |
57 | int i; | |
58 | reguser *rup; | |
59 | ||
60 | if (csfreeusers==NULL) { | |
61 | csfreeusers=(reguser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(reguser)); | |
62 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
63 | csfreeusers[i].nextbyname=&(csfreeusers[i+1]); | |
64 | } | |
65 | csfreeusers[ALLOCUNIT-1].nextbyname=NULL; | |
66 | } | |
67 | ||
68 | rup=csfreeusers; | |
69 | csfreeusers=rup->nextbyname; | |
70 | ||
71 | tagreguser(rup); | |
72 | ||
73 | return rup; | |
74 | } | |
75 | ||
76 | void freereguser(reguser *rup) { | |
77 | verifyreguser(rup); | |
78 | rup->nextbyname=csfreeusers; | |
79 | csfreeusers=rup; | |
80 | } | |
81 | ||
82 | regchanuser *getregchanuser() { | |
83 | int i; | |
84 | regchanuser *rcup; | |
85 | ||
86 | if (csfreechanusers==NULL) { | |
87 | csfreechanusers=(regchanuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchanuser)); | |
88 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
89 | csfreechanusers[i].nextbyuser=&(csfreechanusers[i+1]); | |
90 | } | |
91 | csfreechanusers[ALLOCUNIT-1].nextbyuser=NULL; | |
92 | } | |
93 | ||
94 | rcup=csfreechanusers; | |
95 | csfreechanusers=rcup->nextbyuser; | |
96 | ||
97 | tagregchanuser(rcup); | |
98 | ||
99 | return rcup; | |
100 | } | |
101 | ||
102 | void freeregchanuser(regchanuser *rcup) { | |
103 | verifyregchanuser(rcup); | |
104 | rcup->nextbyuser=csfreechanusers; | |
105 | csfreechanusers=rcup; | |
106 | } | |
107 | ||
108 | regban *getregban() { | |
109 | int i; | |
110 | regban *rbp; | |
111 | ||
112 | if (csfreeregbans==NULL) { | |
113 | csfreeregbans=(regban *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regban)); | |
114 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
115 | csfreeregbans[i].next=&(csfreeregbans[i+1]); | |
116 | } | |
117 | csfreeregbans[ALLOCUNIT-1].next=NULL; | |
118 | } | |
119 | ||
120 | rbp=csfreeregbans; | |
121 | csfreeregbans=rbp->next; | |
122 | ||
123 | tagregchanban(rbp); | |
124 | ||
125 | return rbp; | |
126 | } | |
127 | ||
128 | void freeregban(regban *rbp) { | |
129 | verifyregchanban(rbp); | |
130 | rbp->next=csfreeregbans; | |
131 | csfreeregbans=rbp; | |
132 | } | |
133 | ||
134 | activeuser *getactiveuser() { | |
135 | int i; | |
136 | activeuser *aup; | |
137 | ||
138 | if (csfreeactiveusers==NULL) { | |
139 | csfreeactiveusers=(activeuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(activeuser)); | |
140 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
141 | csfreeactiveusers[i].next=&(csfreeactiveusers[i+1]); | |
142 | } | |
143 | csfreeactiveusers[ALLOCUNIT-1].next=NULL; | |
144 | } | |
145 | ||
146 | aup=csfreeactiveusers; | |
147 | csfreeactiveusers=aup->next; | |
148 | ||
149 | tagactiveuser(aup); | |
150 | ||
151 | aup->authattempts=0; | |
152 | aup->helloattempts=0; | |
153 | aup->entropyttl=0; | |
154 | ||
155 | return aup; | |
156 | } | |
157 | ||
158 | void freeactiveuser(activeuser *aup) { | |
159 | verifyactiveuser(aup); | |
160 | aup->next=csfreeactiveusers; | |
161 | csfreeactiveusers=aup; | |
162 | } | |
163 | ||
164 | maildomain *getmaildomain() { | |
165 | int i; | |
166 | maildomain *mdp; | |
167 | ||
168 | if (csfreemaildomains==NULL) { | |
169 | csfreemaildomains=(maildomain *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(maildomain)); | |
170 | for (i=0;i<(ALLOCUNIT-1);i++) { | |
171 | csfreemaildomains[i].nextbyname=&(csfreemaildomains[i+1]); | |
172 | } | |
173 | csfreemaildomains[ALLOCUNIT-1].nextbyname=NULL; | |
174 | } | |
175 | ||
176 | mdp=csfreemaildomains; | |
177 | csfreemaildomains=mdp->nextbyname; | |
178 | ||
179 | tagmaildomain(mdp); | |
180 | ||
181 | return mdp; | |
182 | } | |
183 | ||
184 | void freemaildomain(maildomain *mdp) { | |
185 | verifymaildomain(mdp); | |
186 | mdp->nextbyname=csfreemaildomains; | |
187 | csfreemaildomains=mdp; | |
188 | } | |
189 | ||
190 | maillock *getmaillock() { | |
191 | /* we don't create too many of these */ | |
192 | maillock *mlp = nsmalloc(POOL_CHANSERVDB,sizeof(maillock)); | |
193 | tagmaillock(mlp); | |
194 | ||
195 | return mlp; | |
196 | } | |
197 | ||
198 | void freemaillock(maillock *mlp) { | |
199 | verifymaillock(mlp); | |
200 | ||
201 | freesstring(mlp->pattern); | |
202 | freesstring(mlp->reason); | |
203 | nsfree(POOL_CHANSERVDB,mlp); | |
204 | } |