Lines 192-211
Link Here
|
192 |
|
192 |
|
193 |
while ((opt = next(&p, end))) |
193 |
while ((opt = next(&p, end))) |
194 |
{ |
194 |
{ |
195 |
if (strcasecmp(opt, "blksize") == 0 && |
195 |
if (strcasecmp(opt, "blksize") == 0) |
196 |
(opt = next(&p, end)) && |
|
|
197 |
!(daemon->options & OPT_TFTP_NOBLOCK)) |
198 |
{ |
196 |
{ |
199 |
transfer->blocksize = atoi(opt); |
197 |
if ((opt = next(&p, end)) && |
200 |
if (transfer->blocksize < 1) |
198 |
!(daemon->options & OPT_TFTP_NOBLOCK)) |
201 |
transfer->blocksize = 1; |
199 |
{ |
202 |
if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4) |
200 |
transfer->blocksize = atoi(opt); |
203 |
transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4; |
201 |
if (transfer->blocksize < 1) |
204 |
transfer->opt_blocksize = 1; |
202 |
transfer->blocksize = 1; |
205 |
transfer->block = 0; |
203 |
if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4) |
|
|
204 |
transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4; |
205 |
transfer->opt_blocksize = 1; |
206 |
transfer->block = 0; |
207 |
} |
206 |
} |
208 |
} |
207 |
|
209 |
else if (strcasecmp(opt, "tsize") == 0 && next(&p, end) && !transfer->netascii) |
208 |
if (strcasecmp(opt, "tsize") == 0 && next(&p, end) && !transfer->netascii) |
|
|
209 |
{ |
210 |
{ |
210 |
transfer->opt_transize = 1; |
211 |
transfer->opt_transize = 1; |
211 |
transfer->block = 0; |
212 |
transfer->block = 0; |
Lines 217-233
Link Here
|
217 |
{ |
218 |
{ |
218 |
if (daemon->tftp_prefix[0] == '/') |
219 |
if (daemon->tftp_prefix[0] == '/') |
219 |
daemon->namebuff[0] = 0; |
220 |
daemon->namebuff[0] = 0; |
220 |
strncat(daemon->namebuff, daemon->tftp_prefix, MAXDNAME); |
221 |
strncat(daemon->namebuff, daemon->tftp_prefix, (MAXDNAME-1) - strlen(daemon->namebuff)); |
221 |
if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/') |
222 |
if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/') |
222 |
strncat(daemon->namebuff, "/", MAXDNAME); |
223 |
strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff)); |
223 |
|
224 |
|
224 |
if (daemon->options & OPT_TFTP_APREF) |
225 |
if (daemon->options & OPT_TFTP_APREF) |
225 |
{ |
226 |
{ |
226 |
size_t oldlen = strlen(daemon->namebuff); |
227 |
size_t oldlen = strlen(daemon->namebuff); |
227 |
struct stat statbuf; |
228 |
struct stat statbuf; |
228 |
|
229 |
|
229 |
strncat(daemon->namebuff, inet_ntoa(peer.sin_addr), MAXDNAME); |
230 |
strncat(daemon->namebuff, inet_ntoa(peer.sin_addr), (MAXDNAME-1) - strlen(daemon->namebuff)); |
230 |
strncat(daemon->namebuff, "/", MAXDNAME); |
231 |
strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff)); |
231 |
|
232 |
|
232 |
/* remove unique-directory if it doesn't exist */ |
233 |
/* remove unique-directory if it doesn't exist */ |
233 |
if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode)) |
234 |
if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode)) |
Lines 245-252
Link Here
|
245 |
} |
246 |
} |
246 |
else if (filename[0] == '/') |
247 |
else if (filename[0] == '/') |
247 |
daemon->namebuff[0] = 0; |
248 |
daemon->namebuff[0] = 0; |
248 |
strncat(daemon->namebuff, filename, MAXDNAME); |
249 |
strncat(daemon->namebuff, filename, (MAXDNAME-1) - strlen(daemon->namebuff)); |
249 |
daemon->namebuff[MAXDNAME-1] = 0; |
|
|
250 |
|
250 |
|
251 |
/* check permissions and open file */ |
251 |
/* check permissions and open file */ |
252 |
if ((transfer->file = check_tftp_fileperm(&len))) |
252 |
if ((transfer->file = check_tftp_fileperm(&len))) |